diff --git a/.env.example b/.env.example index b667b6c..fc6d9a1 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,6 @@ -HOST=0.0.0.0 -PORT=1337 +JWT_SECRET=a3a5d540-4320-45b4-b7ef-0dcf8e07a41e +API_TOKEN_SALT=b706d554059caa52f003a5212613e3ac +IS_PRODUCTION=false +DATABASE_USER=acc-v4 +DATABASE_NAME=acc-v4 +DATABASE_PASSWORD=password diff --git a/README.md b/README.md index 4d901a0..93d8202 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,103 @@ -# Strapi application +# Setting up Strapi -A quick description of your strapi application +### Quickstart + +###### This section only works for mac and linux + +Windows sections will be added later. For now check out these links to set up: + +- Windows: https://www.microfocus.com/documentation/idol/IDOL_12_0/MediaServer/Guides/html/English/Content/Getting_Started/Configure/_TRN_Set_up_PostgreSQL.htm + +#### Setting up database for Mac users + +##### Installing HomeBrew + +1. Install Homebrew by running command: `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`. _(This will ask for you password and confirmation of download)_ +2. Check that homebrew is up to date and healty by running: `brew update` then `brew doctor` + +##### Installing postgres + +3. Install Postgres by running: `brew install postgresql` +4. Start Postgres service by running: `brew services start postgresql` +5. If you get error: "Error: role 'postgres' does not exist", run command: `/usr/local/opt/postgres/bin/createuser -s postgres` + +_Remember to run `npm run build` and `npm run develop` after doing these steps._ + +_PS: The step “Downloading Command Line Tools for Xcode” can take very long._ +My best suggestion for that is checking out this discussion: https://github.com/Homebrew/discussions/discussions/131 + +And especially this comment: + +Apple's XCode command-line installer is...quite uncommunicative. You have at least two choices: 1. Wait for as long as it takes...or the installer errors out. 2. Go to https://developer.apple.com/download/more/ (you'll need to sign up for an Apple developer account if you don't have one), then download and install the latest Command Line Tools package that your OS supports. + +### Import database + +After setting up strapi, you need to import the database. This is how you do that. + +1. First, add the database file to the native layer in your repo. It should be named something like “backup-remote-….-.pgsql” +2. In your terminal, go into postgres: `psql template0` +3. Check roles: `\du` + - You will most likely see that you are a "superuser" in some databases, some not. This gives special admin rights to the database, which you will need +4. Create database for this project, call it "acc-v4": `CREATE DATABASE "acc-v4"`. +5. Make yourself a superuser: `alter user [username] with superuser`. +6. Add login permission: `alter role [username] with login` +7. Exit postgres: `\q` +8. Import the database: `pg_restore -U [username] -d acc-v4 -1 [name-of-file]` +9. Run `yarn build` and then `yarn develop`. You should now be set up. Go to http://localhost:1337/admin/ (Or whatever localhost it is running on) and check! + +#### Notes: + +- To import the database correctly, it needs to be totally empty when you do it. When you are not familiar with PostgreSQL it is easy to type wrong, make small mistakes etc., which can lead to the database not being ready to import when you try. This can be easily solved by deleting the database `DROP DATABASE [name-of-database]` and creating a new one `CREATE DATABASE [name-of-database]`. This will give you a clean slate to try importing again. +- Always remember `;` at the end of your lines, commands in PostgreSQL wont run without them. If you forget, just type `;` in the next line and press `ENTER`. +- Backslash is achieved with `SHIFT+OPTION+7`on a Mac. + +### More info + +Most of the steps here are taken directly from this website: https://www.moncefbelyamani.com/how-to-install-postgresql-on-a-mac-with-homebrew-and-lunchy/. There is more to learn there. + +HomeBrew is a package manager that takes care of everything NPM or Yarn doesn´t. Read more about it on https://brew.sh/ + +It will ask for your password and to confirm the download. + +Beware that the step “Downloading Command Line Tools for Xcode” can take very long. My best suggestion for that is checking out this discussion: + +https://github.com/Homebrew/discussions/discussions/131 + +And especially this comment: + +Apple's XCode command-line installer is...quite uncommunicative. You have at least two choices: 1. Wait for as long as it takes...or the installer errors out. 2. Go to https://developer.apple.com/download/more/ (you'll need to sign up for an Apple developer account if you don't have one), then download and install the latest Command Line Tools package that your OS supports. + +Don´t worry, it takes some time, but will complete in the end. + +After all this, you might get the error: “error: role "postgres" does not exist” + +To solve that, simply run this in the command line: + +/usr/local/opt/postgres/bin/createuser -s postgres + +Then, run "yarn build” and "yarn develop” again and you should be good! + +### Useful git commands + +When you work on this project, you will du that on your own fork. You will make branches for each added feature, push changes and then merge the branches when the feature are reviewed by others. Here is a breakdown of your workflow: + +1. Set upstream repo. Olivers repo is our "source of truth": `git remote add upstream git@github.com:oriooctopus/acc-v4.git` +2. Pull master - make sure you´re up to date: `git pull` +3. Make a branch for the change you´re about to make: `git checkout -b [name-of-branch]` +4. Make the changes/Write the code +5. Add changes with `git add [name-of-file` +6. Commit changes with `git commit -m "[notes about changes]"` +7. Push changes: `git push origin HEAD` +8. Go to github and make a pull request for your changes. + +#### Notes + +In general there is some thing you need to learn about working with git. Don´t be afraid to ask. You should also go through this tutorial on git branching, it is very helpful: https://learngitbranching.js.org/ + +- Git Lens is a very helpful VSCode extension: Go install it. (Add picture etc.) +- When you have made your branch, you can check your branches by entering this command: `git branch`. It will also tell you which branch you are on. +- When you have made a pull request on a branch and make more changes. Don´t make another pull request, it will update when you push the new changes. +- When you type git rebase -I HEAD~[num] you, for some fucking unknown reason, enter this vim fuckery. Without a fucking course you will also be stuck there and god forbid the changes you want to make will actually be made. So, here is a little guide for how to deal with this godforsaken dickcheese of a feature. + - :q - no changes were made + - :q! - trash all changes + - :wq - save the changes and quit diff --git a/backup-local-1646317700.psql b/backup-local-1646317700.psql new file mode 100644 index 0000000..53f94cc --- /dev/null +++ b/backup-local-1646317700.psql @@ -0,0 +1,5180 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 14.1 +-- Dumped by pg_dump version 14.1 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- Name: admin_permissions; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.admin_permissions ( + id integer NOT NULL, + action character varying(255), + subject character varying(255), + properties jsonb, + conditions jsonb, + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.admin_permissions OWNER TO "acc-v4"; + +-- +-- Name: admin_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.admin_permissions_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.admin_permissions_id_seq OWNER TO "acc-v4"; + +-- +-- Name: admin_permissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.admin_permissions_id_seq OWNED BY public.admin_permissions.id; + + +-- +-- Name: admin_permissions_role_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.admin_permissions_role_links ( + permission_id integer, + role_id integer +); + + +ALTER TABLE public.admin_permissions_role_links OWNER TO "acc-v4"; + +-- +-- Name: admin_roles; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.admin_roles ( + id integer NOT NULL, + name character varying(255), + code character varying(255), + description character varying(255), + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.admin_roles OWNER TO "acc-v4"; + +-- +-- Name: admin_roles_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.admin_roles_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.admin_roles_id_seq OWNER TO "acc-v4"; + +-- +-- Name: admin_roles_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.admin_roles_id_seq OWNED BY public.admin_roles.id; + + +-- +-- Name: admin_users; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.admin_users ( + id integer NOT NULL, + firstname character varying(255), + lastname character varying(255), + username character varying(255), + email character varying(255), + password character varying(255), + reset_password_token character varying(255), + registration_token character varying(255), + is_active boolean, + blocked boolean, + prefered_language character varying(255), + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.admin_users OWNER TO "acc-v4"; + +-- +-- Name: admin_users_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.admin_users_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.admin_users_id_seq OWNER TO "acc-v4"; + +-- +-- Name: admin_users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.admin_users_id_seq OWNED BY public.admin_users.id; + + +-- +-- Name: admin_users_roles_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.admin_users_roles_links ( + user_id integer, + role_id integer +); + + +ALTER TABLE public.admin_users_roles_links OWNER TO "acc-v4"; + +-- +-- Name: code_challenges; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.code_challenges ( + id integer NOT NULL, + starting_code text, + prompt text, + internal_label character varying(255), + internal_notes text, + get_starting_code_from_previous_challenge boolean, + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer, + published_at timestamp(6) without time zone +); + + +ALTER TABLE public.code_challenges OWNER TO "acc-v4"; + +-- +-- Name: code_challenges_category_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.code_challenges_category_links ( + code_challenge_id integer, + sublesson_id integer +); + + +ALTER TABLE public.code_challenges_category_links OWNER TO "acc-v4"; + +-- +-- Name: code_challenges_components; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.code_challenges_components ( + id integer NOT NULL, + entity_id integer, + component_id integer, + component_type character varying(255), + field character varying(255), + "order" integer DEFAULT 0 +); + + +ALTER TABLE public.code_challenges_components OWNER TO "acc-v4"; + +-- +-- Name: code_challenges_components_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.code_challenges_components_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.code_challenges_components_id_seq OWNER TO "acc-v4"; + +-- +-- Name: code_challenges_components_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.code_challenges_components_id_seq OWNED BY public.code_challenges_components.id; + + +-- +-- Name: code_challenges_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.code_challenges_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.code_challenges_id_seq OWNER TO "acc-v4"; + +-- +-- Name: code_challenges_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.code_challenges_id_seq OWNED BY public.code_challenges.id; + + +-- +-- Name: components_challenge_challenge_hints; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_challenge_challenge_hints ( + id integer NOT NULL, + text text, + recommended_time_before_viewing numeric(10,2) +); + + +ALTER TABLE public.components_challenge_challenge_hints OWNER TO "acc-v4"; + +-- +-- Name: components_challenge_challenge_hints_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.components_challenge_challenge_hints_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.components_challenge_challenge_hints_id_seq OWNER TO "acc-v4"; + +-- +-- Name: components_challenge_challenge_hints_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.components_challenge_challenge_hints_id_seq OWNED BY public.components_challenge_challenge_hints.id; + + +-- +-- Name: components_challenge_code_challenge_tests; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_challenge_code_challenge_tests ( + id integer NOT NULL, + label character varying(255), + internal_test text, + further_explanation text +); + + +ALTER TABLE public.components_challenge_code_challenge_tests OWNER TO "acc-v4"; + +-- +-- Name: components_challenge_code_challenge_tests_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.components_challenge_code_challenge_tests_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.components_challenge_code_challenge_tests_id_seq OWNER TO "acc-v4"; + +-- +-- Name: components_challenge_code_challenge_tests_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.components_challenge_code_challenge_tests_id_seq OWNED BY public.components_challenge_code_challenge_tests.id; + + +-- +-- Name: components_challenge_multiple_choice_options; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_challenge_multiple_choice_options ( + id integer NOT NULL, + text text, + is_correct boolean, + incorrect_choice_explanation text +); + + +ALTER TABLE public.components_challenge_multiple_choice_options OWNER TO "acc-v4"; + +-- +-- Name: components_challenge_multiple_choice_options_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.components_challenge_multiple_choice_options_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.components_challenge_multiple_choice_options_id_seq OWNER TO "acc-v4"; + +-- +-- Name: components_challenge_multiple_choice_options_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.components_challenge_multiple_choice_options_id_seq OWNED BY public.components_challenge_multiple_choice_options.id; + + +-- +-- Name: components_content_challenges; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_content_challenges ( + id integer NOT NULL +); + + +ALTER TABLE public.components_content_challenges OWNER TO "acc-v4"; + +-- +-- Name: components_content_challenges_code_challenge_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_content_challenges_code_challenge_links ( + challenges_id integer, + code_challenge_id integer +); + + +ALTER TABLE public.components_content_challenges_code_challenge_links OWNER TO "acc-v4"; + +-- +-- Name: components_content_challenges_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.components_content_challenges_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.components_content_challenges_id_seq OWNER TO "acc-v4"; + +-- +-- Name: components_content_challenges_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.components_content_challenges_id_seq OWNED BY public.components_content_challenges.id; + + +-- +-- Name: components_content_challenges_multiple_choice_challenge_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_content_challenges_multiple_choice_challenge_links ( + challenges_id integer, + multiple_choice_challenge_id integer +); + + +ALTER TABLE public.components_content_challenges_multiple_choice_challenge_links OWNER TO "acc-v4"; + +-- +-- Name: components_content_external_resources; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_content_external_resources ( + id integer NOT NULL, + name character varying(255), + link character varying(255), + type character varying(255) +); + + +ALTER TABLE public.components_content_external_resources OWNER TO "acc-v4"; + +-- +-- Name: components_content_external_resources_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.components_content_external_resources_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.components_content_external_resources_id_seq OWNER TO "acc-v4"; + +-- +-- Name: components_content_external_resources_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.components_content_external_resources_id_seq OWNED BY public.components_content_external_resources.id; + + +-- +-- Name: components_misc_module_lessons; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_misc_module_lessons ( + id integer NOT NULL +); + + +ALTER TABLE public.components_misc_module_lessons OWNER TO "acc-v4"; + +-- +-- Name: components_misc_module_lessons_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.components_misc_module_lessons_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.components_misc_module_lessons_id_seq OWNER TO "acc-v4"; + +-- +-- Name: components_misc_module_lessons_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.components_misc_module_lessons_id_seq OWNED BY public.components_misc_module_lessons.id; + + +-- +-- Name: components_misc_module_lessons_lesson_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_misc_module_lessons_lesson_links ( + module_lesson_id integer, + lesson_id integer +); + + +ALTER TABLE public.components_misc_module_lessons_lesson_links OWNER TO "acc-v4"; + +-- +-- Name: components_translations_about_pages; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_translations_about_pages ( + id integer NOT NULL, + title text +); + + +ALTER TABLE public.components_translations_about_pages OWNER TO "acc-v4"; + +-- +-- Name: components_translations_about_pages_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.components_translations_about_pages_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.components_translations_about_pages_id_seq OWNER TO "acc-v4"; + +-- +-- Name: components_translations_about_pages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.components_translations_about_pages_id_seq OWNED BY public.components_translations_about_pages.id; + + +-- +-- Name: components_translations_core_components; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_translations_core_components ( + id integer NOT NULL, + back_button character varying(255), + next_button character varying(255) +); + + +ALTER TABLE public.components_translations_core_components OWNER TO "acc-v4"; + +-- +-- Name: components_translations_core_components_components; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_translations_core_components_components ( + id integer NOT NULL, + entity_id integer, + component_id integer, + component_type character varying(255), + field character varying(255), + "order" integer DEFAULT 0 +); + + +ALTER TABLE public.components_translations_core_components_components OWNER TO "acc-v4"; + +-- +-- Name: components_translations_core_components_components_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.components_translations_core_components_components_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.components_translations_core_components_components_id_seq OWNER TO "acc-v4"; + +-- +-- Name: components_translations_core_components_components_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.components_translations_core_components_components_id_seq OWNED BY public.components_translations_core_components_components.id; + + +-- +-- Name: components_translations_core_components_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.components_translations_core_components_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.components_translations_core_components_id_seq OWNER TO "acc-v4"; + +-- +-- Name: components_translations_core_components_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.components_translations_core_components_id_seq OWNED BY public.components_translations_core_components.id; + + +-- +-- Name: components_translations_within_components; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.components_translations_within_components ( + id integer NOT NULL +); + + +ALTER TABLE public.components_translations_within_components OWNER TO "acc-v4"; + +-- +-- Name: components_translations_within_components_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.components_translations_within_components_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.components_translations_within_components_id_seq OWNER TO "acc-v4"; + +-- +-- Name: components_translations_within_components_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.components_translations_within_components_id_seq OWNED BY public.components_translations_within_components.id; + + +-- +-- Name: courses; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.courses ( + id integer NOT NULL, + name character varying(255), + slug character varying(255), + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + published_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.courses OWNER TO "acc-v4"; + +-- +-- Name: courses_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.courses_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.courses_id_seq OWNER TO "acc-v4"; + +-- +-- Name: courses_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.courses_id_seq OWNED BY public.courses.id; + + +-- +-- Name: courses_modules_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.courses_modules_links ( + course_id integer, + module_id integer +); + + +ALTER TABLE public.courses_modules_links OWNER TO "acc-v4"; + +-- +-- Name: files; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.files ( + id integer NOT NULL, + name character varying(255), + alternative_text character varying(255), + caption character varying(255), + width integer, + height integer, + formats jsonb, + hash character varying(255), + ext character varying(255), + mime character varying(255), + size numeric(10,2), + url character varying(255), + preview_url character varying(255), + provider character varying(255), + provider_metadata jsonb, + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.files OWNER TO "acc-v4"; + +-- +-- Name: files_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.files_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.files_id_seq OWNER TO "acc-v4"; + +-- +-- Name: files_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.files_id_seq OWNED BY public.files.id; + + +-- +-- Name: files_related_morphs; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.files_related_morphs ( + file_id integer, + related_id integer, + related_type character varying(255), + field character varying(255), + "order" integer +); + + +ALTER TABLE public.files_related_morphs OWNER TO "acc-v4"; + +-- +-- Name: i18n_locale; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.i18n_locale ( + id integer NOT NULL, + name character varying(255), + code character varying(255), + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.i18n_locale OWNER TO "acc-v4"; + +-- +-- Name: i18n_locale_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.i18n_locale_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.i18n_locale_id_seq OWNER TO "acc-v4"; + +-- +-- Name: i18n_locale_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.i18n_locale_id_seq OWNED BY public.i18n_locale.id; + + +-- +-- Name: lessons; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.lessons ( + id integer NOT NULL, + slug character varying(255), + name character varying(255), + is_hard boolean, + internal_notes text, + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + published_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.lessons OWNER TO "acc-v4"; + +-- +-- Name: lessons_components; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.lessons_components ( + id integer NOT NULL, + entity_id integer, + component_id integer, + component_type character varying(255), + field character varying(255), + "order" integer DEFAULT 0 +); + + +ALTER TABLE public.lessons_components OWNER TO "acc-v4"; + +-- +-- Name: lessons_components_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.lessons_components_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.lessons_components_id_seq OWNER TO "acc-v4"; + +-- +-- Name: lessons_components_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.lessons_components_id_seq OWNED BY public.lessons_components.id; + + +-- +-- Name: lessons_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.lessons_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.lessons_id_seq OWNER TO "acc-v4"; + +-- +-- Name: lessons_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.lessons_id_seq OWNED BY public.lessons.id; + + +-- +-- Name: lessons_module_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.lessons_module_links ( + lesson_id integer, + module_id integer +); + + +ALTER TABLE public.lessons_module_links OWNER TO "acc-v4"; + +-- +-- Name: lessons_syntax_entry_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.lessons_syntax_entry_links ( + lesson_id integer, + syntax_entry_id integer +); + + +ALTER TABLE public.lessons_syntax_entry_links OWNER TO "acc-v4"; + +-- +-- Name: modules; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.modules ( + id integer NOT NULL, + name character varying(255), + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer, + published_at timestamp(6) without time zone +); + + +ALTER TABLE public.modules OWNER TO "acc-v4"; + +-- +-- Name: modules_components; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.modules_components ( + id integer NOT NULL, + entity_id integer, + component_id integer, + component_type character varying(255), + field character varying(255), + "order" integer DEFAULT 0 +); + + +ALTER TABLE public.modules_components OWNER TO "acc-v4"; + +-- +-- Name: modules_components_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.modules_components_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.modules_components_id_seq OWNER TO "acc-v4"; + +-- +-- Name: modules_components_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.modules_components_id_seq OWNED BY public.modules_components.id; + + +-- +-- Name: modules_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.modules_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.modules_id_seq OWNER TO "acc-v4"; + +-- +-- Name: modules_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.modules_id_seq OWNED BY public.modules.id; + + +-- +-- Name: multiple_choice_challenges; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.multiple_choice_challenges ( + id integer NOT NULL, + prompt text, + internal_label character varying(255), + can_select_multiple_options boolean, + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer, + published_at timestamp(6) without time zone +); + + +ALTER TABLE public.multiple_choice_challenges OWNER TO "acc-v4"; + +-- +-- Name: multiple_choice_challenges_components; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.multiple_choice_challenges_components ( + id integer NOT NULL, + entity_id integer, + component_id integer, + component_type character varying(255), + field character varying(255), + "order" integer DEFAULT 0 +); + + +ALTER TABLE public.multiple_choice_challenges_components OWNER TO "acc-v4"; + +-- +-- Name: multiple_choice_challenges_components_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.multiple_choice_challenges_components_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.multiple_choice_challenges_components_id_seq OWNER TO "acc-v4"; + +-- +-- Name: multiple_choice_challenges_components_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.multiple_choice_challenges_components_id_seq OWNED BY public.multiple_choice_challenges_components.id; + + +-- +-- Name: multiple_choice_challenges_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.multiple_choice_challenges_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.multiple_choice_challenges_id_seq OWNER TO "acc-v4"; + +-- +-- Name: multiple_choice_challenges_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.multiple_choice_challenges_id_seq OWNED BY public.multiple_choice_challenges.id; + + +-- +-- Name: strapi_api_tokens; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.strapi_api_tokens ( + id integer NOT NULL, + name character varying(255), + description character varying(255), + type character varying(255), + access_key character varying(255), + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.strapi_api_tokens OWNER TO "acc-v4"; + +-- +-- Name: strapi_api_tokens_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.strapi_api_tokens_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.strapi_api_tokens_id_seq OWNER TO "acc-v4"; + +-- +-- Name: strapi_api_tokens_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.strapi_api_tokens_id_seq OWNED BY public.strapi_api_tokens.id; + + +-- +-- Name: strapi_core_store_settings; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.strapi_core_store_settings ( + id integer NOT NULL, + key character varying(255), + value text, + type character varying(255), + environment character varying(255), + tag character varying(255) +); + + +ALTER TABLE public.strapi_core_store_settings OWNER TO "acc-v4"; + +-- +-- Name: strapi_core_store_settings_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.strapi_core_store_settings_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.strapi_core_store_settings_id_seq OWNER TO "acc-v4"; + +-- +-- Name: strapi_core_store_settings_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.strapi_core_store_settings_id_seq OWNED BY public.strapi_core_store_settings.id; + + +-- +-- Name: strapi_database_schema; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.strapi_database_schema ( + id integer NOT NULL, + schema json, + "time" timestamp without time zone, + hash character varying(255) +); + + +ALTER TABLE public.strapi_database_schema OWNER TO "acc-v4"; + +-- +-- Name: strapi_database_schema_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.strapi_database_schema_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.strapi_database_schema_id_seq OWNER TO "acc-v4"; + +-- +-- Name: strapi_database_schema_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.strapi_database_schema_id_seq OWNED BY public.strapi_database_schema.id; + + +-- +-- Name: strapi_migrations; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.strapi_migrations ( + id integer NOT NULL, + name character varying(255), + "time" timestamp without time zone +); + + +ALTER TABLE public.strapi_migrations OWNER TO "acc-v4"; + +-- +-- Name: strapi_migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.strapi_migrations_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.strapi_migrations_id_seq OWNER TO "acc-v4"; + +-- +-- Name: strapi_migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.strapi_migrations_id_seq OWNED BY public.strapi_migrations.id; + + +-- +-- Name: strapi_webhooks; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.strapi_webhooks ( + id integer NOT NULL, + name character varying(255), + url text, + headers jsonb, + events jsonb, + enabled boolean +); + + +ALTER TABLE public.strapi_webhooks OWNER TO "acc-v4"; + +-- +-- Name: strapi_webhooks_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.strapi_webhooks_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.strapi_webhooks_id_seq OWNER TO "acc-v4"; + +-- +-- Name: strapi_webhooks_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.strapi_webhooks_id_seq OWNED BY public.strapi_webhooks.id; + + +-- +-- Name: sublessons; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.sublessons ( + id integer NOT NULL, + name character varying(255), + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer, + description text, + published_at timestamp(6) without time zone, + internal_notes text +); + + +ALTER TABLE public.sublessons OWNER TO "acc-v4"; + +-- +-- Name: sublessons_components; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.sublessons_components ( + id integer NOT NULL, + entity_id integer, + component_id integer, + component_type character varying(255), + field character varying(255), + "order" integer DEFAULT 0 +); + + +ALTER TABLE public.sublessons_components OWNER TO "acc-v4"; + +-- +-- Name: sublessons_components_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.sublessons_components_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.sublessons_components_id_seq OWNER TO "acc-v4"; + +-- +-- Name: sublessons_components_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.sublessons_components_id_seq OWNED BY public.sublessons_components.id; + + +-- +-- Name: sublessons_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.sublessons_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.sublessons_id_seq OWNER TO "acc-v4"; + +-- +-- Name: sublessons_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.sublessons_id_seq OWNED BY public.sublessons.id; + + +-- +-- Name: sublessons_lesson_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.sublessons_lesson_links ( + sublesson_id integer, + lesson_id integer +); + + +ALTER TABLE public.sublessons_lesson_links OWNER TO "acc-v4"; + +-- +-- Name: sublessons_syntax_entry_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.sublessons_syntax_entry_links ( + sublesson_id integer, + syntax_entry_id integer +); + + +ALTER TABLE public.sublessons_syntax_entry_links OWNER TO "acc-v4"; + +-- +-- Name: syntax_entries; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.syntax_entries ( + id integer NOT NULL, + content text, + name character varying(255), + internal_notes text, + max_width integer, + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + published_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.syntax_entries OWNER TO "acc-v4"; + +-- +-- Name: syntax_entries_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.syntax_entries_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.syntax_entries_id_seq OWNER TO "acc-v4"; + +-- +-- Name: syntax_entries_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.syntax_entries_id_seq OWNED BY public.syntax_entries.id; + + +-- +-- Name: syntax_entries_lesson_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.syntax_entries_lesson_links ( + syntax_entry_id integer, + lesson_id integer +); + + +ALTER TABLE public.syntax_entries_lesson_links OWNER TO "acc-v4"; + +-- +-- Name: syntax_entries_sublesson_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.syntax_entries_sublesson_links ( + syntax_entry_id integer, + sublesson_id integer +); + + +ALTER TABLE public.syntax_entries_sublesson_links OWNER TO "acc-v4"; + +-- +-- Name: translation_groups; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.translation_groups ( + id integer NOT NULL, + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + published_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.translation_groups OWNER TO "acc-v4"; + +-- +-- Name: translation_groups_components; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.translation_groups_components ( + id integer NOT NULL, + entity_id integer, + component_id integer, + component_type character varying(255), + field character varying(255), + "order" integer DEFAULT 0 +); + + +ALTER TABLE public.translation_groups_components OWNER TO "acc-v4"; + +-- +-- Name: translation_groups_components_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.translation_groups_components_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.translation_groups_components_id_seq OWNER TO "acc-v4"; + +-- +-- Name: translation_groups_components_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.translation_groups_components_id_seq OWNED BY public.translation_groups_components.id; + + +-- +-- Name: translation_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.translation_groups_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.translation_groups_id_seq OWNER TO "acc-v4"; + +-- +-- Name: translation_groups_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.translation_groups_id_seq OWNED BY public.translation_groups.id; + + +-- +-- Name: up_permissions; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.up_permissions ( + id integer NOT NULL, + action character varying(255), + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.up_permissions OWNER TO "acc-v4"; + +-- +-- Name: up_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.up_permissions_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.up_permissions_id_seq OWNER TO "acc-v4"; + +-- +-- Name: up_permissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.up_permissions_id_seq OWNED BY public.up_permissions.id; + + +-- +-- Name: up_permissions_role_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.up_permissions_role_links ( + permission_id integer, + role_id integer +); + + +ALTER TABLE public.up_permissions_role_links OWNER TO "acc-v4"; + +-- +-- Name: up_roles; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.up_roles ( + id integer NOT NULL, + name character varying(255), + description character varying(255), + type character varying(255), + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.up_roles OWNER TO "acc-v4"; + +-- +-- Name: up_roles_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.up_roles_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.up_roles_id_seq OWNER TO "acc-v4"; + +-- +-- Name: up_roles_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.up_roles_id_seq OWNED BY public.up_roles.id; + + +-- +-- Name: up_users; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.up_users ( + id integer NOT NULL, + username character varying(255), + email character varying(255), + provider character varying(255), + password character varying(255), + reset_password_token character varying(255), + confirmation_token character varying(255), + confirmed boolean, + blocked boolean, + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + created_by_id integer, + updated_by_id integer +); + + +ALTER TABLE public.up_users OWNER TO "acc-v4"; + +-- +-- Name: up_users_id_seq; Type: SEQUENCE; Schema: public; Owner: acc-v4 +-- + +CREATE SEQUENCE public.up_users_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.up_users_id_seq OWNER TO "acc-v4"; + +-- +-- Name: up_users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: acc-v4 +-- + +ALTER SEQUENCE public.up_users_id_seq OWNED BY public.up_users.id; + + +-- +-- Name: up_users_role_links; Type: TABLE; Schema: public; Owner: acc-v4 +-- + +CREATE TABLE public.up_users_role_links ( + user_id integer, + role_id integer +); + + +ALTER TABLE public.up_users_role_links OWNER TO "acc-v4"; + +-- +-- Name: admin_permissions id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_permissions ALTER COLUMN id SET DEFAULT nextval('public.admin_permissions_id_seq'::regclass); + + +-- +-- Name: admin_roles id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_roles ALTER COLUMN id SET DEFAULT nextval('public.admin_roles_id_seq'::regclass); + + +-- +-- Name: admin_users id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_users ALTER COLUMN id SET DEFAULT nextval('public.admin_users_id_seq'::regclass); + + +-- +-- Name: code_challenges id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.code_challenges ALTER COLUMN id SET DEFAULT nextval('public.code_challenges_id_seq'::regclass); + + +-- +-- Name: code_challenges_components id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.code_challenges_components ALTER COLUMN id SET DEFAULT nextval('public.code_challenges_components_id_seq'::regclass); + + +-- +-- Name: components_challenge_challenge_hints id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_challenge_challenge_hints ALTER COLUMN id SET DEFAULT nextval('public.components_challenge_challenge_hints_id_seq'::regclass); + + +-- +-- Name: components_challenge_code_challenge_tests id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_challenge_code_challenge_tests ALTER COLUMN id SET DEFAULT nextval('public.components_challenge_code_challenge_tests_id_seq'::regclass); + + +-- +-- Name: components_challenge_multiple_choice_options id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_challenge_multiple_choice_options ALTER COLUMN id SET DEFAULT nextval('public.components_challenge_multiple_choice_options_id_seq'::regclass); + + +-- +-- Name: components_content_challenges id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_content_challenges ALTER COLUMN id SET DEFAULT nextval('public.components_content_challenges_id_seq'::regclass); + + +-- +-- Name: components_content_external_resources id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_content_external_resources ALTER COLUMN id SET DEFAULT nextval('public.components_content_external_resources_id_seq'::regclass); + + +-- +-- Name: components_misc_module_lessons id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_misc_module_lessons ALTER COLUMN id SET DEFAULT nextval('public.components_misc_module_lessons_id_seq'::regclass); + + +-- +-- Name: components_translations_about_pages id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_translations_about_pages ALTER COLUMN id SET DEFAULT nextval('public.components_translations_about_pages_id_seq'::regclass); + + +-- +-- Name: components_translations_core_components id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_translations_core_components ALTER COLUMN id SET DEFAULT nextval('public.components_translations_core_components_id_seq'::regclass); + + +-- +-- Name: components_translations_core_components_components id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_translations_core_components_components ALTER COLUMN id SET DEFAULT nextval('public.components_translations_core_components_components_id_seq'::regclass); + + +-- +-- Name: components_translations_within_components id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_translations_within_components ALTER COLUMN id SET DEFAULT nextval('public.components_translations_within_components_id_seq'::regclass); + + +-- +-- Name: courses id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.courses ALTER COLUMN id SET DEFAULT nextval('public.courses_id_seq'::regclass); + + +-- +-- Name: files id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.files ALTER COLUMN id SET DEFAULT nextval('public.files_id_seq'::regclass); + + +-- +-- Name: i18n_locale id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.i18n_locale ALTER COLUMN id SET DEFAULT nextval('public.i18n_locale_id_seq'::regclass); + + +-- +-- Name: lessons id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.lessons ALTER COLUMN id SET DEFAULT nextval('public.lessons_id_seq'::regclass); + + +-- +-- Name: lessons_components id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.lessons_components ALTER COLUMN id SET DEFAULT nextval('public.lessons_components_id_seq'::regclass); + + +-- +-- Name: modules id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.modules ALTER COLUMN id SET DEFAULT nextval('public.modules_id_seq'::regclass); + + +-- +-- Name: modules_components id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.modules_components ALTER COLUMN id SET DEFAULT nextval('public.modules_components_id_seq'::regclass); + + +-- +-- Name: multiple_choice_challenges id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.multiple_choice_challenges ALTER COLUMN id SET DEFAULT nextval('public.multiple_choice_challenges_id_seq'::regclass); + + +-- +-- Name: multiple_choice_challenges_components id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.multiple_choice_challenges_components ALTER COLUMN id SET DEFAULT nextval('public.multiple_choice_challenges_components_id_seq'::regclass); + + +-- +-- Name: strapi_api_tokens id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.strapi_api_tokens ALTER COLUMN id SET DEFAULT nextval('public.strapi_api_tokens_id_seq'::regclass); + + +-- +-- Name: strapi_core_store_settings id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.strapi_core_store_settings ALTER COLUMN id SET DEFAULT nextval('public.strapi_core_store_settings_id_seq'::regclass); + + +-- +-- Name: strapi_database_schema id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.strapi_database_schema ALTER COLUMN id SET DEFAULT nextval('public.strapi_database_schema_id_seq'::regclass); + + +-- +-- Name: strapi_migrations id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.strapi_migrations ALTER COLUMN id SET DEFAULT nextval('public.strapi_migrations_id_seq'::regclass); + + +-- +-- Name: strapi_webhooks id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.strapi_webhooks ALTER COLUMN id SET DEFAULT nextval('public.strapi_webhooks_id_seq'::regclass); + + +-- +-- Name: sublessons id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.sublessons ALTER COLUMN id SET DEFAULT nextval('public.sublessons_id_seq'::regclass); + + +-- +-- Name: sublessons_components id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.sublessons_components ALTER COLUMN id SET DEFAULT nextval('public.sublessons_components_id_seq'::regclass); + + +-- +-- Name: syntax_entries id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.syntax_entries ALTER COLUMN id SET DEFAULT nextval('public.syntax_entries_id_seq'::regclass); + + +-- +-- Name: translation_groups id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.translation_groups ALTER COLUMN id SET DEFAULT nextval('public.translation_groups_id_seq'::regclass); + + +-- +-- Name: translation_groups_components id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.translation_groups_components ALTER COLUMN id SET DEFAULT nextval('public.translation_groups_components_id_seq'::regclass); + + +-- +-- Name: up_permissions id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_permissions ALTER COLUMN id SET DEFAULT nextval('public.up_permissions_id_seq'::regclass); + + +-- +-- Name: up_roles id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_roles ALTER COLUMN id SET DEFAULT nextval('public.up_roles_id_seq'::regclass); + + +-- +-- Name: up_users id; Type: DEFAULT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_users ALTER COLUMN id SET DEFAULT nextval('public.up_users_id_seq'::regclass); + + +-- +-- Data for Name: admin_permissions; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.admin_permissions (id, action, subject, properties, conditions, created_at, updated_at, created_by_id, updated_by_id) FROM stdin; +1 plugin::upload.read \N {} [] 2021-12-24 13:28:12.48 2021-12-24 13:28:12.48 \N \N +2 plugin::upload.assets.create \N {} [] 2021-12-24 13:28:12.489 2021-12-24 13:28:12.489 \N \N +3 plugin::upload.assets.update \N {} [] 2021-12-24 13:28:12.495 2021-12-24 13:28:12.495 \N \N +4 plugin::upload.assets.download \N {} [] 2021-12-24 13:28:12.501 2021-12-24 13:28:12.501 \N \N +5 plugin::upload.assets.copy-link \N {} [] 2021-12-24 13:28:12.508 2021-12-24 13:28:12.508 \N \N +6 plugin::upload.read \N {} ["admin::is-creator"] 2021-12-24 13:28:12.517 2021-12-24 13:28:12.517 \N \N +7 plugin::upload.assets.create \N {} [] 2021-12-24 13:28:12.523 2021-12-24 13:28:12.523 \N \N +8 plugin::upload.assets.update \N {} ["admin::is-creator"] 2021-12-24 13:28:12.531 2021-12-24 13:28:12.531 \N \N +9 plugin::upload.assets.download \N {} [] 2021-12-24 13:28:12.54 2021-12-24 13:28:12.54 \N \N +10 plugin::upload.assets.copy-link \N {} [] 2021-12-24 13:28:12.546 2021-12-24 13:28:12.546 \N \N +11 plugin::content-manager.explorer.create plugin::users-permissions.user {"fields": ["username", "email", "provider", "password", "resetPasswordToken", "confirmationToken", "confirmed", "blocked", "role"]} [] 2021-12-24 13:28:12.589 2021-12-24 13:28:12.589 \N \N +12 plugin::content-manager.explorer.read plugin::users-permissions.user {"fields": ["username", "email", "provider", "password", "resetPasswordToken", "confirmationToken", "confirmed", "blocked", "role"]} [] 2021-12-24 13:28:12.6 2021-12-24 13:28:12.6 \N \N +13 plugin::content-manager.explorer.update plugin::users-permissions.user {"fields": ["username", "email", "provider", "password", "resetPasswordToken", "confirmationToken", "confirmed", "blocked", "role"]} [] 2021-12-24 13:28:12.611 2021-12-24 13:28:12.611 \N \N +14 plugin::content-manager.explorer.delete plugin::users-permissions.user {} [] 2021-12-24 13:28:12.618 2021-12-24 13:28:12.618 \N \N +15 plugin::content-manager.single-types.configure-view \N {} [] 2021-12-24 13:28:12.624 2021-12-24 13:28:12.624 \N \N +16 plugin::content-manager.collection-types.configure-view \N {} [] 2021-12-24 13:28:12.631 2021-12-24 13:28:12.631 \N \N +17 plugin::content-manager.components.configure-layout \N {} [] 2021-12-24 13:28:12.637 2021-12-24 13:28:12.637 \N \N +18 plugin::content-type-builder.read \N {} [] 2021-12-24 13:28:12.645 2021-12-24 13:28:12.645 \N \N +19 plugin::email.settings.read \N {} [] 2021-12-24 13:28:12.652 2021-12-24 13:28:12.652 \N \N +20 plugin::upload.read \N {} [] 2021-12-24 13:28:12.659 2021-12-24 13:28:12.659 \N \N +21 plugin::upload.assets.create \N {} [] 2021-12-24 13:28:12.665 2021-12-24 13:28:12.665 \N \N +22 plugin::upload.assets.update \N {} [] 2021-12-24 13:28:12.671 2021-12-24 13:28:12.671 \N \N +23 plugin::upload.assets.download \N {} [] 2021-12-24 13:28:12.679 2021-12-24 13:28:12.679 \N \N +24 plugin::upload.assets.copy-link \N {} [] 2021-12-24 13:28:12.688 2021-12-24 13:28:12.688 \N \N +25 plugin::upload.settings.read \N {} [] 2021-12-24 13:28:12.695 2021-12-24 13:28:12.695 \N \N +26 plugin::i18n.locale.create \N {} [] 2021-12-24 13:28:12.701 2021-12-24 13:28:12.701 \N \N +27 plugin::i18n.locale.read \N {} [] 2021-12-24 13:28:12.708 2021-12-24 13:28:12.708 \N \N +28 plugin::i18n.locale.update \N {} [] 2021-12-24 13:28:12.713 2021-12-24 13:28:12.713 \N \N +29 plugin::i18n.locale.delete \N {} [] 2021-12-24 13:28:12.719 2021-12-24 13:28:12.719 \N \N +30 plugin::users-permissions.roles.create \N {} [] 2021-12-24 13:28:12.726 2021-12-24 13:28:12.726 \N \N +31 plugin::users-permissions.roles.read \N {} [] 2021-12-24 13:28:12.734 2021-12-24 13:28:12.734 \N \N +32 plugin::users-permissions.roles.update \N {} [] 2021-12-24 13:28:12.741 2021-12-24 13:28:12.741 \N \N +33 plugin::users-permissions.roles.delete \N {} [] 2021-12-24 13:28:12.747 2021-12-24 13:28:12.747 \N \N +34 plugin::users-permissions.providers.read \N {} [] 2021-12-24 13:28:12.753 2021-12-24 13:28:12.753 \N \N +35 plugin::users-permissions.providers.update \N {} [] 2021-12-24 13:28:12.76 2021-12-24 13:28:12.76 \N \N +36 plugin::users-permissions.email-templates.read \N {} [] 2021-12-24 13:28:12.766 2021-12-24 13:28:12.766 \N \N +37 plugin::users-permissions.email-templates.update \N {} [] 2021-12-24 13:28:12.773 2021-12-24 13:28:12.773 \N \N +38 plugin::users-permissions.advanced-settings.read \N {} [] 2021-12-24 13:28:12.779 2021-12-24 13:28:12.779 \N \N +39 plugin::users-permissions.advanced-settings.update \N {} [] 2021-12-24 13:28:12.785 2021-12-24 13:28:12.785 \N \N +40 admin::marketplace.read \N {} [] 2021-12-24 13:28:12.791 2021-12-24 13:28:12.791 \N \N +41 admin::marketplace.plugins.install \N {} [] 2021-12-24 13:28:12.797 2021-12-24 13:28:12.797 \N \N +42 admin::marketplace.plugins.uninstall \N {} [] 2021-12-24 13:28:12.804 2021-12-24 13:28:12.804 \N \N +43 admin::webhooks.create \N {} [] 2021-12-24 13:28:12.811 2021-12-24 13:28:12.811 \N \N +44 admin::webhooks.read \N {} [] 2021-12-24 13:28:12.817 2021-12-24 13:28:12.817 \N \N +45 admin::webhooks.update \N {} [] 2021-12-24 13:28:12.824 2021-12-24 13:28:12.824 \N \N +46 admin::webhooks.delete \N {} [] 2021-12-24 13:28:12.832 2021-12-24 13:28:12.832 \N \N +47 admin::users.create \N {} [] 2021-12-24 13:28:12.838 2021-12-24 13:28:12.838 \N \N +48 admin::users.read \N {} [] 2021-12-24 13:28:12.844 2021-12-24 13:28:12.844 \N \N +49 admin::users.update \N {} [] 2021-12-24 13:28:12.851 2021-12-24 13:28:12.851 \N \N +50 admin::users.delete \N {} [] 2021-12-24 13:28:12.857 2021-12-24 13:28:12.857 \N \N +51 admin::roles.create \N {} [] 2021-12-24 13:28:12.864 2021-12-24 13:28:12.864 \N \N +52 admin::roles.read \N {} [] 2021-12-24 13:28:12.873 2021-12-24 13:28:12.873 \N \N +53 admin::roles.update \N {} [] 2021-12-24 13:28:12.881 2021-12-24 13:28:12.881 \N \N +54 admin::roles.delete \N {} [] 2021-12-24 13:28:12.888 2021-12-24 13:28:12.888 \N \N +55 admin::api-tokens.create \N {} [] 2021-12-24 13:28:12.895 2021-12-24 13:28:12.895 \N \N +56 admin::api-tokens.read \N {} [] 2021-12-24 13:28:12.902 2021-12-24 13:28:12.902 \N \N +57 admin::api-tokens.update \N {} [] 2021-12-24 13:28:12.908 2021-12-24 13:28:12.908 \N \N +58 admin::api-tokens.delete \N {} [] 2021-12-24 13:28:12.915 2021-12-24 13:28:12.915 \N \N +60 plugin::content-manager.explorer.create api::course.course {"fields": ["name", "slug", "modules"]} [] 2021-12-24 21:35:23.183 2021-12-24 21:35:23.183 \N \N +62 plugin::content-manager.explorer.create api::module.module {"fields": ["name", "lessons", "moduleLessons.lesson"]} [] 2021-12-24 21:35:23.201 2021-12-24 21:35:23.201 \N \N +67 plugin::content-manager.explorer.read api::course.course {"fields": ["name", "slug", "modules"]} [] 2021-12-24 21:35:23.24 2021-12-24 21:35:23.24 \N \N +69 plugin::content-manager.explorer.read api::module.module {"fields": ["name", "lessons", "moduleLessons.lesson"]} [] 2021-12-24 21:35:23.256 2021-12-24 21:35:23.256 \N \N +74 plugin::content-manager.explorer.update api::course.course {"fields": ["name", "slug", "modules"]} [] 2021-12-24 21:35:23.292 2021-12-24 21:35:23.292 \N \N +76 plugin::content-manager.explorer.update api::module.module {"fields": ["name", "lessons", "moduleLessons.lesson"]} [] 2021-12-24 21:35:23.309 2021-12-24 21:35:23.309 \N \N +80 plugin::content-manager.explorer.delete api::code-challenge.code-challenge {} [] 2021-12-24 21:35:23.349 2021-12-24 21:35:23.349 \N \N +81 plugin::content-manager.explorer.delete api::course.course {} [] 2021-12-24 21:35:23.357 2021-12-24 21:35:23.357 \N \N +82 plugin::content-manager.explorer.delete api::lesson.lesson {} [] 2021-12-24 21:35:23.363 2021-12-24 21:35:23.363 \N \N +83 plugin::content-manager.explorer.delete api::module.module {} [] 2021-12-24 21:35:23.373 2021-12-24 21:35:23.373 \N \N +84 plugin::content-manager.explorer.delete api::multiple-choice-challenge.multiple-choice-challenge {} [] 2021-12-24 21:35:23.382 2021-12-24 21:35:23.382 \N \N +85 plugin::content-manager.explorer.delete api::sublesson.sublesson {} [] 2021-12-24 21:35:23.388 2021-12-24 21:35:23.388 \N \N +86 plugin::content-manager.explorer.delete api::syntax-entry.syntax-entry {} [] 2021-12-24 21:35:23.397 2021-12-24 21:35:23.397 \N \N +88 plugin::content-manager.explorer.publish api::course.course {} [] 2021-12-24 21:35:23.41 2021-12-24 21:35:23.41 \N \N +89 plugin::content-manager.explorer.publish api::lesson.lesson {} [] 2021-12-24 21:35:23.419 2021-12-24 21:35:23.419 \N \N +93 plugin::content-manager.explorer.publish api::syntax-entry.syntax-entry {} [] 2021-12-24 21:35:23.45 2021-12-24 21:35:23.45 \N \N +265 plugin::content-manager.explorer.publish api::code-challenge.code-challenge {} [] 2022-01-14 15:27:16.804 2022-01-14 15:27:16.804 \N \N +266 plugin::content-manager.explorer.publish api::module.module {} [] 2022-01-14 15:27:16.81 2022-01-14 15:27:16.81 \N \N +267 plugin::content-manager.explorer.publish api::multiple-choice-challenge.multiple-choice-challenge {} [] 2022-01-14 15:27:16.816 2022-01-14 15:27:16.816 \N \N +270 plugin::content-manager.explorer.publish api::sublesson.sublesson {} [] 2022-02-11 01:05:30.411 2022-02-11 01:05:30.411 \N \N +216 plugin::content-manager.explorer.create api::syntax-entry.syntax-entry {"fields": ["content", "name", "internalNotes", "maxWidth", "sublesson", "lesson"]} [] 2021-12-30 17:32:34.377 2021-12-30 17:32:34.377 \N \N +219 plugin::content-manager.explorer.read api::syntax-entry.syntax-entry {"fields": ["content", "name", "internalNotes", "maxWidth", "sublesson", "lesson"]} [] 2021-12-30 17:32:34.406 2021-12-30 17:32:34.406 \N \N +222 plugin::content-manager.explorer.update api::syntax-entry.syntax-entry {"fields": ["content", "name", "internalNotes", "maxWidth", "sublesson", "lesson"]} [] 2021-12-30 17:32:34.437 2021-12-30 17:32:34.437 \N \N +279 plugin::content-manager.explorer.create api::code-challenge.code-challenge {"fields": ["startingCode", "tests.label", "tests.internalTest", "tests.furtherExplanation", "prompt", "internalLabel", "internalNotes", "hints.text", "hints.recommendedTimeBeforeViewing", "getStartingCodeFromPreviousChallenge", "category"]} [] 2022-02-16 13:42:19.925 2022-02-16 13:42:19.925 \N \N +280 plugin::content-manager.explorer.read api::code-challenge.code-challenge {"fields": ["startingCode", "tests.label", "tests.internalTest", "tests.furtherExplanation", "prompt", "internalLabel", "internalNotes", "hints.text", "hints.recommendedTimeBeforeViewing", "getStartingCodeFromPreviousChallenge", "category"]} [] 2022-02-16 13:42:19.933 2022-02-16 13:42:19.933 \N \N +281 plugin::content-manager.explorer.update api::code-challenge.code-challenge {"fields": ["startingCode", "tests.label", "tests.internalTest", "tests.furtherExplanation", "prompt", "internalLabel", "internalNotes", "hints.text", "hints.recommendedTimeBeforeViewing", "getStartingCodeFromPreviousChallenge", "category"]} [] 2022-02-16 13:42:19.939 2022-02-16 13:42:19.939 \N \N +320 plugin::content-manager.explorer.create api::lesson.lesson {"fields": ["slug", "name", "isHard", "internalNotes", "externalResources.name", "externalResources.link", "externalResources.type", "sublessons", "module", "syntaxEntry"]} [] 2022-02-24 10:28:49.193 2022-02-24 10:28:49.193 \N \N +321 plugin::content-manager.explorer.create api::multiple-choice-challenge.multiple-choice-challenge {"fields": ["options.text", "options.isCorrect", "options.incorrectChoiceExplanation", "prompt", "internalLabel", "canSelectMultipleOptions"]} [] 2022-02-24 10:28:49.323 2022-02-24 10:28:49.323 \N \N +322 plugin::content-manager.explorer.create api::sublesson.sublesson {"fields": ["name", "description", "internalNotes", "lesson", "challenges.codeChallenge", "challenges.multipleChoiceChallenge", "syntaxEntry"]} [] 2022-02-24 10:28:49.373 2022-02-24 10:28:49.373 \N \N +323 plugin::content-manager.explorer.read api::lesson.lesson {"fields": ["slug", "name", "isHard", "internalNotes", "externalResources.name", "externalResources.link", "externalResources.type", "sublessons", "module", "syntaxEntry"]} [] 2022-02-24 10:28:49.427 2022-02-24 10:28:49.427 \N \N +324 plugin::content-manager.explorer.read api::multiple-choice-challenge.multiple-choice-challenge {"fields": ["options.text", "options.isCorrect", "options.incorrectChoiceExplanation", "prompt", "internalLabel", "canSelectMultipleOptions"]} [] 2022-02-24 10:28:49.484 2022-02-24 10:28:49.484 \N \N +325 plugin::content-manager.explorer.read api::sublesson.sublesson {"fields": ["name", "description", "internalNotes", "lesson", "challenges.codeChallenge", "challenges.multipleChoiceChallenge", "syntaxEntry"]} [] 2022-02-24 10:28:49.512 2022-02-24 10:28:49.512 \N \N +326 plugin::content-manager.explorer.update api::lesson.lesson {"fields": ["slug", "name", "isHard", "internalNotes", "externalResources.name", "externalResources.link", "externalResources.type", "sublessons", "module", "syntaxEntry"]} [] 2022-02-24 10:28:49.56 2022-02-24 10:28:49.56 \N \N +327 plugin::content-manager.explorer.update api::multiple-choice-challenge.multiple-choice-challenge {"fields": ["options.text", "options.isCorrect", "options.incorrectChoiceExplanation", "prompt", "internalLabel", "canSelectMultipleOptions"]} [] 2022-02-24 10:28:49.564 2022-02-24 10:28:49.564 \N \N +328 plugin::content-manager.explorer.update api::sublesson.sublesson {"fields": ["name", "description", "internalNotes", "lesson", "challenges.codeChallenge", "challenges.multipleChoiceChallenge", "syntaxEntry"]} [] 2022-02-24 10:28:49.566 2022-02-24 10:28:49.566 \N \N +352 plugin::content-manager.explorer.delete api::translation-group.translation-group {} [] 2022-02-24 10:44:24.386 2022-02-24 10:44:24.386 \N \N +353 plugin::content-manager.explorer.publish api::translation-group.translation-group {} [] 2022-02-24 10:44:24.416 2022-02-24 10:44:24.416 \N \N +354 plugin::content-manager.explorer.create api::translation-group.translation-group {"fields": ["aboutPage.title", "coreComponents.backButton", "coreComponents.nextButton", "coreComponents.wefwe"]} [] 2022-02-24 10:46:10.831 2022-02-24 10:46:10.831 \N \N +355 plugin::content-manager.explorer.read api::translation-group.translation-group {"fields": ["aboutPage.title", "coreComponents.backButton", "coreComponents.nextButton", "coreComponents.wefwe"]} [] 2022-02-24 10:46:10.849 2022-02-24 10:46:10.849 \N \N +356 plugin::content-manager.explorer.update api::translation-group.translation-group {"fields": ["aboutPage.title", "coreComponents.backButton", "coreComponents.nextButton", "coreComponents.wefwe"]} [] 2022-02-24 10:46:10.855 2022-02-24 10:46:10.855 \N \N +\. + + +-- +-- Data for Name: admin_permissions_role_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.admin_permissions_role_links (permission_id, role_id) FROM stdin; +1 2 +2 2 +3 2 +4 2 +5 2 +6 3 +7 3 +8 3 +9 3 +10 3 +11 1 +12 1 +13 1 +14 1 +15 1 +16 1 +17 1 +18 1 +19 1 +20 1 +21 1 +22 1 +23 1 +24 1 +25 1 +26 1 +27 1 +28 1 +29 1 +30 1 +31 1 +32 1 +33 1 +34 1 +35 1 +36 1 +37 1 +38 1 +39 1 +40 1 +41 1 +42 1 +43 1 +44 1 +45 1 +46 1 +47 1 +48 1 +49 1 +50 1 +51 1 +52 1 +53 1 +54 1 +55 1 +56 1 +57 1 +58 1 +60 1 +62 1 +67 1 +69 1 +74 1 +76 1 +80 1 +81 1 +82 1 +83 1 +84 1 +85 1 +86 1 +88 1 +89 1 +93 1 +265 1 +266 1 +267 1 +270 1 +279 1 +280 1 +281 1 +216 1 +219 1 +222 1 +320 1 +321 1 +322 1 +323 1 +324 1 +325 1 +326 1 +327 1 +328 1 +352 1 +353 1 +354 1 +355 1 +356 1 +\. + + +-- +-- Data for Name: admin_roles; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.admin_roles (id, name, code, description, created_at, updated_at, created_by_id, updated_by_id) FROM stdin; +1 Super Admin strapi-super-admin Super Admins can access and manage all features and settings. 2021-12-24 13:28:12.452 2021-12-24 13:28:12.452 \N \N +2 Editor strapi-editor Editors can manage and publish contents including those of other users. 2021-12-24 13:28:12.465 2021-12-24 13:28:12.465 \N \N +3 Author strapi-author Authors can manage the content they have created. 2021-12-24 13:28:12.474 2021-12-24 13:28:12.474 \N \N +\. + + +-- +-- Data for Name: admin_users; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.admin_users (id, firstname, lastname, username, email, password, reset_password_token, registration_token, is_active, blocked, prefered_language, created_at, updated_at, created_by_id, updated_by_id) FROM stdin; +1 Oliver Ullman \N oliverullman@gmail.com $2a$10$NybZd.VH02ccw0nNNyETgOBtdAg0CkxRkk.T9OUXWdR0k02BN7zm2 \N \N t f \N 2021-12-24 13:51:51.433 2021-12-24 13:51:51.433 \N \N +2 Upwork Upwork \N oliverullman4@gmail.com $2a$10$nHQYB493bOpPBamGZDRN8e1ki0u9BmMxbtbDb.ftap3NIqY3AjHFy \N \N t f \N 2021-12-25 14:38:45.602 2021-12-25 14:39:12.696 \N \N +3 Andy Zhou andrew.zhou.biz@gmail.com andrew.zhou.biz@gmail.com $2a$10$kckHr4AMQ7K74HMaTuZTIek5WAT7ZYhEJDtiYQLpgD9BmzLLa.gmy \N \N t f \N 2022-02-01 15:03:47.45 2022-02-01 15:15:59.065 \N \N +36 Bjorn Jorgenson \N bjornrleira@icloud.com $2a$10$EJYu.PulywMcYYsFdw3K8.3zQBRjCix3lRVSjsJImat7ssD7hhdCy \N \N t f \N 2022-02-18 23:04:45.334 2022-02-18 23:32:35.836 \N \N +\. + + +-- +-- Data for Name: admin_users_roles_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.admin_users_roles_links (user_id, role_id) FROM stdin; +1 1 +2 1 +3 1 +36 1 +\. + + +-- +-- Data for Name: code_challenges; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.code_challenges (id, starting_code, prompt, internal_label, internal_notes, get_starting_code_from_previous_challenge, created_at, updated_at, created_by_id, updated_by_id, published_at) FROM stdin; +23 \N Here are the requirements\n\n1. To play, the user will call the function `play` which should take one parameter, `playerSelection`. The selection can either be rock, paper, or scissors.\n2. The user will play against the computer. The computer will make the selection *randomly*. \n3. If both selections are the same, return "Draw!". If you win, return "Player wins!". If the computer wins, return "Computer wins!"\n\nTips: \n\nThe key to solving big problems is breaking them into small parts. Let's start by separating this challenge into two parts: choosing a random option for the computer, and playing against the computer\n\n1. Random option for the computer\n - Create a function called `computerPlay` that randomly generates either rock, paper, or scissors. We haven't taught you how to do this yet, so you'll have to use your new googling skills to figure it out. We recommend starting off your search by googling "javascript random"\n - Once you've created this function, make sure it works before you move on `console.log(computerPlay())` should log either rock, paper, or scissors to the console.\n2. Playing against the computer\n - Create a second function called `play` which should take one parameter, `playerSelection`. This is the selection the human player chooses. The selection can either be rock, paper, or scissors.\n - Inside of this function, use `computerPlay` to generate the computer's selection\n - Now that you have both selections, you'll have to figure out how to compare the two and declare a winner. Try to think this logic through in plain english. We'll start you off: "If the user chooses rock and the computer chooses paper, then return "Player wins!". That was just one scenario, but try to write down all the different scenarios in that way. Then, try to think of how that can be translated into code.\n\nNote: We have kept the tests to a minimum for this challenge. It is entirely possible to pass the tests without completing the entire challenge. This is because we want you to be your own judge for if your project works, instead of just relying on passing tests.\n\n Rock paper scissors - basics The first hint should be like a step by step with a little advice. Like first do the computer selectection function, and maybe include a little advice there, then do the next function, then do the next\n\nYou need to include some training in the functions lesson regarding calling functions in other functions f 2021-12-29 19:00:57.202 2022-02-17 00:35:24.738 2 2 2021-12-29 19:00:57.202 +11 function coolFunction() {\n console.log('nice!');\n\ncoolFunction(); Fix the code in the editor so that the code successfully runs and logs "nice!" to the console: Functions - anatomy - fix missing closing bracket \N f 2021-12-29 15:40:29.108 2022-02-16 22:20:36.869 2 1 2021-12-29 15:40:29.108 +13 function tellJoke {\n console.log('what do you call fake spaghetti?');\n console.log('an impostah');\n}\n\ntellJoke(); Fix the code in the editor so that the code successfully runs and logs the joke to the console: Functions - anatomy - fix missing paranthesis \N f 2021-12-29 15:53:26.595 2022-02-16 22:20:56.231 2 1 2021-12-29 15:53:26.595 +12 function cowSound() \n console.log('moooo');\n}\n\ncoolFunction(); Fix the code in the editor so that the code successfully runs and logs `"moooo"` to the console: Functions - anatomy - fix missing opening bracket \N f 2021-12-29 15:44:13.323 2022-02-16 22:21:06.753 2 1 2021-12-29 15:44:13.323 +16 console.log('noice') Just press submit yall Just a test for multiple challenges in a sublesson \N f 2021-12-29 16:30:19.083 2021-12-29 16:32:07.488 2 2 2021-12-29 16:30:19.083 +8 \N Declare a function called `logNumberTimesTwo` that receives a number, multiplies it by two, and then logs that to the console\n\nNote that you can give the parameter whatever name you want. Function - params - create function with param \N f 2021-12-29 15:30:08.647 2022-02-17 00:29:01.488 2 2 2021-12-29 15:30:08.647 +3 \N Declare a variable called `lovesPizza` and assign it the value true. Below that, declare another variable called `atePizzaToday` and set it to false.\n Booleans - declare a boolean \N f 2021-12-28 19:24:35.13 2022-02-17 00:38:26.922 2 2 2021-12-28 19:24:35.13 +5 \N Declare a variable named `myAge` and assign it the value of your age. Declare a variable named 'age' with the value 64.... \N f 2021-12-28 19:46:12.421 2022-02-17 00:39:37.847 2 2 2021-12-28 19:46:12.421 +7 \N write a function called add that takes in three arguments Function - multiple args - create function with multiple args \N f 2021-12-28 19:51:19.758 2022-02-17 00:44:14.842 2 2 2021-12-28 19:51:19.758 +9 \N Create and invoke a function named `myFirstFunction` that logs `"hello world"` to the console. Functions - anatomy - create and invoke a function \N f 2021-12-29 15:33:32.655 2022-02-16 22:48:18.744 2 2 2021-12-29 15:33:32.655 +10 \N Create and invoke a function named "practiceFunction" that logs `"practice makes perfect"` to the console. Functions - anatomy - create and invoke a function 2 \N f 2021-12-29 15:36:11.924 2022-02-16 22:48:50.898 2 2 2021-12-29 15:36:11.924 +4 Let caloriesIAte = 1600;\nlet caloriesIWillEat = 500;\n\nlet totalCalories = caloriesIAte + caloriesIWillEat; Something in this code has the wrong capitalization. Correct it in order to pass the test Case sensitivity - fix simple casing error \N f 2021-12-28 19:30:31.409 2022-02-16 23:38:24.551 2 2 2021-12-28 19:30:31.409 +6 let oliversFavoriteColor = 'blue'; Below the existing code, declare a new variable called `myFavoriteColor` and assign it the value of your favorite color. \n\nThen, on the next line, use `console.log` and `==` to check if the two colors are equal and log the result to the console Equality - check favorite colors \N f 2021-12-28 19:48:49.568 2022-02-16 23:54:09.261 2 2 2021-12-28 19:48:49.568 +2 let todaysSpecial = 'pasta'\nlet address = '742 evergreen terrace'\nlet restaurantName = "moe's tavern";\n\nlet finalLine = "do not comment this out" Using only one multi-line comment, disable every line of code shown except for the last line (the one that declares `finalLine`) Add a multi-line comment \N f 2021-12-27 23:59:12.379 2022-02-17 00:19:44.966 2 2 2021-12-27 23:59:12.379 +26 \N Declare a variable called `mySavings` and set it to `10`. Then on the next line reassign it to the value `15` Variables - practice - declare and change various things \N f 2021-12-29 19:26:41.642 2022-02-17 00:30:35.085 2 2 2021-12-29 19:26:41.642 +17 \N Click submit and then click "Go to next lesson" Just click submit \N f 2021-12-29 16:41:52.865 2022-02-17 00:32:28.68 2 2 2021-12-29 16:41:52.865 +15 \N Write a function called `subtract` that takes two parameters, subtracts the second one from the first one, and returns that value Functions - returning - write a function that returns \N f 2021-12-29 16:15:00.907 2022-02-17 00:34:32.931 2 2 2021-12-29 16:15:00.907 +18 \N Write a function called isOdd that takes one argument, a number, and returns true if that number is odd and false if it is even Log if a function is odd or even \N f 2021-12-29 16:46:46.741 2022-02-17 00:34:53.499 2 2 2021-12-29 16:46:46.741 +22 \N Up till now we've manually specified the player's choice by passing it into the `play` function. \n\nNow, remove that argument so that `play` function has no parameters/arguments. Figure out how to use the javascript `prompt` command inside of the play function to let the user type in their choice dynamically.\n\nIn this case we've written no tests. We'll let you be the judge of when you completed the challenge. Rock Paper Scissors - prompt \N t 2021-12-29 17:58:59.273 2022-02-17 00:35:43.931 2 2 2021-12-29 17:58:59.273 +24 \N Now that we are asking user's to type in their choice, they might choose 'Rock' or 'rock'. In programming, these two are different, and if our program is checking for 'rock' and gets 'Rock', it won't work correctly. To avoid this, we want you to *normalize* the input received form the user. No matter what the user inputs, Rock PAPER, scISSors, they should all get converted to lowercase (rock, paper, scissors) Rock papper scissors - normalize input normalize the prompt input f 2021-12-29 19:12:56.496 2022-02-17 00:36:05.836 2 2 2021-12-29 19:12:56.496 +33 let episode = "a new hope' There is something wrong with the code in the editor. Fix it so that it runs without errors strings - fix mismatching quotes \N f 2021-12-29 20:35:45.413 2022-02-17 00:40:48.11 2 2 2021-12-29 20:35:45.413 +25 \N Declare a variable called `favoriteColor` and set it to your favorite color Strings - declare a string variable \N f 2021-12-29 19:20:00.342 2022-02-17 00:41:09.33 2 2 2021-12-29 19:20:00.342 +29 \N Using an else statement, create a function called canIVote that receives 1 parameter, age, and returns 'can vote' if age is above or equal to 18 and returns 'can not vote' if the user is below 18, else statement - basic usage \N f 2021-12-29 19:51:31.014 2022-02-16 23:46:14.694 2 2 2021-12-29 19:51:31.014 +19 \N Log your name to the console Log your name to the console \N f 2021-12-29 17:25:39.09 2022-02-08 00:59:09.955 2 1 2021-12-29 17:25:39.09 +14 function aGreatFunction() {\n console.log('truly a masterpiece');\n} Invoke the function written in the editor Functions - anatomy - invoke function \N f 2021-12-29 16:00:48.44 2022-02-16 22:46:45.323 2 2 2021-12-29 16:00:48.44 +20 \N Declare a variable `x` with a value of 5.\n\nThen declare a variable `y` with a value of 4.\n\nFinally, declare a variable `equation` which multiples `x` and `y` together Math - multiplication - multiply some things together \N t 2021-12-29 17:44:11.026 2022-02-16 22:52:30.422 2 2 2021-12-29 17:44:11.026 +28 \N Create a function called 'getFeedback' that takes in a single parameter, rating. Based on the value of rating:\n- if rating is above or equal to 8, return 'thanks for your amazing review!'\n- else if rating is above or equal to 6, return 'thanks for your kind words!'\n- else if rating is above or equal to 3. return 'what could have been better?'\n- else return 'sorry for your bad experience!' else if statements - basic usage \N f 2021-12-29 19:42:27.341 2022-02-16 23:44:53.828 2 2 2021-12-29 19:42:27.341 +30 let lovesPizza = false;\n// add code below here Add a function called pizzaCheck that takes in one parameter, lovesPizza, and logs 'pizza is great' if that parameter is true if statement - basic if statement \N f 2021-12-29 20:06:11.079 2022-02-16 23:56:37.541 2 2 2021-12-29 20:06:11.079 +31 function offerPizza(lovesPizza, isVegetarian) {\n if (lovesPizza === true) {\n if (isVegetarian === true) {\n console.log("would you like some cheese pizza?");\n }\n\n if (isVegetarian === false) {\n console.log("would you like some meat lovers pizza?");\n }\n }\n} Rewrite the provided code to have the same functionality, but use only two if statements if statement - rewrite nested if statements \N f 2021-12-29 20:16:39.679 2022-02-17 00:04:55.48 2 2 2021-12-29 20:16:39.679 +27 let favoriteTvShow = 'breaking bad' Without changing the value of `favoriteTvShow`, add a comment to this code. In it, you can write whatever you want Write a single line comment \N f 2021-12-29 19:37:25.619 2022-02-17 00:08:43.461 2 2 2021-12-29 19:37:25.619 +21 let myAge = 64; Rewrite line 1 so that the variable `myAge` no longer has the name `myAge`, but instead has a new name of your choice. Make sure that the new name you've given it is a valid name according to the rules laid out in this sublesson Rename a variable This should be changed. THe renaming thing is confusing, especially because it conflicts with the ucoming reassinging lesson.\n\nJust have them declare a variable with a valid name f 2021-12-29 17:54:47.029 2022-02-17 00:25:19.008 2 2 2021-12-29 17:54:47.029 +34 let opener = 'hello'\nlet name = 'sofia' Declare a new variable called `greeting` which uses the `+` operator to combine `opener` and `name` strings - combine strings \N f 2022-02-07 23:43:53.886 2022-02-07 23:43:53.886 1 1 \N +32 let greetings = 'Hello audience! '\nlet joke = 'Why do seagulls fly over the sea? If they flew over the bay, they would be bagels. '\nlet goodbye = "That was all my jokes. Bye everybody!" In addition to learning to code you want to be a great comedian. Add a new line of code below the existing lines which declares a variable called `awesomeComedyShow`. Assign the value of `awesomeComedyShow` to be the combination of the three variables using the `+` operator. Its value should be "Hello audience! Why do seagulls fly over the sea? If they flew over the bay, they would be bagels. That was all my jokes. Bye everybody!" strings - combine - combine 3 strings One of the biggest benefits of this challenge is that it's long so it looks scary, but it's not too hard. So it helps people not get so scared and have confidence on these longer challenges f 2021-12-29 20:25:57.944 2022-02-16 23:43:23.808 2 2 2021-12-29 20:25:57.944 +36 function addFive(number) {\n console.log(number + 5);\n}\n\naddFive(3) **Exploration**\n\nIn this challenge there are no tests. One of the most important ways to understand the concepts you learn is to play around with it. Tweak it, change it just a little bit. A common quality in great programmers is curiosity and tinkering.\n\nSo, we want you to play around with the code we've provided. Here are a few suggestions:\n\n- Try changing the number that's passed into the function from `3` to some other number\n- Try changing what the function does. Instead of adding `5`, change it to add a different number. Also, try having it subtract or multiply instead.\n- Try changing the name of the function from `addFive` to something else. Don't forget to change the invocation (the line that uses the function) as well!\n\n**Don't forget that in the function we are using console.log, and you can see what's logged in the bottom**\n\n\nWhen you're done, click "Run Tests" to automatically pass the challenge. Functions - Playground Multi-step f 2022-02-09 21:35:43.857 2022-02-17 00:28:03.937 1 2 2022-02-09 21:41:30.493 +\. + + +-- +-- Data for Name: code_challenges_category_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.code_challenges_category_links (code_challenge_id, sublesson_id) FROM stdin; +11 100 +13 100 +12 100 +14 100 +9 100 +10 100 +20 2 +4 91 +32 97 +28 38 +29 38 +6 10 +30 13 +31 13 +27 20 +2 20 +21 90 +36 101 +8 101 +26 94 +17 94 +15 103 +18 103 +23 29 +22 29 +24 29 +3 34 +5 89 +33 96 +25 96 +7 102 +\. + + +-- +-- Data for Name: code_challenges_components; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.code_challenges_components (id, entity_id, component_id, component_type, field, "order") FROM stdin; +269 21 45 challenge.code-challenge-test tests 1 +270 21 44 challenge.code-challenge-test tests 2 +271 21 46 challenge.code-challenge-test tests 3 +290 24 5 challenge.challenge-hints hints 1 +297 25 48 challenge.code-challenge-test tests 1 +298 25 49 challenge.code-challenge-test tests 2 +219 11 24 challenge.code-challenge-test tests 1 +220 11 23 challenge.code-challenge-test tests 2 +221 13 28 challenge.code-challenge-test tests 1 +222 13 27 challenge.code-challenge-test tests 2 +225 14 30 challenge.code-challenge-test tests 1 +226 14 29 challenge.code-challenge-test tests 2 +227 9 18 challenge.code-challenge-test tests 1 +228 9 17 challenge.code-challenge-test tests 2 +229 9 19 challenge.code-challenge-test tests 3 +230 10 20 challenge.code-challenge-test tests 1 +231 10 21 challenge.code-challenge-test tests 2 +232 10 22 challenge.code-challenge-test tests 3 +233 20 41 challenge.code-challenge-test tests 1 +234 20 40 challenge.code-challenge-test tests 2 +235 20 42 challenge.code-challenge-test tests 3 +35 3 3 challenge.hint-old HintOld 1 +236 20 43 challenge.code-challenge-test tests 4 +238 32 73 challenge.code-challenge-test tests 1 +239 32 74 challenge.code-challenge-test tests 2 +240 32 75 challenge.code-challenge-test tests 3 +40 2 2 challenge.hint-old HintOld 1 +241 32 6 challenge.challenge-hints hints 1 +42 4 4 challenge.hint-old HintOld 1 +45 5 5 challenge.hint-old HintOld 1 +48 6 6 challenge.hint-old HintOld 1 +49 7 7 challenge.hint-old HintOld 1 +53 8 8 challenge.hint-old HintOld 1 +57 9 9 challenge.hint-old HintOld 1 +61 10 10 challenge.hint-old HintOld 1 +64 11 11 challenge.hint-old HintOld 1 +67 12 12 challenge.hint-old HintOld 1 +70 13 13 challenge.hint-old HintOld 1 +242 28 55 challenge.code-challenge-test tests 1 +243 28 54 challenge.code-challenge-test tests 2 +244 28 56 challenge.code-challenge-test tests 3 +245 28 57 challenge.code-challenge-test tests 4 +77 14 15 challenge.hint-old HintOld 1 +81 15 16 challenge.hint-old HintOld 1 +82 16 34 challenge.code-challenge-test tests 1 +83 16 17 challenge.hint-old HintOld 1 +84 17 18 challenge.hint-old HintOld 1 +90 18 19 challenge.hint-old HintOld 1 +91 19 20 challenge.hint-old HintOld 1 +246 28 58 challenge.code-challenge-test tests 5 +247 29 60 challenge.code-challenge-test tests 1 +248 29 59 challenge.code-challenge-test tests 2 +249 29 61 challenge.code-challenge-test tests 3 +96 20 21 challenge.hint-old HintOld 1 +250 29 62 challenge.code-challenge-test tests 4 +253 30 63 challenge.code-challenge-test tests 1 +254 30 64 challenge.code-challenge-test tests 2 +100 21 22 challenge.hint-old HintOld 1 +101 22 23 challenge.hint-old HintOld 1 +107 23 24 challenge.hint-old HintOld 1 +108 23 1 challenge.nnnn ChallengeMeta 1 +110 24 25 challenge.hint-old HintOld 1 +255 30 65 challenge.code-challenge-test tests 3 +256 30 66 challenge.code-challenge-test tests 4 +113 25 26 challenge.hint-old HintOld 1 +263 27 52 challenge.code-challenge-test tests 1 +264 27 53 challenge.code-challenge-test tests 2 +116 26 27 challenge.hint-old HintOld 1 +265 2 4 challenge.code-challenge-test tests 1 +266 2 3 challenge.code-challenge-test tests 2 +119 27 28 challenge.hint-old HintOld 1 +267 2 5 challenge.code-challenge-test tests 3 +268 2 6 challenge.code-challenge-test tests 4 +130 28 29 challenge.hint-old HintOld 1 +135 29 30 challenge.hint-old HintOld 1 +140 30 31 challenge.hint-old HintOld 1 +272 8 15 challenge.code-challenge-test tests 1 +273 8 14 challenge.code-challenge-test tests 2 +274 8 16 challenge.code-challenge-test tests 3 +275 26 51 challenge.code-challenge-test tests 1 +276 26 50 challenge.code-challenge-test tests 2 +277 15 32 challenge.code-challenge-test tests 1 +147 31 32 challenge.hint-old HintOld 1 +278 15 31 challenge.code-challenge-test tests 2 +152 32 33 challenge.hint-old HintOld 1 +279 15 33 challenge.code-challenge-test tests 3 +155 33 34 challenge.hint-old HintOld 1 +223 12 26 challenge.code-challenge-test tests 1 +224 12 25 challenge.code-challenge-test tests 2 +280 18 36 challenge.code-challenge-test tests 1 +281 18 35 challenge.code-challenge-test tests 2 +282 18 37 challenge.code-challenge-test tests 3 +283 18 38 challenge.code-challenge-test tests 4 +237 4 9 challenge.code-challenge-test tests 1 +251 6 13 challenge.code-challenge-test tests 1 +252 6 12 challenge.code-challenge-test tests 2 +284 18 39 challenge.code-challenge-test tests 5 +285 23 47 challenge.code-challenge-test tests 1 +286 23 2 challenge.challenge-hints hints 1 +287 23 1 challenge.challenge-hints hints 2 +257 31 67 challenge.code-challenge-test tests 1 +258 31 68 challenge.code-challenge-test tests 2 +288 23 3 challenge.challenge-hints hints 3 +289 23 4 challenge.challenge-hints hints 4 +291 3 7 challenge.code-challenge-test tests 1 +292 3 8 challenge.code-challenge-test tests 2 +293 5 11 challenge.code-challenge-test tests 1 +294 5 10 challenge.code-challenge-test tests 2 +185 19 78 challenge.code-challenge-test tests 1 +259 31 69 challenge.code-challenge-test tests 3 +260 31 70 challenge.code-challenge-test tests 4 +261 31 71 challenge.code-challenge-test tests 5 +262 31 72 challenge.code-challenge-test tests 6 +295 33 76 challenge.code-challenge-test tests 1 +296 33 77 challenge.code-challenge-test tests 2 +\. + + +-- +-- Data for Name: components_challenge_challenge_hints; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_challenge_challenge_hints (id, text, recommended_time_before_viewing) FROM stdin; +6 If you are still not passing the tests and don't know why, make sure you're not adding extra spaces. The three string variables we've defined, already have spacing added 3.00 +1 If you're stuck on figuring out how to randomly generate the computer's options, try reading https://bit.ly/2XHoOF2\n\nIf you are still stuck, then take a look at the next hint 15.00 +2 Here's one way you can approach this:\n\n1. Define the play function, which takes one argument. For now it won't do anything\n2. Handle the computer's selection by figuring how to randomly generate either 'rock', 'paper', or 'scissors'. We recommend defining a new function called getComputerSelection that handles this logic and returns on of the three options.\n3. Figure out how to compare the computer's selection and the player's selection\n4. Based on the results, you'll either return 'Player wins!', 'Computer Wins!', or 'Draw!' 5.00 +3 If you are on this hint, don't feel bad! Many students struggle on this challenge.\n\nhttps://bit.ly/2XHoOF2 shows you how to generate a random number. Think of each number representing a different option. 0 can mean 'rock', 1 can mean 'paper', 2 can mean 'scissors'.\n\nLike we mentioned above, you can define a function called computerSelection. Within it, you can first will generate a random number between 0 and 2, and then use if statements to return the corresponding choice based on the number. Now, you can just call this function from the play function to get a random choice 20.00 +4 To determine a result based on the computer's and player's choices, uses if statements (you'll need several of them) 25.00 +5 google "convert string to lowercase javascript" 10.00 +\. + + +-- +-- Data for Name: components_challenge_code_challenge_tests; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_challenge_code_challenge_tests (id, label, internal_test, further_explanation) FROM stdin; +34 yeahyeah true \N +8 atePizzaToday is false atePizzaToday === false \N +10 The variable `myAge` has a numeric value typeof myAge === 'number' \N +45 `myAge` is no longer defined typeof myAge === 'undefined' \N +5 A multi-line comment is used _codeString.includes('/*'); \N +46 The new variable has the same value as before let strippedCodeString = _codeEvaluationHelpers.removeWhitespace(_codeString);\n\nlet matches = strippedCodeString.match(/(var|let|const)(.*)/);\nconst nameAndAssignment = matches[matches.length - 1]\nconst name = nameAndAssignment.split('=')[0];\n\neval(name + ' === 64'); \N +4 The first three variable declarations are disabled typeof todaysSpecial === 'undefined';\ntypeof address === 'undefined';\ntypeof restaurantName === 'undefined'; \N +19 `"hello world"` is logged to the console _codeEvaluationHelpers.wasLoggedToConsole('hello world') \N +30 `aGreatFunction` is invoked _helpers.wasFunctionInvoked('aGreatFunction'); \N +59 canIVote(17) returns 'can not vote' canIVote === 'can not vote' \N +56 get feedback(7) returns 'thanks for your kind words!' getFeedback(7) returns 'thanks for your kind words!' \N +58 getFeedback(0) returns 'sorry for your bad experience!' getFeedback(0) === 'sorry for your bad experience!' \N +57 getFeedback(3) returns 'what could have been better?" getFeedback(3) === 'what could have been better?" \N +54 getFeedback(10) returns 'thanks for your amazing review!' getFeedback(10) === 'thanks for your amazing review!'; \N +9 The value of `totalCalories` is 2100 totalCalories === 2100 \N +55 function getFeedback is defined and takes in one parameter typeof getFeedback === 'function' && getFeedback.length === 1; \N +42 `equation` is defined and its value is 20 equation === 20 \N +14 `logNumberTimesTwo(7)` logs 14 logNumberTimesTwo(7);\n\n_codeEvaluationHelpers.wasLoggedToConsole(14); \N +29 `"truly a masterpiece"` is logged to the console _helpers.wasLoggedToConsole("truly a masterpiece"); \N +51 Variable `mySavings` is declared and is first assigned a value of `10` const condition = 'mySavings === 10';\n\n_codeEvaluationHelpers.findFirstPassingLineForCondition({condition}).passed; \N +31 subtract(5, 4) will return 1 subtract(5, 4) === 1 \N +49 `favoriteColor` has a string value typeof favoriteColor === 'string' \N +3 the variable `finalLine` is not disabled or modified finalLine === "do not comment this out" \N +52 A comment has been added debugger;\n_codeString.split('\\n').some(line => line.includes('//')) \N +6 Only one multi-line comment is used _codeString.split('/*').length <= 2 && _codeString.split('*/').length <= 2; \N +18 `myFirstFunction` is declared typeof myFirstFunction === 'function' \N +26 `cowSound` is called/invoked _codeString.includes('cowSound()') \N +17 `myFirstFunction` is invoked _helpers.wasFunctionInvoked('myFirstFunction') \N +20 `practiceFunction` is declared typeof practiceFunction === 'function' \N +21 `practiceFunction` is invoked _helpers.wasFunctionInvoked('practiceFunction'); \N +41 `x` is defined and set to 5 x === 5 \N +16 `logNumberTimesTwo(10)` logs 20 logNumberTimesTwo(10);\n\n_codeEvaluationHelpers.wasLoggedToConsole(20); \N +22 `"practice makes perfect"` is logged to the console _codeEvaluationHelpers.wasLoggedToConsole('practice makes perfect'); \N +50 Variable `mySavings` is later reassigned to the value `15` mySavings === 15 \N +15 `logNumberTimesTwo` is a function typeof logNumberTimesTwo === 'function' \N +23 "nice!" is logged to the console _helpers.wasLoggedToConsole("nice!"); \N +24 coolFunction is invoked _helpers.wasFunctionInvoked('coolFunction') \N +27 The joke is logged to the console _codeString.includes("what do you call fake spaghetti?"); \N +28 tellJoke is invoked _codeString.includes("tellJoke()") \N +25 `"moooo"` is logged to the console _codeEvaluationHelpers.wasLoggedToConsole("moooo"); \N +60 function canIVote is defined and receives 1 parameter typeof canIVote === 'function' && canIVote.length === 1; \N +61 canIVote(18) returns 'can vote' canIVote(18) === 'can vote' \N +62 canIVote(19) returns 'can vote' canIVote(19) === 'can vote' \N +13 myFavoriteColor is declared and has a string value typeof myFavoriteColor === 'string' \N +12 Either true or false is logged to the console _internalLogs.some(log => log.some(arg => typeof arg === 'boolean')); \N +63 The function 'pizzaCheck' is defined typeof pizzaCheck === 'function' \N +64 pizzaCheck receives one parameter pizzaCheck.length === 1 \N +65 pizzaCheck(true) logs 'pizza is great' to the console pizzaCheck(true)\n_internalLogs.wasLoggedToConsole('pizza is great') \N +66 pizzaCheck(false) does not log anything to the console pizzaCheck(false)\n_internalLogs.wasLoggedToConsole('pizza is great') === false \N +67 offerPizza is defined and runs without errors offerPizza(true, false);\ntrue; \N +70 offerPizza(false, false) logs nothing offerPizza( \N +53 `favoriteTvShow` is unchanged favoriteTvShow === 'breaking bad' \N +33 subtract(8, 10) will return -2 subtract(8, 10) === -2 \N +32 the function subtract is declared typeof subtract === 'function' \N +35 isOdd(1) returns true isOdd(1) \N +37 isOdd(0) returns false isOdd(0) === false \N +36 isOdd is a function with one argument typeof isOdd === 'function' && isOdd.length === 1 \N +39 isOdd(60000) returns false isOdd(60000) === false \N +38 isOdd(5678321) returns true isOdd(5678321) \N +47 play('rock') returns either 'Player wins!', 'Computer Wins!', or 'Draw!' const result = play('rock');\n[ 'Player wins!', 'Computer Wins!', 'Draw!'].includes(result); \N +7 lovesPizza is true lovesPizza === true \N +11 The variable `myAge` is defined typeof myAge !== 'undefined' \N +48 `favoriteColor` is declared typeof favoriteColor !== 'undefined' \N +68 offerPizza(true, false) logs "would you like some meat lovers pizza?" offerPizza(true, false);\n_codeEvaluationHelpers.wasLoggedToConsole("would you like some meat lovers pizza?"); \N +69 offerPizza(true, false) does not log "would you like some cheese pizza?" offerPizza(true, false);\n_codeEvaluationHelpers.wasLoggedToConsole("would you like some cheese pizza?") === false; \N +71 offerPizza(true, true) logs "would you like some cheese pizza?" offerPizza(true, true)\n_codeEvaluationHelpers.wasLoggedToConsole(""would you like some cheese pizza?"); \N +78 A name is logged to the console typeof _internalLogs[0][0] === 'string' Since we don't know what name you'll choose, we accept any string as a valid answer to this question +40 `y` is defined and set to 4 y === 4 \N +43 The multiplication operator is used _codeString.includes('*') \N +74 `awesomeComedyShow` has the value 'Hello audience! Why do seagulls fly over the sea? If they flew over the bay, they would be bagels. That was all my jokes. Bye everybody!' awesomeComedyShow === 'Hello audience! Why do seagulls fly over the sea? If they flew over the bay, they would be bagels. That was all my jokes. Bye everybody!' \N +73 `awesomeComedyShow` is defined typeof awesomeComedyShow !== 'undefined' \N +75 The `+` operator is used _codeString.indexOf('+') !== -1 \N +72 offerPizza(true, true) does not log "would you like some meat lovers pizza?" offerPizza(true, true);\n_codeEvaluationHelpers.wasLoggedToConsole("would you like some meat lovers pizza?") === false; \N +44 A variable that is not `myAge` has been defined let strippedCodeString = _codeEvaluationHelpers.removeWhitespace(_codeString);\n\nlet matches = strippedCodeString.match(/(var|let|const)(.*)/);\nconst nameAndAssignment = matches[matches.length - 1]\nconst name = nameAndAssignment.split('=')[0];\n\neval(name + ' !== undefined') && typeof myAge === 'undefined'; \N +77 The value of episode is `'a new hope'` episode === 'a new hope' \N +76 The variable episode is correctly declared typeof episode !== undefined; \N +\. + + +-- +-- Data for Name: components_challenge_multiple_choice_options; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_challenge_multiple_choice_options (id, text, is_correct, incorrect_choice_explanation) FROM stdin; +4 `=` checks if two things are equal and `==` assigns a value to a variable f \N +5 `==` checks if two things are equal and `=` assigns a value to a variable t \N +13 call t \N +14 run t \N +15 handle f \N +25 "Hello Forest Gump" will be outputted and then there will be an error t \N +26 "Hello Forest Gump" is logged f What happens on the second console.log? +27 "Hello Forest Gump" will be outputted and then there will be an error t \N +28 "Hello Forest Gump" is logged f What happens on the second console.log? +29 "Hello Forest Gump" is logged f What happens on the second console.log? +30 "Hello Forest Gump" will be outputted and then there will be an error t \N +31 "Hello Forest Gump" is logged f What happens on the second console.log? +32 "Hello Forest Gump" will be outputted and then there will be an error t \N +33 "Hello Forest Gump" will be outputted and then there will be an error t \N +34 "Hello Forest Gump" is logged f What happens on the second console.log? +35 "Hello Forest Gump" is logged f What happens on the second console.log? +36 "Hello Forest Gump" will be outputted and then there will be an error t \N +37 "Hello Forest Gump" will be outputted and then there will be an error t \N +38 "Hello Forest Gump" is logged f What happens on the second console.log? +39 "Hello Forest Gump" will be outputted and then there will be an error t \N +40 "Hello Forest Gump" is logged f What happens on the second console.log? +41 "Hello Forest Gump" is logged f What happens on the second console.log? +42 "Hello Forest Gump" will be outputted and then there will be an error t \N +43 "Hello Forest Gump" is logged f What happens on the second console.log? +44 "Hello Forest Gump" is logged f What happens on the second console.log? +69 console.log(123); f \N +70 b f \N +71 d f \N +72 c t \N +73 `let randomNumber = 30;` t \N +74 `// let randomNumber = 30;` f Since the console.log is written after the comment, it is evaluated as a comment instead of as code +47 "Hello Forest Gump" is logged f What happens on the second console.log? +46 "Hello Forest Gump" will be outputted first, then "Forest" and "Gump" will be outputted one by one. f "Forest" and "Gump" are not outputted, instead, an error is logged. This is because firstName and lastName are parameters of the sayHello function and therefore can only be accessed inside of sayHello. +45 "Hello Forest Gump" will be outputted and then there will be an error t \N +48 MyCoolHouse f This casing is known as PascalCase +49 nextLesson t \N +50 my_city f This casing is known as snake_case +51 TOTAL_REFRIGERATORS f THIS CASING IS KNOWN AS UPPER_CASE_SNAKE_CASE +52 favorite-animal f This casing is known as kebab-case +53 `counter = 0;` f \N +54 `counter = 0;` f \N +55 `let counter = 0;` t \N +56 0 = counter; f \N +57 let counter is 0; f \N +75 `let randomNumber = 30; // hey there` t \N +76 ```\n// hello world\nlet randomNumber = 30;\n// goodbye cruel world\n``` t \N +77 console log (56) f \N +78 consolelog(1234) f \N +79 console log 56 f \N +80 None of the above t \N +85 Welcome priyantha! t \N +60 10 f The first letter of a variable cannot be a number +20 \\* t \N +6 They are synonyms f They are almost the same thing, and sometimes people will even use them interchangeably when talking casually, but there is an important difference +19 x f \N +87 Welcome back priyantha! f The code inside the if statement does not run because isLoggedIn was false +82 nothing f \N +81 "would you like some cheese pizza?" and "would you like some meat lovers pizza?" f \N +83 would you like some meat lovers pizza? f \N +84 would you like some cheese pizza? f \N +58 _address t \N +8 Arguments are the variables specified in the declaration that a function can use internally, parameters are the actual values for those variables that are passed in the function invocation f \N +7 Parameters are the variables specified in the declaration that a function can use internally, arguments are the actual values for those variables that are passed in the function invocation t \N +62 age t \N +61 favorite age f spaces are not allowed +63 favorite-age f dashes are not allowed +65 favoriteAge t \N +64 MYAGE t \N +66 MY_AGE t Underscores are allowed +68 let year = 2021; f The keyword 'var' is only necessary when we first declare a variable. Since let has already been declared in the first line, we don't need it here. +67 year = 2021 t \N +17 hello t \N +16 goodbye f goodbye is after the return line, which means it never runs because the return line ends the function +18 123 f return is not the same as console.log. Return allows us to use a value inside a function, outside of the function. It doesn't have anything to do with the console +1 false t \N +23 They do the same thing f \N +22 === is more strict than == and avoids unexpected results t \N +21 == is more strict than === and avoids unexpected results f \N +24 `==` checks for equality. `===` isn't valid in Javascript f \N +2 'true' f the quotes surrounding 'true' turn it into a string +3 yes f yes isn't a boolean, and it's not even a string since it's not surrounded by quotes +9 function test(a b) { f the comma is missing between the two parameters +10 function test(a, b) { t \N +11 function test(param1, param2) { t \N +12 function test(a, b, c) { f This has three arguments not two +89 nothing f \N +90 would you like some meat lovers pizza? t \N +91 would you like some cheese pizza? f \N +92 "would you like some cheese pizza?" and "would you some meat lovers pizza?" f \N +93 true t \N +94 1 t \N +95 '' f empty strings are considered falsy +96 -1 t \N +97 Coding ishard t \N +98 Coding is hard f While we might think it's obvious that there should be a space between 'is' and 'hard', we didn't tell the program to put a space there. Programming can be frustrating in that way +100 hello sofia t \N +101 hellosofia f We told the program to add a space between the two words when we put + between them +86 Welcome ${priyantha}! f the ${} part is a part of javascript's syntax when inside of the special `` quotations, but it goes away when the code is evaluated +88 Welcome back ${name}! f The code inside the if statement does not run because isLoggedIn was false +102 '53' t \N +103 8 f When combining a number with a string, Javascript will treat both as strings, so it will just smack the two together, without doing any math. +59 zip code f Variable names are not allowed to have spaces +\. + + +-- +-- Data for Name: components_content_challenges; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_content_challenges (id) FROM stdin; +19 +20 +21 +22 +23 +24 +51 +35 +34 +36 +59 +37 +30 +29 +54 +55 +31 +58 +32 +33 +60 +53 +61 +62 +38 +39 +40 +43 +42 +44 +46 +45 +47 +48 +49 +50 +52 +56 +2 +1 +3 +4 +5 +6 +8 +7 +9 +17 +16 +11 +41 +10 +14 +13 +15 +28 +57 +\. + + +-- +-- Data for Name: components_content_challenges_code_challenge_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_content_challenges_code_challenge_links (challenges_id, code_challenge_id) FROM stdin; +51 5 +34 21 +56 29 +2 13 +1 11 +3 12 +4 14 +5 9 +6 10 +8 20 +36 8 +17 6 +20 30 +23 31 +59 36 +30 25 +29 33 +31 2 +32 7 +55 19 +39 26 +40 17 +43 15 +44 18 +46 22 +45 23 +47 24 +49 3 +60 19 +52 28 +11 4 +53 28 +15 32 +28 27 +\. + + +-- +-- Data for Name: components_content_challenges_multiple_choice_challenge_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_content_challenges_multiple_choice_challenge_links (challenges_id, multiple_choice_challenge_id) FROM stdin; +7 7 +9 18 +16 2 +19 19 +21 18 +22 20 +33 4 +38 13 +42 6 +48 8 +50 1 +41 14 +10 10 +14 22 +13 23 +57 24 +35 12 +37 3 +54 17 +61 17 +\. + + +-- +-- Data for Name: components_content_external_resources; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_content_external_resources (id, name, link, type) FROM stdin; +2 Overall explanation - https://www.javascript.com/learn/booleans text +7 A great infographic on how to improve your google search queries http://mentalmike.co.za/wp-content/uploads/2016/06/Google-Search-Tips.png text +8 \N - https://knightlab.northwestern.edu/2014/03/13/googling-for-code-solutions-can-be-tricky-heres-how-to-get-started/ text +9 \N https://javascript.info/comparison text +10 \N - https://www.youtube.com/watch?v=IsG4Xd6LlsM video +11 Modulus operator https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder text +12 Overall explanation https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Math text +14 \N - https://www.vikingcodeschool.com/software-engineering-basics/practice-with-pseudo-coding text +13 A fantastic interactive resource for pseudo-coding. We highly recommend going through it https://brilliant.org/practice/pseudocode/?p=1 text +17 A fantastic explanation on errors. We highly recommend reading it https://www.theodinproject.com/paths/foundations/courses/foundations/lessons/understanding-errors text +4 Conceptual introduction to variables https://www.youtube.com/watch?v=Jvrszgiexg0 video +6 Naming your variables https://techstacker.com/naming-conventions-for-javascript-variables/ text +5 A good overall introduction https://javascript.info/variables \N +15 In depth guide to strings https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Strings text +16 A great, short general video introduction to strings. Be advised that there is one error. On line 5 and 6, when showing what the value would be, he forgets to put the quotes in. So the real translation should be: He said "Hi!" https://www.youtube.com/watch?v=Vd_Z1bYGrCM video +18 \N \N \N +\. + + +-- +-- Data for Name: components_misc_module_lessons; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_misc_module_lessons (id) FROM stdin; +14 +3 +2 +4 +5 +7 +6 +12 +8 +10 +11 +9 +13 +\. + + +-- +-- Data for Name: components_misc_module_lessons_lesson_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_misc_module_lessons_lesson_links (module_lesson_id, lesson_id) FROM stdin; +14 3 +3 12 +2 6 +4 4 +5 9 +12 11 +7 13 +6 14 +8 5 +10 2 +11 8 +9 7 +13 3 +\. + + +-- +-- Data for Name: components_translations_about_pages; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_translations_about_pages (id, title) FROM stdin; +\. + + +-- +-- Data for Name: components_translations_core_components; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_translations_core_components (id, back_button, next_button) FROM stdin; +\. + + +-- +-- Data for Name: components_translations_core_components_components; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_translations_core_components_components (id, entity_id, component_id, component_type, field, "order") FROM stdin; +\. + + +-- +-- Data for Name: components_translations_within_components; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.components_translations_within_components (id) FROM stdin; +\. + + +-- +-- Data for Name: courses; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.courses (id, name, slug, created_at, updated_at, published_at, created_by_id, updated_by_id) FROM stdin; +1 Javascript Foundations js-foundations 2021-12-29 21:03:05.586 2022-01-05 18:57:28.959 2021-12-29 21:03:20.541 2 1 +\. + + +-- +-- Data for Name: courses_modules_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.courses_modules_links (course_id, module_id) FROM stdin; +1 1 +\. + + +-- +-- Data for Name: files; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.files (id, name, alternative_text, caption, width, height, formats, hash, ext, mime, size, url, preview_url, provider, provider_metadata, created_at, updated_at, created_by_id, updated_by_id) FROM stdin; +\. + + +-- +-- Data for Name: files_related_morphs; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.files_related_morphs (file_id, related_id, related_type, field, "order") FROM stdin; +\. + + +-- +-- Data for Name: i18n_locale; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.i18n_locale (id, name, code, created_at, updated_at, created_by_id, updated_by_id) FROM stdin; +1 English (en) en 2021-12-24 13:28:12.257 2021-12-24 13:28:12.257 \N \N +2 Spanish (es) es 2022-02-24 10:39:03.922 2022-02-24 10:39:03.922 1 1 +\. + + +-- +-- Data for Name: lessons; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.lessons (id, slug, name, is_hard, internal_notes, created_at, updated_at, published_at, created_by_id, updated_by_id) FROM stdin; +2 booleans-and-equality Booleans and Equality f \N 2021-12-31 20:17:15.04 2022-01-06 18:03:54.39 2021-12-31 20:17:28.088 2 2 +4 comments Comments f \N 2021-12-31 20:27:12.517 2022-01-06 18:22:08.719 2021-12-31 20:31:38.854 2 2 +7 googling-introduction Googling - Introduction f \N 2021-12-31 20:43:42.572 2022-01-06 18:31:52.752 2021-12-31 20:44:56.489 2 2 +8 if-statements If statements f Includes else and if/else statements 2021-12-31 20:49:19 2022-01-06 18:34:16.025 2021-12-31 20:49:52.751 2 2 +9 math Math f \N 2021-12-31 20:58:38.728 2022-01-06 18:38:10.644 2021-12-31 20:58:47.157 2 2 +10 mindset Mindset f \N 2021-12-31 21:01:17.381 2022-01-06 18:58:12.525 2021-12-31 21:01:21.964 2 2 +3 module-1-final-challenge Checkpoint 1 - Rock Paper Scissors t this might be changed to 'checkpoint' 2021-12-31 20:20:02.224 2022-01-06 19:01:12.152 2021-12-31 20:23:25.905 2 2 +11 pseudocode Pseudocode f \N 2021-12-31 21:03:10.684 2022-01-06 19:03:05.698 2021-12-31 21:03:18.424 2 2 +13 x-not-defined Understanding errors: 'X' is not defined f \N 2021-12-31 21:09:03.8 2022-01-06 19:12:14.412 2021-12-31 21:12:20.471 2 2 +6 getting-started-with-variables Getting Started with Variables f 2021-12-31 20:37:06.506 2022-02-06 17:40:03.451 2021-12-31 20:40:33.815 2 1 +12 strings Strings f \N 2021-12-31 21:05:30.641 2022-02-07 21:12:39.65 2021-12-31 21:05:37.615 2 1 +5 functions Functions f \N 2021-12-31 20:33:11.686 2022-02-08 01:04:27.68 2021-12-31 20:33:49.546 2 1 +15 introduction-to-programming Introduction to Programming f 2022-02-12 03:39:25.603 2022-02-12 03:40:00.79 \N 1 1 +14 console-log console.log f \N 2021-12-31 21:13:29.337 2022-02-17 13:48:22.378 2021-12-31 21:21:49.56 2 1 +\. + + +-- +-- Data for Name: lessons_components; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.lessons_components (id, entity_id, component_id, component_type, field, "order") FROM stdin; +21 2 2 content.external-resource externalResources 1 +25 7 8 content.external-resource externalResources 1 +26 7 7 content.external-resource externalResources 2 +27 8 9 content.external-resource externalResources 1 +28 8 10 content.external-resource externalResources 2 +29 9 12 content.external-resource externalResources 1 +30 9 11 content.external-resource externalResources 2 +31 11 13 content.external-resource externalResources 1 +32 11 14 content.external-resource externalResources 2 +35 13 17 content.external-resource externalResources 1 +60 6 5 content.external-resource externalResources 1 +61 6 4 content.external-resource externalResources 2 +62 6 6 content.external-resource externalResources 3 +63 12 16 content.external-resource externalResources 1 +64 12 15 content.external-resource externalResources 2 +66 15 18 content.external-resource externalResources 1 +\. + + +-- +-- Data for Name: lessons_module_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.lessons_module_links (lesson_id, module_id) FROM stdin; +2 1 +3 1 +4 1 +5 1 +6 1 +7 1 +8 1 +9 1 +10 1 +11 1 +12 1 +13 1 +15 1 +14 1 +\. + + +-- +-- Data for Name: lessons_syntax_entry_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.lessons_syntax_entry_links (lesson_id, syntax_entry_id) FROM stdin; +\. + + +-- +-- Data for Name: modules; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.modules (id, name, created_at, updated_at, created_by_id, updated_by_id, published_at) FROM stdin; +1 Javascript Foundations 2021-12-31 21:30:40.97 2022-02-11 00:51:19.948 2 1 2021-12-31 21:30:40.97 +\. + + +-- +-- Data for Name: modules_components; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.modules_components (id, entity_id, component_id, component_type, field, "order") FROM stdin; +52 1 2 misc.module-lesson moduleLessons 1 +53 1 3 misc.module-lesson moduleLessons 2 +54 1 4 misc.module-lesson moduleLessons 3 +55 1 5 misc.module-lesson moduleLessons 4 +56 1 6 misc.module-lesson moduleLessons 5 +57 1 7 misc.module-lesson moduleLessons 6 +58 1 8 misc.module-lesson moduleLessons 7 +59 1 12 misc.module-lesson moduleLessons 8 +60 1 10 misc.module-lesson moduleLessons 9 +61 1 11 misc.module-lesson moduleLessons 10 +62 1 9 misc.module-lesson moduleLessons 11 +63 1 13 misc.module-lesson moduleLessons 12 +\. + + +-- +-- Data for Name: multiple_choice_challenges; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.multiple_choice_challenges (id, prompt, internal_label, can_select_multiple_options, created_at, updated_at, created_by_id, updated_by_id, published_at) FROM stdin; +7 Which character is used to multiply two numbers together? Choose all that apply. Math - multiply - which character is used t 2021-12-31 22:27:47.214 2022-02-16 22:52:59.926 2 2 2021-12-31 22:27:47.214 +18 When the below code runs, what is logged to the console? \n\n```\nlet lovesPizza = true;\nlet isVegetarian = true;\n\nif (lovesPizza && isVegetarian) {\n console.log("would you like some cheese pizza?");\n}\n\nif (lovesPizza && isVegetarian === false) {\n console.log("would you like some meat lovers pizza?");\n}\n``` if statement - what is logged, compound conditions f 2022-01-01 18:23:14.748 2022-02-17 00:03:42.595 2 2 2022-01-01 18:23:14.748 +3 In the context of a function, what is the difference between *arguments* and *parameters* Function - args - parameters vs args f 2021-12-31 22:05:16.97 2022-02-17 00:27:27.919 2 2 2021-12-31 22:05:16.97 +6 What will be logged to the console when the following code is run? Select all that apply:\n\n```\nfunction example() {\n console.log('hello');\n return 123;\n console.log('goodbye');\n}\n``` Functions - returning - what will be returned t 2021-12-31 22:24:50.558 2022-02-17 00:34:13.517 2 2 2021-12-31 22:24:50.558 +8 What is the difference between `==` and `===` Strict equality - difference with regular f 2021-12-31 22:37:46.199 2022-02-17 00:37:18.07 2 2 2021-12-31 22:37:46.199 +1 Select all options that are valid booleans Booleans - Which are valid booleans t 2021-12-31 21:56:06.648 2022-02-17 00:38:07.493 2 2 2021-12-31 21:56:06.648 +4 Which of the following options are correct versions of the first line of a function that takes in 2 arguments. Select all that apply Function - multiple args - correct first line t 2021-12-31 22:13:02.345 2022-02-17 00:41:45.913 2 2 2021-12-31 22:13:02.345 +2 What is the difference between `=` and `==`? Booleans - difference between = and == f 2021-12-31 21:59:18.852 2021-12-31 21:59:42.461 2 2 2021-12-31 21:59:18.852 +5 Select all words that are synonyms for the word `invoke` in the context of 'invoking a function': Functions - Synonyms for invoke t 2021-12-31 22:18:09.942 2021-12-31 22:18:13.802 2 2 2021-12-31 22:18:09.942 +17 Which of the following is a valid line of code? console.log - Which of the following is a valid line of code? f 2022-01-01 18:20:41.689 2022-01-01 18:20:46.64 2 2 2022-01-01 18:20:41.689 +9 What will happen if the following code runs?\n\n```\nfunction sayHello(firstName, lastName) {\n return `Hello ${firstName} ${lastName}`;\n}\n\nconsole.log(sayHello("Forest", "Gump");\nconsole.log(firstName, lastName);\n``` Using parameter outside of function f 2021-12-31 23:15:28.299 2022-01-01 17:29:17.401 2 2 2021-12-31 23:15:28.299 +10 Which of the following variable names is camel cased? Select all that apply Variables - camelCase - which is camelCase t 2022-01-01 17:35:07.679 2022-01-01 17:43:44.948 2 2 2022-01-01 17:35:07.679 +11 Which is the correct way to declare a new variable named counter and assign it to 0; Variables - correct way to declare variable f 2022-01-01 17:49:57.816 2022-01-01 17:50:02.975 2 2 2022-01-01 17:49:57.816 +15 What will happen if this code is run:\n```\nconsole.log(2 + 2)\n``` What happens console.log f 2022-01-01 18:06:00.673 2022-01-01 18:06:04.519 2 2 2022-01-01 18:06:00.673 +20 What is logged when the below code runs?\n\n```\nfunction offerPizza(lovesPizza, isVegetarian) {\n if (lovesPizza) {\n if (isVegetarian) {\n console.log("would you like some cheese pizza?");\n }\n\n if (isVegetarian === false) {\n console.log("would you like some meat lovers pizza?");\n }\n }\n}\n\nofferPizza(true, false);\n``` if statement - what is logged, nested f 2022-01-01 18:47:36.476 2022-01-01 18:47:48.246 2 2 2022-01-01 18:47:36.476 +21 Which of these conditions will pass the condition of an if statement? Select all that apply: if statements - truthy conditions - which pass f 2022-01-01 18:53:41.083 2022-01-01 18:53:51.31 2 2 2022-01-01 18:53:41.083 +23 What is the value of the variable `greeting`\n\n```\nlet opener = 'hello'\nlet name = 'sofia'\nlet greeting = opener + ' ' + name\n``` strings - combining guess value 2 f 2022-01-01 19:04:31.053 2022-01-01 19:04:36.259 2 2 2022-01-01 19:04:31.053 +22 What is the value of the following variable?\n\n```\nlet message = 'Coding is' + "hard"\n``` strings - combining guess value f 2022-01-01 18:55:38.475 2022-01-01 18:56:42.098 2 2 2022-01-01 18:55:38.475 +19 ```\nfunction greetUser(isLoggedIn, name) {\n if (isLoggedIn) {\n return `Welcome back ${name}!`;\n }\n\n return `Welcome ${name}!`;\n}\n\ngreetUser(false, 'priyantha');\n``` if statement - what is logged, isLoggedIn f 2022-01-01 18:34:01.11 2022-02-16 23:57:09.292 2 2 2022-01-01 18:34:01.11 +24 What will the value of the following code be:\n\n```\n5 + '3'\n``` Math - Combining string and number f 2022-02-06 19:10:33.527 2022-02-17 00:18:54.444 1 2 2022-02-06 20:52:49.327 +12 Which of the following options are valid variable names? Variables - naming - choose valid name t 2022-01-01 17:54:53.846 2022-02-17 00:26:15.141 2 2 2022-01-01 17:54:53.846 +13 Select all valid variable names Variables - practice - invalid variable names t 2022-01-01 17:58:27.267 2022-02-17 00:31:54.084 2 2 2022-01-01 17:58:27.267 +14 Given the following code: \n```\nlet year = 2020;\n```\n\nwhich of the following lines of code should we add after it to reassign it to 2021? Variables - reassigning - reassignment vs declaration f 2022-01-01 18:01:22.47 2022-02-17 00:33:35.379 2 2 2022-01-01 18:01:22.47 +\. + + +-- +-- Data for Name: multiple_choice_challenges_components; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.multiple_choice_challenges_components (id, entity_id, component_id, component_type, field, "order") FROM stdin; +4 2 4 challenge.multiple-choice-options options 1 +5 2 5 challenge.multiple-choice-options options 2 +13 5 13 challenge.multiple-choice-options options 1 +14 5 14 challenge.multiple-choice-options options 2 +15 5 15 challenge.multiple-choice-options options 3 +28 9 45 challenge.multiple-choice-options options 1 +29 9 46 challenge.multiple-choice-options options 2 +30 9 47 challenge.multiple-choice-options options 3 +31 10 48 challenge.multiple-choice-options options 1 +32 10 49 challenge.multiple-choice-options options 2 +33 10 50 challenge.multiple-choice-options options 3 +34 10 51 challenge.multiple-choice-options options 4 +35 10 52 challenge.multiple-choice-options options 5 +36 11 54 challenge.multiple-choice-options options 1 +37 11 53 challenge.multiple-choice-options options 2 +38 11 55 challenge.multiple-choice-options options 3 +39 11 56 challenge.multiple-choice-options options 4 +40 11 57 challenge.multiple-choice-options options 5 +52 15 69 challenge.multiple-choice-options options 1 +53 15 70 challenge.multiple-choice-options options 2 +54 15 72 challenge.multiple-choice-options options 3 +55 15 71 challenge.multiple-choice-options options 4 +60 17 78 challenge.multiple-choice-options options 1 +61 17 77 challenge.multiple-choice-options options 2 +62 17 79 challenge.multiple-choice-options options 3 +63 17 80 challenge.multiple-choice-options options 4 +72 20 89 challenge.multiple-choice-options options 1 +73 20 90 challenge.multiple-choice-options options 2 +74 20 91 challenge.multiple-choice-options options 3 +75 20 92 challenge.multiple-choice-options options 4 +76 21 93 challenge.multiple-choice-options options 1 +77 21 94 challenge.multiple-choice-options options 2 +78 21 95 challenge.multiple-choice-options options 3 +79 21 96 challenge.multiple-choice-options options 4 +83 22 97 challenge.multiple-choice-options options 1 +84 22 98 challenge.multiple-choice-options options 2 +85 23 101 challenge.multiple-choice-options options 1 +86 23 100 challenge.multiple-choice-options options 2 +100 7 20 challenge.multiple-choice-options options 1 +101 7 19 challenge.multiple-choice-options options 2 +102 19 86 challenge.multiple-choice-options options 1 +103 19 85 challenge.multiple-choice-options options 2 +104 19 87 challenge.multiple-choice-options options 3 +105 19 88 challenge.multiple-choice-options options 4 +106 18 81 challenge.multiple-choice-options options 1 +107 18 82 challenge.multiple-choice-options options 2 +108 18 83 challenge.multiple-choice-options options 3 +109 18 84 challenge.multiple-choice-options options 4 +110 24 103 challenge.multiple-choice-options options 1 +111 24 102 challenge.multiple-choice-options options 2 +112 12 59 challenge.multiple-choice-options options 1 +113 12 58 challenge.multiple-choice-options options 2 +114 12 60 challenge.multiple-choice-options options 3 +115 3 6 challenge.multiple-choice-options options 1 +116 3 7 challenge.multiple-choice-options options 2 +117 3 8 challenge.multiple-choice-options options 3 +118 13 61 challenge.multiple-choice-options options 1 +119 13 62 challenge.multiple-choice-options options 2 +120 13 63 challenge.multiple-choice-options options 3 +121 13 65 challenge.multiple-choice-options options 4 +122 13 64 challenge.multiple-choice-options options 5 +123 13 66 challenge.multiple-choice-options options 6 +124 14 68 challenge.multiple-choice-options options 1 +125 14 67 challenge.multiple-choice-options options 2 +126 6 17 challenge.multiple-choice-options options 1 +127 6 16 challenge.multiple-choice-options options 2 +128 6 18 challenge.multiple-choice-options options 3 +133 8 22 challenge.multiple-choice-options options 1 +134 8 21 challenge.multiple-choice-options options 2 +135 8 23 challenge.multiple-choice-options options 3 +136 8 24 challenge.multiple-choice-options options 4 +137 1 2 challenge.multiple-choice-options options 1 +138 1 1 challenge.multiple-choice-options options 2 +139 1 3 challenge.multiple-choice-options options 3 +140 4 10 challenge.multiple-choice-options options 1 +141 4 9 challenge.multiple-choice-options options 2 +142 4 11 challenge.multiple-choice-options options 3 +143 4 12 challenge.multiple-choice-options options 4 +\. + + +-- +-- Data for Name: strapi_api_tokens; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.strapi_api_tokens (id, name, description, type, access_key, created_at, updated_at, created_by_id, updated_by_id) FROM stdin; +\. + + +-- +-- Data for Name: strapi_core_store_settings; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.strapi_core_store_settings (id, key, value, type, environment, tag) FROM stdin; +2 plugin_content_manager_configuration_content_types::admin::user {"uid":"admin::user","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"firstname","defaultSortBy":"firstname","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"firstname":{"edit":{"label":"Firstname","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Firstname","searchable":true,"sortable":true}},"lastname":{"edit":{"label":"Lastname","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Lastname","searchable":true,"sortable":true}},"username":{"edit":{"label":"Username","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Username","searchable":true,"sortable":true}},"email":{"edit":{"label":"Email","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Email","searchable":true,"sortable":true}},"password":{"edit":{"label":"Password","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Password","searchable":true,"sortable":true}},"resetPasswordToken":{"edit":{"label":"ResetPasswordToken","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"ResetPasswordToken","searchable":true,"sortable":true}},"registrationToken":{"edit":{"label":"RegistrationToken","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"RegistrationToken","searchable":true,"sortable":true}},"isActive":{"edit":{"label":"IsActive","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"IsActive","searchable":true,"sortable":true}},"roles":{"edit":{"label":"Roles","description":"","placeholder":"","visible":true,"editable":true,"mainField":"name"},"list":{"label":"Roles","searchable":false,"sortable":false}},"blocked":{"edit":{"label":"Blocked","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Blocked","searchable":true,"sortable":true}},"preferedLanguage":{"edit":{"label":"PreferedLanguage","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"PreferedLanguage","searchable":true,"sortable":true}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","firstname","lastname","username"],"editRelations":["roles"],"edit":[[{"name":"firstname","size":6},{"name":"lastname","size":6}],[{"name":"username","size":6},{"name":"email","size":6}],[{"name":"password","size":6},{"name":"resetPasswordToken","size":6}],[{"name":"registrationToken","size":6},{"name":"isActive","size":4}],[{"name":"blocked","size":4},{"name":"preferedLanguage","size":6}]]}} object \N \N +3 plugin_content_manager_configuration_content_types::admin::permission {"uid":"admin::permission","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"action","defaultSortBy":"action","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"action":{"edit":{"label":"Action","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Action","searchable":true,"sortable":true}},"subject":{"edit":{"label":"Subject","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Subject","searchable":true,"sortable":true}},"properties":{"edit":{"label":"Properties","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Properties","searchable":false,"sortable":false}},"conditions":{"edit":{"label":"Conditions","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Conditions","searchable":false,"sortable":false}},"role":{"edit":{"label":"Role","description":"","placeholder":"","visible":true,"editable":true,"mainField":"name"},"list":{"label":"Role","searchable":true,"sortable":true}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","action","subject","role"],"editRelations":["role"],"edit":[[{"name":"action","size":6},{"name":"subject","size":6}],[{"name":"properties","size":12}],[{"name":"conditions","size":12}]]}} object \N \N +4 plugin_content_manager_configuration_content_types::admin::role {"uid":"admin::role","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"name","defaultSortBy":"name","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"name":{"edit":{"label":"Name","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Name","searchable":true,"sortable":true}},"code":{"edit":{"label":"Code","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Code","searchable":true,"sortable":true}},"description":{"edit":{"label":"Description","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Description","searchable":true,"sortable":true}},"users":{"edit":{"label":"Users","description":"","placeholder":"","visible":true,"editable":true,"mainField":"firstname"},"list":{"label":"Users","searchable":false,"sortable":false}},"permissions":{"edit":{"label":"Permissions","description":"","placeholder":"","visible":true,"editable":true,"mainField":"action"},"list":{"label":"Permissions","searchable":false,"sortable":false}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","name","code","description"],"editRelations":["users","permissions"],"edit":[[{"name":"name","size":6},{"name":"code","size":6}],[{"name":"description","size":6}]]}} object \N \N +5 plugin_content_manager_configuration_content_types::admin::api-token {"uid":"admin::api-token","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"name","defaultSortBy":"name","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"name":{"edit":{"label":"Name","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Name","searchable":true,"sortable":true}},"description":{"edit":{"label":"Description","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Description","searchable":true,"sortable":true}},"type":{"edit":{"label":"Type","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Type","searchable":true,"sortable":true}},"accessKey":{"edit":{"label":"AccessKey","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"AccessKey","searchable":true,"sortable":true}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","name","description","type"],"editRelations":[],"edit":[[{"name":"name","size":6},{"name":"description","size":6}],[{"name":"type","size":6},{"name":"accessKey","size":6}]]}} object \N \N +6 plugin_content_manager_configuration_content_types::plugin::upload.file {"uid":"plugin::upload.file","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"name","defaultSortBy":"name","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"name":{"edit":{"label":"Name","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Name","searchable":true,"sortable":true}},"alternativeText":{"edit":{"label":"AlternativeText","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"AlternativeText","searchable":true,"sortable":true}},"caption":{"edit":{"label":"Caption","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Caption","searchable":true,"sortable":true}},"width":{"edit":{"label":"Width","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Width","searchable":true,"sortable":true}},"height":{"edit":{"label":"Height","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Height","searchable":true,"sortable":true}},"formats":{"edit":{"label":"Formats","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Formats","searchable":false,"sortable":false}},"hash":{"edit":{"label":"Hash","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Hash","searchable":true,"sortable":true}},"ext":{"edit":{"label":"Ext","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Ext","searchable":true,"sortable":true}},"mime":{"edit":{"label":"Mime","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Mime","searchable":true,"sortable":true}},"size":{"edit":{"label":"Size","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Size","searchable":true,"sortable":true}},"url":{"edit":{"label":"Url","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Url","searchable":true,"sortable":true}},"previewUrl":{"edit":{"label":"PreviewUrl","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"PreviewUrl","searchable":true,"sortable":true}},"provider":{"edit":{"label":"Provider","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Provider","searchable":true,"sortable":true}},"provider_metadata":{"edit":{"label":"Provider_metadata","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Provider_metadata","searchable":false,"sortable":false}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","name","alternativeText","caption"],"editRelations":[],"edit":[[{"name":"name","size":6},{"name":"alternativeText","size":6}],[{"name":"caption","size":6},{"name":"width","size":4}],[{"name":"height","size":4}],[{"name":"formats","size":12}],[{"name":"hash","size":6},{"name":"ext","size":6}],[{"name":"mime","size":6},{"name":"size","size":4}],[{"name":"url","size":6},{"name":"previewUrl","size":6}],[{"name":"provider","size":6}],[{"name":"provider_metadata","size":12}]]}} object \N \N +7 plugin_content_manager_configuration_content_types::plugin::i18n.locale {"uid":"plugin::i18n.locale","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"name","defaultSortBy":"name","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"name":{"edit":{"label":"Name","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Name","searchable":true,"sortable":true}},"code":{"edit":{"label":"Code","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Code","searchable":true,"sortable":true}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","name","code","createdAt"],"editRelations":[],"edit":[[{"name":"name","size":6},{"name":"code","size":6}]]}} object \N \N +1 strapi_content_types_schema {"admin::permission":{"collectionName":"admin_permissions","info":{"name":"Permission","description":"","singularName":"permission","pluralName":"permissions","displayName":"Permission"},"options":{},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"action":{"type":"string","minLength":1,"configurable":false,"required":true},"subject":{"type":"string","minLength":1,"configurable":false,"required":false},"properties":{"type":"json","configurable":false,"required":false,"default":{}},"conditions":{"type":"json","configurable":false,"required":false,"default":[]},"role":{"configurable":false,"type":"relation","relation":"manyToOne","inversedBy":"permissions","target":"admin::role"},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"kind":"collectionType","__schema__":{"collectionName":"admin_permissions","info":{"name":"Permission","description":"","singularName":"permission","pluralName":"permissions","displayName":"Permission"},"options":{},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"action":{"type":"string","minLength":1,"configurable":false,"required":true},"subject":{"type":"string","minLength":1,"configurable":false,"required":false},"properties":{"type":"json","configurable":false,"required":false,"default":{}},"conditions":{"type":"json","configurable":false,"required":false,"default":[]},"role":{"configurable":false,"type":"relation","relation":"manyToOne","inversedBy":"permissions","target":"admin::role"}},"kind":"collectionType"},"modelType":"contentType","modelName":"permission","connection":"default","uid":"admin::permission","plugin":"admin","globalId":"AdminPermission"},"admin::user":{"collectionName":"admin_users","info":{"name":"User","description":"","singularName":"user","pluralName":"users","displayName":"User"},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"firstname":{"type":"string","unique":false,"minLength":1,"configurable":false,"required":false},"lastname":{"type":"string","unique":false,"minLength":1,"configurable":false,"required":false},"username":{"type":"string","unique":false,"configurable":false,"required":false},"email":{"type":"email","minLength":6,"configurable":false,"required":true,"unique":true,"private":true},"password":{"type":"password","minLength":6,"configurable":false,"required":false,"private":true},"resetPasswordToken":{"type":"string","configurable":false,"private":true},"registrationToken":{"type":"string","configurable":false,"private":true},"isActive":{"type":"boolean","default":false,"configurable":false,"private":true},"roles":{"configurable":false,"private":true,"type":"relation","relation":"manyToMany","inversedBy":"users","target":"admin::role","collectionName":"strapi_users_roles"},"blocked":{"type":"boolean","default":false,"configurable":false,"private":true},"preferedLanguage":{"type":"string","configurable":false,"required":false},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"kind":"collectionType","__schema__":{"collectionName":"admin_users","info":{"name":"User","description":"","singularName":"user","pluralName":"users","displayName":"User"},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"firstname":{"type":"string","unique":false,"minLength":1,"configurable":false,"required":false},"lastname":{"type":"string","unique":false,"minLength":1,"configurable":false,"required":false},"username":{"type":"string","unique":false,"configurable":false,"required":false},"email":{"type":"email","minLength":6,"configurable":false,"required":true,"unique":true,"private":true},"password":{"type":"password","minLength":6,"configurable":false,"required":false,"private":true},"resetPasswordToken":{"type":"string","configurable":false,"private":true},"registrationToken":{"type":"string","configurable":false,"private":true},"isActive":{"type":"boolean","default":false,"configurable":false,"private":true},"roles":{"configurable":false,"private":true,"type":"relation","relation":"manyToMany","inversedBy":"users","target":"admin::role","collectionName":"strapi_users_roles"},"blocked":{"type":"boolean","default":false,"configurable":false,"private":true},"preferedLanguage":{"type":"string","configurable":false,"required":false}},"kind":"collectionType"},"modelType":"contentType","modelName":"user","connection":"default","uid":"admin::user","plugin":"admin","globalId":"AdminUser"},"admin::role":{"collectionName":"admin_roles","info":{"name":"Role","description":"","singularName":"role","pluralName":"roles","displayName":"Role"},"options":{},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"name":{"type":"string","minLength":1,"unique":true,"configurable":false,"required":true},"code":{"type":"string","minLength":1,"unique":true,"configurable":false,"required":true},"description":{"type":"string","configurable":false},"users":{"configurable":false,"type":"relation","relation":"manyToMany","mappedBy":"roles","target":"admin::user"},"permissions":{"configurable":false,"type":"relation","relation":"oneToMany","mappedBy":"role","target":"admin::permission"},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"kind":"collectionType","__schema__":{"collectionName":"admin_roles","info":{"name":"Role","description":"","singularName":"role","pluralName":"roles","displayName":"Role"},"options":{},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"name":{"type":"string","minLength":1,"unique":true,"configurable":false,"required":true},"code":{"type":"string","minLength":1,"unique":true,"configurable":false,"required":true},"description":{"type":"string","configurable":false},"users":{"configurable":false,"type":"relation","relation":"manyToMany","mappedBy":"roles","target":"admin::user"},"permissions":{"configurable":false,"type":"relation","relation":"oneToMany","mappedBy":"role","target":"admin::permission"}},"kind":"collectionType"},"modelType":"contentType","modelName":"role","connection":"default","uid":"admin::role","plugin":"admin","globalId":"AdminRole"},"admin::api-token":{"collectionName":"strapi_api_tokens","info":{"name":"Api Token","singularName":"api-token","pluralName":"api-tokens","displayName":"Api Token","description":""},"options":{},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"name":{"type":"string","minLength":1,"configurable":false,"required":true},"description":{"type":"string","minLength":1,"configurable":false,"required":false,"default":""},"type":{"type":"enumeration","enum":["read-only","full-access"],"configurable":false,"required":false,"default":"read-only"},"accessKey":{"type":"string","minLength":1,"configurable":false,"required":true},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"kind":"collectionType","__schema__":{"collectionName":"strapi_api_tokens","info":{"name":"Api Token","singularName":"api-token","pluralName":"api-tokens","displayName":"Api Token","description":""},"options":{},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"name":{"type":"string","minLength":1,"configurable":false,"required":true},"description":{"type":"string","minLength":1,"configurable":false,"required":false,"default":""},"type":{"type":"enumeration","enum":["read-only","full-access"],"configurable":false,"required":false,"default":"read-only"},"accessKey":{"type":"string","minLength":1,"configurable":false,"required":true}},"kind":"collectionType"},"modelType":"contentType","modelName":"api-token","connection":"default","uid":"admin::api-token","plugin":"admin","globalId":"AdminApiToken"},"plugin::upload.file":{"collectionName":"files","info":{"singularName":"file","pluralName":"files","displayName":"File","description":""},"options":{},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"name":{"type":"string","configurable":false,"required":true},"alternativeText":{"type":"string","configurable":false},"caption":{"type":"string","configurable":false},"width":{"type":"integer","configurable":false},"height":{"type":"integer","configurable":false},"formats":{"type":"json","configurable":false},"hash":{"type":"string","configurable":false,"required":true},"ext":{"type":"string","configurable":false},"mime":{"type":"string","configurable":false,"required":true},"size":{"type":"decimal","configurable":false,"required":true},"url":{"type":"string","configurable":false,"required":true},"previewUrl":{"type":"string","configurable":false},"provider":{"type":"string","configurable":false,"required":true},"provider_metadata":{"type":"json","configurable":false},"related":{"type":"relation","relation":"morphToMany","configurable":false},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"kind":"collectionType","__schema__":{"collectionName":"files","info":{"singularName":"file","pluralName":"files","displayName":"File","description":""},"options":{},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"name":{"type":"string","configurable":false,"required":true},"alternativeText":{"type":"string","configurable":false},"caption":{"type":"string","configurable":false},"width":{"type":"integer","configurable":false},"height":{"type":"integer","configurable":false},"formats":{"type":"json","configurable":false},"hash":{"type":"string","configurable":false,"required":true},"ext":{"type":"string","configurable":false},"mime":{"type":"string","configurable":false,"required":true},"size":{"type":"decimal","configurable":false,"required":true},"url":{"type":"string","configurable":false,"required":true},"previewUrl":{"type":"string","configurable":false},"provider":{"type":"string","configurable":false,"required":true},"provider_metadata":{"type":"json","configurable":false},"related":{"type":"relation","relation":"morphToMany","configurable":false}},"kind":"collectionType"},"modelType":"contentType","modelName":"file","connection":"default","uid":"plugin::upload.file","plugin":"upload","globalId":"UploadFile"},"plugin::i18n.locale":{"info":{"singularName":"locale","pluralName":"locales","collectionName":"locales","displayName":"Locale","description":""},"options":{"draftAndPublish":false},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"name":{"type":"string","min":1,"max":50,"configurable":false},"code":{"type":"string","unique":true,"configurable":false},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"kind":"collectionType","__schema__":{"info":{"singularName":"locale","pluralName":"locales","collectionName":"locales","displayName":"Locale","description":""},"options":{"draftAndPublish":false},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"name":{"type":"string","min":1,"max":50,"configurable":false},"code":{"type":"string","unique":true,"configurable":false}},"kind":"collectionType"},"modelType":"contentType","modelName":"locale","connection":"default","uid":"plugin::i18n.locale","plugin":"i18n","collectionName":"i18n_locale","globalId":"I18NLocale"},"plugin::users-permissions.permission":{"collectionName":"up_permissions","info":{"name":"permission","description":"","singularName":"permission","pluralName":"permissions","displayName":"Permission"},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"action":{"type":"string","required":true,"configurable":false},"role":{"type":"relation","relation":"manyToOne","target":"plugin::users-permissions.role","inversedBy":"permissions","configurable":false},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"kind":"collectionType","__schema__":{"collectionName":"up_permissions","info":{"name":"permission","description":"","singularName":"permission","pluralName":"permissions","displayName":"Permission"},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"action":{"type":"string","required":true,"configurable":false},"role":{"type":"relation","relation":"manyToOne","target":"plugin::users-permissions.role","inversedBy":"permissions","configurable":false}},"kind":"collectionType"},"modelType":"contentType","modelName":"permission","connection":"default","uid":"plugin::users-permissions.permission","plugin":"users-permissions","globalId":"UsersPermissionsPermission"},"plugin::users-permissions.role":{"collectionName":"up_roles","info":{"name":"role","description":"","singularName":"role","pluralName":"roles","displayName":"Role"},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"name":{"type":"string","minLength":3,"required":true,"configurable":false},"description":{"type":"string","configurable":false},"type":{"type":"string","unique":true,"configurable":false},"permissions":{"type":"relation","relation":"oneToMany","target":"plugin::users-permissions.permission","mappedBy":"role","configurable":false},"users":{"type":"relation","relation":"oneToMany","target":"plugin::users-permissions.user","mappedBy":"role","configurable":false},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"kind":"collectionType","__schema__":{"collectionName":"up_roles","info":{"name":"role","description":"","singularName":"role","pluralName":"roles","displayName":"Role"},"pluginOptions":{"content-manager":{"visible":false},"content-type-builder":{"visible":false}},"attributes":{"name":{"type":"string","minLength":3,"required":true,"configurable":false},"description":{"type":"string","configurable":false},"type":{"type":"string","unique":true,"configurable":false},"permissions":{"type":"relation","relation":"oneToMany","target":"plugin::users-permissions.permission","mappedBy":"role","configurable":false},"users":{"type":"relation","relation":"oneToMany","target":"plugin::users-permissions.user","mappedBy":"role","configurable":false}},"kind":"collectionType"},"modelType":"contentType","modelName":"role","connection":"default","uid":"plugin::users-permissions.role","plugin":"users-permissions","globalId":"UsersPermissionsRole"},"plugin::users-permissions.user":{"collectionName":"up_users","info":{"name":"user","description":"","singularName":"user","pluralName":"users","displayName":"User"},"options":{"draftAndPublish":false,"timestamps":true},"attributes":{"username":{"type":"string","minLength":3,"unique":true,"configurable":false,"required":true},"email":{"type":"email","minLength":6,"configurable":false,"required":true},"provider":{"type":"string","configurable":false},"password":{"type":"password","minLength":6,"configurable":false,"private":true},"resetPasswordToken":{"type":"string","configurable":false,"private":true},"confirmationToken":{"type":"string","configurable":false,"private":true},"confirmed":{"type":"boolean","default":false,"configurable":false},"blocked":{"type":"boolean","default":false,"configurable":false},"role":{"type":"relation","relation":"manyToOne","target":"plugin::users-permissions.role","inversedBy":"users","configurable":false},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"config":{"attributes":{"resetPasswordToken":{"hidden":true},"confirmationToken":{"hidden":true},"provider":{"hidden":true}}},"kind":"collectionType","__schema__":{"collectionName":"up_users","info":{"name":"user","description":"","singularName":"user","pluralName":"users","displayName":"User"},"options":{"draftAndPublish":false,"timestamps":true},"attributes":{"username":{"type":"string","minLength":3,"unique":true,"configurable":false,"required":true},"email":{"type":"email","minLength":6,"configurable":false,"required":true},"provider":{"type":"string","configurable":false},"password":{"type":"password","minLength":6,"configurable":false,"private":true},"resetPasswordToken":{"type":"string","configurable":false,"private":true},"confirmationToken":{"type":"string","configurable":false,"private":true},"confirmed":{"type":"boolean","default":false,"configurable":false},"blocked":{"type":"boolean","default":false,"configurable":false},"role":{"type":"relation","relation":"manyToOne","target":"plugin::users-permissions.role","inversedBy":"users","configurable":false}},"kind":"collectionType"},"modelType":"contentType","modelName":"user","connection":"default","uid":"plugin::users-permissions.user","plugin":"users-permissions","globalId":"UsersPermissionsUser"},"api::code-challenge.code-challenge":{"kind":"collectionType","collectionName":"code_challenges","info":{"singularName":"code-challenge","pluralName":"code-challenges","displayName":"CodeChallenge","description":""},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"startingCode":{"pluginOptions":{},"type":"richtext"},"tests":{"displayName":"CodeChallengeTest","type":"component","repeatable":true,"pluginOptions":{},"component":"challenge.code-challenge-test"},"prompt":{"pluginOptions":{},"type":"richtext","required":true},"internalLabel":{"pluginOptions":{},"type":"string","required":true,"private":true},"internalNotes":{"pluginOptions":{},"type":"text","private":true},"hints":{"displayName":"ChallengeHints","type":"component","repeatable":true,"pluginOptions":{},"component":"challenge.challenge-hints"},"getStartingCodeFromPreviousChallenge":{"pluginOptions":{},"type":"boolean","default":false},"category":{"type":"relation","relation":"oneToOne","target":"api::sublesson.sublesson"},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"publishedAt":{"type":"datetime","configurable":false,"writable":true,"visible":false},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"__schema__":{"collectionName":"code_challenges","info":{"singularName":"code-challenge","pluralName":"code-challenges","displayName":"CodeChallenge","description":""},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"startingCode":{"pluginOptions":{},"type":"richtext"},"tests":{"displayName":"CodeChallengeTest","type":"component","repeatable":true,"pluginOptions":{},"component":"challenge.code-challenge-test"},"prompt":{"pluginOptions":{},"type":"richtext","required":true},"internalLabel":{"pluginOptions":{},"type":"string","required":true,"private":true},"internalNotes":{"pluginOptions":{},"type":"text","private":true},"hints":{"displayName":"ChallengeHints","type":"component","repeatable":true,"pluginOptions":{},"component":"challenge.challenge-hints"},"getStartingCodeFromPreviousChallenge":{"pluginOptions":{},"type":"boolean","default":false},"category":{"type":"relation","relation":"oneToOne","target":"api::sublesson.sublesson"}},"kind":"collectionType"},"modelType":"contentType","modelName":"code-challenge","connection":"default","uid":"api::code-challenge.code-challenge","apiName":"code-challenge","globalId":"CodeChallenge","actions":{},"lifecycles":{}},"api::course.course":{"kind":"collectionType","collectionName":"courses","info":{"singularName":"course","pluralName":"courses","displayName":"Course","description":""},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"name":{"type":"string","required":true},"slug":{"type":"string","required":true,"unique":true},"modules":{"type":"relation","relation":"oneToMany","target":"api::module.module"},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"publishedAt":{"type":"datetime","configurable":false,"writable":true,"visible":false},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"__schema__":{"collectionName":"courses","info":{"singularName":"course","pluralName":"courses","displayName":"Course","description":""},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"name":{"type":"string","required":true},"slug":{"type":"string","required":true,"unique":true},"modules":{"type":"relation","relation":"oneToMany","target":"api::module.module"}},"kind":"collectionType"},"modelType":"contentType","modelName":"course","connection":"default","uid":"api::course.course","apiName":"course","globalId":"Course","actions":{},"lifecycles":{}},"api::lesson.lesson":{"kind":"collectionType","collectionName":"lessons","info":{"singularName":"lesson","pluralName":"lessons","displayName":"Lesson","description":""},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"slug":{"type":"string","required":true,"unique":true},"name":{"type":"string","required":true,"unique":true},"isHard":{"type":"boolean","default":false},"internalNotes":{"type":"text"},"externalResources":{"displayName":"ExternalResource","type":"component","repeatable":true,"component":"content.external-resource"},"sublessons":{"type":"relation","relation":"oneToMany","target":"api::sublesson.sublesson","mappedBy":"lesson"},"module":{"type":"relation","relation":"manyToOne","target":"api::module.module","inversedBy":"lessons"},"syntaxEntry":{"type":"relation","relation":"oneToOne","target":"api::syntax-entry.syntax-entry","inversedBy":"lesson"},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"publishedAt":{"type":"datetime","configurable":false,"writable":true,"visible":false},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"__schema__":{"collectionName":"lessons","info":{"singularName":"lesson","pluralName":"lessons","displayName":"Lesson","description":""},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"slug":{"type":"string","required":true,"unique":true},"name":{"type":"string","required":true,"unique":true},"isHard":{"type":"boolean","default":false},"internalNotes":{"type":"text"},"externalResources":{"displayName":"ExternalResource","type":"component","repeatable":true,"component":"content.external-resource"},"sublessons":{"type":"relation","relation":"oneToMany","target":"api::sublesson.sublesson","mappedBy":"lesson"},"module":{"type":"relation","relation":"manyToOne","target":"api::module.module","inversedBy":"lessons"},"syntaxEntry":{"type":"relation","relation":"oneToOne","target":"api::syntax-entry.syntax-entry","inversedBy":"lesson"}},"kind":"collectionType"},"modelType":"contentType","modelName":"lesson","connection":"default","uid":"api::lesson.lesson","apiName":"lesson","globalId":"Lesson","actions":{},"lifecycles":{}},"api::module.module":{"kind":"collectionType","collectionName":"modules","info":{"singularName":"module","pluralName":"modules","displayName":"Module","description":""},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"name":{"type":"string","required":true},"lessons":{"type":"relation","relation":"oneToMany","target":"api::lesson.lesson","mappedBy":"module"},"moduleLessons":{"displayName":"ModuleLesson","type":"component","repeatable":true,"component":"misc.module-lesson"},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"publishedAt":{"type":"datetime","configurable":false,"writable":true,"visible":false},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"__schema__":{"collectionName":"modules","info":{"singularName":"module","pluralName":"modules","displayName":"Module","description":""},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"name":{"type":"string","required":true},"lessons":{"type":"relation","relation":"oneToMany","target":"api::lesson.lesson","mappedBy":"module"},"moduleLessons":{"displayName":"ModuleLesson","type":"component","repeatable":true,"component":"misc.module-lesson"}},"kind":"collectionType"},"modelType":"contentType","modelName":"module","connection":"default","uid":"api::module.module","apiName":"module","globalId":"Module","actions":{},"lifecycles":{}},"api::multiple-choice-challenge.multiple-choice-challenge":{"kind":"collectionType","collectionName":"multiple_choice_challenges","info":{"singularName":"multiple-choice-challenge","pluralName":"multiple-choice-challenges","displayName":"MultipleChoiceChallenge"},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"options":{"displayName":"MultipleChoiceOptions","type":"component","repeatable":true,"component":"challenge.multiple-choice-options"},"prompt":{"type":"richtext","required":true},"internalLabel":{"type":"string","required":true},"canSelectMultipleOptions":{"type":"boolean","default":false},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"publishedAt":{"type":"datetime","configurable":false,"writable":true,"visible":false},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"__schema__":{"collectionName":"multiple_choice_challenges","info":{"singularName":"multiple-choice-challenge","pluralName":"multiple-choice-challenges","displayName":"MultipleChoiceChallenge"},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"options":{"displayName":"MultipleChoiceOptions","type":"component","repeatable":true,"component":"challenge.multiple-choice-options"},"prompt":{"type":"richtext","required":true},"internalLabel":{"type":"string","required":true},"canSelectMultipleOptions":{"type":"boolean","default":false}},"kind":"collectionType"},"modelType":"contentType","modelName":"multiple-choice-challenge","connection":"default","uid":"api::multiple-choice-challenge.multiple-choice-challenge","apiName":"multiple-choice-challenge","globalId":"MultipleChoiceChallenge","actions":{},"lifecycles":{}},"api::sublesson.sublesson":{"kind":"collectionType","collectionName":"sublessons","info":{"singularName":"sublesson","pluralName":"sublessons","displayName":"Sublesson","description":""},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"name":{"type":"string","required":true},"description":{"type":"richtext","required":true},"internalNotes":{"type":"text","private":true},"lesson":{"type":"relation","relation":"manyToOne","target":"api::lesson.lesson","inversedBy":"sublessons"},"challenges":{"displayName":"Challenges","type":"component","repeatable":true,"component":"content.challenges"},"syntaxEntry":{"type":"relation","relation":"oneToOne","target":"api::syntax-entry.syntax-entry","inversedBy":"sublesson"},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"publishedAt":{"type":"datetime","configurable":false,"writable":true,"visible":false},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"__schema__":{"collectionName":"sublessons","info":{"singularName":"sublesson","pluralName":"sublessons","displayName":"Sublesson","description":""},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"name":{"type":"string","required":true},"description":{"type":"richtext","required":true},"internalNotes":{"type":"text","private":true},"lesson":{"type":"relation","relation":"manyToOne","target":"api::lesson.lesson","inversedBy":"sublessons"},"challenges":{"displayName":"Challenges","type":"component","repeatable":true,"component":"content.challenges"},"syntaxEntry":{"type":"relation","relation":"oneToOne","target":"api::syntax-entry.syntax-entry","inversedBy":"sublesson"}},"kind":"collectionType"},"modelType":"contentType","modelName":"sublesson","connection":"default","uid":"api::sublesson.sublesson","apiName":"sublesson","globalId":"Sublesson","actions":{},"lifecycles":{}},"api::syntax-entry.syntax-entry":{"kind":"collectionType","collectionName":"syntax_entries","info":{"singularName":"syntax-entry","pluralName":"syntax-entries","displayName":"SyntaxEntry"},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"content":{"type":"richtext","required":true},"name":{"type":"string","required":true},"internalNotes":{"type":"text"},"maxWidth":{"type":"integer","default":450},"sublesson":{"type":"relation","relation":"oneToOne","target":"api::sublesson.sublesson","inversedBy":"syntaxEntry"},"lesson":{"type":"relation","relation":"oneToOne","target":"api::lesson.lesson","inversedBy":"syntaxEntry"},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"publishedAt":{"type":"datetime","configurable":false,"writable":true,"visible":false},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"__schema__":{"collectionName":"syntax_entries","info":{"singularName":"syntax-entry","pluralName":"syntax-entries","displayName":"SyntaxEntry"},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"content":{"type":"richtext","required":true},"name":{"type":"string","required":true},"internalNotes":{"type":"text"},"maxWidth":{"type":"integer","default":450},"sublesson":{"type":"relation","relation":"oneToOne","target":"api::sublesson.sublesson","inversedBy":"syntaxEntry"},"lesson":{"type":"relation","relation":"oneToOne","target":"api::lesson.lesson","inversedBy":"syntaxEntry"}},"kind":"collectionType"},"modelType":"contentType","modelName":"syntax-entry","connection":"default","uid":"api::syntax-entry.syntax-entry","apiName":"syntax-entry","globalId":"SyntaxEntry","actions":{},"lifecycles":{}},"api::translation-group.translation-group":{"kind":"singleType","collectionName":"translation_groups","info":{"singularName":"translation-group","pluralName":"translation-groups","displayName":"translationGroup","description":""},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"aboutPage":{"type":"component","repeatable":false,"component":"translations.about-page"},"coreComponents":{"type":"component","repeatable":false,"component":"translations.core-components"},"createdAt":{"type":"datetime"},"updatedAt":{"type":"datetime"},"publishedAt":{"type":"datetime","configurable":false,"writable":true,"visible":false},"createdBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true},"updatedBy":{"type":"relation","relation":"oneToOne","target":"admin::user","configurable":false,"writable":false,"visible":false,"useJoinTable":false,"private":true}},"__schema__":{"collectionName":"translation_groups","info":{"singularName":"translation-group","pluralName":"translation-groups","displayName":"translationGroup","description":""},"options":{"draftAndPublish":true},"pluginOptions":{},"attributes":{"aboutPage":{"type":"component","repeatable":false,"component":"translations.about-page"},"coreComponents":{"type":"component","repeatable":false,"component":"translations.core-components"}},"kind":"singleType"},"modelType":"contentType","modelName":"translation-group","connection":"default","uid":"api::translation-group.translation-group","apiName":"translation-group","globalId":"TranslationGroup","actions":{},"lifecycles":{}}} object \N \N +8 plugin_content_manager_configuration_content_types::plugin::users-permissions.permission {"uid":"plugin::users-permissions.permission","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"action","defaultSortBy":"action","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"action":{"edit":{"label":"Action","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Action","searchable":true,"sortable":true}},"role":{"edit":{"label":"Role","description":"","placeholder":"","visible":true,"editable":true,"mainField":"name"},"list":{"label":"Role","searchable":true,"sortable":true}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","action","role","createdAt"],"editRelations":["role"],"edit":[[{"name":"action","size":6}]]}} object \N \N +11 plugin_upload_settings {"sizeOptimization":true,"responsiveDimensions":true,"autoOrientation":false} object \N \N +9 plugin_content_manager_configuration_content_types::plugin::users-permissions.user {"uid":"plugin::users-permissions.user","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"username","defaultSortBy":"username","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"username":{"edit":{"label":"Username","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Username","searchable":true,"sortable":true}},"email":{"edit":{"label":"Email","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Email","searchable":true,"sortable":true}},"provider":{"edit":{"label":"Provider","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"Provider","searchable":true,"sortable":true}},"password":{"edit":{"label":"Password","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Password","searchable":true,"sortable":true}},"resetPasswordToken":{"edit":{"label":"ResetPasswordToken","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"ResetPasswordToken","searchable":true,"sortable":true}},"confirmationToken":{"edit":{"label":"ConfirmationToken","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"ConfirmationToken","searchable":true,"sortable":true}},"confirmed":{"edit":{"label":"Confirmed","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Confirmed","searchable":true,"sortable":true}},"blocked":{"edit":{"label":"Blocked","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Blocked","searchable":true,"sortable":true}},"role":{"edit":{"label":"Role","description":"","placeholder":"","visible":true,"editable":true,"mainField":"name"},"list":{"label":"Role","searchable":true,"sortable":true}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","username","email","confirmed"],"editRelations":["role"],"edit":[[{"name":"username","size":6},{"name":"email","size":6}],[{"name":"password","size":6},{"name":"confirmed","size":4}],[{"name":"blocked","size":4}]]}} object \N \N +10 plugin_content_manager_configuration_content_types::plugin::users-permissions.role {"uid":"plugin::users-permissions.role","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"name","defaultSortBy":"name","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"name":{"edit":{"label":"Name","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Name","searchable":true,"sortable":true}},"description":{"edit":{"label":"Description","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Description","searchable":true,"sortable":true}},"type":{"edit":{"label":"Type","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Type","searchable":true,"sortable":true}},"permissions":{"edit":{"label":"Permissions","description":"","placeholder":"","visible":true,"editable":true,"mainField":"action"},"list":{"label":"Permissions","searchable":false,"sortable":false}},"users":{"edit":{"label":"Users","description":"","placeholder":"","visible":true,"editable":true,"mainField":"username"},"list":{"label":"Users","searchable":false,"sortable":false}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","name","description","type"],"editRelations":["permissions","users"],"edit":[[{"name":"name","size":6},{"name":"description","size":6}],[{"name":"type","size":6}]]}} object \N \N +12 plugin_i18n_default_locale "en" string \N \N +13 plugin_users-permissions_grant {"email":{"enabled":true,"icon":"envelope"},"discord":{"enabled":false,"icon":"discord","key":"","secret":"","callback":"//api/auth/discord/callback","scope":["identify","email"]},"facebook":{"enabled":false,"icon":"facebook-square","key":"","secret":"","callback":"//api/auth/facebook/callback","scope":["email"]},"google":{"enabled":false,"icon":"google","key":"","secret":"","callback":"//api/auth/google/callback","scope":["email"]},"github":{"enabled":false,"icon":"github","key":"","secret":"","callback":"//api/auth/github/callback","scope":["user","user:email"]},"microsoft":{"enabled":false,"icon":"windows","key":"","secret":"","callback":"//api/auth/microsoft/callback","scope":["user.read"]},"twitter":{"enabled":false,"icon":"twitter","key":"","secret":"","callback":"//api/auth/twitter/callback"},"instagram":{"enabled":false,"icon":"instagram","key":"","secret":"","callback":"//api/auth/instagram/callback","scope":["user_profile"]},"vk":{"enabled":false,"icon":"vk","key":"","secret":"","callback":"//api/auth/vk/callback","scope":["email"]},"twitch":{"enabled":false,"icon":"twitch","key":"","secret":"","callback":"//api/auth/twitch/callback","scope":["user:read:email"]},"linkedin":{"enabled":false,"icon":"linkedin","key":"","secret":"","callback":"//api/auth/linkedin/callback","scope":["r_liteprofile","r_emailaddress"]},"cognito":{"enabled":false,"icon":"aws","key":"","secret":"","subdomain":"my.subdomain.com","callback":"//api/auth/cognito/callback","scope":["email","openid","profile"]},"reddit":{"enabled":false,"icon":"reddit","key":"","secret":"","state":true,"callback":"//api/auth/reddit/callback","scope":["identity"]},"auth0":{"enabled":false,"icon":"","key":"","secret":"","subdomain":"my-tenant.eu","callback":"//api/auth/auth0/callback","scope":["openid","email","profile"]},"cas":{"enabled":false,"icon":"book","key":"","secret":"","callback":"//api/auth/cas/callback","scope":["openid email"],"subdomain":"my.subdomain.com/cas"}} object \N \N +14 plugin_users-permissions_email {"reset_password":{"display":"Email.template.reset_password","icon":"sync","options":{"from":{"name":"Administration Panel","email":"no-reply@strapi.io"},"response_email":"","object":"Reset password","message":"
We heard that you lost your password. Sorry about that!
\\n\\nBut don’t worry! You can use the following link to reset your password:
\\n<%= URL %>?code=<%= TOKEN %>
\\n\\nThanks.
"}},"email_confirmation":{"display":"Email.template.email_confirmation","icon":"check-square","options":{"from":{"name":"Administration Panel","email":"no-reply@strapi.io"},"response_email":"","object":"Account confirmation","message":"Thank you for registering!
\\n\\nYou have to confirm your email address. Please click on the link below.
\\n\\n<%= URL %>?confirmation=<%= CODE %>
\\n\\nThanks.
"}}} object \N \N +15 plugin_users-permissions_advanced {"unique_email":true,"allow_register":true,"email_confirmation":false,"email_reset_password":null,"email_confirmation_redirection":null,"default_role":"authenticated"} object \N \N +20 plugin_content_manager_configuration_components::misc.module-lesson {"uid":"misc.module-lesson","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"id","defaultSortBy":"id","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":false,"sortable":false}},"lesson":{"edit":{"label":"Lesson","description":"","placeholder":"","visible":true,"editable":true,"mainField":"slug"},"list":{"label":"Lesson","searchable":true,"sortable":true}}},"layouts":{"list":["id","lesson"],"edit":[[{"name":"lesson","size":6}]],"editRelations":[]},"isComponent":true} object \N \N +19 plugin_content_manager_configuration_components::challenge.code-challenge-test {"uid":"challenge.code-challenge-test","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"label","defaultSortBy":"label","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":false,"sortable":false}},"label":{"edit":{"label":"Label","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Label","searchable":true,"sortable":true}},"internalTest":{"edit":{"label":"InternalTest","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"InternalTest","searchable":false,"sortable":false}},"furtherExplanation":{"edit":{"label":"FurtherExplanation","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"FurtherExplanation","searchable":false,"sortable":false}}},"layouts":{"list":["id","label"],"edit":[[{"name":"label","size":6}],[{"name":"internalTest","size":12}],[{"name":"furtherExplanation","size":12}]],"editRelations":[]},"isComponent":true} object \N \N +29 plugin_content_manager_configuration_content_types::api::code-challenge.code-challenge {"uid":"api::code-challenge.code-challenge","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":100,"mainField":"internalLabel","defaultSortBy":"internalLabel","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"startingCode":{"edit":{"label":"StartingCode","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"StartingCode","searchable":false,"sortable":false}},"tests":{"edit":{"label":"Tests","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Tests","searchable":false,"sortable":false}},"prompt":{"edit":{"label":"Prompt","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Prompt","searchable":false,"sortable":false}},"internalLabel":{"edit":{"label":"InternalLabel","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"InternalLabel","searchable":true,"sortable":true}},"internalNotes":{"edit":{"label":"InternalNotes","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"InternalNotes","searchable":true,"sortable":true}},"hints":{"edit":{"label":"Hints","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Hints","searchable":false,"sortable":false}},"getStartingCodeFromPreviousChallenge":{"edit":{"label":"GetStartingCodeFromPreviousChallenge","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"GetStartingCodeFromPreviousChallenge","searchable":true,"sortable":true}},"category":{"edit":{"label":"Category","description":"","placeholder":"","visible":true,"editable":true,"mainField":"name"},"list":{"label":"Category","searchable":true,"sortable":true}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"Created_at","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"edit":[[{"name":"internalLabel","size":6},{"name":"internalNotes","size":6}],[{"name":"prompt","size":12}],[{"name":"startingCode","size":12}],[{"name":"tests","size":12}],[{"name":"hints","size":12}],[{"name":"getStartingCodeFromPreviousChallenge","size":4}]],"editRelations":["category"],"list":["internalLabel","category","createdAt","internalNotes"]}} object \N \N +22 plugin_content_manager_configuration_components::challenge.challenge-hints {"uid":"challenge.challenge-hints","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"id","defaultSortBy":"id","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":false,"sortable":false}},"text":{"edit":{"label":"Text","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Text","searchable":false,"sortable":false}},"recommendedTimeBeforeViewing":{"edit":{"label":"RecommendedTimeBeforeViewing","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"RecommendedTimeBeforeViewing","searchable":true,"sortable":true}}},"layouts":{"list":["id","recommendedTimeBeforeViewing"],"edit":[[{"name":"text","size":12}],[{"name":"recommendedTimeBeforeViewing","size":4}]],"editRelations":[]},"isComponent":true} object \N \N +27 plugin_content_manager_configuration_content_types::api::module.module {"uid":"api::module.module","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"name","defaultSortBy":"name","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"name":{"edit":{"label":"Name","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Name","searchable":true,"sortable":true}},"lessons":{"edit":{"label":"Lessons","description":"","placeholder":"","visible":true,"editable":true,"mainField":"slug"},"list":{"label":"Lessons","searchable":false,"sortable":false}},"moduleLessons":{"edit":{"label":"ModuleLessons","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"ModuleLessons","searchable":false,"sortable":false}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","name","lessons","createdAt"],"editRelations":["lessons"],"edit":[[{"name":"name","size":6}],[{"name":"moduleLessons","size":12}]]}} object \N \N +23 plugin_content_manager_configuration_content_types::api::lesson.lesson {"uid":"api::lesson.lesson","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":100,"mainField":"slug","defaultSortBy":"slug","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"slug":{"edit":{"label":"Slug","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Slug","searchable":true,"sortable":true}},"name":{"edit":{"label":"Name","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Name","searchable":true,"sortable":true}},"isHard":{"edit":{"label":"IsHard","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"IsHard","searchable":true,"sortable":true}},"internalNotes":{"edit":{"label":"InternalNotes","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"InternalNotes","searchable":true,"sortable":true}},"externalResources":{"edit":{"label":"ExternalResources","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"ExternalResources","searchable":false,"sortable":false}},"sublessons":{"edit":{"label":"Sublessons","description":"","placeholder":"","visible":true,"editable":true,"mainField":"name"},"list":{"label":"Sublessons","searchable":false,"sortable":false}},"module":{"edit":{"label":"Module","description":"","placeholder":"","visible":true,"editable":true,"mainField":"name"},"list":{"label":"Module","searchable":true,"sortable":true}},"syntaxEntry":{"edit":{"label":"SyntaxEntry","description":"","placeholder":"","visible":true,"editable":true,"mainField":"name"},"list":{"label":"SyntaxEntry","searchable":true,"sortable":true}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","slug","name","isHard"],"edit":[[{"name":"name","size":6},{"name":"slug","size":6}],[{"name":"isHard","size":4},{"name":"internalNotes","size":6}],[{"name":"externalResources","size":12}]],"editRelations":["module","syntaxEntry","sublessons"]}} object \N \N +16 core_admin_auth {"providers":{"autoRegister":false,"defaultRole":null}} object \N \N +28 plugin_content_manager_configuration_content_types::api::syntax-entry.syntax-entry {"uid":"api::syntax-entry.syntax-entry","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"name","defaultSortBy":"name","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"content":{"edit":{"label":"Content","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Content","searchable":false,"sortable":false}},"name":{"edit":{"label":"Name","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Name","searchable":true,"sortable":true}},"internalNotes":{"edit":{"label":"InternalNotes","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"InternalNotes","searchable":true,"sortable":true}},"maxWidth":{"edit":{"label":"MaxWidth","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"MaxWidth","searchable":true,"sortable":true}},"sublesson":{"edit":{"label":"Sublesson","description":"","placeholder":"","visible":true,"editable":true,"mainField":"name"},"list":{"label":"Sublesson","searchable":true,"sortable":true}},"lesson":{"edit":{"label":"Lesson","description":"","placeholder":"","visible":true,"editable":true,"mainField":"slug"},"list":{"label":"Lesson","searchable":true,"sortable":true}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"edit":[[{"name":"internalNotes","size":6}],[{"name":"name","size":6},{"name":"maxWidth","size":4}],[{"name":"content","size":12}]],"editRelations":["lesson","sublesson"],"list":["id","name","internalNotes","maxWidth"]}} object \N \N +18 plugin_content_manager_configuration_components::challenge.multiple-choice-options {"uid":"challenge.multiple-choice-options","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"id","defaultSortBy":"id","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":false,"sortable":false}},"text":{"edit":{"label":"Text","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Text","searchable":false,"sortable":false}},"isCorrect":{"edit":{"label":"IsCorrect","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"IsCorrect","searchable":true,"sortable":true}},"incorrectChoiceExplanation":{"edit":{"label":"IncorrectChoiceExplanation","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"IncorrectChoiceExplanation","searchable":false,"sortable":false}}},"layouts":{"list":["id","isCorrect"],"edit":[[{"name":"isCorrect","size":4}],[{"name":"text","size":12}],[{"name":"incorrectChoiceExplanation","size":12}]],"editRelations":[]},"isComponent":true} object \N \N +24 plugin_content_manager_configuration_content_types::api::course.course {"uid":"api::course.course","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"name","defaultSortBy":"name","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"name":{"edit":{"label":"Name","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Name","searchable":true,"sortable":true}},"slug":{"edit":{"label":"Slug","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Slug","searchable":true,"sortable":true}},"modules":{"edit":{"label":"Modules","description":"","placeholder":"","visible":true,"editable":true,"mainField":"name"},"list":{"label":"Modules","searchable":false,"sortable":false}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","name","slug","modules"],"editRelations":["modules"],"edit":[[{"name":"name","size":6},{"name":"slug","size":6}]]}} object \N \N +21 plugin_content_manager_configuration_components::content.external-resource {"uid":"content.external-resource","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"name","defaultSortBy":"name","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":false,"sortable":false}},"name":{"edit":{"label":"Name","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Name","searchable":true,"sortable":true}},"link":{"edit":{"label":"Link","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Link","searchable":true,"sortable":true}},"type":{"edit":{"label":"Type","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Type","searchable":true,"sortable":true}}},"layouts":{"list":["id","name","link","type"],"edit":[[{"name":"name","size":6},{"name":"link","size":6}],[{"name":"type","size":6}]],"editRelations":[]},"isComponent":true} object \N \N +25 plugin_content_manager_configuration_content_types::api::sublesson.sublesson {"uid":"api::sublesson.sublesson","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":100,"mainField":"name","defaultSortBy":"name","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"name":{"edit":{"label":"Name","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Name","searchable":true,"sortable":true}},"description":{"edit":{"label":"Description","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Description","searchable":false,"sortable":false}},"internalNotes":{"edit":{"label":"InternalNotes","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"InternalNotes","searchable":true,"sortable":true}},"lesson":{"edit":{"label":"Lesson","description":"","placeholder":"","visible":true,"editable":true,"mainField":"slug"},"list":{"label":"Lesson","searchable":true,"sortable":true}},"challenges":{"edit":{"label":"Challenges","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Challenges","searchable":false,"sortable":false}},"syntaxEntry":{"edit":{"label":"SyntaxEntry","description":"","placeholder":"","visible":true,"editable":true,"mainField":"name"},"list":{"label":"SyntaxEntry","searchable":true,"sortable":true}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","name","lesson","internalNotes"],"edit":[[{"name":"name","size":6}],[{"name":"description","size":12}],[{"name":"challenges","size":12}],[{"name":"internalNotes","size":6}]],"editRelations":["lesson","syntaxEntry"]}} object \N \N +17 plugin_content_manager_configuration_components::content.challenges {"uid":"content.challenges","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"id","defaultSortBy":"id","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":false,"sortable":false}},"codeChallenge":{"edit":{"label":"CodeChallenge","description":"","placeholder":"","visible":true,"editable":true,"mainField":"internalLabel"},"list":{"label":"CodeChallenge","searchable":true,"sortable":true}},"multipleChoiceChallenge":{"edit":{"label":"MultipleChoiceChallenge","description":"","placeholder":"","visible":true,"editable":true,"mainField":"internalLabel"},"list":{"label":"MultipleChoiceChallenge","searchable":true,"sortable":true}}},"layouts":{"list":["id","codeChallenge","multipleChoiceChallenge"],"edit":[[{"name":"codeChallenge","size":6},{"name":"multipleChoiceChallenge","size":6}]],"editRelations":[]},"isComponent":true} object \N \N +26 plugin_content_manager_configuration_content_types::api::multiple-choice-challenge.multiple-choice-challenge {"uid":"api::multiple-choice-challenge.multiple-choice-challenge","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"internalLabel","defaultSortBy":"internalLabel","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"options":{"edit":{"label":"Options","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Options","searchable":false,"sortable":false}},"prompt":{"edit":{"label":"Prompt","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Prompt","searchable":false,"sortable":false}},"internalLabel":{"edit":{"label":"InternalLabel","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"InternalLabel","searchable":true,"sortable":true}},"canSelectMultipleOptions":{"edit":{"label":"CanSelectMultipleOptions","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"CanSelectMultipleOptions","searchable":true,"sortable":true}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","internalLabel","canSelectMultipleOptions","createdAt"],"edit":[[{"name":"internalLabel","size":6}],[{"name":"prompt","size":12}],[{"name":"canSelectMultipleOptions","size":4}],[{"name":"options","size":12}]],"editRelations":[]}} object \N \N +44 plugin_content_manager_configuration_components::translations.about-page {"uid":"translations.about-page","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"id","defaultSortBy":"id","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":false,"sortable":false}},"title":{"edit":{"label":"Title","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Title","searchable":true,"sortable":true}}},"layouts":{"list":["id","title"],"edit":[[{"name":"title","size":6}]],"editRelations":[]},"isComponent":true} object \N \N +46 plugin_content_manager_configuration_content_types::api::translation-group.translation-group {"uid":"api::translation-group.translation-group","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"id","defaultSortBy":"id","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":true,"sortable":true}},"aboutPage":{"edit":{"label":"AboutPage","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"AboutPage","searchable":false,"sortable":false}},"coreComponents":{"edit":{"label":"CoreComponents","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"CoreComponents","searchable":false,"sortable":false}},"createdAt":{"edit":{"label":"CreatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"CreatedAt","searchable":true,"sortable":true}},"updatedAt":{"edit":{"label":"UpdatedAt","description":"","placeholder":"","visible":false,"editable":true},"list":{"label":"UpdatedAt","searchable":true,"sortable":true}}},"layouts":{"list":["id","createdAt","updatedAt"],"editRelations":[],"edit":[[{"name":"aboutPage","size":12}],[{"name":"coreComponents","size":12}]]}} object \N \N +45 plugin_content_manager_configuration_components::translations.core-components {"uid":"translations.core-components","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"backButton","defaultSortBy":"backButton","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":false,"sortable":false}},"backButton":{"edit":{"label":"BackButton","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"BackButton","searchable":true,"sortable":true}},"nextButton":{"edit":{"label":"NextButton","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"NextButton","searchable":true,"sortable":true}},"wefwe":{"edit":{"label":"Wefwe","description":"","placeholder":"","visible":true,"editable":true},"list":{"label":"Wefwe","searchable":false,"sortable":false}}},"layouts":{"list":["id","backButton","nextButton"],"edit":[[{"name":"backButton","size":6},{"name":"nextButton","size":6}],[{"name":"wefwe","size":12}]],"editRelations":[]},"isComponent":true} object \N \N +47 plugin_content_manager_configuration_components::translations.within-component {"uid":"translations.within-component","settings":{"bulkable":true,"filterable":true,"searchable":true,"pageSize":10,"mainField":"id","defaultSortBy":"id","defaultSortOrder":"ASC"},"metadatas":{"id":{"edit":{},"list":{"label":"Id","searchable":false,"sortable":false}}},"layouts":{"list":["id"],"edit":[],"editRelations":[]},"isComponent":true} object \N \N +\. + + +-- +-- Data for Name: strapi_database_schema; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.strapi_database_schema (id, schema, "time", hash) FROM stdin; +87 {"tables":[{"name":"strapi_core_store_settings","indexes":[],"foreignKeys":[],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"key","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"value","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"type","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"environment","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"tag","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false}]},{"name":"strapi_webhooks","indexes":[],"foreignKeys":[],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"name","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"url","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"headers","type":"jsonb","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"events","type":"jsonb","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"enabled","type":"boolean","args":[],"defaultTo":null,"notNullable":false,"unsigned":false}]},{"name":"admin_permissions","indexes":[{"name":"admin_permissions_created_by_id_fk","columns":["created_by_id"]},{"name":"admin_permissions_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"admin_permissions_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"admin_permissions_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"action","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"subject","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"properties","type":"jsonb","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"conditions","type":"jsonb","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"admin_users","indexes":[{"name":"admin_users_created_by_id_fk","columns":["created_by_id"]},{"name":"admin_users_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"admin_users_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"admin_users_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"firstname","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"lastname","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"username","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"email","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"password","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"reset_password_token","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"registration_token","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"is_active","type":"boolean","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"blocked","type":"boolean","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"prefered_language","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"admin_roles","indexes":[{"name":"admin_roles_created_by_id_fk","columns":["created_by_id"]},{"name":"admin_roles_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"admin_roles_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"admin_roles_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"name","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"code","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"description","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"strapi_api_tokens","indexes":[{"name":"strapi_api_tokens_created_by_id_fk","columns":["created_by_id"]},{"name":"strapi_api_tokens_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"strapi_api_tokens_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"strapi_api_tokens_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"name","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"description","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"type","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"access_key","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"files","indexes":[{"name":"files_created_by_id_fk","columns":["created_by_id"]},{"name":"files_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"files_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"files_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"name","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"alternative_text","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"caption","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"width","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"height","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"formats","type":"jsonb","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"hash","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"ext","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"mime","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"size","type":"decimal","args":[10,2],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"url","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"preview_url","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"provider","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"provider_metadata","type":"jsonb","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"i18n_locale","indexes":[{"name":"i18n_locale_created_by_id_fk","columns":["created_by_id"]},{"name":"i18n_locale_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"i18n_locale_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"i18n_locale_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"name","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"code","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"up_permissions","indexes":[{"name":"up_permissions_created_by_id_fk","columns":["created_by_id"]},{"name":"up_permissions_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"up_permissions_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"up_permissions_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"action","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"up_roles","indexes":[{"name":"up_roles_created_by_id_fk","columns":["created_by_id"]},{"name":"up_roles_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"up_roles_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"up_roles_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"name","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"description","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"type","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"up_users","indexes":[{"name":"up_users_created_by_id_fk","columns":["created_by_id"]},{"name":"up_users_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"up_users_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"up_users_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"username","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"email","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"provider","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"password","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"reset_password_token","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"confirmation_token","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"confirmed","type":"boolean","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"blocked","type":"boolean","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"code_challenges","indexes":[{"name":"code_challenges_created_by_id_fk","columns":["created_by_id"]},{"name":"code_challenges_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"code_challenges_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"code_challenges_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"starting_code","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"prompt","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"internal_label","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"internal_notes","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"get_starting_code_from_previous_challenge","type":"boolean","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"published_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"courses","indexes":[{"name":"courses_created_by_id_fk","columns":["created_by_id"]},{"name":"courses_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"courses_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"courses_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"name","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"slug","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"published_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"lessons","indexes":[{"name":"lessons_created_by_id_fk","columns":["created_by_id"]},{"name":"lessons_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"lessons_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"lessons_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"slug","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"name","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"is_hard","type":"boolean","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"internal_notes","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"published_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"modules","indexes":[{"name":"modules_created_by_id_fk","columns":["created_by_id"]},{"name":"modules_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"modules_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"modules_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"name","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"published_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"multiple_choice_challenges","indexes":[{"name":"multiple_choice_challenges_created_by_id_fk","columns":["created_by_id"]},{"name":"multiple_choice_challenges_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"multiple_choice_challenges_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"multiple_choice_challenges_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"prompt","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"internal_label","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"can_select_multiple_options","type":"boolean","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"published_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"sublessons","indexes":[{"name":"sublessons_created_by_id_fk","columns":["created_by_id"]},{"name":"sublessons_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"sublessons_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"sublessons_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"name","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"description","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"internal_notes","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"published_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"syntax_entries","indexes":[{"name":"syntax_entries_created_by_id_fk","columns":["created_by_id"]},{"name":"syntax_entries_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"syntax_entries_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"syntax_entries_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"content","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"name","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"internal_notes","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"max_width","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"published_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"translation_groups","indexes":[{"name":"translation_groups_created_by_id_fk","columns":["created_by_id"]},{"name":"translation_groups_updated_by_id_fk","columns":["updated_by_id"]}],"foreignKeys":[{"name":"translation_groups_created_by_id_fk","columns":["created_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"},{"name":"translation_groups_updated_by_id_fk","columns":["updated_by_id"],"referencedTable":"admin_users","referencedColumns":["id"],"onDelete":"SET NULL"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"created_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"updated_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"published_at","type":"datetime","args":[{"useTz":false,"precision":6}],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"created_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"updated_by_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"components_challenge_challenge_hints","indexes":[],"foreignKeys":[],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"text","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"recommended_time_before_viewing","type":"decimal","args":[10,2],"defaultTo":null,"notNullable":false,"unsigned":false}]},{"name":"components_challenge_code_challenge_tests","indexes":[],"foreignKeys":[],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"label","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"internal_test","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"further_explanation","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false}]},{"name":"components_challenge_multiple_choice_options","indexes":[],"foreignKeys":[],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"text","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"is_correct","type":"boolean","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"incorrect_choice_explanation","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false}]},{"name":"components_content_challenges","indexes":[],"foreignKeys":[],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false}]},{"name":"components_content_external_resources","indexes":[],"foreignKeys":[],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"name","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"link","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"type","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false}]},{"name":"components_misc_module_lessons","indexes":[],"foreignKeys":[],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false}]},{"name":"components_translations_about_pages","indexes":[],"foreignKeys":[],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"title","type":"text","args":["longtext"],"defaultTo":null,"notNullable":false,"unsigned":false}]},{"name":"components_translations_core_components","indexes":[],"foreignKeys":[],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"back_button","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"next_button","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false}]},{"name":"components_translations_within_components","indexes":[],"foreignKeys":[],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false}]},{"name":"admin_permissions_role_links","indexes":[{"name":"admin_permissions_role_links_fk","columns":["permission_id"]},{"name":"admin_permissions_role_links_inv_fk","columns":["role_id"]}],"foreignKeys":[{"name":"admin_permissions_role_links_fk","columns":["permission_id"],"referencedColumns":["id"],"referencedTable":"admin_permissions","onDelete":"CASCADE"},{"name":"admin_permissions_role_links_inv_fk","columns":["role_id"],"referencedColumns":["id"],"referencedTable":"admin_roles","onDelete":"CASCADE"}],"columns":[{"name":"permission_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"role_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"admin_users_roles_links","indexes":[{"name":"admin_users_roles_links_fk","columns":["user_id"]},{"name":"admin_users_roles_links_inv_fk","columns":["role_id"]}],"foreignKeys":[{"name":"admin_users_roles_links_fk","columns":["user_id"],"referencedColumns":["id"],"referencedTable":"admin_users","onDelete":"CASCADE"},{"name":"admin_users_roles_links_inv_fk","columns":["role_id"],"referencedColumns":["id"],"referencedTable":"admin_roles","onDelete":"CASCADE"}],"columns":[{"name":"user_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"role_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"files_related_morphs","indexes":[{"name":"files_related_morphs_fk","columns":["file_id"]}],"foreignKeys":[{"name":"files_related_morphs_fk","columns":["file_id"],"referencedColumns":["id"],"referencedTable":"files","onDelete":"CASCADE"}],"columns":[{"name":"file_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"related_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"related_type","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"field","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"order","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"up_permissions_role_links","indexes":[{"name":"up_permissions_role_links_fk","columns":["permission_id"]},{"name":"up_permissions_role_links_inv_fk","columns":["role_id"]}],"foreignKeys":[{"name":"up_permissions_role_links_fk","columns":["permission_id"],"referencedColumns":["id"],"referencedTable":"up_permissions","onDelete":"CASCADE"},{"name":"up_permissions_role_links_inv_fk","columns":["role_id"],"referencedColumns":["id"],"referencedTable":"up_roles","onDelete":"CASCADE"}],"columns":[{"name":"permission_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"role_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"up_users_role_links","indexes":[{"name":"up_users_role_links_fk","columns":["user_id"]},{"name":"up_users_role_links_inv_fk","columns":["role_id"]}],"foreignKeys":[{"name":"up_users_role_links_fk","columns":["user_id"],"referencedColumns":["id"],"referencedTable":"up_users","onDelete":"CASCADE"},{"name":"up_users_role_links_inv_fk","columns":["role_id"],"referencedColumns":["id"],"referencedTable":"up_roles","onDelete":"CASCADE"}],"columns":[{"name":"user_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"role_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"code_challenges_components","indexes":[{"name":"code_challenges_field_index","columns":["field"],"type":null},{"name":"code_challenges_component_type_index","columns":["component_type"],"type":null},{"name":"code_challenges_entity_fk","columns":["entity_id"]}],"foreignKeys":[{"name":"code_challenges_entity_fk","columns":["entity_id"],"referencedColumns":["id"],"referencedTable":"code_challenges","onDelete":"CASCADE"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"entity_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_type","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"field","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"order","type":"integer","args":[],"defaultTo":0,"notNullable":false,"unsigned":true}]},{"name":"code_challenges_category_links","indexes":[{"name":"code_challenges_category_links_fk","columns":["code_challenge_id"]},{"name":"code_challenges_category_links_inv_fk","columns":["sublesson_id"]}],"foreignKeys":[{"name":"code_challenges_category_links_fk","columns":["code_challenge_id"],"referencedColumns":["id"],"referencedTable":"code_challenges","onDelete":"CASCADE"},{"name":"code_challenges_category_links_inv_fk","columns":["sublesson_id"],"referencedColumns":["id"],"referencedTable":"sublessons","onDelete":"CASCADE"}],"columns":[{"name":"code_challenge_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"sublesson_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"courses_modules_links","indexes":[{"name":"courses_modules_links_fk","columns":["course_id"]},{"name":"courses_modules_links_inv_fk","columns":["module_id"]}],"foreignKeys":[{"name":"courses_modules_links_fk","columns":["course_id"],"referencedColumns":["id"],"referencedTable":"courses","onDelete":"CASCADE"},{"name":"courses_modules_links_inv_fk","columns":["module_id"],"referencedColumns":["id"],"referencedTable":"modules","onDelete":"CASCADE"}],"columns":[{"name":"course_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"module_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"lessons_components","indexes":[{"name":"lessons_field_index","columns":["field"],"type":null},{"name":"lessons_component_type_index","columns":["component_type"],"type":null},{"name":"lessons_entity_fk","columns":["entity_id"]}],"foreignKeys":[{"name":"lessons_entity_fk","columns":["entity_id"],"referencedColumns":["id"],"referencedTable":"lessons","onDelete":"CASCADE"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"entity_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_type","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"field","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"order","type":"integer","args":[],"defaultTo":0,"notNullable":false,"unsigned":true}]},{"name":"lessons_module_links","indexes":[{"name":"lessons_module_links_fk","columns":["lesson_id"]},{"name":"lessons_module_links_inv_fk","columns":["module_id"]}],"foreignKeys":[{"name":"lessons_module_links_fk","columns":["lesson_id"],"referencedColumns":["id"],"referencedTable":"lessons","onDelete":"CASCADE"},{"name":"lessons_module_links_inv_fk","columns":["module_id"],"referencedColumns":["id"],"referencedTable":"modules","onDelete":"CASCADE"}],"columns":[{"name":"lesson_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"module_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"lessons_syntax_entry_links","indexes":[{"name":"lessons_syntax_entry_links_fk","columns":["lesson_id"]},{"name":"lessons_syntax_entry_links_inv_fk","columns":["syntax_entry_id"]}],"foreignKeys":[{"name":"lessons_syntax_entry_links_fk","columns":["lesson_id"],"referencedColumns":["id"],"referencedTable":"lessons","onDelete":"CASCADE"},{"name":"lessons_syntax_entry_links_inv_fk","columns":["syntax_entry_id"],"referencedColumns":["id"],"referencedTable":"syntax_entries","onDelete":"CASCADE"}],"columns":[{"name":"lesson_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"syntax_entry_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"modules_components","indexes":[{"name":"modules_field_index","columns":["field"],"type":null},{"name":"modules_component_type_index","columns":["component_type"],"type":null},{"name":"modules_entity_fk","columns":["entity_id"]}],"foreignKeys":[{"name":"modules_entity_fk","columns":["entity_id"],"referencedColumns":["id"],"referencedTable":"modules","onDelete":"CASCADE"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"entity_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_type","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"field","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"order","type":"integer","args":[],"defaultTo":0,"notNullable":false,"unsigned":true}]},{"name":"multiple_choice_challenges_components","indexes":[{"name":"multiple_choice_challenges_field_index","columns":["field"],"type":null},{"name":"multiple_choice_challenges_component_type_index","columns":["component_type"],"type":null},{"name":"multiple_choice_challenges_entity_fk","columns":["entity_id"]}],"foreignKeys":[{"name":"multiple_choice_challenges_entity_fk","columns":["entity_id"],"referencedColumns":["id"],"referencedTable":"multiple_choice_challenges","onDelete":"CASCADE"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"entity_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_type","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"field","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"order","type":"integer","args":[],"defaultTo":0,"notNullable":false,"unsigned":true}]},{"name":"sublessons_components","indexes":[{"name":"sublessons_field_index","columns":["field"],"type":null},{"name":"sublessons_component_type_index","columns":["component_type"],"type":null},{"name":"sublessons_entity_fk","columns":["entity_id"]}],"foreignKeys":[{"name":"sublessons_entity_fk","columns":["entity_id"],"referencedColumns":["id"],"referencedTable":"sublessons","onDelete":"CASCADE"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"entity_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_type","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"field","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"order","type":"integer","args":[],"defaultTo":0,"notNullable":false,"unsigned":true}]},{"name":"sublessons_lesson_links","indexes":[{"name":"sublessons_lesson_links_fk","columns":["sublesson_id"]},{"name":"sublessons_lesson_links_inv_fk","columns":["lesson_id"]}],"foreignKeys":[{"name":"sublessons_lesson_links_fk","columns":["sublesson_id"],"referencedColumns":["id"],"referencedTable":"sublessons","onDelete":"CASCADE"},{"name":"sublessons_lesson_links_inv_fk","columns":["lesson_id"],"referencedColumns":["id"],"referencedTable":"lessons","onDelete":"CASCADE"}],"columns":[{"name":"sublesson_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"lesson_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"sublessons_syntax_entry_links","indexes":[{"name":"sublessons_syntax_entry_links_fk","columns":["sublesson_id"]},{"name":"sublessons_syntax_entry_links_inv_fk","columns":["syntax_entry_id"]}],"foreignKeys":[{"name":"sublessons_syntax_entry_links_fk","columns":["sublesson_id"],"referencedColumns":["id"],"referencedTable":"sublessons","onDelete":"CASCADE"},{"name":"sublessons_syntax_entry_links_inv_fk","columns":["syntax_entry_id"],"referencedColumns":["id"],"referencedTable":"syntax_entries","onDelete":"CASCADE"}],"columns":[{"name":"sublesson_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"syntax_entry_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"syntax_entries_sublesson_links","indexes":[{"name":"syntax_entries_sublesson_links_fk","columns":["syntax_entry_id"]},{"name":"syntax_entries_sublesson_links_inv_fk","columns":["sublesson_id"]}],"foreignKeys":[{"name":"syntax_entries_sublesson_links_fk","columns":["syntax_entry_id"],"referencedColumns":["id"],"referencedTable":"syntax_entries","onDelete":"CASCADE"},{"name":"syntax_entries_sublesson_links_inv_fk","columns":["sublesson_id"],"referencedColumns":["id"],"referencedTable":"sublessons","onDelete":"CASCADE"}],"columns":[{"name":"syntax_entry_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"sublesson_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"syntax_entries_lesson_links","indexes":[{"name":"syntax_entries_lesson_links_fk","columns":["syntax_entry_id"]},{"name":"syntax_entries_lesson_links_inv_fk","columns":["lesson_id"]}],"foreignKeys":[{"name":"syntax_entries_lesson_links_fk","columns":["syntax_entry_id"],"referencedColumns":["id"],"referencedTable":"syntax_entries","onDelete":"CASCADE"},{"name":"syntax_entries_lesson_links_inv_fk","columns":["lesson_id"],"referencedColumns":["id"],"referencedTable":"lessons","onDelete":"CASCADE"}],"columns":[{"name":"syntax_entry_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"lesson_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"translation_groups_components","indexes":[{"name":"translation_groups_field_index","columns":["field"],"type":null},{"name":"translation_groups_component_type_index","columns":["component_type"],"type":null},{"name":"translation_groups_entity_fk","columns":["entity_id"]}],"foreignKeys":[{"name":"translation_groups_entity_fk","columns":["entity_id"],"referencedColumns":["id"],"referencedTable":"translation_groups","onDelete":"CASCADE"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"entity_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_type","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"field","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"order","type":"integer","args":[],"defaultTo":0,"notNullable":false,"unsigned":true}]},{"name":"components_content_challenges_code_challenge_links","indexes":[{"name":"components_content_challenges_code_challenge_links_fk","columns":["challenges_id"]},{"name":"components_content_challenges_code_challenge_links_inv_fk","columns":["code_challenge_id"]}],"foreignKeys":[{"name":"components_content_challenges_code_challenge_links_fk","columns":["challenges_id"],"referencedColumns":["id"],"referencedTable":"components_content_challenges","onDelete":"CASCADE"},{"name":"components_content_challenges_code_challenge_links_inv_fk","columns":["code_challenge_id"],"referencedColumns":["id"],"referencedTable":"code_challenges","onDelete":"CASCADE"}],"columns":[{"name":"challenges_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"code_challenge_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"components_content_challenges_multiple_choice_challenge_links","indexes":[{"name":"components_content_challenges_multiple_choice_challenge_links_fk","columns":["challenges_id"]},{"name":"components_content_challenges_multiple_choice_challenge_links_inv_fk","columns":["multiple_choice_challenge_id"]}],"foreignKeys":[{"name":"components_content_challenges_multiple_choice_challenge_links_fk","columns":["challenges_id"],"referencedColumns":["id"],"referencedTable":"components_content_challenges","onDelete":"CASCADE"},{"name":"components_content_challenges_multiple_choice_challenge_links_inv_fk","columns":["multiple_choice_challenge_id"],"referencedColumns":["id"],"referencedTable":"multiple_choice_challenges","onDelete":"CASCADE"}],"columns":[{"name":"challenges_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"multiple_choice_challenge_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"components_misc_module_lessons_lesson_links","indexes":[{"name":"components_misc_module_lessons_lesson_links_fk","columns":["module_lesson_id"]},{"name":"components_misc_module_lessons_lesson_links_inv_fk","columns":["lesson_id"]}],"foreignKeys":[{"name":"components_misc_module_lessons_lesson_links_fk","columns":["module_lesson_id"],"referencedColumns":["id"],"referencedTable":"components_misc_module_lessons","onDelete":"CASCADE"},{"name":"components_misc_module_lessons_lesson_links_inv_fk","columns":["lesson_id"],"referencedColumns":["id"],"referencedTable":"lessons","onDelete":"CASCADE"}],"columns":[{"name":"module_lesson_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"lesson_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true}]},{"name":"components_translations_core_components_components","indexes":[{"name":"components_translations_core_components_field_index","columns":["field"],"type":null},{"name":"components_translations_core_components_component_type_index","columns":["component_type"],"type":null},{"name":"components_translations_core_components_entity_fk","columns":["entity_id"]}],"foreignKeys":[{"name":"components_translations_core_components_entity_fk","columns":["entity_id"],"referencedColumns":["id"],"referencedTable":"components_translations_core_components","onDelete":"CASCADE"}],"columns":[{"name":"id","type":"increments","args":[{"primary":true}],"defaultTo":null,"notNullable":true,"unsigned":false},{"name":"entity_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_id","type":"integer","args":[],"defaultTo":null,"notNullable":false,"unsigned":true},{"name":"component_type","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"field","type":"string","args":[],"defaultTo":null,"notNullable":false,"unsigned":false},{"name":"order","type":"integer","args":[],"defaultTo":0,"notNullable":false,"unsigned":true}]}]} 2022-02-24 10:46:09.857 d3e6a62f16cf7a7a75d0ace0f77a3ffa +\. + + +-- +-- Data for Name: strapi_migrations; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.strapi_migrations (id, name, "time") FROM stdin; +\. + + +-- +-- Data for Name: strapi_webhooks; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.strapi_webhooks (id, name, url, headers, events, enabled) FROM stdin; +\. + + +-- +-- Data for Name: sublessons; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.sublessons (id, name, created_at, updated_at, created_by_id, updated_by_id, description, published_at, internal_notes) FROM stdin; +105 Javascript: your new language 2022-02-12 03:40:00.794962 2022-02-13 18:35:40.946 1 1 - Javascript is like a new language\n- You’ll learn grammar\n- It’s very literal. Try to notice and mimic every little detail\n- Once is not enough for a concept. Take every little opportunity to get in more practice, and expect to get things wrong. 2022-02-12 03:40:00.794962 \N +2 Basic Math Operations 2021-12-30 17:21:34.828 2022-01-13 19:15:45.797 2 2 Addition, Subtraction, Division, and Multiplication in Javascript work how you would expect\n\n```\n4 + 4 // 8\n5 - 4 // 1\n4 * 3 // 12\n4 / 2 // 2\n```\n\nOne of the most common mistakes for people to make is to mix up strings with numbers. `4` is a number, but `"4"` is a string because it is wrapped in quotes. Operations such as addition will behave in surprising ways when used on strings instead of numbers:\n\n```\n"4" + 1 // You might think this would be 5, but it's 41!\n```\n 2021-12-30 17:21:34.828 \N +10 Equality Operator 2021-12-30 19:01:50.443 2022-01-13 19:24:01.542 2 2 The equality operator, `==` is what actually allows us to *ask* questions like "is the user logged in?" or "is it monday?" and get a boolean as an answer. Let's look at some examples:\n\n```\n2 == 5 // false\n2 + 2 == 4 // true\n\nlet myAge = 23;\nlet amI21 = myAge == 21; // false\n``` \n\nIn the above code we used `==` to ask questions like "is my age 21?" and the result will be a boolean. Either `true` or `false`\n\nOne final detail: The reason that we use two equal signs `==` instead of just one is because one equal sign `=` is the assignment operator\n\n```\nmyAge = 21; // this ASSIGNS myAge to 21\nmyAge == 21 // this CHECKS if myAge is 21\n```\n\n 2021-12-30 19:01:50.443 \N +33 Understanding 'undefined' errors 2021-12-30 20:54:18.749 2022-01-13 20:02:49.006 2 2 So far, when completing the challenges, you may have encountered an error like `Uncaught ReferenceError: x is not defined`. In this lesson, we're going to talk about what this error means, and how understanding these kinds of errors it can make you a much better programmer.\n\nLet's use an example. What will happen if we paste `console.log(exampleVar)` in to the console without first defining `exampleVar`? *Before doing so, please take a second to think through this yourself*\n\nWhen we paste this code, we get the following error: `ReferenceError: exampleVar is not defined`. Take another moment to think about why we would receive this error when we pasted in the above code.\n\nThe reason we get an error is because `exampleVar` is used, but it hasn't been defined. In order to prevent the error we would have to do define it. If we paste the below code in the editor (replacing the initial code), we will no longer see the error\n\n```\nlet exampleVar = 'hello';\nconsole.log(exampleVar)\n```\n\nIn programming, things going wrong is an inevitability. One of the key differences that separates those who stay stuck from those who can get unstuck is the programmer's skill in debugging.\n\nDon't view errors as scary walls of text, view them as *the computer trying to tell you something*. Sometimes, the message of the error isn't helpful, but often times they are hugely useful first step to understanding what's going wrong.\n\nWe also recommend checking out the link in the 'external resources' section in the bottom right, which does a fantastic job talking about errors and how to benefit from them. 2021-12-30 20:54:18.749 \N +92 Reassigning variables 2022-02-06 17:40:03.469754 2022-02-07 20:09:42.878 2 1 Frequently in our code we change the value of a variable once it has been declared. The world variable actually comes from *to vary*, or *to change*.\n\nHere is an example of reassigning a variable:\n\n```\nlet myAge = 23;\nmyAge = 24;\n```\nYou may notice that the syntax of these two lines is very similar. The only difference is that we omit the keyword `let`. `let` is used to declare a *new* variable. Because `myAge` is already declared, we no longer need to use it.\n\nA more practical example:\n\n```\nlet cashInBank = 20;\nlet cashInPocket = 10;\ncashInBank = 50;\n\nlet totalCash = cashInBank + cashInPocket;\n```\nthe value of `totalCash` will be 60 because on we *reassigned* the value of `cashInBank` from 20 to 50.\n\n 2022-02-06 17:40:03.469754 \N +93 Camel Casing 2022-02-06 17:40:03.474198 2022-02-07 20:13:14.281 2 1 In Javascript, the standard way to write our variables is called camel casing. Camel casing means having no spaces between words, and capitalizing every word besides the first word. Here are some examples. On the left side is how we might write it in English, and on the right is how it will look when camel-cased:\n\n- `my full name` -> `myFullName`\n- `total lessons` -> `totalLessons`\n- `a very long sentence about camel-casing` -> `aVeryLongSentenceAboutCamelCasing` 2022-02-06 17:40:03.474198 \N +16 Introduction 2021-12-30 19:35:44.177 2022-02-08 00:44:27.618 2 1 Sometimes we want to write messages in plain english (or whatever language you prefer) without it being run by our program. Here's an example:\n\n```\n// DON'T CHANGE THIS VARIABLE BELOW OR ELSE THE ENTIRE SITE WILL CRASH\nlet veryImportantVariable = 20;\n```\n\nThe `//` above the variable declaration lets us write a message that can be seen by other programmers, *but is ignored by the program*. While coding is usually about communicating instructions to the computer, think of comments like notes written for humans. These can be useful if we need to remember something for later, or if we want to communicate something to someone who might look at the code at a later date.\n\nThe code above is an example of a *single-line comment*. When we write `//`, everything to the right of `//` is ignored by the program for that single line. No other line is affected by this comment.\n\nWe can add comments on their own separate line (shown in the example above) or we can put them on the same line as our code. In the below example, we've added a comment on the same line as our code. The program will ignore everything to the right of `//`, but still evaluate the code that is to the left of `//`\n\n```\nlet test = 123; // some comment\n``` 2021-12-30 19:35:44.177 \N +26 Pseudocode 2021-12-30 20:26:19.921 2022-02-11 01:02:53.119 2 1 Pseudocoding is a technique that is used from beginners to the most advanced developers in order to solve hard challenges.\n\nPseudocode literally means 'fake code'. It's basically coding, but written in your native language. If your native language is English, then you would write pseudocode in English. The idea behind this is that computers are very rigid and hard to work with. Make one mistake, and everything breaks. \n\nWith pseudocode, however, nothing is rigid. You can write your pseudocode any way you want, and instead of worrying that the computer understands it, all that's important is that *you* understand it. The benefit of this, is that when we are dealing with hard problems, we can figure things out in our own language first, and then worry about writing it in code later. \n\nIn general, any time you're stuck on a hard problem, we recommend 'pseudocoding' it first. Write out the steps in your own language, and you'll find that the coding part will come much easier.\n\nLet's go through an example. Consider this challenge:\n\nWrite a function that takes in two scores. The winner is whoever has the highest score. Depending on the score, you should either log "Player 1 wins!", "Player 2 wins!" or "Tie!". \n\nLet's try writing this in pseudocode:\n\n```\n// declare a function that takes in two scores\n // if the first score is higher\n // return Player 1 wins!\n // if the second score is higher\n // return Player 2 wins!\n // else\n // return Tie!\n```\n\nNow let's write this in real code. Try to do it yourself in the editor first before looking at the code below.\n\n```\nfunction findWinner(score1, score2) {\n if (score1 > score2) {\n return 'Player 1 wins!';\n } else if (score1 < score2) {\n return 'Player 2 wins!';\n } else {\n return 'Draw!';\n }\n}\n```\n\nOn the upcoming 'rock paper scissors' challenge, which is the hardest challenge you'll face up to this point. Pseudocode will be a helpful tool. We highly recommend going through the resource we've mentioned in the 'external resources' tab on the bottom right from brilliant.org to understand the concept better 2021-12-30 20:26:19.921 \N +11 Googling Effectively 2021-12-30 19:06:00.146 2022-01-13 19:25:06.385 2 2 Let's say you wanted to google how many letters were in a string. For example: "mouse" is 5 characters. Let's construct a search query to find that out:\n\n> "Javascript string how many letters"\n\nTwo things to point out about this query:\n\n1. We include the word "Javascript". This is important because there are many programming languages, and we don't want to see results for the wrong language.\n2. This query is not grammatically correct. This is because we want to express what we're looking for in as few words as possible while still getting the point across. Don't worry about complete sentences.\n3. Be precise. If we googled "Javascript string get letters", we might know what we're talking about, but it's unlikely the right result will pop up because what we're googling is just too general\n\nWe also want to point out that the above query is just one, and not even necessarily the best way to search for the answer. There are dozens of different way to write this query. What's important is following the principles of including relevant information in as few words as possible. Here are more examples of "good queries":\n\n- Javascript number of letters in a string\n- how long is a string Javascript\n- javascript string find how many letters\n\nAnd here are some examples of "bad queries":\n\n- "how to find how many letters there are in a string" - doesn't mention the language, has extra words\n- "is there a way to get the letters in a string in javascript" - not precise, has extra words\n\nIt's important to note that these are general rules, but every situation varies. Sometimes a bad query in a specific case might get you better results than a good query. The 'good queries' are generally better but still, don't expect the top search result to tell you the answer to your question every time.\n\nOnce you've put in your query and received results, a couple of guidelines:\n\n- Don't just default to the first result that comes up. Take a brief look at the titles of the results and click on the one that looks most promising\n- Move quickly. As mentioned above, you probably won't find what you're looking for one your first try (at least at first) so don't waste time trying to read everything. If you click on a result and 30-60 seconds into it it doesn't seem like the right answer, move on to the next one.\n\nIf after clicking on several results you don't think any of them match up with what you're trying to find, you have two options:\n\n1. Reword your search query. This will usually eventually allow you to find your answer, but you maybe have to go through this entire cycle with several different queries before finding what you need. When rewording your query, you can try tweaking the words once or twice, but if that doesn't work try to completely rewrite the query with different wording. Make sure to follow the guidelines we mentioned above on writing good queries.\n2. If you are still stuck even after doing all of the above, it's time to ask for help. 45 minutes is be the upper limit for how long you wait before resorting to this step. We value your time and don't want you to waste it banging your head against a wall. We'll talk more about how to get help in a later lesson 2021-12-30 19:06:00.146 \N +9 Debugging if statements 2021-12-30 18:54:17.547 2022-01-13 19:22:15.253 2 2 Now, let's introduce you to an important way to debug your if statements.\n\nImagine you had a challenge where, if the user was 18 or above and accepted the site's privacy policy, they should see some site content. Otherwise, it should say "You can't see this, sorry"\n\n```\nfunction displaySiteContent(age, hasAcceptedPrivacyPolicy) {\n if (age > 18 && hasAcceptedPrivacyPolicy) {\n return 'site content displayed!';\n }\n\n return "You can't see this, sorry";\n}\n```\n\nRight now, the code above fails the use case, `displaySiteContent(18, true) should return 'site content displayed!'`. First, as mentioned in the previous lesson, let's log the result of the test case:\n\n```\nfunction displaySiteContent(age, hasAcceptedPrivacyPolicy) {\n if (age > 18 && hasAcceptedPrivacyPolicy) {\n return 'site content displayed!';\n }\n\n return "You can't see this, sorry";\n}\n\nconsole.log(displaySiteContent(18, true));\n```\n\nWhen we log this test case, we see "You can't see this, sorry". Now, why would that be? Shouldn't we see 'site content displayed!' instead? \n\nNow, we want to show you an effective way to debug these problems. Even if you already know the issue and how to fix it, please keep reading. The example above is pretty simple, but this technique can often save a lot of time when debugging more complex and mysterious challenges like the ones you'll encounter later in this course.\n\nIn the first line of this function, add `console.log(age > 18, hasAcceptedPrivacyPolicy)`. So now your code should look like:\n\n```\nfunction displaySiteContent(age, hasAcceptedPrivacyPolicy) {\n console.log(age > 18, hasAcceptedPrivacyPolicy)\n if (age > 18 && hasAcceptedPrivacyPolicy) {\n return 'site content displayed!';\n }\n\n return "You can't see this, sorry";\n}\n\nconsole.log(displaySiteContent(18, true));\n```\n\nYou'll see that the "false true" is logged to the console. So now we've gained a useful clue: the first condition, `age > 18` is false and therefore is failing the condition. Let's get even more information on why it fails by logging the variable used in the condition, age. And, because we're now logging three things, let's add labels to better keep track of them:\n\n```\nfunction displaySiteContent(age, hasAcceptedPrivacyPolicy) {\n console.log('age', age, 'age > 18', age > 18, 'hasAcceptedPrivacyPolicy', hasAcceptedPrivacyPolicy)\n if (age > 18 && hasAcceptedPrivacyPolicy) {\n return 'site content displayed!';\n }\n\n return "You can't see this, sorry";\n}\n\nconsole.log(displaySiteContent(18, true));\n```\n\nnow we should see "age 18 age > 18 false hasAcceptedPrivacyPolicy true" and by this point it should be clear what's going wrong. 18 isn't bigger than 18! We need to change `age > 18` to `age >= 18`. This will fix our code\n\nTo recap:\n- Why gained some visibility on to the overall problem of our function by logging the test case we were failing `console.log(displaySiteContent(18, true))`\n- we were able to figure out what was going wrong within our function by logging the conditions and seeing what failed\n- one thing that helped make things clear was adding labels for what we were logging. This is especially useful when we are logging more than just one thing 2021-12-30 18:54:17.547 \N +14 Inequality operator 2021-12-30 19:25:18.809 2022-01-13 19:29:48.309 2 2 The inequality operator `!=` is the opposite of the equality operator. Instead of checking if two things are *equal* `!=` checks if two things are *not equal*.\n\n```\n2 != 5 // true\n2 + 2 != 4 // false\n\nlet myAge = 23;\nlet amI21 = myAge != 21; // true\n``` 2021-12-30 19:25:18.809 \N +106 Introduction 2022-02-17 13:48:22.383568 2022-02-19 14:42:10.743 2 1 > “A computer lets you make more mistakes faster than any other invention with the possible exceptions of handguns and Tequila.”\n> ― Mitch Ratcliffe\n\nAs long as you are a programmer, _it is likely that you will spend the majority of your time debugging_\n\nOne of the best ways to save time while debugging is to use `console.log`. The console displays information that is logged to it such as errors, warnings, and general info. `console.log` falls into this last category, general info. We can log any value to the console through `console.log`.\n\nThis is *extremely* useful when debugging because it allows us to discover more about what is going on in our program\n\nAs a convenience, whenever you run code in the editor, we will display anything logged to the console at the bottom of the editor. **Try this out by pasting this code into the editor**:\n\n```\nconsole.log('a really really cool message')\n```\n\nyou should now see "a really really cool message" in the bottom panel.\n\nWhatever value we want to log goes in between the two parenthesis. The value doesn't have to be as string. It can be a number, or even an operation. For example:\n\n```\nconsole.log(2 + 2)\n```\n\nlogs the number 4 to the console. Try typing that out yourself for extra practice\n\nEarly on in this course, you might not know how `console.log` can help you save time. This is because right now, our code is simple. Later on in the course, as our code gets more complex, `console.log` will really shine. For now, we'll often use `console.log` as part of our code challenges, and in future debugging sections of this course, we'll show you tons of real world example that showcase how crucial `console.log` is.\n 2022-02-17 13:48:22.383568 \N +89 What are variables 2022-02-06 17:40:03.454789 2022-02-12 03:33:09.518 2 1 Variables in Javascript are named containers that hold a value. You can use them store information that you'll user later on.\n\n```\nlet myAge = 23;\n```\n\nLet's break down this line of code\n\n- `let` is a keyword we use to create a new variable. *We need it any time we create a new variable*\n- `myAge` is the name of our variable\n- `23` is the value we assign to it\n\nNow, we can use that variable later on and it will actually mean 23. For example:\n\n```\nlet myAge = 23;\nlet mySistersAge = myAge + 2;\n```\n\n`mySistersAge` will be 25, because `myAge` actually stands for 23. 2022-02-06 17:40:03.454789 \N +42 Multiple arguments 2022-01-12 20:21:17.669 2022-02-16 21:14:20.702 2 2 One useful case for this , It's useful for adding labels to your console logs\n\nYou may not know about arguments yet, but you will learn about them in a few lessons. 2022-01-12 20:21:17.669 \N +15 Introduction 2021-12-30 19:29:58.201 2022-01-12 20:16:09.515 2 2 \N 2021-12-30 19:29:58.201 \N +13 If statements 2021-12-30 19:17:23.555 2022-01-13 19:28:13.555 2 2 if statements allow us to perform actions if something is true or false. For example:\n\n- if it's after 1, tell the user to go to bed\n- if the user is not logged in, say 'please log in first'\n\nIMAGE GOES HERE\n\nTry to guess what will happen if you paste the below code into the console.\n\n```\nlet age = 20;\n\nif (age > 16) {\n console.log('old enough to drive');\n}\n\nif (age > 21) {\n console.log('old enough to drink in the united states');\n}\n```\n\nHere's what happens:\n\n- the first statement will be true since 20 is larger than 16.\n- because the first if statement is true, the code inside will run and 'old enough to drive' will be logged to the console\n- the second statement is not true since 20 is smaller than 21.\n- because the second if statement is false, the code inside will not run and\n\nFinally, take a look at some different examples of conditions for if statements. They can sometimes be complex:\n\n```\nif (isLoggedIn && isOldEnough) { \n /* this is where we put code that we want to run when the above condition is true */ \n}\n```\nThe above code will only run the code in between the brackets if both `isLoggedIn` and `isOldEnough` are true\n\n```\nif (age < 16 || age > 10 || productInStock) { \n /* this is where we put code that we want to run when the above condition is true */ \n}\n```\nThe above code will only run the code in between the brackets if either `age` is below 16, `age` is above 10, or `productInStock` is true. 2021-12-30 19:17:23.555 \N +20 Multi-line comments 2021-12-30 20:10:07.342 2022-01-13 19:37:13.815 2 2 To have more control over the amount of lines our comment exists for, we can use the multi-line comment\n\n```\n/*\n Sometimes we need to write comments that are quite long, and so we write them\n over a lot of lines. Here is some more long, long, long, long, long, long, long, long\n text.\n*/\nlet name = 'alejandro';\n```\n\n`/*` is what we use to open the comment, and `*/` is what we use to close the comment. \n\nOne of the most useful usages of multi line comments is to temporarily disable code by wrapping it in a comment. This way, we don't have to delete it, and we can easily remove the comment to re-enable the code. So, in the future if you're working on a challenge and want to disable lots of lines of code temporarily, try using the multi-line comment. 2021-12-30 20:10:07.342 \N +19 Mindset 2021-12-30 20:08:12.411 2022-01-13 19:36:08.053 2 2 For this lesson, there are no challenges and the only content we have for you is to read this fantastic [article](https://www.theodinproject.com/paths/foundations/courses/foundations/lessons/gearing-up) from The Odin Project. **Read the entire article. The advice it offers will help you a lot throughout this course.**. This project was heavily inspired by the odin project, so almost every concept and recommendation applies here as well. 2021-12-30 20:08:12.411 \N +94 Practice 2022-02-06 17:40:03.479786 2022-02-06 17:40:03.479786 2 1 Use this final sublesson as an optional way to get more practice in. We are working on building out this feature into a more sophisticated way to practice, but for now we've just put the extra problems in an additional sublesson. \n\nIf you don't feel like you need extra practice, you can skip these problems. You can also return to these problems later on to keep your skills sharp. When you are done, click on the final dot under "Sublesson" in the top right and press "Go to next lesson" 2022-02-06 17:40:03.479786 \N +95 Mixing strings with numbers 2022-02-06 18:25:39.589 2022-02-10 14:49:39.125 1 1 One of the most common mistakes for people to make is to mix up strings with numbers. `4` is a number, but `"4"` is a string because it is wrapped in quotes. Operations such as addition will behave in surprising ways when used on strings instead of numbers:\n\n```\n"4" + 1 // You might think this would be 5, but it's 41!\n```\n\nTake a moment to think why this would happen.\n\n\n**The explanation**:\n\nTo understand the above, let's first talk about the `+` operator. \n\n`+` is used for two things in Javascript: addition and combining strings. An example of addition is `4 + 4`, which is 8. An example of combining strings (sometimes called *string concatenation*) would be `"I am " + "Groot"` which would be combined into `"I am Groot"`. \n\nImportantly, this means that when a string and a number are added together, Javascript won't do addition, it will just combine the two together, meaning that `"4" + 1` will have the same result as `"4" + "1"`: `"41"` 2022-02-06 18:25:39.589 \N +97 Combining strings 2022-02-07 21:12:39.661965 2022-02-08 00:34:33.795 2 1 To combine multiple strings together, use the `+` symbol. Here's an example. Specifically, look at the last line:\n\n```\nlet firstName = 'Oliver';\nlet lastName = 'Ullman';\nlet fullName = firstName + lastName;\n```\n\nthe value of `fullName` will be `"OliverUllman"`. \n\nWhat if we want there to be spaces between the two names, like `"Oliver Ullman"`. To do this, we have to tell Javascript to add in the spaces. Coding is very exact, if we don't specify for the program to do something then it won't do it on it's own. So how do we tell javascript to add the space? Let's talk about two ways. \n\nMethod 1:\n\n```\nlet firstName = 'Oliver ';\nlet lastName = 'Ullman';\nlet fullName = firstName + lastName;\n```\n\nnow the value of `fullName` will be `"Oliver Ullman"`. What changed exactly? Look at the first line, where we're declaring the variable `firstName`. Here we've added a space at the end of the word so now the value of `firstName` isn't just a word, it's a word with a space at the end. \n\nNow let's talk about the second way\n\n```\nlet firstName = 'Oliver';\nlet lastName = 'Ullman';\nlet fullName = firstName + ' ' + lastName;\n```\n\nFor this method, take a look at the last line, where we're combining everything together. Unlike before, instead of combining two strings we're combining 3. This new string is the one in the middle that looks like `' '`. This is an empty space, and by adding it between `firstName` and `lastName` we're telling Javascript to add an empty space between the two. 2022-02-07 21:12:39.661965 \N +98 Why do we need quotes? 2022-02-07 21:12:39.667785 2022-02-10 14:35:17.305 2 1 Imagine you have declared a variable called age and assigned it a number. Something like:\n\n```\nlet age = 23;\n```\n\nNow you want to add a variable with a message that says `"My age is "` and then the number you previously assigned age.\n\nThe right way to do that would be:\n\n```\nlet age = 23;\nlet message = "My age is " + age; \n```\n\nIn this case the value of `message` would be `"My age is 23"`. Now let's look at a common mistake beginner's make:\n\n```\nlet age = 23;\nlet message = "My age is " + "age";\n```\nTry to guess what would the value of this be.\n\n---\n\nThe value would be `"My age is age"`! This is because we wrapped age with quotes. In the first example, age does not have quotes, so javascript knows to look for a *variable* named age. However in the second example we've told javascript to treat age like a string, meaning that it won't try to find the age variable. 2022-02-07 21:12:39.667785 \N +40 Checking test cases 2022-01-12 18:39:36.861 2022-02-16 20:39:16.795 2 2 In your previous code challenges, there have been test cases like "checkAge(19) returns 'you can vote!'" and you may have gotten stuck on passing some of those test cases (if you haven't, you certainly will later in this course!).\n\nWhen that happens, and you don't know what you're doing wrong, it's important to get more information on what's going on so that you're not just guessing.\n\nImagine that you wrote code for a solution that looks like:\n\n```\nfunction greet(name) {\n return `Hello ${name}`;\n}\n```\nand the test case that you're failing is `greet('Pierre') should return Hello Pierre!`. One way we recommend to debug this is to paste the test case in to your editor and console.log your result. This way, you can compare the result to what the test case expects.\n\n```\nfunction greet(name) {\n return `Hello ${name}`;\n}\n\nconsole.log(greet('Pierre'));\n```\n\nIf you paste this into the editor, you should see "Hello Pierre" logged to the console. Now that you have your result, try to compare it with what the test case expects: "Hello Pierre" vs "Hello Pierre!". Notice any difference?\n\nOur problem was that we forgot to put an exclamation point at the end of our sentence. It may seem ridiculous and arbitrary, but computers are extremely literal. Even one character being off can make us fail. \n\nSo in summary:\n\n- When debugging failed test cases, try logging the specific test case and comparing your result with what the test case expects\n- Be sure to look for small errors! When you first start coding, you'll frequently make small mistakes. 2022-01-12 18:39:36.861 \N +90 Naming your variables 2022-02-06 17:40:03.459384 2022-02-12 03:38:55.625 2 1 In javascript, you can give your variable any name as long as it doesn't break these rules:\n\n- It should be one word - `shoe size` doesn't work because it is two words\n- The first character must be a letter or `_` (underscore). You can't use a number as the first character.\n- The rest of the variable name can include any letter, any number, or the underscore. You can't use any other characters, including spaces, symbols, and punctuation marks.\n- It cannot be any of [these](https://www.w3schools.com/js/js_reserved.asp) reserved names (no need to memorize it) 2022-02-06 17:40:03.459384 \N +38 else if statements 2021-12-30 21:04:54.242 2022-01-13 20:10:47.064 2 2 else if statements can be added on to if statements to provide additional checks if the original if statement did not 'pass' the condition. In terms of syntax they are the exact same as a regular if statement.\n\n```\nif (time < 10) {\ngreeting = "Good morning";\n} else if (time < 20) {\ngreeting = "Good day";\n} else {\ngreeting = "Good evening";\n}\n\n``` 2021-12-30 21:04:54.242 \N +29 Rock paper scissors 2021-12-30 20:35:54.326 2022-01-13 20:00:38.257 2 2 In this challenge you'll learn to build a very simple rock paper scissors game. Click "Begin Challenges" to begin\n\nNote: We will talk about the best ways to get help when you are really stuck in a future lesson, but for now, reach out on our discord if you get stuck for more than 45 minutes on any one thing (note that this **doesn't** mean 45 minutes on the same challenge. It might take you a lot longer than 45 minutes to solve the whole challenge. This means if you get stuck for more than 45 minutes on any one part of that challenge)\n\nThere are a few challenges in this lesson. The most difficult one will be the first one, we're we'll build a basic rock paper scissors game. After that, we'll improve it step by step in subsequent challenges. 2021-12-30 20:35:54.326 \N +39 else statements 2021-12-30 21:06:26.677 2021-12-30 21:06:30.965 2 2 \N 2021-12-30 21:06:26.677 \N +30 Strict Equality 2021-12-30 20:42:32.203 2022-01-13 20:01:41.65 2 2 In addition to the regular equality operator `==`, there is the strict equality operator `===`. These operators are the exact same, the only difference is that in some rare edge cases, the regular equality operator can return some surprising results: \n\n```\nfalse == 0 // true\ntrue == 1 // true\n```\n\nThe above cases are just a small amount of the strange results that can happen when using the regular equality operator. If you want to see more examples, and read a full explanation of why these two operators are different, check out the link we've provided in the external resource.\n\nThe strict syntax can also be applied to the not equals operator. `!==`\n\n```\nfalse !== 0 // true\n```\n\nIn general, we recommend always using these two operators `===` and `!==` instead of their less strict counterparts. That way, you can avoid some nasty surprises\n\n```\nfalse == 0 // true, but you wouldn't expect it to be true\nfalse === 0 // false, just like you would expect\n``` 2021-12-30 20:42:32.203 \N +34 What are booleans? 2021-12-30 20:56:32.192 2022-01-13 20:04:17.247 2 2 Booleans are the Javascript equivalent of yes and no, except instead of yes and no, Javascript uses `true` and `false`. You can also think of a boolean as a simple off and on switch: it can be either `true` ("on") or `false` ("off"). Those are the only two available options.\n\nAs we will see later on in this lesson, these serve as the *answer* to questions like "is the user logged in?" or "is it monday?". Let's look at an example;\n\n```\nlet isLoggedIn = true;\nlet isDayMonday = false;\n```\n\nBooleans are one of the 8 data types in Javascript, along with number and string, two other data types you have already learned about.\n\nOne important detail: we did not wrap `true` or `false` in quotes. If we wrapped them in quotes, they would no longer be booleans, they would be strings. 2021-12-30 20:56:32.192 \N +91 Case Sensitivity 2022-02-06 17:40:03.464043 2022-02-07 20:02:48.762 2 1 Javascript is a case-sensitive language. This means that `age` and `Age` refer to different things. This can leads to mistakes like the one below:\n\n```\nlet brothers = 2;\nlet sisters = 3;\n\nlet siblings = Brothers + sisters;\n```\nThis code will produce the error `Brothers is not defined` because what we really need to write is `brothers`, not `Brothers`\n\nTwo tips to keep in mind regarding case-sensitivity:\n\n1. Keywords in javascript (such as `let`) will always be lowercase\n2. When you are the one deciding the name for something in Javascript, you need to be consistent with the casing. Think of it like a password: if you create an account with a password of `Awesomepassword12345` and then later on try to login with the password `awesomepassword12345`, the password will be invalid. 2022-02-06 17:40:03.464043 \N +3 Best sites to find answers 2021-12-30 17:54:07.597 2022-01-13 19:16:31.12 2 2 In this sublesson we're going to talk about some of the most common and useful resources you'll encounter when googling for coding answers. You can skip this lesson if you want, as it's not essential, but it is useful and short.\n\n## Traditional Educational Websites\n\nBy traditional websites, we mean websites that operate like a textbook. Each webpage will be dedicated to a specific concept or feature of javascript.\n\n### W3 Schools (w3schools.com)\n\nA great way to get a quick, interactive explanation on how to do something. \n\nExample: https://www.w3schools.com/Jsref/jsref_length_string.asp\n\n### MDN \n\nSimilar to W3 schools, but much more in depth. As a beginner, MDN will often go much farther in depth than you will need. However, the top part of each article is usually similar to W3 schools, with a brief explanation and an interactive example.\n\nExample: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length\n\n## Q&A Websites\n\n### Stackoverflow\n\nStackoverflow has two main benefits:\n\n1. It has millions of questions and answers. If you have a rare issue or uncommon thing you need to ask, StackOverflow probably has the answer. \n2. Because of the rating system, the best questions and answers rise to the top. This means that StackOverflow is also a great resource for common questions as well.\n\nAs an absolute beginner you should approach StackOverflow with a bit of caution. For now, you will have many 'very basic' questions like how to use core parts of Javascript (functions, if statements, declaring a variable). The problem is, the vast majority of questions on StackOverflow are not 'very basic' questions. So, as an absolute beginner, even if you see a result that *looks* like it answers your question, be aware that it might be answering a totally different, more complex question that just has some words in common.\n\nHowever, it would not be a very controversial statement to say that Stackoverflow is the most important educational resource for developers on the internet. As you get more advanced, you will use it more and more. \n\nExample: https://stackoverflow.com/questions/33274966/how-to-check-string-length-in-javascript 2021-12-30 17:54:07.597 \N +96 Introduction to Strings 2022-02-07 21:12:39.656319 2022-02-12 18:00:25.165 2 1 So far, we've shown you how to create variables that hold numbers such as your age, but how would we store something like a name in Javascript? We can't just write something like\n\n```\nlet myName = Oliver\n```\n\nTry this in the code editor and you'll notice an error pop up below. We'll talk more about why this doesn't work later, but first let's focus on how to correctly do this. The right way to write the above line of code is:\n\n```\nlet myName = "Oliver"\n```\n\nHere we have surrounded Oliver with quotes, creating what's known in Javascript as a string. *A string is what we use to hold textual data in Javascript*. Let's look at a couple more examples of strings:\n\n```\nlet birthplace = 'los angeles'\nlet favoriteFood = "ramen"\nlet funFact = `I love playing the piano`\n```\n\nYou might notice that we are using different types of quotation marks for each line. In Javascript, there are three types of quotation marks we can choose from for strings:\n\n- Single Quotes `'text'`\n- Double Quotes `"text"`\n- Backticks `` `text` ``\n\nFor practice, try using these types of quotes in the console.\n\n\nSingle quotes and double quotes are the same, you can choose whichever quote is your favorite. Backticks are special, they are essentially a more powerful type of quote, and we'll talk about them a little bit later on. *The most important thing to remember when using quotes is that the beginning and ending quotes MUST be the same*. This means that the following: \n\n```\nlet favoriteFood = "ramen'\n```\n\nwill not work and cause an error because the opening quote is `"` and the closing quote is `'` 2022-02-07 21:12:39.656319 \N +43 else statements 2022-01-12 21:27:19.451 2022-01-12 21:27:19.451 2 2 \N 2022-01-12 21:27:19.451 \N +41 Greater than Less Than 2022-01-12 19:53:43.332 2022-02-16 20:48:49.386 2 2 `>` is the greater than operator. It evaluates whether the item on the left is bigger than the item on the right\n\n```\n5 > 4 // true\n```\n\n`<` is the less than operator. It evaluates whether the item on the left is bigger than the item on the right\n\n```\n5 < 4 // false\n```\n\n`>=` is the greater than *or equal* to operator. It evaluates whether the item on the left is bigger than the item on the right\n\n```\n4 >= 4 // true\n```\n\n`<=` is the less than *or equal* to operator. It evaluates whether the item on the left is less than or equal to the item on the right\n\n```\n4 <= 4 // true\n``` 2022-01-12 19:53:43.332 \N +102 Multiple parameters/arguments 2022-02-08 01:04:27.717406 2022-02-08 01:04:27.717406 2 2 Functions can also support multiple parameters/arguments:\n\n```\nfunction add(a, b) {\n console.log(a + b);\n}\n\nadd(3, 5);\n```\n\nTwo things to point out:\n\n- Between the two parameters in the declaration, we've added a comma\n- The number of parameters in the function declaration matches the amount of arguments we supply in the function invocation. If we tried to invoke this function with a third argument `add(3, 5, 9)`, the third argument would be ignored. If we tried to invoke this function with only one argument, then the value of parameter `b` would be `undefined`. 2022-02-08 01:04:27.717406 \N +100 Anatomy of a function 2022-02-08 01:04:27.692246 2022-02-08 01:04:27.692246 2 2 Now let's take a look at a function and break it down:\n\n```\nfunction talk() {\n console.log("hi there!") \n console.log('bye!')\n}\n\ngreetUser()\n```\n\nThere are two parts to the above code: \n\n- the first three lines are the *declaration*. This is where we actually make the function.\n- The final line is called the *invocation*. To invoke, means to use the function we've created. Sometimes instead of using the word *invoke*, we might use the word *call* (for example: the last line of the above code is where we *call* the function we've created)\n\nLet's first look at the *declaration*:\n\n- `function` a keyword telling Javascript we are declaring a function. \n- `greetUser` the name we give to the function.\n- `()` This is where we specify any arguments. We'll talk about arguments later in this lesson, for now, just make sure to include `()` after the name when writing your function.\n- `{` and `}` These open and close the function, respectively. Between these two brackets is where we put the function's contents. The contents are what will actually run when we invoke the function.\n\nNow let's look at the *invocation*:\n\n`greetUser` The name of the function we want to invoke\n`()` the parenthesis are what actually invoke the function\n\nOne final thing about the function invocation. If we only included the declaration and never invoked the function, then the function would never run and "hi there!" would never be logged to the console. Think of it like downloading an app on your phone that you never open. The app is there, it's ready to be used, but it's never actually used.\n 2022-02-08 01:04:27.692246 \N +103 Returning 2022-02-08 01:04:27.724775 2022-02-08 01:04:27.724775 2 2 Another powerful feature of functions is the ability to *return a value*, which we can use later on. Let's look at an example:\n\n```\nfunction exampleFunction() {\n return "Hello there"\n}\n\nlet result = exampleFunction();\n```\n\nThe value of the variable `result` will be "Hello there". This is useful because often we want to calculate a value inside of a function, and then use that calculated value *outside of a function*. Let's look at an example:\n\n```\nfunction add(a, b) {\n return a + b;\n}\n\nconsole.log( add(3, 5) + add(4 + 6) );\n\n```\n\nNote that we added a bit of space between the parenthesis of `console.log`. We might do this sometimes just to make things easier to read. The spaces don't actually change the behavior of the program.\n\nOne final points to say about returning in functions.\n\nThe first is, after the return line, nothing else runs. In order words, **returning ends the function and nothing will run after it**:\n\n```\nfunction example() {\n return "this is returned";\n console.log("This will never run because it's after the return");\n}\n```\n\nThe second is, `return` is *not* the same as `console.log`. For example:\n\n```\nfunction example() {\n return 'some text';\n}\n\nexample()\n```\nin the above code, **nothing is logged to the console**. If we wanted to log 'some text' to the console we could either wrap the example invocation in console.log like `console.log('some text')`, or add an extra line in the function that has `console.log('some text')`. 2022-02-08 01:04:27.724775 \N +99 What is a function? 2022-02-08 01:04:27.684956 2022-02-10 13:17:40.983 2 1 Let's say you're building a calculator app, what kind of functionality would that calculator have? Here are a few:\n\n- sum \n- multiply\n- divide\n\n\nA function is a reusable piece of code that performs some logic and gives you a result. For example, a sum function is a function that sums 2 numbers and returns the result. \n\nFor example, assuming we have a function sum, then writing `sum(3, 5)` will give us the sum of 3 and 5 which is 8.\n\nOne of the most important benefits of writing functions is **reusability**. Once you create that function sum, you can call it with different values. For example:\n\n```\nsum(1, 3) // 4\nsum(2, 4) // 6\nsum(6, 3) // 9\n```\n\nIn the rest of this lesson, we'll explain how to write and use functions, one of the most important concepts in programming. 2022-02-08 01:04:27.684956 \N +101 Parameters and Arguments 2022-02-08 01:04:27.703167 2022-02-12 17:53:00.891 2 1 A parameter is like a variable whose value is assigned when the function is called. Let's look at some examples to understand it. The code below is a function and its invocation without any parameters:\n\n```\nfunction greetUser() {\n console.log('Hello!');\n}\n\ngreetUser(); // Logs "Hello!"\ngreetUser(); // Same thing as above\n```\n\nNow, let's add a parameter to make this function more dynamic:\n\n```\nfunction greetUser(firstName) {\n console.log(`Hello ${firstName}!`);\n}\n\ngreetUser("Oliver") // logs "Hello Oliver!"\ngreetUser("Sofia") // logs "Hello Sofia!"\n```\n\nTwo main things are different in this example compared to the first one:\n- On line one, we've added the *parameter* `firstName`, which you can see between the parenthesis. On the next line, within the function, we are using it in our console.log.\n- On the last two lines, we've added an *argument*, which is the actual value of the parameter, between the parenthesis of the function invocation. The argument is different on each of the two lines, and we've gotten a different result each time. Let's dive into how this actually happens:\n\n- The second to last line, `greetUser("Oliver")`, means that on that particular run of `greetUser`, the value of `firstName` will be "Oliver" and "Hello Oliver!" will be logged to the console. \n- On the final line of the code above, `greetUser("Sofia")`, the function will run with the value of `firstName` being `"Sofia"`, and `"Hello Sofia!"` will be logged to the console.\n\nNote that we can call the *parameter* whatever we want. The code below is the exact same as the code above, except that we've just changed `firstName` to be `funkyVariableName`. Notice that the same things are logged as in the above example. This is because the parameter name, like variable names in general, is just a label for us to reference. The actual value of the *parameter* comes from the *argument* we supply when we call the function, in this case `"Oliver"` and `"Sofia"`\n\n```\nfunction greetUser(funkyVariableName) {\n console.log(`Hello ${funkyVariableName}!`);\n}\n\ngreetUser("Oliver") // logs "Hello Oliver!"\ngreetUser("Sofia") // logs "Hello Sofia!"\n``` 2022-02-08 01:04:27.703167 \N +\. + + +-- +-- Data for Name: sublessons_components; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.sublessons_components (id, entity_id, component_id, component_type, field, "order") FROM stdin; +176 13 20 content.challenges challenges 1 +177 13 19 content.challenges challenges 2 +178 13 21 content.challenges challenges 3 +179 13 22 content.challenges challenges 4 +180 13 23 content.challenges challenges 5 +181 14 24 content.challenges challenges 1 +265 89 51 content.challenges challenges 1 +268 90 34 content.challenges challenges 1 +269 90 35 content.challenges challenges 2 +219 91 11 content.challenges challenges 1 +220 92 41 content.challenges challenges 1 +221 93 10 content.challenges challenges 1 +276 101 37 content.challenges challenges 1 +277 101 59 content.challenges challenges 2 +278 101 36 content.challenges challenges 3 +279 96 29 content.challenges challenges 1 +280 96 30 content.challenges challenges 2 +231 97 14 content.challenges challenges 1 +232 97 13 content.challenges challenges 2 +233 97 15 content.challenges challenges 3 +234 16 28 content.challenges challenges 1 +159 43 56 content.challenges challenges 1 +188 20 31 content.challenges challenges 1 +284 106 55 content.challenges challenges 1 +285 106 54 content.challenges challenges 2 +286 106 58 content.challenges challenges 3 +287 106 60 content.challenges steps 1 +288 106 61 content.challenges steps 2 +289 106 62 content.challenges steps 3 +160 100 1 content.challenges challenges 1 +200 29 45 content.challenges challenges 1 +201 29 46 content.challenges challenges 2 +202 29 47 content.challenges challenges 3 +166 2 7 content.challenges challenges 1 +203 30 48 content.challenges challenges 1 +204 34 50 content.challenges challenges 1 +205 34 49 content.challenges challenges 2 +206 38 52 content.challenges challenges 1 +161 100 2 content.challenges challenges 2 +162 100 3 content.challenges challenges 3 +163 100 4 content.challenges challenges 4 +167 2 8 content.challenges challenges 2 +164 100 5 content.challenges challenges 5 +165 100 6 content.challenges challenges 6 +82 39 53 content.challenges challenges 1 +189 102 33 content.challenges challenges 1 +190 102 32 content.challenges challenges 2 +197 103 42 content.challenges challenges 1 +198 103 43 content.challenges challenges 2 +199 103 44 content.challenges challenges 3 +174 10 16 content.challenges challenges 1 +175 10 17 content.challenges challenges 2 +249 95 57 content.challenges challenges 1 +193 94 39 content.challenges challenges 1 +194 94 38 content.challenges challenges 2 +195 94 40 content.challenges challenges 3 +\. + + +-- +-- Data for Name: sublessons_lesson_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.sublessons_lesson_links (sublesson_id, lesson_id) FROM stdin; +9 8 +10 2 +11 7 +13 8 +14 2 +89 6 +19 10 +90 6 +20 4 +101 5 +29 3 +30 2 +33 13 +34 2 +96 12 +105 15 +38 8 +40 13 +39 8 +41 2 +106 14 +94 6 +91 6 +92 6 +93 6 +97 12 +16 4 +100 5 +102 5 +103 5 +15 7 +99 5 +98 12 +95 9 +26 11 +2 9 +3 7 +\. + + +-- +-- Data for Name: sublessons_syntax_entry_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.sublessons_syntax_entry_links (sublesson_id, syntax_entry_id) FROM stdin; +15 6 +\. + + +-- +-- Data for Name: syntax_entries; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.syntax_entries (id, content, name, internal_notes, max_width, created_at, updated_at, published_at, created_by_id, updated_by_id) FROM stdin; +1 ![syntax-comments.png](/uploads/syntax_comments_8cbff80929.png) Comments \N 840 2022-01-01 19:10:57.504 2022-01-01 19:11:03.239 2022-01-01 19:11:03.234 2 2 +6 ![syntax-console-log](/uploads/syntax_console_log_f036bc711a.png)\n console.log \N 700 2022-01-01 19:57:07.182 2022-01-06 20:25:26.101 2022-01-01 19:57:19.197 2 2 +2 ![syntax-declare-a-variable](/uploads/syntax_declare_a_variable_0a76bc8157.png)\n\nBesides `let`, `var` and `const` are two other options. `var` should never be used (it is outdated), we'll talk about `const` in a future lesson. Declare and assign a variable \N 450 2022-01-01 19:12:32.425 2022-01-06 20:26:22.751 2022-01-01 19:13:00.026 2 2 +3 ![syntax-functions-final.png](/uploads/syntax_functions_final_025cd78a6e.png)\n\nNote the difference between parameters and arguments: Function parameters are the names listed in the function's definition. Function arguments are the real values passed to the function.\n\nOne thing that often confuses beginners is the naming of the parameters. The naming of the parameters can be whatever you want it to be. It doesn't have to match the naming of the arguments, you can have a parameter called `gobbledygoop` if you want. What's important is the order of the arguments passed in. So in the above image, we've specified that the first argument, whatever that argument is, will be assigned to a parameter called `firstName`, and the second will be assigned to a parameter called `lastName` Functions \N 720 2022-01-01 19:27:26.947 2022-01-01 19:28:21.267 2022-01-01 19:28:21.251 2 2 +4 You can give your variables any name as long as it follows these rules:\n\n- It should be one word - "shoe size" doesn't work because it is two words\n- The first character must be a letter or _. You can't use a number as the first character.\n- The rest of the variable name can include any letter, any number, or _. You can't use any other characters, including spaces, symbols, and punctuation marks.\n- It cannot be any of [these](https://www.w3schools.com/js/js_reserved.asp) reserved names. Naming your variables \N 0 2022-01-01 19:40:16.138 2022-01-06 20:23:38.708 2022-01-01 19:40:56.602 2 2 +5 ![syntax-reassigning-variables](/uploads/syntax_reassigning_variables_0ef55a1142.png)\n\nUnlike when we declare a variable, we don't need a keyword (such as `let`) at the beginning. Besides that, the syntax is the same. Reassign a variable Add a note that says lesson/sublesson should be either or, then add the showInLessonResources property for the sublesson ones 450 2022-01-01 19:52:34.347 2022-01-06 20:24:40.642 2022-01-01 19:53:04.534 2 2 +\. + + +-- +-- Data for Name: syntax_entries_lesson_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.syntax_entries_lesson_links (syntax_entry_id, lesson_id) FROM stdin; +1 4 +5 6 +\. + + +-- +-- Data for Name: syntax_entries_sublesson_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.syntax_entries_sublesson_links (syntax_entry_id, sublesson_id) FROM stdin; +\. + + +-- +-- Data for Name: translation_groups; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.translation_groups (id, created_at, updated_at, published_at, created_by_id, updated_by_id) FROM stdin; +\. + + +-- +-- Data for Name: translation_groups_components; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.translation_groups_components (id, entity_id, component_id, component_type, field, "order") FROM stdin; +\. + + +-- +-- Data for Name: up_permissions; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.up_permissions (id, action, created_at, updated_at, created_by_id, updated_by_id) FROM stdin; +1 plugin::users-permissions.auth.connect 2021-12-24 13:28:12.37 2021-12-24 13:28:12.37 \N \N +2 plugin::users-permissions.user.me 2021-12-24 13:28:12.37 2021-12-24 13:28:12.37 \N \N +3 plugin::users-permissions.auth.register 2021-12-24 13:28:12.387 2021-12-24 13:28:12.387 \N \N +4 plugin::users-permissions.user.me 2021-12-24 13:28:12.387 2021-12-24 13:28:12.387 \N \N +8 plugin::users-permissions.auth.connect 2021-12-24 13:28:12.387 2021-12-24 13:28:12.387 \N \N +9 plugin::users-permissions.auth.callback 2021-12-24 13:28:12.387 2021-12-24 13:28:12.387 \N \N +12 api::course.course.find 2022-01-03 15:33:20.598 2022-01-03 15:33:20.598 \N \N +13 api::code-challenge.code-challenge.find 2022-01-03 15:33:20.598 2022-01-03 15:33:20.598 \N \N +14 api::module.module.find 2022-01-03 15:33:20.598 2022-01-03 15:33:20.598 \N \N +15 api::lesson.lesson.find 2022-01-03 15:33:20.598 2022-01-03 15:33:20.598 \N \N +16 api::sublesson.sublesson.find 2022-01-03 15:33:20.598 2022-01-03 15:33:20.598 \N \N +17 api::multiple-choice-challenge.multiple-choice-challenge.find 2022-01-03 15:33:20.598 2022-01-03 15:33:20.598 \N \N +18 api::syntax-entry.syntax-entry.find 2022-01-03 15:33:20.598 2022-01-03 15:33:20.598 \N \N +19 plugin::content-type-builder.components.getComponents 2022-01-03 15:33:20.598 2022-01-03 15:33:20.598 \N \N +20 plugin::content-type-builder.components.getComponent 2022-01-03 15:33:20.598 2022-01-03 15:33:20.598 \N \N +21 api::course.course.findOne 2022-02-06 15:43:22.244 2022-02-06 15:43:22.244 \N \N +22 api::code-challenge.code-challenge.findOne 2022-02-06 15:43:22.244 2022-02-06 15:43:22.244 \N \N +23 api::lesson.lesson.findOne 2022-02-06 15:43:22.244 2022-02-06 15:43:22.244 \N \N +24 api::module.module.findOne 2022-02-06 15:43:22.244 2022-02-06 15:43:22.244 \N \N +25 api::multiple-choice-challenge.multiple-choice-challenge.findOne 2022-02-06 15:43:22.244 2022-02-06 15:43:22.244 \N \N +26 api::sublesson.sublesson.findOne 2022-02-06 15:43:22.244 2022-02-06 15:43:22.244 \N \N +27 api::syntax-entry.syntax-entry.findOne 2022-02-06 15:43:22.244 2022-02-06 15:43:22.244 \N \N +28 plugin::upload.content-api.find 2022-02-06 15:43:22.244 2022-02-06 15:43:22.244 \N \N +29 plugin::upload.content-api.findOne 2022-02-06 15:43:22.244 2022-02-06 15:43:22.244 \N \N +\. + + +-- +-- Data for Name: up_permissions_role_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.up_permissions_role_links (permission_id, role_id) FROM stdin; +2 1 +1 1 +4 2 +3 2 +8 2 +9 2 +12 2 +13 2 +14 2 +15 2 +17 2 +16 2 +18 2 +19 2 +20 2 +21 2 +22 2 +23 2 +24 2 +25 2 +26 2 +27 2 +28 2 +29 2 +\. + + +-- +-- Data for Name: up_roles; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.up_roles (id, name, description, type, created_at, updated_at, created_by_id, updated_by_id) FROM stdin; +1 Authenticated Default role given to authenticated user. authenticated 2021-12-24 13:28:12.344 2021-12-24 13:28:12.344 \N \N +2 Public Default role given to unauthenticated user. public 2021-12-24 13:28:12.354 2022-02-06 15:44:02.633 \N \N +\. + + +-- +-- Data for Name: up_users; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.up_users (id, username, email, provider, password, reset_password_token, confirmation_token, confirmed, blocked, created_at, updated_at, created_by_id, updated_by_id) FROM stdin; +\. + + +-- +-- Data for Name: up_users_role_links; Type: TABLE DATA; Schema: public; Owner: acc-v4 +-- + +COPY public.up_users_role_links (user_id, role_id) FROM stdin; +\. + + +-- +-- Name: admin_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.admin_permissions_id_seq', 356, true); + + +-- +-- Name: admin_roles_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.admin_roles_id_seq', 3, true); + + +-- +-- Name: admin_users_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.admin_users_id_seq', 36, true); + + +-- +-- Name: code_challenges_components_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.code_challenges_components_id_seq', 298, true); + + +-- +-- Name: code_challenges_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.code_challenges_id_seq', 36, true); + + +-- +-- Name: components_challenge_challenge_hints_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.components_challenge_challenge_hints_id_seq', 6, true); + + +-- +-- Name: components_challenge_code_challenge_tests_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.components_challenge_code_challenge_tests_id_seq', 78, true); + + +-- +-- Name: components_challenge_multiple_choice_options_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.components_challenge_multiple_choice_options_id_seq', 103, true); + + +-- +-- Name: components_content_challenges_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.components_content_challenges_id_seq', 62, true); + + +-- +-- Name: components_content_external_resources_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.components_content_external_resources_id_seq', 18, true); + + +-- +-- Name: components_misc_module_lessons_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.components_misc_module_lessons_id_seq', 14, true); + + +-- +-- Name: components_translations_about_pages_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.components_translations_about_pages_id_seq', 1, false); + + +-- +-- Name: components_translations_core_components_components_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.components_translations_core_components_components_id_seq', 1, false); + + +-- +-- Name: components_translations_core_components_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.components_translations_core_components_id_seq', 1, false); + + +-- +-- Name: components_translations_within_components_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.components_translations_within_components_id_seq', 1, false); + + +-- +-- Name: courses_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.courses_id_seq', 1, true); + + +-- +-- Name: files_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.files_id_seq', 1, false); + + +-- +-- Name: i18n_locale_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.i18n_locale_id_seq', 2, true); + + +-- +-- Name: lessons_components_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.lessons_components_id_seq', 66, true); + + +-- +-- Name: lessons_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.lessons_id_seq', 15, true); + + +-- +-- Name: modules_components_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.modules_components_id_seq', 63, true); + + +-- +-- Name: modules_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.modules_id_seq', 2, true); + + +-- +-- Name: multiple_choice_challenges_components_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.multiple_choice_challenges_components_id_seq', 143, true); + + +-- +-- Name: multiple_choice_challenges_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.multiple_choice_challenges_id_seq', 24, true); + + +-- +-- Name: strapi_api_tokens_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.strapi_api_tokens_id_seq', 1, false); + + +-- +-- Name: strapi_core_store_settings_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.strapi_core_store_settings_id_seq', 47, true); + + +-- +-- Name: strapi_database_schema_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.strapi_database_schema_id_seq', 87, true); + + +-- +-- Name: strapi_migrations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.strapi_migrations_id_seq', 1, false); + + +-- +-- Name: strapi_webhooks_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.strapi_webhooks_id_seq', 1, false); + + +-- +-- Name: sublessons_components_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.sublessons_components_id_seq', 289, true); + + +-- +-- Name: sublessons_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.sublessons_id_seq', 106, true); + + +-- +-- Name: syntax_entries_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.syntax_entries_id_seq', 6, true); + + +-- +-- Name: translation_groups_components_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.translation_groups_components_id_seq', 1, false); + + +-- +-- Name: translation_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.translation_groups_id_seq', 1, false); + + +-- +-- Name: up_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.up_permissions_id_seq', 31, true); + + +-- +-- Name: up_roles_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.up_roles_id_seq', 2, true); + + +-- +-- Name: up_users_id_seq; Type: SEQUENCE SET; Schema: public; Owner: acc-v4 +-- + +SELECT pg_catalog.setval('public.up_users_id_seq', 1, false); + + +-- +-- Name: admin_permissions admin_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_permissions + ADD CONSTRAINT admin_permissions_pkey PRIMARY KEY (id); + + +-- +-- Name: admin_roles admin_roles_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_roles + ADD CONSTRAINT admin_roles_pkey PRIMARY KEY (id); + + +-- +-- Name: admin_users admin_users_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_users + ADD CONSTRAINT admin_users_pkey PRIMARY KEY (id); + + +-- +-- Name: code_challenges_components code_challenges_components_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.code_challenges_components + ADD CONSTRAINT code_challenges_components_pkey PRIMARY KEY (id); + + +-- +-- Name: code_challenges code_challenges_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.code_challenges + ADD CONSTRAINT code_challenges_pkey PRIMARY KEY (id); + + +-- +-- Name: components_challenge_challenge_hints components_challenge_challenge_hints_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_challenge_challenge_hints + ADD CONSTRAINT components_challenge_challenge_hints_pkey PRIMARY KEY (id); + + +-- +-- Name: components_challenge_code_challenge_tests components_challenge_code_challenge_tests_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_challenge_code_challenge_tests + ADD CONSTRAINT components_challenge_code_challenge_tests_pkey PRIMARY KEY (id); + + +-- +-- Name: components_challenge_multiple_choice_options components_challenge_multiple_choice_options_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_challenge_multiple_choice_options + ADD CONSTRAINT components_challenge_multiple_choice_options_pkey PRIMARY KEY (id); + + +-- +-- Name: components_content_challenges components_content_challenges_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_content_challenges + ADD CONSTRAINT components_content_challenges_pkey PRIMARY KEY (id); + + +-- +-- Name: components_content_external_resources components_content_external_resources_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_content_external_resources + ADD CONSTRAINT components_content_external_resources_pkey PRIMARY KEY (id); + + +-- +-- Name: components_misc_module_lessons components_misc_module_lessons_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_misc_module_lessons + ADD CONSTRAINT components_misc_module_lessons_pkey PRIMARY KEY (id); + + +-- +-- Name: components_translations_about_pages components_translations_about_pages_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_translations_about_pages + ADD CONSTRAINT components_translations_about_pages_pkey PRIMARY KEY (id); + + +-- +-- Name: components_translations_core_components_components components_translations_core_components_components_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_translations_core_components_components + ADD CONSTRAINT components_translations_core_components_components_pkey PRIMARY KEY (id); + + +-- +-- Name: components_translations_core_components components_translations_core_components_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_translations_core_components + ADD CONSTRAINT components_translations_core_components_pkey PRIMARY KEY (id); + + +-- +-- Name: components_translations_within_components components_translations_within_components_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_translations_within_components + ADD CONSTRAINT components_translations_within_components_pkey PRIMARY KEY (id); + + +-- +-- Name: courses courses_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.courses + ADD CONSTRAINT courses_pkey PRIMARY KEY (id); + + +-- +-- Name: files files_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.files + ADD CONSTRAINT files_pkey PRIMARY KEY (id); + + +-- +-- Name: i18n_locale i18n_locale_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.i18n_locale + ADD CONSTRAINT i18n_locale_pkey PRIMARY KEY (id); + + +-- +-- Name: lessons_components lessons_components_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.lessons_components + ADD CONSTRAINT lessons_components_pkey PRIMARY KEY (id); + + +-- +-- Name: lessons lessons_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.lessons + ADD CONSTRAINT lessons_pkey PRIMARY KEY (id); + + +-- +-- Name: modules_components modules_components_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.modules_components + ADD CONSTRAINT modules_components_pkey PRIMARY KEY (id); + + +-- +-- Name: modules modules_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.modules + ADD CONSTRAINT modules_pkey PRIMARY KEY (id); + + +-- +-- Name: multiple_choice_challenges_components multiple_choice_challenges_components_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.multiple_choice_challenges_components + ADD CONSTRAINT multiple_choice_challenges_components_pkey PRIMARY KEY (id); + + +-- +-- Name: multiple_choice_challenges multiple_choice_challenges_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.multiple_choice_challenges + ADD CONSTRAINT multiple_choice_challenges_pkey PRIMARY KEY (id); + + +-- +-- Name: strapi_api_tokens strapi_api_tokens_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.strapi_api_tokens + ADD CONSTRAINT strapi_api_tokens_pkey PRIMARY KEY (id); + + +-- +-- Name: strapi_core_store_settings strapi_core_store_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.strapi_core_store_settings + ADD CONSTRAINT strapi_core_store_settings_pkey PRIMARY KEY (id); + + +-- +-- Name: strapi_database_schema strapi_database_schema_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.strapi_database_schema + ADD CONSTRAINT strapi_database_schema_pkey PRIMARY KEY (id); + + +-- +-- Name: strapi_migrations strapi_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.strapi_migrations + ADD CONSTRAINT strapi_migrations_pkey PRIMARY KEY (id); + + +-- +-- Name: strapi_webhooks strapi_webhooks_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.strapi_webhooks + ADD CONSTRAINT strapi_webhooks_pkey PRIMARY KEY (id); + + +-- +-- Name: sublessons_components sublessons_components_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.sublessons_components + ADD CONSTRAINT sublessons_components_pkey PRIMARY KEY (id); + + +-- +-- Name: sublessons sublessons_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.sublessons + ADD CONSTRAINT sublessons_pkey PRIMARY KEY (id); + + +-- +-- Name: syntax_entries syntax_entries_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.syntax_entries + ADD CONSTRAINT syntax_entries_pkey PRIMARY KEY (id); + + +-- +-- Name: translation_groups_components translation_groups_components_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.translation_groups_components + ADD CONSTRAINT translation_groups_components_pkey PRIMARY KEY (id); + + +-- +-- Name: translation_groups translation_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.translation_groups + ADD CONSTRAINT translation_groups_pkey PRIMARY KEY (id); + + +-- +-- Name: up_permissions up_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_permissions + ADD CONSTRAINT up_permissions_pkey PRIMARY KEY (id); + + +-- +-- Name: up_roles up_roles_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_roles + ADD CONSTRAINT up_roles_pkey PRIMARY KEY (id); + + +-- +-- Name: up_users up_users_pkey; Type: CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_users + ADD CONSTRAINT up_users_pkey PRIMARY KEY (id); + + +-- +-- Name: admin_permissions_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX admin_permissions_created_by_id_fk ON public.admin_permissions USING btree (created_by_id); + + +-- +-- Name: admin_permissions_role_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX admin_permissions_role_links_fk ON public.admin_permissions_role_links USING btree (permission_id); + + +-- +-- Name: admin_permissions_role_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX admin_permissions_role_links_inv_fk ON public.admin_permissions_role_links USING btree (role_id); + + +-- +-- Name: admin_permissions_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX admin_permissions_updated_by_id_fk ON public.admin_permissions USING btree (updated_by_id); + + +-- +-- Name: admin_roles_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX admin_roles_created_by_id_fk ON public.admin_roles USING btree (created_by_id); + + +-- +-- Name: admin_roles_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX admin_roles_updated_by_id_fk ON public.admin_roles USING btree (updated_by_id); + + +-- +-- Name: admin_users_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX admin_users_created_by_id_fk ON public.admin_users USING btree (created_by_id); + + +-- +-- Name: admin_users_roles_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX admin_users_roles_links_fk ON public.admin_users_roles_links USING btree (user_id); + + +-- +-- Name: admin_users_roles_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX admin_users_roles_links_inv_fk ON public.admin_users_roles_links USING btree (role_id); + + +-- +-- Name: admin_users_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX admin_users_updated_by_id_fk ON public.admin_users USING btree (updated_by_id); + + +-- +-- Name: code_challenges_category_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX code_challenges_category_links_fk ON public.code_challenges_category_links USING btree (code_challenge_id); + + +-- +-- Name: code_challenges_category_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX code_challenges_category_links_inv_fk ON public.code_challenges_category_links USING btree (sublesson_id); + + +-- +-- Name: code_challenges_component_type_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX code_challenges_component_type_index ON public.code_challenges_components USING btree (component_type); + + +-- +-- Name: code_challenges_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX code_challenges_created_by_id_fk ON public.code_challenges USING btree (created_by_id); + + +-- +-- Name: code_challenges_entity_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX code_challenges_entity_fk ON public.code_challenges_components USING btree (entity_id); + + +-- +-- Name: code_challenges_field_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX code_challenges_field_index ON public.code_challenges_components USING btree (field); + + +-- +-- Name: code_challenges_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX code_challenges_updated_by_id_fk ON public.code_challenges USING btree (updated_by_id); + + +-- +-- Name: components_content_challenges_code_challenge_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX components_content_challenges_code_challenge_links_fk ON public.components_content_challenges_code_challenge_links USING btree (challenges_id); + + +-- +-- Name: components_content_challenges_code_challenge_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX components_content_challenges_code_challenge_links_inv_fk ON public.components_content_challenges_code_challenge_links USING btree (code_challenge_id); + + +-- +-- Name: components_content_challenges_multiple_choice_challenge_links_f; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX components_content_challenges_multiple_choice_challenge_links_f ON public.components_content_challenges_multiple_choice_challenge_links USING btree (challenges_id); + + +-- +-- Name: components_content_challenges_multiple_choice_challenge_links_i; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX components_content_challenges_multiple_choice_challenge_links_i ON public.components_content_challenges_multiple_choice_challenge_links USING btree (multiple_choice_challenge_id); + + +-- +-- Name: components_misc_module_lessons_lesson_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX components_misc_module_lessons_lesson_links_fk ON public.components_misc_module_lessons_lesson_links USING btree (module_lesson_id); + + +-- +-- Name: components_misc_module_lessons_lesson_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX components_misc_module_lessons_lesson_links_inv_fk ON public.components_misc_module_lessons_lesson_links USING btree (lesson_id); + + +-- +-- Name: components_translations_core_components_component_type_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX components_translations_core_components_component_type_index ON public.components_translations_core_components_components USING btree (component_type); + + +-- +-- Name: components_translations_core_components_entity_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX components_translations_core_components_entity_fk ON public.components_translations_core_components_components USING btree (entity_id); + + +-- +-- Name: components_translations_core_components_field_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX components_translations_core_components_field_index ON public.components_translations_core_components_components USING btree (field); + + +-- +-- Name: courses_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX courses_created_by_id_fk ON public.courses USING btree (created_by_id); + + +-- +-- Name: courses_modules_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX courses_modules_links_fk ON public.courses_modules_links USING btree (course_id); + + +-- +-- Name: courses_modules_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX courses_modules_links_inv_fk ON public.courses_modules_links USING btree (module_id); + + +-- +-- Name: courses_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX courses_updated_by_id_fk ON public.courses USING btree (updated_by_id); + + +-- +-- Name: files_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX files_created_by_id_fk ON public.files USING btree (created_by_id); + + +-- +-- Name: files_related_morphs_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX files_related_morphs_fk ON public.files_related_morphs USING btree (file_id); + + +-- +-- Name: files_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX files_updated_by_id_fk ON public.files USING btree (updated_by_id); + + +-- +-- Name: i18n_locale_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX i18n_locale_created_by_id_fk ON public.i18n_locale USING btree (created_by_id); + + +-- +-- Name: i18n_locale_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX i18n_locale_updated_by_id_fk ON public.i18n_locale USING btree (updated_by_id); + + +-- +-- Name: lessons_component_type_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX lessons_component_type_index ON public.lessons_components USING btree (component_type); + + +-- +-- Name: lessons_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX lessons_created_by_id_fk ON public.lessons USING btree (created_by_id); + + +-- +-- Name: lessons_entity_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX lessons_entity_fk ON public.lessons_components USING btree (entity_id); + + +-- +-- Name: lessons_field_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX lessons_field_index ON public.lessons_components USING btree (field); + + +-- +-- Name: lessons_module_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX lessons_module_links_fk ON public.lessons_module_links USING btree (lesson_id); + + +-- +-- Name: lessons_module_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX lessons_module_links_inv_fk ON public.lessons_module_links USING btree (module_id); + + +-- +-- Name: lessons_syntax_entry_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX lessons_syntax_entry_links_fk ON public.lessons_syntax_entry_links USING btree (lesson_id); + + +-- +-- Name: lessons_syntax_entry_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX lessons_syntax_entry_links_inv_fk ON public.lessons_syntax_entry_links USING btree (syntax_entry_id); + + +-- +-- Name: lessons_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX lessons_updated_by_id_fk ON public.lessons USING btree (updated_by_id); + + +-- +-- Name: modules_component_type_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX modules_component_type_index ON public.modules_components USING btree (component_type); + + +-- +-- Name: modules_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX modules_created_by_id_fk ON public.modules USING btree (created_by_id); + + +-- +-- Name: modules_entity_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX modules_entity_fk ON public.modules_components USING btree (entity_id); + + +-- +-- Name: modules_field_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX modules_field_index ON public.modules_components USING btree (field); + + +-- +-- Name: modules_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX modules_updated_by_id_fk ON public.modules USING btree (updated_by_id); + + +-- +-- Name: multiple_choice_challenges_component_type_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX multiple_choice_challenges_component_type_index ON public.multiple_choice_challenges_components USING btree (component_type); + + +-- +-- Name: multiple_choice_challenges_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX multiple_choice_challenges_created_by_id_fk ON public.multiple_choice_challenges USING btree (created_by_id); + + +-- +-- Name: multiple_choice_challenges_entity_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX multiple_choice_challenges_entity_fk ON public.multiple_choice_challenges_components USING btree (entity_id); + + +-- +-- Name: multiple_choice_challenges_field_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX multiple_choice_challenges_field_index ON public.multiple_choice_challenges_components USING btree (field); + + +-- +-- Name: multiple_choice_challenges_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX multiple_choice_challenges_updated_by_id_fk ON public.multiple_choice_challenges USING btree (updated_by_id); + + +-- +-- Name: strapi_api_tokens_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX strapi_api_tokens_created_by_id_fk ON public.strapi_api_tokens USING btree (created_by_id); + + +-- +-- Name: strapi_api_tokens_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX strapi_api_tokens_updated_by_id_fk ON public.strapi_api_tokens USING btree (updated_by_id); + + +-- +-- Name: sublessons_component_type_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX sublessons_component_type_index ON public.sublessons_components USING btree (component_type); + + +-- +-- Name: sublessons_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX sublessons_created_by_id_fk ON public.sublessons USING btree (created_by_id); + + +-- +-- Name: sublessons_entity_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX sublessons_entity_fk ON public.sublessons_components USING btree (entity_id); + + +-- +-- Name: sublessons_field_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX sublessons_field_index ON public.sublessons_components USING btree (field); + + +-- +-- Name: sublessons_lesson_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX sublessons_lesson_links_fk ON public.sublessons_lesson_links USING btree (sublesson_id); + + +-- +-- Name: sublessons_lesson_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX sublessons_lesson_links_inv_fk ON public.sublessons_lesson_links USING btree (lesson_id); + + +-- +-- Name: sublessons_syntax_entry_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX sublessons_syntax_entry_links_fk ON public.sublessons_syntax_entry_links USING btree (sublesson_id); + + +-- +-- Name: sublessons_syntax_entry_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX sublessons_syntax_entry_links_inv_fk ON public.sublessons_syntax_entry_links USING btree (syntax_entry_id); + + +-- +-- Name: sublessons_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX sublessons_updated_by_id_fk ON public.sublessons USING btree (updated_by_id); + + +-- +-- Name: syntax_entries_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX syntax_entries_created_by_id_fk ON public.syntax_entries USING btree (created_by_id); + + +-- +-- Name: syntax_entries_lesson_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX syntax_entries_lesson_links_fk ON public.syntax_entries_lesson_links USING btree (syntax_entry_id); + + +-- +-- Name: syntax_entries_lesson_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX syntax_entries_lesson_links_inv_fk ON public.syntax_entries_lesson_links USING btree (lesson_id); + + +-- +-- Name: syntax_entries_sublesson_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX syntax_entries_sublesson_links_fk ON public.syntax_entries_sublesson_links USING btree (syntax_entry_id); + + +-- +-- Name: syntax_entries_sublesson_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX syntax_entries_sublesson_links_inv_fk ON public.syntax_entries_sublesson_links USING btree (sublesson_id); + + +-- +-- Name: syntax_entries_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX syntax_entries_updated_by_id_fk ON public.syntax_entries USING btree (updated_by_id); + + +-- +-- Name: translation_groups_component_type_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX translation_groups_component_type_index ON public.translation_groups_components USING btree (component_type); + + +-- +-- Name: translation_groups_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX translation_groups_created_by_id_fk ON public.translation_groups USING btree (created_by_id); + + +-- +-- Name: translation_groups_entity_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX translation_groups_entity_fk ON public.translation_groups_components USING btree (entity_id); + + +-- +-- Name: translation_groups_field_index; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX translation_groups_field_index ON public.translation_groups_components USING btree (field); + + +-- +-- Name: translation_groups_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX translation_groups_updated_by_id_fk ON public.translation_groups USING btree (updated_by_id); + + +-- +-- Name: up_permissions_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX up_permissions_created_by_id_fk ON public.up_permissions USING btree (created_by_id); + + +-- +-- Name: up_permissions_role_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX up_permissions_role_links_fk ON public.up_permissions_role_links USING btree (permission_id); + + +-- +-- Name: up_permissions_role_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX up_permissions_role_links_inv_fk ON public.up_permissions_role_links USING btree (role_id); + + +-- +-- Name: up_permissions_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX up_permissions_updated_by_id_fk ON public.up_permissions USING btree (updated_by_id); + + +-- +-- Name: up_roles_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX up_roles_created_by_id_fk ON public.up_roles USING btree (created_by_id); + + +-- +-- Name: up_roles_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX up_roles_updated_by_id_fk ON public.up_roles USING btree (updated_by_id); + + +-- +-- Name: up_users_created_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX up_users_created_by_id_fk ON public.up_users USING btree (created_by_id); + + +-- +-- Name: up_users_role_links_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX up_users_role_links_fk ON public.up_users_role_links USING btree (user_id); + + +-- +-- Name: up_users_role_links_inv_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX up_users_role_links_inv_fk ON public.up_users_role_links USING btree (role_id); + + +-- +-- Name: up_users_updated_by_id_fk; Type: INDEX; Schema: public; Owner: acc-v4 +-- + +CREATE INDEX up_users_updated_by_id_fk ON public.up_users USING btree (updated_by_id); + + +-- +-- Name: admin_permissions admin_permissions_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_permissions + ADD CONSTRAINT admin_permissions_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: admin_permissions_role_links admin_permissions_role_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_permissions_role_links + ADD CONSTRAINT admin_permissions_role_links_fk FOREIGN KEY (permission_id) REFERENCES public.admin_permissions(id) ON DELETE CASCADE; + + +-- +-- Name: admin_permissions_role_links admin_permissions_role_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_permissions_role_links + ADD CONSTRAINT admin_permissions_role_links_inv_fk FOREIGN KEY (role_id) REFERENCES public.admin_roles(id) ON DELETE CASCADE; + + +-- +-- Name: admin_permissions admin_permissions_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_permissions + ADD CONSTRAINT admin_permissions_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: admin_roles admin_roles_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_roles + ADD CONSTRAINT admin_roles_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: admin_roles admin_roles_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_roles + ADD CONSTRAINT admin_roles_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: admin_users admin_users_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_users + ADD CONSTRAINT admin_users_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: admin_users_roles_links admin_users_roles_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_users_roles_links + ADD CONSTRAINT admin_users_roles_links_fk FOREIGN KEY (user_id) REFERENCES public.admin_users(id) ON DELETE CASCADE; + + +-- +-- Name: admin_users_roles_links admin_users_roles_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_users_roles_links + ADD CONSTRAINT admin_users_roles_links_inv_fk FOREIGN KEY (role_id) REFERENCES public.admin_roles(id) ON DELETE CASCADE; + + +-- +-- Name: admin_users admin_users_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.admin_users + ADD CONSTRAINT admin_users_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: code_challenges_category_links code_challenges_category_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.code_challenges_category_links + ADD CONSTRAINT code_challenges_category_links_fk FOREIGN KEY (code_challenge_id) REFERENCES public.code_challenges(id) ON DELETE CASCADE; + + +-- +-- Name: code_challenges_category_links code_challenges_category_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.code_challenges_category_links + ADD CONSTRAINT code_challenges_category_links_inv_fk FOREIGN KEY (sublesson_id) REFERENCES public.sublessons(id) ON DELETE CASCADE; + + +-- +-- Name: code_challenges code_challenges_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.code_challenges + ADD CONSTRAINT code_challenges_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: code_challenges_components code_challenges_entity_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.code_challenges_components + ADD CONSTRAINT code_challenges_entity_fk FOREIGN KEY (entity_id) REFERENCES public.code_challenges(id) ON DELETE CASCADE; + + +-- +-- Name: code_challenges code_challenges_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.code_challenges + ADD CONSTRAINT code_challenges_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: components_content_challenges_code_challenge_links components_content_challenges_code_challenge_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_content_challenges_code_challenge_links + ADD CONSTRAINT components_content_challenges_code_challenge_links_fk FOREIGN KEY (challenges_id) REFERENCES public.components_content_challenges(id) ON DELETE CASCADE; + + +-- +-- Name: components_content_challenges_code_challenge_links components_content_challenges_code_challenge_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_content_challenges_code_challenge_links + ADD CONSTRAINT components_content_challenges_code_challenge_links_inv_fk FOREIGN KEY (code_challenge_id) REFERENCES public.code_challenges(id) ON DELETE CASCADE; + + +-- +-- Name: components_content_challenges_multiple_choice_challenge_links components_content_challenges_multiple_choice_challenge_links_f; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_content_challenges_multiple_choice_challenge_links + ADD CONSTRAINT components_content_challenges_multiple_choice_challenge_links_f FOREIGN KEY (challenges_id) REFERENCES public.components_content_challenges(id) ON DELETE CASCADE; + + +-- +-- Name: components_content_challenges_multiple_choice_challenge_links components_content_challenges_multiple_choice_challenge_links_i; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_content_challenges_multiple_choice_challenge_links + ADD CONSTRAINT components_content_challenges_multiple_choice_challenge_links_i FOREIGN KEY (multiple_choice_challenge_id) REFERENCES public.multiple_choice_challenges(id) ON DELETE CASCADE; + + +-- +-- Name: components_misc_module_lessons_lesson_links components_misc_module_lessons_lesson_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_misc_module_lessons_lesson_links + ADD CONSTRAINT components_misc_module_lessons_lesson_links_fk FOREIGN KEY (module_lesson_id) REFERENCES public.components_misc_module_lessons(id) ON DELETE CASCADE; + + +-- +-- Name: components_misc_module_lessons_lesson_links components_misc_module_lessons_lesson_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_misc_module_lessons_lesson_links + ADD CONSTRAINT components_misc_module_lessons_lesson_links_inv_fk FOREIGN KEY (lesson_id) REFERENCES public.lessons(id) ON DELETE CASCADE; + + +-- +-- Name: components_translations_core_components_components components_translations_core_components_entity_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.components_translations_core_components_components + ADD CONSTRAINT components_translations_core_components_entity_fk FOREIGN KEY (entity_id) REFERENCES public.components_translations_core_components(id) ON DELETE CASCADE; + + +-- +-- Name: courses courses_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.courses + ADD CONSTRAINT courses_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: courses_modules_links courses_modules_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.courses_modules_links + ADD CONSTRAINT courses_modules_links_fk FOREIGN KEY (course_id) REFERENCES public.courses(id) ON DELETE CASCADE; + + +-- +-- Name: courses_modules_links courses_modules_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.courses_modules_links + ADD CONSTRAINT courses_modules_links_inv_fk FOREIGN KEY (module_id) REFERENCES public.modules(id) ON DELETE CASCADE; + + +-- +-- Name: courses courses_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.courses + ADD CONSTRAINT courses_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: files files_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.files + ADD CONSTRAINT files_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: files_related_morphs files_related_morphs_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.files_related_morphs + ADD CONSTRAINT files_related_morphs_fk FOREIGN KEY (file_id) REFERENCES public.files(id) ON DELETE CASCADE; + + +-- +-- Name: files files_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.files + ADD CONSTRAINT files_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: i18n_locale i18n_locale_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.i18n_locale + ADD CONSTRAINT i18n_locale_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: i18n_locale i18n_locale_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.i18n_locale + ADD CONSTRAINT i18n_locale_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: lessons lessons_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.lessons + ADD CONSTRAINT lessons_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: lessons_components lessons_entity_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.lessons_components + ADD CONSTRAINT lessons_entity_fk FOREIGN KEY (entity_id) REFERENCES public.lessons(id) ON DELETE CASCADE; + + +-- +-- Name: lessons_module_links lessons_module_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.lessons_module_links + ADD CONSTRAINT lessons_module_links_fk FOREIGN KEY (lesson_id) REFERENCES public.lessons(id) ON DELETE CASCADE; + + +-- +-- Name: lessons_module_links lessons_module_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.lessons_module_links + ADD CONSTRAINT lessons_module_links_inv_fk FOREIGN KEY (module_id) REFERENCES public.modules(id) ON DELETE CASCADE; + + +-- +-- Name: lessons_syntax_entry_links lessons_syntax_entry_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.lessons_syntax_entry_links + ADD CONSTRAINT lessons_syntax_entry_links_fk FOREIGN KEY (lesson_id) REFERENCES public.lessons(id) ON DELETE CASCADE; + + +-- +-- Name: lessons_syntax_entry_links lessons_syntax_entry_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.lessons_syntax_entry_links + ADD CONSTRAINT lessons_syntax_entry_links_inv_fk FOREIGN KEY (syntax_entry_id) REFERENCES public.syntax_entries(id) ON DELETE CASCADE; + + +-- +-- Name: lessons lessons_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.lessons + ADD CONSTRAINT lessons_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: modules modules_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.modules + ADD CONSTRAINT modules_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: modules_components modules_entity_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.modules_components + ADD CONSTRAINT modules_entity_fk FOREIGN KEY (entity_id) REFERENCES public.modules(id) ON DELETE CASCADE; + + +-- +-- Name: modules modules_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.modules + ADD CONSTRAINT modules_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: multiple_choice_challenges multiple_choice_challenges_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.multiple_choice_challenges + ADD CONSTRAINT multiple_choice_challenges_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: multiple_choice_challenges_components multiple_choice_challenges_entity_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.multiple_choice_challenges_components + ADD CONSTRAINT multiple_choice_challenges_entity_fk FOREIGN KEY (entity_id) REFERENCES public.multiple_choice_challenges(id) ON DELETE CASCADE; + + +-- +-- Name: multiple_choice_challenges multiple_choice_challenges_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.multiple_choice_challenges + ADD CONSTRAINT multiple_choice_challenges_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: strapi_api_tokens strapi_api_tokens_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.strapi_api_tokens + ADD CONSTRAINT strapi_api_tokens_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: strapi_api_tokens strapi_api_tokens_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.strapi_api_tokens + ADD CONSTRAINT strapi_api_tokens_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: sublessons sublessons_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.sublessons + ADD CONSTRAINT sublessons_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: sublessons_components sublessons_entity_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.sublessons_components + ADD CONSTRAINT sublessons_entity_fk FOREIGN KEY (entity_id) REFERENCES public.sublessons(id) ON DELETE CASCADE; + + +-- +-- Name: sublessons_lesson_links sublessons_lesson_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.sublessons_lesson_links + ADD CONSTRAINT sublessons_lesson_links_fk FOREIGN KEY (sublesson_id) REFERENCES public.sublessons(id) ON DELETE CASCADE; + + +-- +-- Name: sublessons_lesson_links sublessons_lesson_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.sublessons_lesson_links + ADD CONSTRAINT sublessons_lesson_links_inv_fk FOREIGN KEY (lesson_id) REFERENCES public.lessons(id) ON DELETE CASCADE; + + +-- +-- Name: sublessons_syntax_entry_links sublessons_syntax_entry_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.sublessons_syntax_entry_links + ADD CONSTRAINT sublessons_syntax_entry_links_fk FOREIGN KEY (sublesson_id) REFERENCES public.sublessons(id) ON DELETE CASCADE; + + +-- +-- Name: sublessons_syntax_entry_links sublessons_syntax_entry_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.sublessons_syntax_entry_links + ADD CONSTRAINT sublessons_syntax_entry_links_inv_fk FOREIGN KEY (syntax_entry_id) REFERENCES public.syntax_entries(id) ON DELETE CASCADE; + + +-- +-- Name: sublessons sublessons_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.sublessons + ADD CONSTRAINT sublessons_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: syntax_entries syntax_entries_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.syntax_entries + ADD CONSTRAINT syntax_entries_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: syntax_entries_lesson_links syntax_entries_lesson_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.syntax_entries_lesson_links + ADD CONSTRAINT syntax_entries_lesson_links_fk FOREIGN KEY (syntax_entry_id) REFERENCES public.syntax_entries(id) ON DELETE CASCADE; + + +-- +-- Name: syntax_entries_lesson_links syntax_entries_lesson_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.syntax_entries_lesson_links + ADD CONSTRAINT syntax_entries_lesson_links_inv_fk FOREIGN KEY (lesson_id) REFERENCES public.lessons(id) ON DELETE CASCADE; + + +-- +-- Name: syntax_entries_sublesson_links syntax_entries_sublesson_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.syntax_entries_sublesson_links + ADD CONSTRAINT syntax_entries_sublesson_links_fk FOREIGN KEY (syntax_entry_id) REFERENCES public.syntax_entries(id) ON DELETE CASCADE; + + +-- +-- Name: syntax_entries_sublesson_links syntax_entries_sublesson_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.syntax_entries_sublesson_links + ADD CONSTRAINT syntax_entries_sublesson_links_inv_fk FOREIGN KEY (sublesson_id) REFERENCES public.sublessons(id) ON DELETE CASCADE; + + +-- +-- Name: syntax_entries syntax_entries_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.syntax_entries + ADD CONSTRAINT syntax_entries_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: translation_groups translation_groups_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.translation_groups + ADD CONSTRAINT translation_groups_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: translation_groups_components translation_groups_entity_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.translation_groups_components + ADD CONSTRAINT translation_groups_entity_fk FOREIGN KEY (entity_id) REFERENCES public.translation_groups(id) ON DELETE CASCADE; + + +-- +-- Name: translation_groups translation_groups_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.translation_groups + ADD CONSTRAINT translation_groups_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: up_permissions up_permissions_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_permissions + ADD CONSTRAINT up_permissions_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: up_permissions_role_links up_permissions_role_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_permissions_role_links + ADD CONSTRAINT up_permissions_role_links_fk FOREIGN KEY (permission_id) REFERENCES public.up_permissions(id) ON DELETE CASCADE; + + +-- +-- Name: up_permissions_role_links up_permissions_role_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_permissions_role_links + ADD CONSTRAINT up_permissions_role_links_inv_fk FOREIGN KEY (role_id) REFERENCES public.up_roles(id) ON DELETE CASCADE; + + +-- +-- Name: up_permissions up_permissions_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_permissions + ADD CONSTRAINT up_permissions_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: up_roles up_roles_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_roles + ADD CONSTRAINT up_roles_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: up_roles up_roles_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_roles + ADD CONSTRAINT up_roles_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: up_users up_users_created_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_users + ADD CONSTRAINT up_users_created_by_id_fk FOREIGN KEY (created_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- Name: up_users_role_links up_users_role_links_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_users_role_links + ADD CONSTRAINT up_users_role_links_fk FOREIGN KEY (user_id) REFERENCES public.up_users(id) ON DELETE CASCADE; + + +-- +-- Name: up_users_role_links up_users_role_links_inv_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_users_role_links + ADD CONSTRAINT up_users_role_links_inv_fk FOREIGN KEY (role_id) REFERENCES public.up_roles(id) ON DELETE CASCADE; + + +-- +-- Name: up_users up_users_updated_by_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: acc-v4 +-- + +ALTER TABLE ONLY public.up_users + ADD CONSTRAINT up_users_updated_by_id_fk FOREIGN KEY (updated_by_id) REFERENCES public.admin_users(id) ON DELETE SET NULL; + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/backup-remote-1644165657.pgsql b/backup-remote-1644165657.pgsql new file mode 100644 index 0000000..4d19c45 Binary files /dev/null and b/backup-remote-1644165657.pgsql differ diff --git a/backup-remote-1646082006.pgsql b/backup-remote-1646082006.pgsql new file mode 100644 index 0000000..06b5fae Binary files /dev/null and b/backup-remote-1646082006.pgsql differ diff --git a/backup-remote-1646313453.pgsql b/backup-remote-1646313453.pgsql new file mode 100644 index 0000000..bf56a27 Binary files /dev/null and b/backup-remote-1646313453.pgsql differ diff --git a/backup-remote-1646314445.pgsql b/backup-remote-1646314445.pgsql new file mode 100644 index 0000000..4392143 Binary files /dev/null and b/backup-remote-1646314445.pgsql differ diff --git a/backup-remote-1646317251.pgsql b/backup-remote-1646317251.pgsql new file mode 100644 index 0000000..c5acda1 Binary files /dev/null and b/backup-remote-1646317251.pgsql differ diff --git a/config/admin.js b/config/admin.js index 2dccf6f..1d3de3d 100644 --- a/config/admin.js +++ b/config/admin.js @@ -1,5 +1,6 @@ module.exports = ({ env }) => ({ auth: { - secret: env('ADMIN_JWT_SECRET', '9f57058c01429d625346594277bcfcf4'), + secret: env("ADMIN_JWT_SECRET", "9f57058c01429d625346594277bcfcf4"), }, + watchIgnoreFiles: ["**/config/sync/**"], }); diff --git a/config/database.js b/config/database.js index d54a27a..c527d7f 100644 --- a/config/database.js +++ b/config/database.js @@ -1,25 +1,18 @@ const parse = require("pg-connection-string").parse; -const config = process.env.DATABASE_URL ? parse(process.env.DATABASE_URL) : {}; - -const isProduction = true; - -console.log("is production?", isProduction); - -console.log("THIS IS THE CONFIG", config); +const databaseUrl = process.env.DATABASE_URL + ? parse(process.env.DATABASE_URL) + : {}; module.exports = ({ env }) => ({ connection: { client: "postgres", connection: { - // I'm pretty sure env is a helper and can help me get rid of || - host: config.host || env("DATABASE_HOST", "127.0.0.1"), - port: config.port || env.int("DATABASE_PORT", 5432), - database: config.database || env("DATABASE_NAME", "acc-v4"), - user: config.user || env("DATABASE_USERNAME", "acc-v4"), - password: config.password || env("DATABASE_PASSWORD", "password"), - // ssl: config.sslEnabled || env.bool("DATABASE_SSL", false), - // ssl: true, - ssl: isProduction + host: databaseUrl.host || "127.0.0.1", + port: databaseUrl.port || 5432, + database: databaseUrl.database || env("DATABASE_NAME", "postgres"), + user: databaseUrl.user || env("DATABASE_USER", "postgres"), + password: databaseUrl.password || env("DATABASE_PASSWORD", "password"), + ssl: env.bool("IS_PRODUCTION", false) ? { rejectUnauthorized: false, } diff --git a/config/env/production/database.js b/config/env/production/database.js deleted file mode 100644 index 0e274a6..0000000 --- a/config/env/production/database.js +++ /dev/null @@ -1,23 +0,0 @@ -const parse = require("pg-connection-string").parse; -const config = parse(process.env.DATABASE_URL); - -module.exports = () => ({ - defaultConnection: "default", - connections: { - default: { - connector: "bookshelf", - settings: { - client: "postgres", - host: config.host, - port: config.port, - database: config.database, - username: config.user, - password: config.password, - ssl: { - rejectUnauthorized: false, - }, - }, - options: {}, - }, - }, -}); diff --git a/config/middlewares.js b/config/middlewares.js index f6e65b6..70a54a2 100644 --- a/config/middlewares.js +++ b/config/middlewares.js @@ -1,11 +1,12 @@ module.exports = [ - 'strapi::errors', - 'strapi::security', - 'strapi::cors', - 'strapi::poweredBy', - 'strapi::logger', - 'strapi::query', - 'strapi::body', - 'strapi::favicon', - 'strapi::public', + "strapi::errors", + "strapi::security", + "strapi::cors", + "strapi::poweredBy", + "strapi::logger", + "strapi::query", + "strapi::body", + "strapi::session", + "strapi::favicon", + "strapi::public", ]; diff --git a/config/plugins.js b/config/plugins.js new file mode 100644 index 0000000..56a65ee --- /dev/null +++ b/config/plugins.js @@ -0,0 +1,17 @@ +module.exports = { + graphql: { + config: { + syncDir: "config/sync", + minify: false, + importOnBootstrap: false, + customTypes: [], + excludedTypes: [], + excludedConfig: [], + defaultLimit: 100, + }, + }, + "challenge-view": { + enabled: true, + resolve: "./src/plugins/challenge-view", + }, +}; diff --git a/config/server.js b/config/server.js index 6c4af49..a79abaf 100644 --- a/config/server.js +++ b/config/server.js @@ -1,4 +1,7 @@ module.exports = ({ env }) => ({ host: env("HOST", "0.0.0.0"), port: env.int("PORT", 1337), + app: { + keys: env.array("APP_KEYS", ["testKey1", "testKey2"]), + }, }); diff --git a/config/sync/admin-role.strapi-author.json b/config/sync/admin-role.strapi-author.json new file mode 100644 index 0000000..f9ed3a0 --- /dev/null +++ b/config/sync/admin-role.strapi-author.json @@ -0,0 +1,499 @@ +{ + "name": "Author", + "code": "strapi-author", + "description": "Authors can manage the content they have created.", + "permissions": [ + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::code-challenge.code-challenge", + "properties": { + "fields": [ + "startingCode", + "tests.label", + "tests.internalTest", + "tests.furtherExplanation", + "prompt", + "internalLabel", + "internalNotes", + "hints.text", + "hints.recommendedTimeBeforeViewing", + "getStartingCodeFromPreviousChallenge" + ] + }, + "conditions": [ + "admin::is-creator" + ], + "getStartingCodeFromPreviousChallenge": + "MetaTest.caseCode", + "MetaTest.label": + "MetaTest.passes", + "category" + : + }, + "conditions", ["admin::is-creator"] + , + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::code-challenge.code-challenge", + "properties": {}, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::code-challenge.code-challenge", + "properties": { + "fields": [ + "startingCode", + "tests.label", + "tests.internalTest", + "tests.furtherExplanation", + "prompt", + "internalLabel", + "internalNotes", + "hints.text", + "hints.recommendedTimeBeforeViewing", + "getStartingCodeFromPreviousChallenge", + "MetaTest.caseCode", + "MetaTest.label", + "MetaTest.passes", + "category" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::code-challenge.code-challenge", + "properties": { + "fields": [ + "startingCode", + "tests.label", + "tests.internalTest", + "tests.furtherExplanation", + "prompt", + "internalLabel", + "internalNotes", + "hints.text", + "hints.recommendedTimeBeforeViewing", + "getStartingCodeFromPreviousChallenge", + "MetaTest.caseCode", + "MetaTest.label", + "MetaTest.passes", + "category" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::course.course", + "properties": { + "fields": ["name", "slug", "modules"] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::course.course", + "properties": {}, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::course.course", + "properties": { + "fields": [ + "name", + "slug", + "modules" + ] + }, + "conditions": [ + "admin::is-creator" + ] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::course.course", + "properties": { + "fields": [ + "name", + "slug", + "modules" + ] + }, + "conditions": [ + "admin::is-creator" + ] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::lesson.lesson", + "properties": { + "fields": [ + "slug", + "name", + "isHard", + "internalNotes", + "externalResources.name", + "externalResources.link", + "externalResources.type", + "sublessons", + "module", + "syntaxEntry" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::lesson.lesson", + "properties": {}, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::lesson.lesson", + "properties": { + "fields": [ + "slug", + "name", + "isHard", + "internalNotes", + "externalResources.name", + "externalResources.link", + "externalResources.type", + "sublessons", + "module", + "syntaxEntry" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::lesson.lesson", + "properties": { + "fields": [ + "slug", + "name", + "isHard", + "internalNotes", + "externalResources.name", + "externalResources.link", + "externalResources.type", + "sublessons", + "module", + "syntaxEntry" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::module.module", + "properties": { + "fields": ["name", "lessons", "moduleLessons.lesson"] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::module.module", + "properties": {}, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::module.module", + "properties": { + "fields": ["name", "lessons", "moduleLessons.lesson"] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::module.module", + "properties": { + "fields": ["name", "lessons", "moduleLessons.lesson"] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": { + "fields": [ + "options.text", + "options.isCorrect", + "options.incorrectChoiceExplanation", + "prompt", + "internalLabel", + "canSelectMultipleOptions", + "optionsInitiallyHidden" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": {}, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": { + "fields": [ + "options.text", + "options.isCorrect", + "options.incorrectChoiceExplanation", + "prompt", + "internalLabel", + "canSelectMultipleOptions", + "optionsInitiallyHidden" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": { + "fields": [ + "options.text", + "options.isCorrect", + "options.incorrectChoiceExplanation", + "prompt", + "internalLabel", + "canSelectMultipleOptions", + "optionsInitiallyHidden" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::playground.playground", + "properties": { + "fields": ["internalLabel", "internalNotes", "prompt"] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::playground.playground", + "properties": {}, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::playground.playground", + "properties": { + "fields": ["internalLabel", "internalNotes", "prompt"] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::playground.playground", + "properties": { + "fields": ["internalLabel", "internalNotes", "prompt"] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::sublesson.sublesson", + "properties": { + "fields": [ + "name", + "description", + "internalNotes", + "lesson", + "challenges.codeChallenge", + "challenges.multipleChoiceChallenge", + "challenges.playground", + "syntaxEntry", + "steps.codeChallenge", + "steps.multipleChoiceChallenge", + "steps.playground" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::sublesson.sublesson", + "properties": {}, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::sublesson.sublesson", + "properties": { + "fields": [ + "name", + "description", + "internalNotes", + "lesson", + "challenges.codeChallenge", + "challenges.multipleChoiceChallenge", + "challenges.playground", + "syntaxEntry", + "steps.codeChallenge", + "steps.multipleChoiceChallenge", + "steps.playground" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::sublesson.sublesson", + "properties": { + "fields": [ + "name", + "description", + "internalNotes", + "lesson", + "challenges.codeChallenge", + "challenges.multipleChoiceChallenge", + "challenges.playground", + "syntaxEntry", + "steps.codeChallenge", + "steps.multipleChoiceChallenge", + "steps.playground" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::syntax-entry.syntax-entry", + "properties": { + "fields": [ + "content", + "name", + "internalNotes", + "maxWidth", + "sublesson", + "lesson" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::syntax-entry.syntax-entry", + "properties": {}, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::syntax-entry.syntax-entry", + "properties": { + "fields": [ + "content", + "name", + "internalNotes", + "maxWidth", + "sublesson", + "lesson" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::syntax-entry.syntax-entry", + "properties": { + "fields": [ + "content", + "name", + "internalNotes", + "maxWidth", + "sublesson", + "lesson" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::translation-group.translation-group", + "properties": { + "fields": [ + "aboutPage.title", + "coreComponents.backButton", + "coreComponents.nextButton", + "coreComponents.wefwe" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::translation-group.translation-group", + "properties": {}, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::translation-group.translation-group", + "properties": { + "fields": [ + "aboutPage.title", + "coreComponents.backButton", + "coreComponents.nextButton", + "coreComponents.wefwe" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::translation-group.translation-group", + "properties": { + "fields": [ + "aboutPage.title", + "coreComponents.backButton", + "coreComponents.nextButton", + "coreComponents.wefwe" + ] + }, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::upload.assets.copy-link", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.assets.create", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.assets.download", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.assets.update", + "subject": null, + "properties": {}, + "conditions": ["admin::is-creator"] + }, + { + "action": "plugin::upload.read", + "subject": null, + "properties": {}, + "conditions": ["admin::is-creator"] + } + ] +} diff --git a/config/sync/admin-role.strapi-editor.json b/config/sync/admin-role.strapi-editor.json new file mode 100644 index 0000000..085b88c --- /dev/null +++ b/config/sync/admin-role.strapi-editor.json @@ -0,0 +1,535 @@ +{ + "name": "Editor", + "code": "strapi-editor", + "description": "Editors can manage and publish contents including those of other users.", + "permissions": [ + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::code-challenge.code-challenge", + "properties": { + "fields": [ + "startingCode", + "tests.label", + "tests.internalTest", + "tests.furtherExplanation", + "prompt", + "internalLabel", + "internalNotes", + "hints.text", + "hints.recommendedTimeBeforeViewing", + "getStartingCodeFromPreviousChallenge", + "MetaTest.caseCode", + "MetaTest.label", + "MetaTest.passes", + "category" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::code-challenge.code-challenge", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::code-challenge.code-challenge", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::code-challenge.code-challenge", + "properties": { + "fields": [ + "startingCode", + "tests.label", + "tests.internalTest", + "tests.furtherExplanation", + "prompt", + "internalLabel", + "internalNotes", + "hints.text", + "hints.recommendedTimeBeforeViewing", + "getStartingCodeFromPreviousChallenge", + "MetaTest.caseCode", + "MetaTest.label", + "MetaTest.passes", + "category" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::code-challenge.code-challenge", + "properties": { + "fields": [ + "startingCode", + "tests.label", + "tests.internalTest", + "tests.furtherExplanation", + "prompt", + "internalLabel", + "internalNotes", + "hints.text", + "hints.recommendedTimeBeforeViewing", + "getStartingCodeFromPreviousChallenge", + "MetaTest.caseCode", + "MetaTest.label", + "MetaTest.passes", + "category" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::course.course", + "properties": { + "fields": ["name", "slug", "modules"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::course.course", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::course.course", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::course.course", + "properties": { + "fields": ["name", "slug", "modules"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::course.course", + "properties": { + "fields": ["name", "slug", "modules"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::lesson.lesson", + "properties": { + "fields": [ + "slug", + "name", + "isHard", + "internalNotes", + "externalResources.name", + "externalResources.link", + "externalResources.type", + "sublessons", + "module", + "syntaxEntry" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::lesson.lesson", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::lesson.lesson", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::lesson.lesson", + "properties": { + "fields": [ + "slug", + "name", + "isHard", + "internalNotes", + "externalResources.name", + "externalResources.link", + "externalResources.type", + "sublessons", + "module", + "syntaxEntry" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::lesson.lesson", + "properties": { + "fields": [ + "slug", + "name", + "isHard", + "internalNotes", + "externalResources.name", + "externalResources.link", + "externalResources.type", + "sublessons", + "module", + "syntaxEntry" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::module.module", + "properties": { + "fields": ["name", "lessons", "moduleLessons.lesson"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::module.module", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::module.module", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::module.module", + "properties": { + "fields": ["name", "lessons", "moduleLessons.lesson"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::module.module", + "properties": { + "fields": ["name", "lessons", "moduleLessons.lesson"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": { + "fields": [ + "options.text", + "options.isCorrect", + "options.incorrectChoiceExplanation", + "prompt", + "internalLabel", + "canSelectMultipleOptions", + "optionsInitiallyHidden" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": { + "fields": [ + "options.text", + "options.isCorrect", + "options.incorrectChoiceExplanation", + "prompt", + "internalLabel", + "canSelectMultipleOptions", + "optionsInitiallyHidden" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": { + "fields": [ + "options.text", + "options.isCorrect", + "options.incorrectChoiceExplanation", + "prompt", + "internalLabel", + "canSelectMultipleOptions", + "optionsInitiallyHidden" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::playground.playground", + "properties": { + "fields": ["internalLabel", "internalNotes", "prompt"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::playground.playground", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::playground.playground", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::playground.playground", + "properties": { + "fields": ["internalLabel", "internalNotes", "prompt"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::playground.playground", + "properties": { + "fields": ["internalLabel", "internalNotes", "prompt"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::sublesson.sublesson", + "properties": { + "fields": [ + "name", + "description", + "internalNotes", + "lesson", + "challenges.codeChallenge", + "challenges.multipleChoiceChallenge", + "challenges.playground", + "syntaxEntry", + "steps.codeChallenge", + "steps.multipleChoiceChallenge", + "steps.playground" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::sublesson.sublesson", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::sublesson.sublesson", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::sublesson.sublesson", + "properties": { + "fields": [ + "name", + "description", + "internalNotes", + "lesson", + "challenges.codeChallenge", + "challenges.multipleChoiceChallenge", + "challenges.playground", + "syntaxEntry", + "steps.codeChallenge", + "steps.multipleChoiceChallenge", + "steps.playground" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::sublesson.sublesson", + "properties": { + "fields": [ + "name", + "description", + "internalNotes", + "lesson", + "challenges.codeChallenge", + "challenges.multipleChoiceChallenge", + "challenges.playground", + "syntaxEntry", + "steps.codeChallenge", + "steps.multipleChoiceChallenge", + "steps.playground" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::syntax-entry.syntax-entry", + "properties": { + "fields": [ + "content", + "name", + "internalNotes", + "maxWidth", + "sublesson", + "lesson" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::syntax-entry.syntax-entry", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::syntax-entry.syntax-entry", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::syntax-entry.syntax-entry", + "properties": { + "fields": [ + "content", + "name", + "internalNotes", + "maxWidth", + "sublesson", + "lesson" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::syntax-entry.syntax-entry", + "properties": { + "fields": [ + "content", + "name", + "internalNotes", + "maxWidth", + "sublesson", + "lesson" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::translation-group.translation-group", + "properties": { + "fields": [ + "aboutPage.title", + "coreComponents.backButton", + "coreComponents.nextButton", + "coreComponents.wefwe" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::translation-group.translation-group", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::translation-group.translation-group", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::translation-group.translation-group", + "properties": { + "fields": [ + "aboutPage.title", + "coreComponents.backButton", + "coreComponents.nextButton", + "coreComponents.wefwe" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::translation-group.translation-group", + "properties": { + "fields": [ + "aboutPage.title", + "coreComponents.backButton", + "coreComponents.nextButton", + "coreComponents.wefwe" + ] + }, + "conditions": [] + }, + { + "action": "plugin::upload.assets.copy-link", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.assets.create", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.assets.download", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.assets.update", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.read", + "subject": null, + "properties": {}, + "conditions": [] + } + ] +} diff --git a/config/sync/admin-role.strapi-super-admin.json b/config/sync/admin-role.strapi-super-admin.json new file mode 100644 index 0000000..77401fe --- /dev/null +++ b/config/sync/admin-role.strapi-super-admin.json @@ -0,0 +1,910 @@ +{ + "name": "Super Admin", + "code": "strapi-super-admin", + "description": "Super Admins can access and manage all features and settings.", + "permissions": [ + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::code-challenge.code-challenge", + "properties": { + "fields": [ + "startingCode", + "tests.label", + "tests.internalTest", + "tests.furtherExplanation", + "prompt", + "internalLabel", + "internalNotes", + "hints.text", + "hints.recommendedTimeBeforeViewing", + "getStartingCodeFromPreviousChallenge", + "MetaTest.caseCode", + "MetaTest.label", + "MetaTest.passes", + "category", + "editorMeta.context", + "challengeMeta.isDebuggingChallenge", + "challengeMeta.lesson" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::code-challenge.code-challenge", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::code-challenge.code-challenge", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::code-challenge.code-challenge", + "properties": { + "fields": [ + "startingCode", + "tests.label", + "tests.internalTest", + "tests.furtherExplanation", + "prompt", + "internalLabel", + "internalNotes", + "hints.text", + "hints.recommendedTimeBeforeViewing", + "getStartingCodeFromPreviousChallenge", + "MetaTest.caseCode", + "MetaTest.label", + "MetaTest.passes", + "category", + "editorMeta.context", + "challengeMeta.isDebuggingChallenge", + "challengeMeta.lesson" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::code-challenge.code-challenge", + "properties": { + "fields": [ + "startingCode", + "tests.label", + "tests.internalTest", + "tests.furtherExplanation", + "prompt", + "internalLabel", + "internalNotes", + "hints.text", + "hints.recommendedTimeBeforeViewing", + "getStartingCodeFromPreviousChallenge", + "MetaTest.caseCode", + "MetaTest.label", + "MetaTest.passes", + "category", + "editorMeta.context", + "challengeMeta.isDebuggingChallenge", + "challengeMeta.lesson" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::course.course", + "properties": { + "fields": ["name", "slug", "modules"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::course.course", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::course.course", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::course.course", + "properties": { + "fields": ["name", "slug", "modules"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::course.course", + "properties": { + "fields": ["name", "slug", "modules"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::lesson.lesson", + "properties": { + "fields": [ + "slug", + "name", + "isHard", + "internalNotes", + "externalResources.name", + "externalResources.link", + "externalResources.type", + "sublessons", + "module", + "syntaxEntry" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::lesson.lesson", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::lesson.lesson", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::lesson.lesson", + "properties": { + "fields": [ + "slug", + "name", + "isHard", + "internalNotes", + "externalResources.name", + "externalResources.link", + "externalResources.type", + "sublessons", + "module", + "syntaxEntry" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::lesson.lesson", + "properties": { + "fields": [ + "slug", + "name", + "isHard", + "internalNotes", + "externalResources.name", + "externalResources.link", + "externalResources.type", + "sublessons", + "module", + "syntaxEntry" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::module.module", + "properties": { + "fields": ["name", "lessons", "moduleLessons.lesson"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::module.module", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::module.module", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::module.module", + "properties": { + "fields": ["name", "lessons", "moduleLessons.lesson"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::module.module", + "properties": { + "fields": ["name", "lessons", "moduleLessons.lesson"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": { + "fields": [ + "options.text", + "options.isCorrect", + "options.incorrectChoiceExplanation", + "prompt", + "internalLabel", + "canSelectMultipleOptions", + "optionsInitiallyHidden" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": { + "fields": [ + "options.text", + "options.isCorrect", + "options.incorrectChoiceExplanation", + "prompt", + "internalLabel", + "canSelectMultipleOptions", + "optionsInitiallyHidden" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::multiple-choice-challenge.multiple-choice-challenge", + "properties": { + "fields": [ + "options.text", + "options.isCorrect", + "options.incorrectChoiceExplanation", + "prompt", + "internalLabel", + "canSelectMultipleOptions", + "optionsInitiallyHidden" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::playground.playground", + "properties": { + "fields": ["internalLabel", "internalNotes", "prompt"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::playground.playground", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::playground.playground", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::playground.playground", + "properties": { + "fields": ["internalLabel", "internalNotes", "prompt"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::playground.playground", + "properties": { + "fields": ["internalLabel", "internalNotes", "prompt"] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::project.project", + "properties": { + "fields": [ + "editorMeta.context", + "steps.text", + "steps.hints.text", + "steps.hints.recommendedTimeBeforeViewing", + "steps.exampleSolution", + "title", + "slug" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::project.project", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::project.project", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::project.project", + "properties": { + "fields": [ + "editorMeta.context", + "steps.text", + "steps.hints.text", + "steps.hints.recommendedTimeBeforeViewing", + "steps.exampleSolution", + "title", + "slug" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::project.project", + "properties": { + "fields": [ + "editorMeta.context", + "steps.text", + "steps.hints.text", + "steps.hints.recommendedTimeBeforeViewing", + "steps.exampleSolution", + "title", + "slug" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::sublesson.sublesson", + "properties": { + "fields": [ + "name", + "description", + "internalNotes", + "lesson", + "challenges.codeChallenge", + "challenges.multipleChoiceChallenge", + "challenges.playground", + "syntaxEntry", + "steps.codeChallenge", + "steps.multipleChoiceChallenge", + "steps.playground" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::sublesson.sublesson", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::sublesson.sublesson", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::sublesson.sublesson", + "properties": { + "fields": [ + "name", + "description", + "internalNotes", + "lesson", + "challenges.codeChallenge", + "challenges.multipleChoiceChallenge", + "challenges.playground", + "syntaxEntry", + "steps.codeChallenge", + "steps.multipleChoiceChallenge", + "steps.playground" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::sublesson.sublesson", + "properties": { + "fields": [ + "name", + "description", + "internalNotes", + "lesson", + "challenges.codeChallenge", + "challenges.multipleChoiceChallenge", + "challenges.playground", + "syntaxEntry", + "steps.codeChallenge", + "steps.multipleChoiceChallenge", + "steps.playground" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::syntax-entry.syntax-entry", + "properties": { + "fields": [ + "content", + "name", + "internalNotes", + "maxWidth", + "sublesson", + "lesson" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::syntax-entry.syntax-entry", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::syntax-entry.syntax-entry", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::syntax-entry.syntax-entry", + "properties": { + "fields": [ + "content", + "name", + "internalNotes", + "maxWidth", + "sublesson", + "lesson" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::syntax-entry.syntax-entry", + "properties": { + "fields": [ + "content", + "name", + "internalNotes", + "maxWidth", + "sublesson", + "lesson" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "api::translation-group.translation-group", + "properties": { + "fields": [ + "aboutPage.title", + "coreComponents.backButton", + "coreComponents.nextButton", + "coreComponents.wefwe" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "api::translation-group.translation-group", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "api::translation-group.translation-group", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "api::translation-group.translation-group", + "properties": { + "fields": [ + "aboutPage.title", + "coreComponents.backButton", + "coreComponents.nextButton", + "coreComponents.wefwe" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "api::translation-group.translation-group", + "properties": { + "fields": [ + "aboutPage.title", + "coreComponents.backButton", + "coreComponents.nextButton", + "coreComponents.wefwe" + ] + }, + "conditions": [] + }, + { + "action": "admin::api-tokens.create", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::api-tokens.delete", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::api-tokens.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::api-tokens.update", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::marketplace.plugins.install", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::marketplace.plugins.uninstall", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::marketplace.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::roles.create", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::roles.delete", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::roles.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::roles.update", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::users.create", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::users.delete", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::users.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::users.update", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::webhooks.create", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::webhooks.delete", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::webhooks.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "admin::webhooks.update", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::config-sync.menu-link", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::config-sync.settings.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.collection-types.configure-view", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.components.configure-layout", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.create", + "subject": "plugin::users-permissions.user", + "properties": { + "fields": [ + "username", + "email", + "provider", + "password", + "resetPasswordToken", + "confirmationToken", + "confirmed", + "blocked", + "role" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.delete", + "subject": "plugin::users-permissions.user", + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.read", + "subject": "plugin::users-permissions.user", + "properties": { + "fields": [ + "username", + "email", + "provider", + "password", + "resetPasswordToken", + "confirmationToken", + "confirmed", + "blocked", + "role" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.explorer.update", + "subject": "plugin::users-permissions.user", + "properties": { + "fields": [ + "username", + "email", + "provider", + "password", + "resetPasswordToken", + "confirmationToken", + "confirmed", + "blocked", + "role" + ] + }, + "conditions": [] + }, + { + "action": "plugin::content-manager.single-types.configure-view", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::content-type-builder.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::email.settings.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::i18n.locale.create", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::i18n.locale.delete", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::i18n.locale.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::i18n.locale.update", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.assets.copy-link", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.assets.create", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.assets.download", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.assets.update", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::upload.settings.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::users-permissions.advanced-settings.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::users-permissions.advanced-settings.update", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::users-permissions.email-templates.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::users-permissions.email-templates.update", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::users-permissions.providers.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::users-permissions.providers.update", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::users-permissions.roles.create", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::users-permissions.roles.delete", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::users-permissions.roles.read", + "subject": null, + "properties": {}, + "conditions": [] + }, + { + "action": "plugin::users-permissions.roles.update", + "subject": null, + "properties": {}, + "conditions": [] + } + ] +} diff --git a/config/sync/core-store.core_admin_auth.json b/config/sync/core-store.core_admin_auth.json new file mode 100644 index 0000000..8d5a66d --- /dev/null +++ b/config/sync/core-store.core_admin_auth.json @@ -0,0 +1,12 @@ +{ + "key": "core_admin_auth", + "value": { + "providers": { + "autoRegister": false, + "defaultRole": null + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##challenge.challenge-hints.json b/config/sync/core-store.plugin_content_manager_configuration_components##challenge.challenge-hints.json new file mode 100644 index 0000000..ff1274c --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##challenge.challenge-hints.json @@ -0,0 +1,78 @@ +{ + "key": "plugin_content_manager_configuration_components::challenge.challenge-hints", + "value": { + "uid": "challenge.challenge-hints", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "id", + "defaultSortBy": "id", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "text": { + "edit": { + "label": "Text", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Text", + "searchable": false, + "sortable": false + } + }, + "recommendedTimeBeforeViewing": { + "edit": { + "label": "RecommendedTimeBeforeViewing", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "RecommendedTimeBeforeViewing", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "recommendedTimeBeforeViewing" + ], + "edit": [ + [ + { + "name": "text", + "size": 12 + } + ], + [ + { + "name": "recommendedTimeBeforeViewing", + "size": 4 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##challenge.challenge-meta.json b/config/sync/core-store.plugin_content_manager_configuration_components##challenge.challenge-meta.json new file mode 100644 index 0000000..b672e3c --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##challenge.challenge-meta.json @@ -0,0 +1,78 @@ +{ + "key": "plugin_content_manager_configuration_components::challenge.challenge-meta", + "value": { + "uid": "challenge.challenge-meta", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "id", + "defaultSortBy": "id", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "isDebuggingChallenge": { + "edit": { + "label": "IsDebuggingChallenge", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "IsDebuggingChallenge", + "searchable": true, + "sortable": true + } + }, + "lesson": { + "edit": { + "label": "Lesson", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "slug" + }, + "list": { + "label": "Lesson", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "isDebuggingChallenge", + "lesson" + ], + "editRelations": [], + "edit": [ + [ + { + "name": "isDebuggingChallenge", + "size": 4 + }, + { + "name": "lesson", + "size": 6 + } + ] + ] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##challenge.code-challenge-test.json b/config/sync/core-store.plugin_content_manager_configuration_components##challenge.code-challenge-test.json new file mode 100644 index 0000000..597a6c8 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##challenge.code-challenge-test.json @@ -0,0 +1,98 @@ +{ + "key": "plugin_content_manager_configuration_components::challenge.code-challenge-test", + "value": { + "uid": "challenge.code-challenge-test", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "label", + "defaultSortBy": "label", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "label": { + "edit": { + "label": "Label", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Label", + "searchable": true, + "sortable": true + } + }, + "internalTest": { + "edit": { + "label": "InternalTest", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "InternalTest", + "searchable": false, + "sortable": false + } + }, + "furtherExplanation": { + "edit": { + "label": "FurtherExplanation", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "FurtherExplanation", + "searchable": false, + "sortable": false + } + } + }, + "layouts": { + "list": [ + "id", + "label" + ], + "edit": [ + [ + { + "name": "label", + "size": 6 + } + ], + [ + { + "name": "internalTest", + "size": 12 + } + ], + [ + { + "name": "furtherExplanation", + "size": 12 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##challenge.meta-test.json b/config/sync/core-store.plugin_content_manager_configuration_components##challenge.meta-test.json new file mode 100644 index 0000000..ff6b298 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##challenge.meta-test.json @@ -0,0 +1,97 @@ +{ + "key": "plugin_content_manager_configuration_components::challenge.meta-test", + "value": { + "uid": "challenge.meta-test", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "label", + "defaultSortBy": "label", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "caseCode": { + "edit": { + "label": "CaseCode", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "CaseCode", + "searchable": false, + "sortable": false + } + }, + "label": { + "edit": { + "label": "Label", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Label", + "searchable": true, + "sortable": true + } + }, + "passes": { + "edit": { + "label": "Passes", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Passes", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "label", + "passes" + ], + "edit": [ + [ + { + "name": "caseCode", + "size": 12 + } + ], + [ + { + "name": "label", + "size": 6 + }, + { + "name": "passes", + "size": 4 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##challenge.multiple-choice-options.json b/config/sync/core-store.plugin_content_manager_configuration_components##challenge.multiple-choice-options.json new file mode 100644 index 0000000..1b6de03 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##challenge.multiple-choice-options.json @@ -0,0 +1,98 @@ +{ + "key": "plugin_content_manager_configuration_components::challenge.multiple-choice-options", + "value": { + "uid": "challenge.multiple-choice-options", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "id", + "defaultSortBy": "id", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "text": { + "edit": { + "label": "Text", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Text", + "searchable": false, + "sortable": false + } + }, + "isCorrect": { + "edit": { + "label": "IsCorrect", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "IsCorrect", + "searchable": true, + "sortable": true + } + }, + "incorrectChoiceExplanation": { + "edit": { + "label": "IncorrectChoiceExplanation", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "IncorrectChoiceExplanation", + "searchable": false, + "sortable": false + } + } + }, + "layouts": { + "list": [ + "id", + "isCorrect" + ], + "edit": [ + [ + { + "name": "text", + "size": 12 + } + ], + [ + { + "name": "isCorrect", + "size": 4 + } + ], + [ + { + "name": "incorrectChoiceExplanation", + "size": 12 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##content.challenge-hints.json b/config/sync/core-store.plugin_content_manager_configuration_components##content.challenge-hints.json new file mode 100644 index 0000000..bfa0406 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##content.challenge-hints.json @@ -0,0 +1,78 @@ +{ + "key": "plugin_content_manager_configuration_components::content.challenge-hints", + "value": { + "uid": "content.challenge-hints", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "id", + "defaultSortBy": "id", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "text": { + "edit": { + "label": "Text", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Text", + "searchable": false, + "sortable": false + } + }, + "recommendedTimeBeforeViewing": { + "edit": { + "label": "RecommendedTimeBeforeViewing", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "RecommendedTimeBeforeViewing", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "recommendedTimeBeforeViewing" + ], + "edit": [ + [ + { + "name": "text", + "size": 12 + } + ], + [ + { + "name": "recommendedTimeBeforeViewing", + "size": 4 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##content.challenges.json b/config/sync/core-store.plugin_content_manager_configuration_components##content.challenges.json new file mode 100644 index 0000000..d4270ee --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##content.challenges.json @@ -0,0 +1,101 @@ +{ + "key": "plugin_content_manager_configuration_components::content.challenges", + "value": { + "uid": "content.challenges", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "id", + "defaultSortBy": "id", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "codeChallenge": { + "edit": { + "label": "CodeChallenge", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "internalLabel" + }, + "list": { + "label": "CodeChallenge", + "searchable": true, + "sortable": true + } + }, + "multipleChoiceChallenge": { + "edit": { + "label": "MultipleChoiceChallenge", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "internalLabel" + }, + "list": { + "label": "MultipleChoiceChallenge", + "searchable": true, + "sortable": true + } + }, + "playground": { + "edit": { + "label": "Playground", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "internalLabel" + }, + "list": { + "label": "Playground", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "codeChallenge", + "multipleChoiceChallenge", + "playground" + ], + "edit": [ + [ + { + "name": "codeChallenge", + "size": 6 + }, + { + "name": "multipleChoiceChallenge", + "size": 6 + } + ], + [ + { + "name": "playground", + "size": 6 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##content.external-resource.json b/config/sync/core-store.plugin_content_manager_configuration_components##content.external-resource.json new file mode 100644 index 0000000..3060e84 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##content.external-resource.json @@ -0,0 +1,98 @@ +{ + "key": "plugin_content_manager_configuration_components::content.external-resource", + "value": { + "uid": "content.external-resource", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "name": { + "edit": { + "label": "Name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Name", + "searchable": true, + "sortable": true + } + }, + "link": { + "edit": { + "label": "Link", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Link", + "searchable": true, + "sortable": true + } + }, + "type": { + "edit": { + "label": "Type", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Type", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "name", + "link", + "type" + ], + "edit": [ + [ + { + "name": "name", + "size": 6 + }, + { + "name": "link", + "size": 6 + } + ], + [ + { + "name": "type", + "size": 6 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##content.steps.json b/config/sync/core-store.plugin_content_manager_configuration_components##content.steps.json new file mode 100644 index 0000000..00b8dbb --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##content.steps.json @@ -0,0 +1,101 @@ +{ + "key": "plugin_content_manager_configuration_components::content.steps", + "value": { + "uid": "content.steps", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "id", + "defaultSortBy": "id", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "codeChallenge": { + "edit": { + "label": "CodeChallenge", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "internalLabel" + }, + "list": { + "label": "CodeChallenge", + "searchable": true, + "sortable": true + } + }, + "multipleChoiceChallenge": { + "edit": { + "label": "MultipleChoiceChallenge", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "internalLabel" + }, + "list": { + "label": "MultipleChoiceChallenge", + "searchable": true, + "sortable": true + } + }, + "playground": { + "edit": { + "label": "Playground", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "internalLabel" + }, + "list": { + "label": "Playground", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "codeChallenge", + "multipleChoiceChallenge", + "playground" + ], + "edit": [ + [ + { + "name": "codeChallenge", + "size": 6 + }, + { + "name": "multipleChoiceChallenge", + "size": 6 + } + ], + [ + { + "name": "playground", + "size": 6 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##misc.editor-meta.json b/config/sync/core-store.plugin_content_manager_configuration_components##misc.editor-meta.json new file mode 100644 index 0000000..ccda7ed --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##misc.editor-meta.json @@ -0,0 +1,57 @@ +{ + "key": "plugin_content_manager_configuration_components::misc.editor-meta", + "value": { + "uid": "misc.editor-meta", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "id", + "defaultSortBy": "id", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "context": { + "edit": { + "label": "Context", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Context", + "searchable": false, + "sortable": false + } + } + }, + "layouts": { + "list": [ + "id" + ], + "edit": [ + [ + { + "name": "context", + "size": 12 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##misc.module-lesson.json b/config/sync/core-store.plugin_content_manager_configuration_components##misc.module-lesson.json new file mode 100644 index 0000000..22ca275 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##misc.module-lesson.json @@ -0,0 +1,59 @@ +{ + "key": "plugin_content_manager_configuration_components::misc.module-lesson", + "value": { + "uid": "misc.module-lesson", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "id", + "defaultSortBy": "id", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "lesson": { + "edit": { + "label": "Lesson", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "slug" + }, + "list": { + "label": "Lesson", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "lesson" + ], + "edit": [ + [ + { + "name": "lesson", + "size": 6 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##project.project-steps.json b/config/sync/core-store.plugin_content_manager_configuration_components##project.project-steps.json new file mode 100644 index 0000000..56809f4 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##project.project-steps.json @@ -0,0 +1,97 @@ +{ + "key": "plugin_content_manager_configuration_components::project.project-steps", + "value": { + "uid": "project.project-steps", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "id", + "defaultSortBy": "id", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "text": { + "edit": { + "label": "Text", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Text", + "searchable": false, + "sortable": false + } + }, + "hints": { + "edit": { + "label": "Hints", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Hints", + "searchable": false, + "sortable": false + } + }, + "exampleSolution": { + "edit": { + "label": "ExampleSolution", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "ExampleSolution", + "searchable": false, + "sortable": false + } + } + }, + "layouts": { + "list": [ + "id" + ], + "edit": [ + [ + { + "name": "text", + "size": 12 + } + ], + [ + { + "name": "hints", + "size": 12 + } + ], + [ + { + "name": "exampleSolution", + "size": 12 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##translations.about-page.json b/config/sync/core-store.plugin_content_manager_configuration_components##translations.about-page.json new file mode 100644 index 0000000..77119c0 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##translations.about-page.json @@ -0,0 +1,58 @@ +{ + "key": "plugin_content_manager_configuration_components::translations.about-page", + "value": { + "uid": "translations.about-page", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "id", + "defaultSortBy": "id", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "title": { + "edit": { + "label": "Title", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Title", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "title" + ], + "edit": [ + [ + { + "name": "title", + "size": 6 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##translations.core-components.json b/config/sync/core-store.plugin_content_manager_configuration_components##translations.core-components.json new file mode 100644 index 0000000..b725592 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##translations.core-components.json @@ -0,0 +1,97 @@ +{ + "key": "plugin_content_manager_configuration_components::translations.core-components", + "value": { + "uid": "translations.core-components", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "backButton", + "defaultSortBy": "backButton", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + }, + "backButton": { + "edit": { + "label": "BackButton", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "BackButton", + "searchable": true, + "sortable": true + } + }, + "nextButton": { + "edit": { + "label": "NextButton", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "NextButton", + "searchable": true, + "sortable": true + } + }, + "wefwe": { + "edit": { + "label": "Wefwe", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Wefwe", + "searchable": false, + "sortable": false + } + } + }, + "layouts": { + "list": [ + "id", + "backButton", + "nextButton" + ], + "edit": [ + [ + { + "name": "backButton", + "size": 6 + }, + { + "name": "nextButton", + "size": 6 + } + ], + [ + { + "name": "wefwe", + "size": 12 + } + ] + ], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_components##translations.within-component.json b/config/sync/core-store.plugin_content_manager_configuration_components##translations.within-component.json new file mode 100644 index 0000000..9de6478 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_components##translations.within-component.json @@ -0,0 +1,36 @@ +{ + "key": "plugin_content_manager_configuration_components::translations.within-component", + "value": { + "uid": "translations.within-component", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "id", + "defaultSortBy": "id", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": false, + "sortable": false + } + } + }, + "layouts": { + "list": [ + "id" + ], + "edit": [], + "editRelations": [] + }, + "isComponent": true + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token.json new file mode 100644 index 0000000..18ed84e --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token.json @@ -0,0 +1,143 @@ +{ + "key": "plugin_content_manager_configuration_content_types::admin::api-token", + "value": { + "uid": "admin::api-token", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "name": { + "edit": { + "label": "Name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Name", + "searchable": true, + "sortable": true + } + }, + "description": { + "edit": { + "label": "Description", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Description", + "searchable": true, + "sortable": true + } + }, + "type": { + "edit": { + "label": "Type", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Type", + "searchable": true, + "sortable": true + } + }, + "accessKey": { + "edit": { + "label": "AccessKey", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "AccessKey", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "name", + "description", + "type" + ], + "editRelations": [], + "edit": [ + [ + { + "name": "name", + "size": 6 + }, + { + "name": "description", + "size": 6 + } + ], + [ + { + "name": "type", + "size": 6 + }, + { + "name": "accessKey", + "size": 6 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##permission.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##permission.json new file mode 100644 index 0000000..df771b7 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##permission.json @@ -0,0 +1,162 @@ +{ + "key": "plugin_content_manager_configuration_content_types::admin::permission", + "value": { + "uid": "admin::permission", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "action", + "defaultSortBy": "action", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "action": { + "edit": { + "label": "Action", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Action", + "searchable": true, + "sortable": true + } + }, + "subject": { + "edit": { + "label": "Subject", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Subject", + "searchable": true, + "sortable": true + } + }, + "properties": { + "edit": { + "label": "Properties", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Properties", + "searchable": false, + "sortable": false + } + }, + "conditions": { + "edit": { + "label": "Conditions", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Conditions", + "searchable": false, + "sortable": false + } + }, + "role": { + "edit": { + "label": "Role", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "Role", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "action", + "subject", + "role" + ], + "editRelations": [ + "role" + ], + "edit": [ + [ + { + "name": "action", + "size": 6 + }, + { + "name": "subject", + "size": 6 + } + ], + [ + { + "name": "properties", + "size": 12 + } + ], + [ + { + "name": "conditions", + "size": 12 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##role.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##role.json new file mode 100644 index 0000000..5709d97 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##role.json @@ -0,0 +1,158 @@ +{ + "key": "plugin_content_manager_configuration_content_types::admin::role", + "value": { + "uid": "admin::role", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "name": { + "edit": { + "label": "Name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Name", + "searchable": true, + "sortable": true + } + }, + "code": { + "edit": { + "label": "Code", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Code", + "searchable": true, + "sortable": true + } + }, + "description": { + "edit": { + "label": "Description", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Description", + "searchable": true, + "sortable": true + } + }, + "users": { + "edit": { + "label": "Users", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "Users", + "searchable": false, + "sortable": false + } + }, + "permissions": { + "edit": { + "label": "Permissions", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "action" + }, + "list": { + "label": "Permissions", + "searchable": false, + "sortable": false + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "name", + "code", + "description" + ], + "editRelations": [ + "users", + "permissions" + ], + "edit": [ + [ + { + "name": "name", + "size": 6 + }, + { + "name": "code", + "size": 6 + } + ], + [ + { + "name": "description", + "size": 6 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##user.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##user.json new file mode 100644 index 0000000..299addf --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##user.json @@ -0,0 +1,274 @@ +{ + "key": "plugin_content_manager_configuration_content_types::admin::user", + "value": { + "uid": "admin::user", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "firstname", + "defaultSortBy": "firstname", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "firstname": { + "edit": { + "label": "Firstname", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Firstname", + "searchable": true, + "sortable": true + } + }, + "lastname": { + "edit": { + "label": "Lastname", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Lastname", + "searchable": true, + "sortable": true + } + }, + "username": { + "edit": { + "label": "Username", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Username", + "searchable": true, + "sortable": true + } + }, + "email": { + "edit": { + "label": "Email", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Email", + "searchable": true, + "sortable": true + } + }, + "password": { + "edit": { + "label": "Password", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Password", + "searchable": true, + "sortable": true + } + }, + "resetPasswordToken": { + "edit": { + "label": "ResetPasswordToken", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "ResetPasswordToken", + "searchable": true, + "sortable": true + } + }, + "registrationToken": { + "edit": { + "label": "RegistrationToken", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "RegistrationToken", + "searchable": true, + "sortable": true + } + }, + "isActive": { + "edit": { + "label": "IsActive", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "IsActive", + "searchable": true, + "sortable": true + } + }, + "roles": { + "edit": { + "label": "Roles", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "Roles", + "searchable": false, + "sortable": false + } + }, + "blocked": { + "edit": { + "label": "Blocked", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Blocked", + "searchable": true, + "sortable": true + } + }, + "preferedLanguage": { + "edit": { + "label": "PreferedLanguage", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "PreferedLanguage", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "firstname", + "lastname", + "username" + ], + "editRelations": [ + "roles" + ], + "edit": [ + [ + { + "name": "firstname", + "size": 6 + }, + { + "name": "lastname", + "size": 6 + } + ], + [ + { + "name": "username", + "size": 6 + }, + { + "name": "email", + "size": 6 + } + ], + [ + { + "name": "password", + "size": 6 + }, + { + "name": "resetPasswordToken", + "size": 6 + } + ], + [ + { + "name": "registrationToken", + "size": 6 + }, + { + "name": "isActive", + "size": 4 + } + ], + [ + { + "name": "blocked", + "size": 4 + }, + { + "name": "preferedLanguage", + "size": 6 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##api##code-challenge.code-challenge.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##code-challenge.code-challenge.json new file mode 100644 index 0000000..c50099d --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##code-challenge.code-challenge.json @@ -0,0 +1,284 @@ +{ + "key": "plugin_content_manager_configuration_content_types::api::code-challenge.code-challenge", + "value": { + "uid": "api::code-challenge.code-challenge", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "internalLabel", + "defaultSortBy": "internalLabel", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "startingCode": { + "edit": { + "label": "StartingCode", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "StartingCode", + "searchable": false, + "sortable": false + } + }, + "tests": { + "edit": { + "label": "Tests", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Tests", + "searchable": false, + "sortable": false + } + }, + "prompt": { + "edit": { + "label": "Prompt", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Prompt", + "searchable": false, + "sortable": false + } + }, + "internalLabel": { + "edit": { + "label": "InternalLabel", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "InternalLabel", + "searchable": true, + "sortable": true + } + }, + "internalNotes": { + "edit": { + "label": "InternalNotes", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "InternalNotes", + "searchable": true, + "sortable": true + } + }, + "hints": { + "edit": { + "label": "Hints", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Hints", + "searchable": false, + "sortable": false + } + }, + "getStartingCodeFromPreviousChallenge": { + "edit": { + "label": "GetStartingCodeFromPreviousChallenge", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "GetStartingCodeFromPreviousChallenge", + "searchable": true, + "sortable": true + } + }, + "MetaTest": { + "edit": { + "label": "MetaTest", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "MetaTest", + "searchable": false, + "sortable": false + } + }, + "category": { + "edit": { + "label": "Category", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "Category", + "searchable": true, + "sortable": true + } + }, + "editorMeta": { + "edit": { + "label": "EditorMeta", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "EditorMeta", + "searchable": false, + "sortable": false + } + }, + "challengeMeta": { + "edit": { + "label": "ChallengeMeta", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "ChallengeMeta", + "searchable": false, + "sortable": false + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "internalLabel", + "internalNotes", + "getStartingCodeFromPreviousChallenge" + ], + "editRelations": ["category"], + "edit": [ + [ + { + "name": "internalLabel", + "size": 6 + }, + { + "name": "startingCode", + "size": 12 + } + ], + [ + { + "name": "tests", + "size": 12 + } + ], + [ + { + "name": "prompt", + "size": 12 + } + ], + [ + { + "name": "internalLabel", + "size": 6 + }, + { + "name": "internalNotes", + "size": 6 + } + ], + [ + { + "name": "hints", + "size": 12 + } + ], + [ + { + "name": "getStartingCodeFromPreviousChallenge", + "size": 4 + } + ], + [ + { + "name": "MetaTest", + "size": 12 + } + ], + [ + { + "name": "editorMeta", + "size": 12 + } + ], + [ + { + "name": "challengeMeta", + "size": 12 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##api##course.course.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##course.course.json new file mode 100644 index 0000000..cb7466f --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##course.course.json @@ -0,0 +1,122 @@ +{ + "key": "plugin_content_manager_configuration_content_types::api::course.course", + "value": { + "uid": "api::course.course", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 100, + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "name": { + "edit": { + "label": "Name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Name", + "searchable": true, + "sortable": true + } + }, + "slug": { + "edit": { + "label": "Slug", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Slug", + "searchable": true, + "sortable": true + } + }, + "modules": { + "edit": { + "label": "Modules", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "Modules", + "searchable": false, + "sortable": false + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "name", + "slug", + "modules" + ], + "editRelations": [ + "modules" + ], + "edit": [ + [ + { + "name": "name", + "size": 6 + }, + { + "name": "slug", + "size": 6 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##api##lesson.lesson.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##lesson.lesson.json new file mode 100644 index 0000000..b233ce9 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##lesson.lesson.json @@ -0,0 +1,213 @@ +{ + "key": "plugin_content_manager_configuration_content_types::api::lesson.lesson", + "value": { + "uid": "api::lesson.lesson", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "slug", + "defaultSortBy": "slug", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "slug": { + "edit": { + "label": "Slug", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Slug", + "searchable": true, + "sortable": true + } + }, + "name": { + "edit": { + "label": "Name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Name", + "searchable": true, + "sortable": true + } + }, + "isHard": { + "edit": { + "label": "IsHard", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "IsHard", + "searchable": true, + "sortable": true + } + }, + "internalNotes": { + "edit": { + "label": "InternalNotes", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "InternalNotes", + "searchable": true, + "sortable": true + } + }, + "externalResources": { + "edit": { + "label": "ExternalResources", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "ExternalResources", + "searchable": false, + "sortable": false + } + }, + "sublessons": { + "edit": { + "label": "Sublessons", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "Sublessons", + "searchable": false, + "sortable": false + } + }, + "module": { + "edit": { + "label": "Module", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "Module", + "searchable": true, + "sortable": true + } + }, + "syntaxEntry": { + "edit": { + "label": "SyntaxEntry", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "SyntaxEntry", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "slug", + "name", + "isHard" + ], + "editRelations": [ + "sublessons", + "module", + "syntaxEntry" + ], + + "edit": [ + [ + { + "name": "slug", + "size": 6 + }, + { + "name": "name", + "size": 6 + } + ], + [ + { + "name": "isHard", + "size": 4 + }, + { + "name": "internalNotes", + "size": 6 + } + ], + [ + { + "name": "externalResources", + "size": 12 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##api##module.module.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##module.module.json new file mode 100644 index 0000000..49797ad --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##module.module.json @@ -0,0 +1,124 @@ +{ + "key": "plugin_content_manager_configuration_content_types::api::module.module", + "value": { + "uid": "api::module.module", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "name": { + "edit": { + "label": "Name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Name", + "searchable": true, + "sortable": true + } + }, + "lessons": { + "edit": { + "label": "Lessons", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "slug" + }, + "list": { + "label": "Lessons", + "searchable": false, + "sortable": false + } + }, + "moduleLessons": { + "edit": { + "label": "ModuleLessons", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "ModuleLessons", + "searchable": false, + "sortable": false + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "name", + "lessons", + "createdAt" + ], + "editRelations": [ + "lessons" + ], + "edit": [ + [ + { + "name": "name", + "size": 6 + } + ], + [ + { + "name": "moduleLessons", + "size": 12 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##api##multiple-choice-challenge.multiple-choice-challenge.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##multiple-choice-challenge.multiple-choice-challenge.json new file mode 100644 index 0000000..5be9c08 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##multiple-choice-challenge.multiple-choice-challenge.json @@ -0,0 +1,165 @@ +{ + "key": "plugin_content_manager_configuration_content_types::api::multiple-choice-challenge.multiple-choice-challenge", + "value": { + "uid": "api::multiple-choice-challenge.multiple-choice-challenge", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "internalLabel", + "defaultSortBy": "internalLabel", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "options": { + "edit": { + "label": "Options", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Options", + "searchable": false, + "sortable": false + } + }, + "prompt": { + "edit": { + "label": "Prompt", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Prompt", + "searchable": false, + "sortable": false + } + }, + "internalLabel": { + "edit": { + "label": "InternalLabel", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "InternalLabel", + "searchable": true, + "sortable": true + } + }, + "canSelectMultipleOptions": { + "edit": { + "label": "CanSelectMultipleOptions", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "CanSelectMultipleOptions", + "searchable": true, + "sortable": true + } + }, + "optionsInitiallyHidden": { + "edit": { + "label": "OptionsInitiallyHidden", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "OptionsInitiallyHidden", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "internalLabel", + "canSelectMultipleOptions", + "optionsInitiallyHidden" + ], + "editRelations": [], + "edit": [ + [ + { + "name": "options", + "size": 12 + } + ], + [ + { + "name": "prompt", + "size": 12 + } + ], + [ + { + "name": "internalLabel", + "size": 6 + }, + { + "name": "canSelectMultipleOptions", + "size": 4 + } + ], + [ + { + "name": "optionsInitiallyHidden", + "size": 4 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##api##playground.playground.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##playground.playground.json new file mode 100644 index 0000000..d73bced --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##playground.playground.json @@ -0,0 +1,125 @@ +{ + "key": "plugin_content_manager_configuration_content_types::api::playground.playground", + "value": { + "uid": "api::playground.playground", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "internalLabel", + "defaultSortBy": "internalLabel", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "internalLabel": { + "edit": { + "label": "InternalLabel", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "InternalLabel", + "searchable": true, + "sortable": true + } + }, + "internalNotes": { + "edit": { + "label": "InternalNotes", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "InternalNotes", + "searchable": true, + "sortable": true + } + }, + "prompt": { + "edit": { + "label": "Prompt", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Prompt", + "searchable": false, + "sortable": false + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "internalLabel", + "internalNotes", + "createdAt" + ], + "editRelations": [], + "edit": [ + [ + { + "name": "internalLabel", + "size": 6 + }, + { + "name": "internalNotes", + "size": 6 + } + ], + [ + { + "name": "prompt", + "size": 12 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##api##project.project.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##project.project.json new file mode 100644 index 0000000..cd10c8a --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##project.project.json @@ -0,0 +1,144 @@ +{ + "key": "plugin_content_manager_configuration_content_types::api::project.project", + "value": { + "uid": "api::project.project", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 100, + "mainField": "title", + "defaultSortBy": "title", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "editorMeta": { + "edit": { + "label": "EditorMeta", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "EditorMeta", + "searchable": false, + "sortable": false + } + }, + "steps": { + "edit": { + "label": "Steps", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Steps", + "searchable": false, + "sortable": false + } + }, + "title": { + "edit": { + "label": "Title", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Title", + "searchable": true, + "sortable": true + } + }, + "slug": { + "edit": { + "label": "Slug", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Slug", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "edit": [ + [ + { + "name": "title", + "size": 6 + }, + { + "name": "slug", + "size": 6 + } + ], + [ + { + "name": "editorMeta", + "size": 12 + } + ], + [ + { + "name": "steps", + "size": 12 + } + ] + ], + "editRelations": [], + "list": [ + "title", + "createdAt", + "updatedAt" + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##api##sublesson.sublesson.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##sublesson.sublesson.json new file mode 100644 index 0000000..0bee287 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##sublesson.sublesson.json @@ -0,0 +1,192 @@ +{ + "key": "plugin_content_manager_configuration_content_types::api::sublesson.sublesson", + "value": { + "uid": "api::sublesson.sublesson", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "name": { + "edit": { + "label": "Name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Name", + "searchable": true, + "sortable": true + } + }, + "description": { + "edit": { + "label": "Description", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Description", + "searchable": false, + "sortable": false + } + }, + "internalNotes": { + "edit": { + "label": "InternalNotes", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "InternalNotes", + "searchable": true, + "sortable": true + } + }, + "lesson": { + "edit": { + "label": "Lesson", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "slug" + }, + "list": { + "label": "Lesson", + "searchable": true, + "sortable": true + } + }, + "challenges": { + "edit": { + "label": "Challenges", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Challenges", + "searchable": false, + "sortable": false + } + }, + "syntaxEntry": { + "edit": { + "label": "SyntaxEntry", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "SyntaxEntry", + "searchable": true, + "sortable": true + } + }, + "steps": { + "edit": { + "label": "Steps", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Steps", + "searchable": false, + "sortable": false + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": ["id", "name", "internalNotes", "lesson"], + "editRelations": ["lesson", "syntaxEntry"], + "edit": [ + [ + { + "name": "name", + "size": 6 + } + ], + [ + { + "name": "description", + "size": 12 + } + ], + [ + { + "name": "internalNotes", + "size": 6 + } + ], + [ + { + "name": "challenges", + "size": 12 + } + ], + [ + { + "name": "steps", + "size": 12 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##api##syntax-entry.syntax-entry.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##syntax-entry.syntax-entry.json new file mode 100644 index 0000000..1986078 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##syntax-entry.syntax-entry.json @@ -0,0 +1,178 @@ +{ + "key": "plugin_content_manager_configuration_content_types::api::syntax-entry.syntax-entry", + "value": { + "uid": "api::syntax-entry.syntax-entry", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "content": { + "edit": { + "label": "Content", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Content", + "searchable": false, + "sortable": false + } + }, + "name": { + "edit": { + "label": "Name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Name", + "searchable": true, + "sortable": true + } + }, + "internalNotes": { + "edit": { + "label": "InternalNotes", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "InternalNotes", + "searchable": true, + "sortable": true + } + }, + "maxWidth": { + "edit": { + "label": "MaxWidth", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "MaxWidth", + "searchable": true, + "sortable": true + } + }, + "sublesson": { + "edit": { + "label": "Sublesson", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "Sublesson", + "searchable": true, + "sortable": true + } + }, + "lesson": { + "edit": { + "label": "Lesson", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "slug" + }, + "list": { + "label": "Lesson", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "name", + "internalNotes", + "maxWidth" + ], + "editRelations": [ + "sublesson", + "lesson" + ], + "edit": [ + [ + { + "name": "content", + "size": 12 + } + ], + [ + { + "name": "name", + "size": 6 + }, + { + "name": "internalNotes", + "size": 6 + } + ], + [ + { + "name": "maxWidth", + "size": 4 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##api##translation-group.translation-group.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##translation-group.translation-group.json new file mode 100644 index 0000000..9866290 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##api##translation-group.translation-group.json @@ -0,0 +1,106 @@ +{ + "key": "plugin_content_manager_configuration_content_types::api::translation-group.translation-group", + "value": { + "uid": "api::translation-group.translation-group", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "id", + "defaultSortBy": "id", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "aboutPage": { + "edit": { + "label": "AboutPage", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "AboutPage", + "searchable": false, + "sortable": false + } + }, + "coreComponents": { + "edit": { + "label": "CoreComponents", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "CoreComponents", + "searchable": false, + "sortable": false + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "createdAt", + "updatedAt" + ], + "editRelations": [], + "edit": [ + [ + { + "name": "aboutPage", + "size": 12 + } + ], + [ + { + "name": "coreComponents", + "size": 12 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##i18n.locale.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##i18n.locale.json new file mode 100644 index 0000000..a242682 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##i18n.locale.json @@ -0,0 +1,105 @@ +{ + "key": "plugin_content_manager_configuration_content_types::plugin::i18n.locale", + "value": { + "uid": "plugin::i18n.locale", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "name": { + "edit": { + "label": "Name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Name", + "searchable": true, + "sortable": true + } + }, + "code": { + "edit": { + "label": "Code", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Code", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "name", + "code", + "createdAt" + ], + "editRelations": [], + "edit": [ + [ + { + "name": "name", + "size": 6 + }, + { + "name": "code", + "size": 6 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.file.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.file.json new file mode 100644 index 0000000..1981404 --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.file.json @@ -0,0 +1,337 @@ +{ + "key": "plugin_content_manager_configuration_content_types::plugin::upload.file", + "value": { + "uid": "plugin::upload.file", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "name": { + "edit": { + "label": "Name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Name", + "searchable": true, + "sortable": true + } + }, + "alternativeText": { + "edit": { + "label": "AlternativeText", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "AlternativeText", + "searchable": true, + "sortable": true + } + }, + "caption": { + "edit": { + "label": "Caption", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Caption", + "searchable": true, + "sortable": true + } + }, + "width": { + "edit": { + "label": "Width", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Width", + "searchable": true, + "sortable": true + } + }, + "height": { + "edit": { + "label": "Height", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Height", + "searchable": true, + "sortable": true + } + }, + "formats": { + "edit": { + "label": "Formats", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Formats", + "searchable": false, + "sortable": false + } + }, + "hash": { + "edit": { + "label": "Hash", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Hash", + "searchable": true, + "sortable": true + } + }, + "ext": { + "edit": { + "label": "Ext", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Ext", + "searchable": true, + "sortable": true + } + }, + "mime": { + "edit": { + "label": "Mime", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Mime", + "searchable": true, + "sortable": true + } + }, + "size": { + "edit": { + "label": "Size", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Size", + "searchable": true, + "sortable": true + } + }, + "url": { + "edit": { + "label": "Url", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Url", + "searchable": true, + "sortable": true + } + }, + "previewUrl": { + "edit": { + "label": "PreviewUrl", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "PreviewUrl", + "searchable": true, + "sortable": true + } + }, + "provider": { + "edit": { + "label": "Provider", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Provider", + "searchable": true, + "sortable": true + } + }, + "provider_metadata": { + "edit": { + "label": "Provider_metadata", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Provider_metadata", + "searchable": false, + "sortable": false + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "name", + "alternativeText", + "caption" + ], + "editRelations": [], + "edit": [ + [ + { + "name": "name", + "size": 6 + }, + { + "name": "alternativeText", + "size": 6 + } + ], + [ + { + "name": "caption", + "size": 6 + }, + { + "name": "width", + "size": 4 + } + ], + [ + { + "name": "height", + "size": 4 + } + ], + [ + { + "name": "formats", + "size": 12 + } + ], + [ + { + "name": "hash", + "size": 6 + }, + { + "name": "ext", + "size": 6 + } + ], + [ + { + "name": "mime", + "size": 6 + }, + { + "name": "size", + "size": 4 + } + ], + [ + { + "name": "url", + "size": 6 + }, + { + "name": "previewUrl", + "size": 6 + } + ], + [ + { + "name": "provider", + "size": 6 + } + ], + [ + { + "name": "provider_metadata", + "size": 12 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.permission.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.permission.json new file mode 100644 index 0000000..ed0763e --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.permission.json @@ -0,0 +1,104 @@ +{ + "key": "plugin_content_manager_configuration_content_types::plugin::users-permissions.permission", + "value": { + "uid": "plugin::users-permissions.permission", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "action", + "defaultSortBy": "action", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "action": { + "edit": { + "label": "Action", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Action", + "searchable": true, + "sortable": true + } + }, + "role": { + "edit": { + "label": "Role", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "Role", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "action", + "role", + "createdAt" + ], + "editRelations": [ + "role" + ], + "edit": [ + [ + { + "name": "action", + "size": 6 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.role.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.role.json new file mode 100644 index 0000000..c1961bb --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.role.json @@ -0,0 +1,158 @@ +{ + "key": "plugin_content_manager_configuration_content_types::plugin::users-permissions.role", + "value": { + "uid": "plugin::users-permissions.role", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "name": { + "edit": { + "label": "Name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Name", + "searchable": true, + "sortable": true + } + }, + "description": { + "edit": { + "label": "Description", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Description", + "searchable": true, + "sortable": true + } + }, + "type": { + "edit": { + "label": "Type", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Type", + "searchable": true, + "sortable": true + } + }, + "permissions": { + "edit": { + "label": "Permissions", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "action" + }, + "list": { + "label": "Permissions", + "searchable": false, + "sortable": false + } + }, + "users": { + "edit": { + "label": "Users", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "username" + }, + "list": { + "label": "Users", + "searchable": false, + "sortable": false + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "name", + "description", + "type" + ], + "editRelations": [ + "permissions", + "users" + ], + "edit": [ + [ + { + "name": "name", + "size": 6 + }, + { + "name": "description", + "size": 6 + } + ], + [ + { + "name": "type", + "size": 6 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.user.json b/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.user.json new file mode 100644 index 0000000..75cb0eb --- /dev/null +++ b/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.user.json @@ -0,0 +1,222 @@ +{ + "key": "plugin_content_manager_configuration_content_types::plugin::users-permissions.user", + "value": { + "uid": "plugin::users-permissions.user", + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "username", + "defaultSortBy": "username", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "Id", + "searchable": true, + "sortable": true + } + }, + "username": { + "edit": { + "label": "Username", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Username", + "searchable": true, + "sortable": true + } + }, + "email": { + "edit": { + "label": "Email", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Email", + "searchable": true, + "sortable": true + } + }, + "provider": { + "edit": { + "label": "Provider", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "Provider", + "searchable": true, + "sortable": true + } + }, + "password": { + "edit": { + "label": "Password", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Password", + "searchable": true, + "sortable": true + } + }, + "resetPasswordToken": { + "edit": { + "label": "ResetPasswordToken", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "ResetPasswordToken", + "searchable": true, + "sortable": true + } + }, + "confirmationToken": { + "edit": { + "label": "ConfirmationToken", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "ConfirmationToken", + "searchable": true, + "sortable": true + } + }, + "confirmed": { + "edit": { + "label": "Confirmed", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Confirmed", + "searchable": true, + "sortable": true + } + }, + "blocked": { + "edit": { + "label": "Blocked", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "Blocked", + "searchable": true, + "sortable": true + } + }, + "role": { + "edit": { + "label": "Role", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "Role", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "CreatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "CreatedAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "UpdatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "UpdatedAt", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": [ + "id", + "username", + "email", + "confirmed" + ], + "editRelations": [ + "role" + ], + "edit": [ + [ + { + "name": "username", + "size": 6 + }, + { + "name": "email", + "size": 6 + } + ], + [ + { + "name": "password", + "size": 6 + }, + { + "name": "confirmed", + "size": 4 + } + ], + [ + { + "name": "blocked", + "size": 4 + } + ] + ] + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_i18n_default_locale.json b/config/sync/core-store.plugin_i18n_default_locale.json new file mode 100644 index 0000000..c5f5fe5 --- /dev/null +++ b/config/sync/core-store.plugin_i18n_default_locale.json @@ -0,0 +1,7 @@ +{ + "key": "plugin_i18n_default_locale", + "value": "en", + "type": "string", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_upload_settings.json b/config/sync/core-store.plugin_upload_settings.json new file mode 100644 index 0000000..3285174 --- /dev/null +++ b/config/sync/core-store.plugin_upload_settings.json @@ -0,0 +1,11 @@ +{ + "key": "plugin_upload_settings", + "value": { + "sizeOptimization": true, + "responsiveDimensions": true, + "autoOrientation": false + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_users-permissions_advanced.json b/config/sync/core-store.plugin_users-permissions_advanced.json new file mode 100644 index 0000000..74368cd --- /dev/null +++ b/config/sync/core-store.plugin_users-permissions_advanced.json @@ -0,0 +1,14 @@ +{ + "key": "plugin_users-permissions_advanced", + "value": { + "unique_email": true, + "allow_register": true, + "email_confirmation": false, + "email_reset_password": null, + "email_confirmation_redirection": null, + "default_role": "authenticated" + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.plugin_users-permissions_email.json b/config/sync/core-store.plugin_users-permissions_email.json new file mode 100644 index 0000000..a8ebbe2 --- /dev/null +++ b/config/sync/core-store.plugin_users-permissions_email.json @@ -0,0 +1,34 @@ +{ + "key": "plugin_users-permissions_email", + "value": { + "reset_password": { + "display": "Email.template.reset_password", + "icon": "sync", + "options": { + "from": { + "name": "Administration Panel", + "email": "no-reply@strapi.io" + }, + "response_email": "", + "object": "Reset password", + "message": "We heard that you lost your password. Sorry about that!
\n\nBut don’t worry! You can use the following link to reset your password:
\n<%= URL %>?code=<%= TOKEN %>
\n\nThanks.
" + } + }, + "email_confirmation": { + "display": "Email.template.email_confirmation", + "icon": "check-square", + "options": { + "from": { + "name": "Administration Panel", + "email": "no-reply@strapi.io" + }, + "response_email": "", + "object": "Account confirmation", + "message": "Thank you for registering!
\n\nYou have to confirm your email address. Please click on the link below.
\n\n<%= URL %>?confirmation=<%= CODE %>
\n\nThanks.
" + } + } + }, + "type": "object", + "environment": null, + "tag": null +} \ No newline at end of file diff --git a/config/sync/core-store.strapi_content_types_schema.json b/config/sync/core-store.strapi_content_types_schema.json new file mode 100644 index 0000000..0b41fa5 --- /dev/null +++ b/config/sync/core-store.strapi_content_types_schema.json @@ -0,0 +1,2574 @@ +{ + "key": "strapi_content_types_schema", + "value": { + "admin::permission": { + "collectionName": "admin_permissions", + "info": { + "name": "Permission", + "description": "", + "singularName": "permission", + "pluralName": "permissions", + "displayName": "Permission" + }, + "options": {}, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "action": { + "type": "string", + "minLength": 1, + "configurable": false, + "required": true + }, + "subject": { + "type": "string", + "minLength": 1, + "configurable": false, + "required": false + }, + "properties": { + "type": "json", + "configurable": false, + "required": false, + "default": {} + }, + "conditions": { + "type": "json", + "configurable": false, + "required": false, + "default": [] + }, + "role": { + "configurable": false, + "type": "relation", + "relation": "manyToOne", + "inversedBy": "permissions", + "target": "admin::role" + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "kind": "collectionType", + "__schema__": { + "collectionName": "admin_permissions", + "info": { + "name": "Permission", + "description": "", + "singularName": "permission", + "pluralName": "permissions", + "displayName": "Permission" + }, + "options": {}, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "action": { + "type": "string", + "minLength": 1, + "configurable": false, + "required": true + }, + "subject": { + "type": "string", + "minLength": 1, + "configurable": false, + "required": false + }, + "properties": { + "type": "json", + "configurable": false, + "required": false, + "default": {} + }, + "conditions": { + "type": "json", + "configurable": false, + "required": false, + "default": [] + }, + "role": { + "configurable": false, + "type": "relation", + "relation": "manyToOne", + "inversedBy": "permissions", + "target": "admin::role" + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "permission", + "connection": "default", + "uid": "admin::permission", + "plugin": "admin", + "globalId": "AdminPermission" + }, + "admin::user": { + "collectionName": "admin_users", + "info": { + "name": "User", + "description": "", + "singularName": "user", + "pluralName": "users", + "displayName": "User" + }, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "firstname": { + "type": "string", + "unique": false, + "minLength": 1, + "configurable": false, + "required": false + }, + "lastname": { + "type": "string", + "unique": false, + "minLength": 1, + "configurable": false, + "required": false + }, + "username": { + "type": "string", + "unique": false, + "configurable": false, + "required": false + }, + "email": { + "type": "email", + "minLength": 6, + "configurable": false, + "required": true, + "unique": true, + "private": true + }, + "password": { + "type": "password", + "minLength": 6, + "configurable": false, + "required": false, + "private": true + }, + "resetPasswordToken": { + "type": "string", + "configurable": false, + "private": true + }, + "registrationToken": { + "type": "string", + "configurable": false, + "private": true + }, + "isActive": { + "type": "boolean", + "default": false, + "configurable": false, + "private": true + }, + "roles": { + "configurable": false, + "private": true, + "type": "relation", + "relation": "manyToMany", + "inversedBy": "users", + "target": "admin::role", + "collectionName": "strapi_users_roles" + }, + "blocked": { + "type": "boolean", + "default": false, + "configurable": false, + "private": true + }, + "preferedLanguage": { + "type": "string", + "configurable": false, + "required": false + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "kind": "collectionType", + "__schema__": { + "collectionName": "admin_users", + "info": { + "name": "User", + "description": "", + "singularName": "user", + "pluralName": "users", + "displayName": "User" + }, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "firstname": { + "type": "string", + "unique": false, + "minLength": 1, + "configurable": false, + "required": false + }, + "lastname": { + "type": "string", + "unique": false, + "minLength": 1, + "configurable": false, + "required": false + }, + "username": { + "type": "string", + "unique": false, + "configurable": false, + "required": false + }, + "email": { + "type": "email", + "minLength": 6, + "configurable": false, + "required": true, + "unique": true, + "private": true + }, + "password": { + "type": "password", + "minLength": 6, + "configurable": false, + "required": false, + "private": true + }, + "resetPasswordToken": { + "type": "string", + "configurable": false, + "private": true + }, + "registrationToken": { + "type": "string", + "configurable": false, + "private": true + }, + "isActive": { + "type": "boolean", + "default": false, + "configurable": false, + "private": true + }, + "roles": { + "configurable": false, + "private": true, + "type": "relation", + "relation": "manyToMany", + "inversedBy": "users", + "target": "admin::role", + "collectionName": "strapi_users_roles" + }, + "blocked": { + "type": "boolean", + "default": false, + "configurable": false, + "private": true + }, + "preferedLanguage": { + "type": "string", + "configurable": false, + "required": false + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "user", + "connection": "default", + "uid": "admin::user", + "plugin": "admin", + "globalId": "AdminUser" + }, + "admin::role": { + "collectionName": "admin_roles", + "info": { + "name": "Role", + "description": "", + "singularName": "role", + "pluralName": "roles", + "displayName": "Role" + }, + "options": {}, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "name": { + "type": "string", + "minLength": 1, + "unique": true, + "configurable": false, + "required": true + }, + "code": { + "type": "string", + "minLength": 1, + "unique": true, + "configurable": false, + "required": true + }, + "description": { + "type": "string", + "configurable": false + }, + "users": { + "configurable": false, + "type": "relation", + "relation": "manyToMany", + "mappedBy": "roles", + "target": "admin::user" + }, + "permissions": { + "configurable": false, + "type": "relation", + "relation": "oneToMany", + "mappedBy": "role", + "target": "admin::permission" + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "kind": "collectionType", + "__schema__": { + "collectionName": "admin_roles", + "info": { + "name": "Role", + "description": "", + "singularName": "role", + "pluralName": "roles", + "displayName": "Role" + }, + "options": {}, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "name": { + "type": "string", + "minLength": 1, + "unique": true, + "configurable": false, + "required": true + }, + "code": { + "type": "string", + "minLength": 1, + "unique": true, + "configurable": false, + "required": true + }, + "description": { + "type": "string", + "configurable": false + }, + "users": { + "configurable": false, + "type": "relation", + "relation": "manyToMany", + "mappedBy": "roles", + "target": "admin::user" + }, + "permissions": { + "configurable": false, + "type": "relation", + "relation": "oneToMany", + "mappedBy": "role", + "target": "admin::permission" + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "role", + "connection": "default", + "uid": "admin::role", + "plugin": "admin", + "globalId": "AdminRole" + }, + "admin::api-token": { + "collectionName": "strapi_api_tokens", + "info": { + "name": "Api Token", + "singularName": "api-token", + "pluralName": "api-tokens", + "displayName": "Api Token", + "description": "" + }, + "options": {}, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "name": { + "type": "string", + "minLength": 1, + "configurable": false, + "required": true + }, + "description": { + "type": "string", + "minLength": 1, + "configurable": false, + "required": false, + "default": "" + }, + "type": { + "type": "enumeration", + "enum": ["read-only", "full-access"], + "configurable": false, + "required": false, + "default": "read-only" + }, + "accessKey": { + "type": "string", + "minLength": 1, + "configurable": false, + "required": true + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "kind": "collectionType", + "__schema__": { + "collectionName": "strapi_api_tokens", + "info": { + "name": "Api Token", + "singularName": "api-token", + "pluralName": "api-tokens", + "displayName": "Api Token", + "description": "" + }, + "options": {}, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "name": { + "type": "string", + "minLength": 1, + "configurable": false, + "required": true + }, + "description": { + "type": "string", + "minLength": 1, + "configurable": false, + "required": false, + "default": "" + }, + "type": { + "type": "enumeration", + "enum": ["read-only", "full-access"], + "configurable": false, + "required": false, + "default": "read-only" + }, + "accessKey": { + "type": "string", + "minLength": 1, + "configurable": false, + "required": true + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "api-token", + "connection": "default", + "uid": "admin::api-token", + "plugin": "admin", + "globalId": "AdminApiToken" + }, + "plugin::upload.file": { + "collectionName": "files", + "info": { + "singularName": "file", + "pluralName": "files", + "displayName": "File", + "description": "" + }, + "options": {}, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "name": { + "type": "string", + "configurable": false, + "required": true + }, + "alternativeText": { + "type": "string", + "configurable": false + }, + "caption": { + "type": "string", + "configurable": false + }, + "width": { + "type": "integer", + "configurable": false + }, + "height": { + "type": "integer", + "configurable": false + }, + "formats": { + "type": "json", + "configurable": false + }, + "hash": { + "type": "string", + "configurable": false, + "required": true + }, + "ext": { + "type": "string", + "configurable": false + }, + "mime": { + "type": "string", + "configurable": false, + "required": true + }, + "size": { + "type": "decimal", + "configurable": false, + "required": true + }, + "url": { + "type": "string", + "configurable": false, + "required": true + }, + "previewUrl": { + "type": "string", + "configurable": false + }, + "provider": { + "type": "string", + "configurable": false, + "required": true + }, + "provider_metadata": { + "type": "json", + "configurable": false + }, + "related": { + "type": "relation", + "relation": "morphToMany", + "configurable": false + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "kind": "collectionType", + "__schema__": { + "collectionName": "files", + "info": { + "singularName": "file", + "pluralName": "files", + "displayName": "File", + "description": "" + }, + "options": {}, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "name": { + "type": "string", + "configurable": false, + "required": true + }, + "alternativeText": { + "type": "string", + "configurable": false + }, + "caption": { + "type": "string", + "configurable": false + }, + "width": { + "type": "integer", + "configurable": false + }, + "height": { + "type": "integer", + "configurable": false + }, + "formats": { + "type": "json", + "configurable": false + }, + "hash": { + "type": "string", + "configurable": false, + "required": true + }, + "ext": { + "type": "string", + "configurable": false + }, + "mime": { + "type": "string", + "configurable": false, + "required": true + }, + "size": { + "type": "decimal", + "configurable": false, + "required": true + }, + "url": { + "type": "string", + "configurable": false, + "required": true + }, + "previewUrl": { + "type": "string", + "configurable": false + }, + "provider": { + "type": "string", + "configurable": false, + "required": true + }, + "provider_metadata": { + "type": "json", + "configurable": false + }, + "related": { + "type": "relation", + "relation": "morphToMany", + "configurable": false + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "file", + "connection": "default", + "uid": "plugin::upload.file", + "plugin": "upload", + "globalId": "UploadFile" + }, + "plugin::i18n.locale": { + "info": { + "singularName": "locale", + "pluralName": "locales", + "collectionName": "locales", + "displayName": "Locale", + "description": "" + }, + "options": { + "draftAndPublish": false + }, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "name": { + "type": "string", + "min": 1, + "max": 50, + "configurable": false + }, + "code": { + "type": "string", + "unique": true, + "configurable": false + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "kind": "collectionType", + "__schema__": { + "info": { + "singularName": "locale", + "pluralName": "locales", + "collectionName": "locales", + "displayName": "Locale", + "description": "" + }, + "options": { + "draftAndPublish": false + }, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "name": { + "type": "string", + "min": 1, + "max": 50, + "configurable": false + }, + "code": { + "type": "string", + "unique": true, + "configurable": false + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "locale", + "connection": "default", + "uid": "plugin::i18n.locale", + "plugin": "i18n", + "collectionName": "i18n_locale", + "globalId": "I18NLocale" + }, + "plugin::users-permissions.permission": { + "collectionName": "up_permissions", + "info": { + "name": "permission", + "description": "", + "singularName": "permission", + "pluralName": "permissions", + "displayName": "Permission" + }, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "action": { + "type": "string", + "required": true, + "configurable": false + }, + "role": { + "type": "relation", + "relation": "manyToOne", + "target": "plugin::users-permissions.role", + "inversedBy": "permissions", + "configurable": false + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "kind": "collectionType", + "__schema__": { + "collectionName": "up_permissions", + "info": { + "name": "permission", + "description": "", + "singularName": "permission", + "pluralName": "permissions", + "displayName": "Permission" + }, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "action": { + "type": "string", + "required": true, + "configurable": false + }, + "role": { + "type": "relation", + "relation": "manyToOne", + "target": "plugin::users-permissions.role", + "inversedBy": "permissions", + "configurable": false + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "permission", + "connection": "default", + "uid": "plugin::users-permissions.permission", + "plugin": "users-permissions", + "globalId": "UsersPermissionsPermission" + }, + "plugin::users-permissions.role": { + "collectionName": "up_roles", + "info": { + "name": "role", + "description": "", + "singularName": "role", + "pluralName": "roles", + "displayName": "Role" + }, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "name": { + "type": "string", + "minLength": 3, + "required": true, + "configurable": false + }, + "description": { + "type": "string", + "configurable": false + }, + "type": { + "type": "string", + "unique": true, + "configurable": false + }, + "permissions": { + "type": "relation", + "relation": "oneToMany", + "target": "plugin::users-permissions.permission", + "mappedBy": "role", + "configurable": false + }, + "users": { + "type": "relation", + "relation": "oneToMany", + "target": "plugin::users-permissions.user", + "mappedBy": "role", + "configurable": false + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "kind": "collectionType", + "__schema__": { + "collectionName": "up_roles", + "info": { + "name": "role", + "description": "", + "singularName": "role", + "pluralName": "roles", + "displayName": "Role" + }, + "pluginOptions": { + "content-manager": { + "visible": false + }, + "content-type-builder": { + "visible": false + } + }, + "attributes": { + "name": { + "type": "string", + "minLength": 3, + "required": true, + "configurable": false + }, + "description": { + "type": "string", + "configurable": false + }, + "type": { + "type": "string", + "unique": true, + "configurable": false + }, + "permissions": { + "type": "relation", + "relation": "oneToMany", + "target": "plugin::users-permissions.permission", + "mappedBy": "role", + "configurable": false + }, + "users": { + "type": "relation", + "relation": "oneToMany", + "target": "plugin::users-permissions.user", + "mappedBy": "role", + "configurable": false + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "role", + "connection": "default", + "uid": "plugin::users-permissions.role", + "plugin": "users-permissions", + "globalId": "UsersPermissionsRole" + }, + "plugin::users-permissions.user": { + "collectionName": "up_users", + "info": { + "name": "user", + "description": "", + "singularName": "user", + "pluralName": "users", + "displayName": "User" + }, + "options": { + "draftAndPublish": false, + "timestamps": true + }, + "attributes": { + "username": { + "type": "string", + "minLength": 3, + "unique": true, + "configurable": false, + "required": true + }, + "email": { + "type": "email", + "minLength": 6, + "configurable": false, + "required": true + }, + "provider": { + "type": "string", + "configurable": false + }, + "password": { + "type": "password", + "minLength": 6, + "configurable": false, + "private": true + }, + "resetPasswordToken": { + "type": "string", + "configurable": false, + "private": true + }, + "confirmationToken": { + "type": "string", + "configurable": false, + "private": true + }, + "confirmed": { + "type": "boolean", + "default": false, + "configurable": false + }, + "blocked": { + "type": "boolean", + "default": false, + "configurable": false + }, + "role": { + "type": "relation", + "relation": "manyToOne", + "target": "plugin::users-permissions.role", + "inversedBy": "users", + "configurable": false + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "config": { + "attributes": { + "resetPasswordToken": { + "hidden": true + }, + "confirmationToken": { + "hidden": true + }, + "provider": { + "hidden": true + } + } + }, + "kind": "collectionType", + "__schema__": { + "collectionName": "up_users", + "info": { + "name": "user", + "description": "", + "singularName": "user", + "pluralName": "users", + "displayName": "User" + }, + "options": { + "draftAndPublish": false, + "timestamps": true + }, + "attributes": { + "username": { + "type": "string", + "minLength": 3, + "unique": true, + "configurable": false, + "required": true + }, + "email": { + "type": "email", + "minLength": 6, + "configurable": false, + "required": true + }, + "provider": { + "type": "string", + "configurable": false + }, + "password": { + "type": "password", + "minLength": 6, + "configurable": false, + "private": true + }, + "resetPasswordToken": { + "type": "string", + "configurable": false, + "private": true + }, + "confirmationToken": { + "type": "string", + "configurable": false, + "private": true + }, + "confirmed": { + "type": "boolean", + "default": false, + "configurable": false + }, + "blocked": { + "type": "boolean", + "default": false, + "configurable": false + }, + "role": { + "type": "relation", + "relation": "manyToOne", + "target": "plugin::users-permissions.role", + "inversedBy": "users", + "configurable": false + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "user", + "connection": "default", + "uid": "plugin::users-permissions.user", + "plugin": "users-permissions", + "globalId": "UsersPermissionsUser" + }, + "api::code-challenge.code-challenge": { + "kind": "collectionType", + "collectionName": "code_challenges", + "info": { + "singularName": "code-challenge", + "pluralName": "code-challenges", + "displayName": "CodeChallenge", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "startingCode": { + "pluginOptions": {}, + "type": "richtext" + }, + "tests": { + "displayName": "CodeChallengeTest", + "type": "component", + "repeatable": true, + "pluginOptions": {}, + "component": "challenge.code-challenge-test" + }, + "prompt": { + "pluginOptions": {}, + "type": "richtext", + "required": true + }, + "internalLabel": { + "pluginOptions": {}, + "type": "string", + "required": true, + "private": true + }, + "internalNotes": { + "pluginOptions": {}, + "type": "text", + "private": true + }, + "hints": { + "displayName": "ChallengeHints", + "type": "component", + "repeatable": true, + "pluginOptions": {}, + "component": "challenge.challenge-hints" + }, + "getStartingCodeFromPreviousChallenge": { + "pluginOptions": {}, + "type": "boolean", + "default": false + }, + "MetaTest": { + "type": "component", + "repeatable": true, + "component": "challenge.meta-test" + }, + "category": { + "type": "relation", + "relation": "oneToOne", + "target": "api::sublesson.sublesson" + }, + "editorMeta": { + "type": "component", + "repeatable": false, + "component": "misc.editor-meta" + }, + "challengeMeta": { + "type": "component", + "repeatable": false, + "component": "challenge.challenge-meta" + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "publishedAt": { + "type": "datetime", + "configurable": false, + "writable": true, + "visible": false + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "__schema__": { + "collectionName": "code_challenges", + "info": { + "singularName": "code-challenge", + "pluralName": "code-challenges", + "displayName": "CodeChallenge", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "startingCode": { + "pluginOptions": {}, + "type": "richtext" + }, + "tests": { + "displayName": "CodeChallengeTest", + "type": "component", + "repeatable": true, + "pluginOptions": {}, + "component": "challenge.code-challenge-test" + }, + "prompt": { + "pluginOptions": {}, + "type": "richtext", + "required": true + }, + "internalLabel": { + "pluginOptions": {}, + "type": "string", + "required": true, + "private": true + }, + "internalNotes": { + "pluginOptions": {}, + "type": "text", + "private": true + }, + "hints": { + "displayName": "ChallengeHints", + "type": "component", + "repeatable": true, + "pluginOptions": {}, + "component": "challenge.challenge-hints" + }, + "getStartingCodeFromPreviousChallenge": { + "pluginOptions": {}, + "type": "boolean", + "default": false + }, + "MetaTest": { + "type": "component", + "repeatable": true, + "component": "challenge.meta-test" + }, + "category": { + "type": "relation", + "relation": "oneToOne", + "target": "api::sublesson.sublesson" + }, + "editorMeta": { + "type": "component", + "repeatable": false, + "component": "misc.editor-meta" + }, + "challengeMeta": { + "type": "component", + "repeatable": false, + "component": "challenge.challenge-meta" + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "code-challenge", + "connection": "default", + "uid": "api::code-challenge.code-challenge", + "apiName": "code-challenge", + "globalId": "CodeChallenge", + "actions": {}, + "lifecycles": {} + }, + "api::course.course": { + "kind": "collectionType", + "collectionName": "courses", + "info": { + "singularName": "course", + "pluralName": "courses", + "displayName": "Course", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "name": { + "type": "string", + "required": true + }, + "slug": { + "type": "string", + "required": true, + "unique": true + }, + "modules": { + "type": "relation", + "relation": "oneToMany", + "target": "api::module.module" + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "publishedAt": { + "type": "datetime", + "configurable": false, + "writable": true, + "visible": false + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "__schema__": { + "collectionName": "courses", + "info": { + "singularName": "course", + "pluralName": "courses", + "displayName": "Course", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "name": { + "type": "string", + "required": true + }, + "slug": { + "type": "string", + "required": true, + "unique": true + }, + "modules": { + "type": "relation", + "relation": "oneToMany", + "target": "api::module.module" + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "course", + "connection": "default", + "uid": "api::course.course", + "apiName": "course", + "globalId": "Course", + "actions": {}, + "lifecycles": {} + }, + "api::lesson.lesson": { + "kind": "collectionType", + "collectionName": "lessons", + "info": { + "singularName": "lesson", + "pluralName": "lessons", + "displayName": "Lesson", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "slug": { + "type": "string", + "required": true, + "unique": true + }, + "name": { + "type": "string", + "required": true, + "unique": true + }, + "isHard": { + "type": "boolean", + "default": false + }, + "internalNotes": { + "type": "text" + }, + "externalResources": { + "displayName": "ExternalResource", + "type": "component", + "repeatable": true, + "component": "content.external-resource" + }, + "sublessons": { + "type": "relation", + "relation": "oneToMany", + "target": "api::sublesson.sublesson", + "mappedBy": "lesson" + }, + "module": { + "type": "relation", + "relation": "manyToOne", + "target": "api::module.module", + "inversedBy": "lessons" + }, + "syntaxEntry": { + "type": "relation", + "relation": "oneToOne", + "target": "api::syntax-entry.syntax-entry", + "inversedBy": "lesson" + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "publishedAt": { + "type": "datetime", + "configurable": false, + "writable": true, + "visible": false + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "__schema__": { + "collectionName": "lessons", + "info": { + "singularName": "lesson", + "pluralName": "lessons", + "displayName": "Lesson", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "slug": { + "type": "string", + "required": true, + "unique": true + }, + "name": { + "type": "string", + "required": true, + "unique": true + }, + "isHard": { + "type": "boolean", + "default": false + }, + "internalNotes": { + "type": "text" + }, + "externalResources": { + "displayName": "ExternalResource", + "type": "component", + "repeatable": true, + "component": "content.external-resource" + }, + "sublessons": { + "type": "relation", + "relation": "oneToMany", + "target": "api::sublesson.sublesson", + "mappedBy": "lesson" + }, + "module": { + "type": "relation", + "relation": "manyToOne", + "target": "api::module.module", + "inversedBy": "lessons" + }, + "syntaxEntry": { + "type": "relation", + "relation": "oneToOne", + "target": "api::syntax-entry.syntax-entry", + "inversedBy": "lesson" + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "lesson", + "connection": "default", + "uid": "api::lesson.lesson", + "apiName": "lesson", + "globalId": "Lesson", + "actions": {}, + "lifecycles": {} + }, + "api::module.module": { + "kind": "collectionType", + "collectionName": "modules", + "info": { + "singularName": "module", + "pluralName": "modules", + "displayName": "Module", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "name": { + "type": "string", + "required": true + }, + "lessons": { + "type": "relation", + "relation": "oneToMany", + "target": "api::lesson.lesson", + "mappedBy": "module" + }, + "moduleLessons": { + "displayName": "ModuleLesson", + "type": "component", + "repeatable": true, + "component": "misc.module-lesson" + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "publishedAt": { + "type": "datetime", + "configurable": false, + "writable": true, + "visible": false + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "__schema__": { + "collectionName": "modules", + "info": { + "singularName": "module", + "pluralName": "modules", + "displayName": "Module", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "name": { + "type": "string", + "required": true + }, + "lessons": { + "type": "relation", + "relation": "oneToMany", + "target": "api::lesson.lesson", + "mappedBy": "module" + }, + "moduleLessons": { + "displayName": "ModuleLesson", + "type": "component", + "repeatable": true, + "component": "misc.module-lesson" + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "module", + "connection": "default", + "uid": "api::module.module", + "apiName": "module", + "globalId": "Module", + "actions": {}, + "lifecycles": {} + }, + "api::multiple-choice-challenge.multiple-choice-challenge": { + "kind": "collectionType", + "collectionName": "multiple_choice_challenges", + "info": { + "singularName": "multiple-choice-challenge", + "pluralName": "multiple-choice-challenges", + "displayName": "MultipleChoiceChallenge", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "options": { + "displayName": "MultipleChoiceOptions", + "type": "component", + "repeatable": true, + "component": "challenge.multiple-choice-options" + }, + "prompt": { + "type": "richtext", + "required": true + }, + "internalLabel": { + "type": "string", + "required": true + }, + "canSelectMultipleOptions": { + "type": "boolean", + "default": false + }, + "optionsInitiallyHidden": { + "type": "boolean", + "default": true + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "publishedAt": { + "type": "datetime", + "configurable": false, + "writable": true, + "visible": false + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "__schema__": { + "collectionName": "multiple_choice_challenges", + "info": { + "singularName": "multiple-choice-challenge", + "pluralName": "multiple-choice-challenges", + "displayName": "MultipleChoiceChallenge", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "options": { + "displayName": "MultipleChoiceOptions", + "type": "component", + "repeatable": true, + "component": "challenge.multiple-choice-options" + }, + "prompt": { + "type": "richtext", + "required": true + }, + "internalLabel": { + "type": "string", + "required": true + }, + "canSelectMultipleOptions": { + "type": "boolean", + "default": false + }, + "optionsInitiallyHidden": { + "type": "boolean", + "default": true + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "multiple-choice-challenge", + "connection": "default", + "uid": "api::multiple-choice-challenge.multiple-choice-challenge", + "apiName": "multiple-choice-challenge", + "globalId": "MultipleChoiceChallenge", + "actions": {}, + "lifecycles": {} + }, + "api::playground.playground": { + "kind": "collectionType", + "collectionName": "playgrounds", + "info": { + "singularName": "playground", + "pluralName": "playgrounds", + "displayName": "Playground" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "internalLabel": { + "type": "string", + "required": true + }, + "internalNotes": { + "type": "text" + }, + "prompt": { + "type": "richtext" + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "publishedAt": { + "type": "datetime", + "configurable": false, + "writable": true, + "visible": false + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "__schema__": { + "collectionName": "playgrounds", + "info": { + "singularName": "playground", + "pluralName": "playgrounds", + "displayName": "Playground" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "internalLabel": { + "type": "string", + "required": true + }, + "internalNotes": { + "type": "text" + }, + "prompt": { + "type": "richtext" + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "playground", + "connection": "default", + "uid": "api::playground.playground", + "apiName": "playground", + "globalId": "Playground", + "actions": {}, + "lifecycles": {} + }, + "api::project.project": { + "kind": "collectionType", + "collectionName": "projects", + "info": { + "singularName": "project", + "pluralName": "projects", + "displayName": "Project", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "editorMeta": { + "type": "component", + "repeatable": false, + "component": "misc.editor-meta" + }, + "steps": { + "displayName": "projectSteps", + "type": "component", + "repeatable": true, + "component": "project.project-steps", + "required": true + }, + "title": { + "type": "string", + "required": true + }, + "slug": { + "type": "string", + "required": true + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "publishedAt": { + "type": "datetime", + "configurable": false, + "writable": true, + "visible": false + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "__schema__": { + "collectionName": "projects", + "info": { + "singularName": "project", + "pluralName": "projects", + "displayName": "Project", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "editorMeta": { + "type": "component", + "repeatable": false, + "component": "misc.editor-meta" + }, + "steps": { + "displayName": "projectSteps", + "type": "component", + "repeatable": true, + "component": "project.project-steps", + "required": true + }, + "title": { + "type": "string", + "required": true + }, + "slug": { + "type": "string", + "required": true + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "project", + "connection": "default", + "uid": "api::project.project", + "apiName": "project", + "globalId": "Project", + "actions": {}, + "lifecycles": {} + }, + "api::sublesson.sublesson": { + "kind": "collectionType", + "collectionName": "sublessons", + "info": { + "singularName": "sublesson", + "pluralName": "sublessons", + "displayName": "Sublesson", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "name": { + "type": "string", + "required": true + }, + "description": { + "type": "richtext", + "required": true + }, + "internalNotes": { + "type": "text", + "private": true + }, + "lesson": { + "type": "relation", + "relation": "manyToOne", + "target": "api::lesson.lesson", + "inversedBy": "sublessons" + }, + "challenges": { + "displayName": "Challenges", + "type": "component", + "repeatable": true, + "component": "content.challenges" + }, + "syntaxEntry": { + "type": "relation", + "relation": "oneToOne", + "target": "api::syntax-entry.syntax-entry", + "inversedBy": "sublesson" + }, + "steps": { + "displayName": "steps", + "type": "component", + "repeatable": true, + "component": "content.steps" + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "publishedAt": { + "type": "datetime", + "configurable": false, + "writable": true, + "visible": false + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "__schema__": { + "collectionName": "sublessons", + "info": { + "singularName": "sublesson", + "pluralName": "sublessons", + "displayName": "Sublesson", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "name": { + "type": "string", + "required": true + }, + "description": { + "type": "richtext", + "required": true + }, + "internalNotes": { + "type": "text", + "private": true + }, + "lesson": { + "type": "relation", + "relation": "manyToOne", + "target": "api::lesson.lesson", + "inversedBy": "sublessons" + }, + "challenges": { + "displayName": "Challenges", + "type": "component", + "repeatable": true, + "component": "content.challenges" + }, + "syntaxEntry": { + "type": "relation", + "relation": "oneToOne", + "target": "api::syntax-entry.syntax-entry", + "inversedBy": "sublesson" + }, + "steps": { + "displayName": "steps", + "type": "component", + "repeatable": true, + "component": "content.steps" + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "sublesson", + "connection": "default", + "uid": "api::sublesson.sublesson", + "apiName": "sublesson", + "globalId": "Sublesson", + "actions": {}, + "lifecycles": {} + }, + "api::syntax-entry.syntax-entry": { + "kind": "collectionType", + "collectionName": "syntax_entries", + "info": { + "singularName": "syntax-entry", + "pluralName": "syntax-entries", + "displayName": "SyntaxEntry" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "content": { + "type": "richtext", + "required": true + }, + "name": { + "type": "string", + "required": true + }, + "internalNotes": { + "type": "text" + }, + "maxWidth": { + "type": "integer", + "default": 450 + }, + "sublesson": { + "type": "relation", + "relation": "oneToOne", + "target": "api::sublesson.sublesson", + "mappedBy": "syntaxEntry" + }, + "lesson": { + "type": "relation", + "relation": "oneToOne", + "target": "api::lesson.lesson", + "inversedBy": "syntaxEntry" + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "publishedAt": { + "type": "datetime", + "configurable": false, + "writable": true, + "visible": false + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "__schema__": { + "collectionName": "syntax_entries", + "info": { + "singularName": "syntax-entry", + "pluralName": "syntax-entries", + "displayName": "SyntaxEntry" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "content": { + "type": "richtext", + "required": true + }, + "name": { + "type": "string", + "required": true + }, + "internalNotes": { + "type": "text" + }, + "maxWidth": { + "type": "integer", + "default": 450 + }, + "sublesson": { + "type": "relation", + "relation": "oneToOne", + "target": "api::sublesson.sublesson", + "mappedBy": "syntaxEntry" + }, + "lesson": { + "type": "relation", + "relation": "oneToOne", + "target": "api::lesson.lesson", + "inversedBy": "syntaxEntry" + } + }, + "kind": "collectionType" + }, + "modelType": "contentType", + "modelName": "syntax-entry", + "connection": "default", + "uid": "api::syntax-entry.syntax-entry", + "apiName": "syntax-entry", + "globalId": "SyntaxEntry", + "actions": {}, + "lifecycles": {} + }, + "api::translation-group.translation-group": { + "kind": "singleType", + "collectionName": "translation_groups", + "info": { + "singularName": "translation-group", + "pluralName": "translation-groups", + "displayName": "translationGroup", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "aboutPage": { + "type": "component", + "repeatable": false, + "component": "translations.about-page" + }, + "coreComponents": { + "type": "component", + "repeatable": false, + "component": "translations.core-components" + }, + "createdAt": { + "type": "datetime" + }, + "updatedAt": { + "type": "datetime" + }, + "publishedAt": { + "type": "datetime", + "configurable": false, + "writable": true, + "visible": false + }, + "createdBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + }, + "updatedBy": { + "type": "relation", + "relation": "oneToOne", + "target": "admin::user", + "configurable": false, + "writable": false, + "visible": false, + "useJoinTable": false, + "private": true + } + }, + "__schema__": { + "collectionName": "translation_groups", + "info": { + "singularName": "translation-group", + "pluralName": "translation-groups", + "displayName": "translationGroup", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "aboutPage": { + "type": "component", + "repeatable": false, + "component": "translations.about-page" + }, + "coreComponents": { + "type": "component", + "repeatable": false, + "component": "translations.core-components" + } + }, + "kind": "singleType" + }, + "modelType": "contentType", + "modelName": "translation-group", + "connection": "default", + "uid": "api::translation-group.translation-group", + "apiName": "translation-group", + "globalId": "TranslationGroup", + "actions": {}, + "lifecycles": {} + } + }, + "type": "object", + "environment": null, + "tag": null +} diff --git a/config/sync/i18n-locale.en.json b/config/sync/i18n-locale.en.json new file mode 100644 index 0000000..674d0c8 --- /dev/null +++ b/config/sync/i18n-locale.en.json @@ -0,0 +1,4 @@ +{ + "name": "English (en)", + "code": "en" +} \ No newline at end of file diff --git a/config/sync/user-role.authenticated.json b/config/sync/user-role.authenticated.json new file mode 100644 index 0000000..dbe0a1b --- /dev/null +++ b/config/sync/user-role.authenticated.json @@ -0,0 +1,13 @@ +{ + "name": "Authenticated", + "description": "Default role given to authenticated user.", + "type": "authenticated", + "permissions": [ + { + "action": "plugin::users-permissions.auth.connect" + }, + { + "action": "plugin::users-permissions.user.me" + } + ] +} \ No newline at end of file diff --git a/config/sync/user-role.public.json b/config/sync/user-role.public.json new file mode 100644 index 0000000..b212ed9 --- /dev/null +++ b/config/sync/user-role.public.json @@ -0,0 +1,205 @@ +{ + "name": "Public", + "description": "Default role given to unauthenticated user.", + "type": "public", + "permissions": [ + { + "action": "api::code-challenge.code-challenge.create" + }, + { + "action": "api::code-challenge.code-challenge.delete" + }, + { + "action": "api::code-challenge.code-challenge.find" + }, + { + "action": "api::code-challenge.code-challenge.findOne" + }, + { + "action": "api::code-challenge.code-challenge.update" + }, + { + "action": "api::course.course.create" + }, + { + "action": "api::course.course.delete" + }, + { + "action": "api::course.course.find" + }, + { + "action": "api::course.course.findOne" + }, + { + "action": "api::course.course.update" + }, + { + "action": "api::lesson.lesson.create" + }, + { + "action": "api::lesson.lesson.delete" + }, + { + "action": "api::lesson.lesson.find" + }, + { + "action": "api::lesson.lesson.findOne" + }, + { + "action": "api::lesson.lesson.update" + }, + { + "action": "api::module.module.create" + }, + { + "action": "api::module.module.delete" + }, + { + "action": "api::module.module.find" + }, + { + "action": "api::module.module.findOne" + }, + { + "action": "api::module.module.update" + }, + { + "action": "api::multiple-choice-challenge.multiple-choice-challenge.create" + }, + { + "action": "api::multiple-choice-challenge.multiple-choice-challenge.delete" + }, + { + "action": "api::multiple-choice-challenge.multiple-choice-challenge.find" + }, + { + "action": "api::multiple-choice-challenge.multiple-choice-challenge.findOne" + }, + { + "action": "api::multiple-choice-challenge.multiple-choice-challenge.update" + }, + { + "action": "api::sublesson.sublesson.create" + }, + { + "action": "api::sublesson.sublesson.delete" + }, + { + "action": "api::sublesson.sublesson.find" + }, + { + "action": "api::sublesson.sublesson.findOne" + }, + { + "action": "api::sublesson.sublesson.update" + }, + { + "action": "api::syntax-entry.syntax-entry.create" + }, + { + "action": "api::syntax-entry.syntax-entry.delete" + }, + { + "action": "api::syntax-entry.syntax-entry.find" + }, + { + "action": "api::syntax-entry.syntax-entry.findOne" + }, + { + "action": "api::syntax-entry.syntax-entry.update" + }, + { + "action": "plugin::content-type-builder.components.getComponent" + }, + { + "action": "plugin::content-type-builder.components.getComponents" + }, + { + "action": "plugin::content-type-builder.content-types.getContentType" + }, + { + "action": "plugin::content-type-builder.content-types.getContentTypes" + }, + { + "action": "plugin::email.email.send" + }, + { + "action": "plugin::i18n.locales.listLocales" + }, + { + "action": "plugin::upload.content-api.count" + }, + { + "action": "plugin::upload.content-api.destroy" + }, + { + "action": "plugin::upload.content-api.find" + }, + { + "action": "plugin::upload.content-api.findOne" + }, + { + "action": "plugin::upload.content-api.upload" + }, + { + "action": "plugin::users-permissions.auth.callback" + }, + { + "action": "plugin::users-permissions.auth.connect" + }, + { + "action": "plugin::users-permissions.auth.emailConfirmation" + }, + { + "action": "plugin::users-permissions.auth.forgotPassword" + }, + { + "action": "plugin::users-permissions.auth.register" + }, + { + "action": "plugin::users-permissions.auth.resetPassword" + }, + { + "action": "plugin::users-permissions.auth.sendEmailConfirmation" + }, + { + "action": "plugin::users-permissions.permissions.getPermissions" + }, + { + "action": "plugin::users-permissions.role.createRole" + }, + { + "action": "plugin::users-permissions.role.deleteRole" + }, + { + "action": "plugin::users-permissions.role.getRole" + }, + { + "action": "plugin::users-permissions.role.getRoles" + }, + { + "action": "plugin::users-permissions.role.updateRole" + }, + { + "action": "plugin::users-permissions.user.count" + }, + { + "action": "plugin::users-permissions.user.create" + }, + { + "action": "plugin::users-permissions.user.destroy" + }, + { + "action": "plugin::users-permissions.user.find" + }, + { + "action": "plugin::users-permissions.user.findOne" + }, + { + "action": "plugin::users-permissions.user.me" + }, + { + "action": "plugin::users-permissions.user.update" + } + ] +} diff --git a/package.json b/package.json index e936239..330a4f1 100644 --- a/package.json +++ b/package.json @@ -8,16 +8,17 @@ "dev": "NODE_ENV=deployed-dev yarn develop", "start": "strapi start", "build": "strapi build", - "strapi": "strapi" + "strapi": "strapi", + "cs": "config-sync" }, - "devDependencies": {}, "dependencies": { - "@strapi/plugin-graphql": "4.0.2", - "@strapi/plugin-i18n": "4.0.2", - "@strapi/plugin-users-permissions": "4.0.2", - "@strapi/strapi": "4.0.2", + "@strapi/plugin-graphql": "^4.1.7", + "@strapi/plugin-i18n": "^4.1.7", + "@strapi/plugin-users-permissions": "^4.1.7", + "@strapi/strapi": "^4.1.7", "express": "^4.17.2", - "pg": "8.6.0" + "pg": "8.6.0", + "strapi-plugin-config-sync": "^1.0.0-beta.8" }, "author": { "name": "A Strapi developer" diff --git a/src/api/code-challenge/content-types/code-challenge/lifecycles.js b/src/api/code-challenge/content-types/code-challenge/lifecycles.js new file mode 100644 index 0000000..e57d041 --- /dev/null +++ b/src/api/code-challenge/content-types/code-challenge/lifecycles.js @@ -0,0 +1,77 @@ +const getInternalLabel = async (event) => { + const { + data: { challengeMeta, name }, + } = event.params; + + const defaultName = `Unassigned - ${name}`; + const challengeMetaId = challengeMeta ? challengeMeta.id : undefined; + + if (!challengeMetaId) { + return defaultName; + } + + const { lesson } = await strapi.db.query("challenge.challenge-meta").findOne({ + where: { + id: challengeMetaId, + }, + populate: ["challengeMeta", "lesson"], + }); + + if (!lesson) { + return defaultName; + } + + return `${lesson.name} -- name`; +}; + +// runMetaTestsNeed more specific name later, maybe use "validateInternalTests" +async function runMetaTests(eventTests, eventMetaTests) { + const [internalTests, metaTests] = await Promise.all([ + getInternalTests(eventTests), + getMetaTests(eventMetaTests), + ]); + + // console.log("final internalTests: ", internalTests); + // console.log("final metaTests: ", metaTests); + + // For next part of feature: return some type of eval using internalTests & metaTests + return false; +} + +async function getInternalTests(eventTests) { + const internalTests = await strapi.db + .query("challenge.code-challenge-test") + .findMany({ + select: ["id", "internalTest"], + where: { + id: eventTests.map(({ id: testId }) => testId), + }, + }); + return internalTests; +} + +async function getMetaTests(eventMetaTests) { + const metaTests = await strapi.db.query("challenge.meta-test").findMany({ + select: ["id", "caseCode", "passes"], + where: { + id: eventMetaTests.map(({ id: metaId }) => metaId), + }, + }); + return metaTests; +} + +const beforeCreateOrUpdate = async (event) => { + const internalLabel = await getInternalLabel(event); + // event.params.data.internalLabel = internalLabel; + runMetaTests(event.params.data.tests, event.params.data.MetaTest); +}; + +module.exports = { + async beforeCreate(event) { + await beforeCreateOrUpdate(event); + }, + + async beforeUpdate(event) { + await beforeCreateOrUpdate(event); + }, +}; diff --git a/src/api/code-challenge/content-types/code-challenge/schema.json b/src/api/code-challenge/content-types/code-challenge/schema.json index 7c7e488..b46b7ec 100644 --- a/src/api/code-challenge/content-types/code-challenge/schema.json +++ b/src/api/code-challenge/content-types/code-challenge/schema.json @@ -31,7 +31,7 @@ "internalLabel": { "pluginOptions": {}, "type": "string", - "required": true, + "required": false, "private": true }, "internalNotes": { @@ -44,12 +44,40 @@ "type": "component", "repeatable": true, "pluginOptions": {}, - "component": "challenge.challenge-hints" + "component": "content.challenge-hints" }, "getStartingCodeFromPreviousChallenge": { "pluginOptions": {}, "type": "boolean", "default": false + }, + "MetaTest": { + "type": "component", + "repeatable": true, + "component": "challenge.meta-test" + }, + "category": { + "type": "relation", + "relation": "oneToOne", + "target": "api::sublesson.sublesson" + }, + "editorMeta": { + "type": "component", + "repeatable": false, + "component": "misc.editor-meta" + }, + "challengeMeta": { + "type": "component", + "repeatable": false, + "component": "challenge.challenge-meta" + }, + "name": { + "type": "string", + "required": true + }, + "namePrivateClarifications": { + "type": "string", + "private": true } } } diff --git a/src/api/lesson/content-types/lesson/lifecycles.js b/src/api/lesson/content-types/lesson/lifecycles.js index c3116d1..258f34c 100644 --- a/src/api/lesson/content-types/lesson/lifecycles.js +++ b/src/api/lesson/content-types/lesson/lifecycles.js @@ -1,25 +1,24 @@ const enforceSortingOrder = require("../../../../utils/enforceSortingOrder"); -const sublessonLessonLinkFields = ["lesson_id", "sublesson_id"]; -// had trouble with serializing these so removing them for now -const temporaryIgnore = ["created_at", "updated_at", "published_at"]; -const fieldsToIgnore = ["id", ...sublessonLessonLinkFields, ...temporaryIgnore]; - module.exports = { async beforeUpdate(event) { + const newSublessonIds = event.params.data.sublessons; + + /** + * Publish events don't include any sublessonIds, which + * actually seems like a bug, but at least for now we need + * to account for it and make sure that we don't + * accidentally run the sorting order function in this case + */ + if (!newSublessonIds) { + return; + } + const newSublessonChallengeIds = await enforceSortingOrder({ entityTableName: "sublessons", orderedEntityIds: event.params.data.sublessons, }); - // updates the intended order to use the newly created stuff~ - // setSublessonChallengeIds(newSublessonChallengeIds); event.params.data.sublessons = newSublessonChallengeIds; - // SELECT * FROM sublessons_lesson_links WHERE lesson_id = ${lessonId} - - // const sublessonChallenges = await strapi.db.connection.raw(` - // SELECT * sublessons WHERE id = - // `); - // event.params.data.name = event.params.data.name + "7"; }, }; diff --git a/src/api/multiple-choice-challenge/content-types/multiple-choice-challenge/lifecycles.js b/src/api/multiple-choice-challenge/content-types/multiple-choice-challenge/lifecycles.js new file mode 100644 index 0000000..221226b --- /dev/null +++ b/src/api/multiple-choice-challenge/content-types/multiple-choice-challenge/lifecycles.js @@ -0,0 +1,46 @@ +const { ValidationError } = require("../../../../utils/customErrors"); + +/** + * This is to ensure that we don't accidentally forget + * to have at least one correct option. Otherwise there + * would be no way to pass the challenge + */ +const validateAtLeastOneOptionIsCorrect = async (event) => { + const multipleChoiceOptionIds = event.params.data.options.map(({ id }) => id); + const multipleChoiceOptions = await strapi.db + .query("challenge.multiple-choice-options") + .findMany({ + where: { + id: { + $in: multipleChoiceOptionIds, + }, + }, + }); + const noCorrectOptionsExist = !multipleChoiceOptions.some( + ({ isCorrect }) => isCorrect + ); + + if (noCorrectOptionsExist) { + throw new ValidationError( + "At least one multiple choice option must be correct" + ); + } +}; + +const validate = async (event) => { + await validateAtLeastOneOptionIsCorrect(event); +}; + +const beforeCreateOrUpdate = async (event) => { + await validate(event); +}; + +module.exports = { + async beforeCreate(event) { + await beforeCreateOrUpdate(event); + }, + + async beforeUpdate(event) { + await beforeCreateOrUpdate(event); + }, +}; diff --git a/src/api/multiple-choice-challenge/content-types/multiple-choice-challenge/schema.json b/src/api/multiple-choice-challenge/content-types/multiple-choice-challenge/schema.json index 2a9d640..5b2ba30 100644 --- a/src/api/multiple-choice-challenge/content-types/multiple-choice-challenge/schema.json +++ b/src/api/multiple-choice-challenge/content-types/multiple-choice-challenge/schema.json @@ -4,7 +4,8 @@ "info": { "singularName": "multiple-choice-challenge", "pluralName": "multiple-choice-challenges", - "displayName": "MultipleChoiceChallenge" + "displayName": "MultipleChoiceChallenge", + "description": "" }, "options": { "draftAndPublish": true @@ -28,6 +29,19 @@ "canSelectMultipleOptions": { "type": "boolean", "default": false + }, + "optionsInitiallyHidden": { + "type": "boolean", + "default": true + }, + "challengeMeta": { + "type": "component", + "repeatable": false, + "component": "challenge.challenge-meta" + }, + "name": { + "type": "string", + "required": true } } } diff --git a/src/api/playground/content-types/playground/schema.json b/src/api/playground/content-types/playground/schema.json new file mode 100644 index 0000000..d7294fa --- /dev/null +++ b/src/api/playground/content-types/playground/schema.json @@ -0,0 +1,25 @@ +{ + "kind": "collectionType", + "collectionName": "playgrounds", + "info": { + "singularName": "playground", + "pluralName": "playgrounds", + "displayName": "Playground" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "internalLabel": { + "type": "string", + "required": true + }, + "internalNotes": { + "type": "text" + }, + "prompt": { + "type": "richtext" + } + } +} diff --git a/src/api/playground/controllers/playground.js b/src/api/playground/controllers/playground.js new file mode 100644 index 0000000..16be9bc --- /dev/null +++ b/src/api/playground/controllers/playground.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * playground controller + */ + +const { createCoreController } = require('@strapi/strapi').factories; + +module.exports = createCoreController('api::playground.playground'); diff --git a/src/api/playground/routes/playground.js b/src/api/playground/routes/playground.js new file mode 100644 index 0000000..b58d91a --- /dev/null +++ b/src/api/playground/routes/playground.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * playground router. + */ + +const { createCoreRouter } = require('@strapi/strapi').factories; + +module.exports = createCoreRouter('api::playground.playground'); diff --git a/src/api/playground/services/playground.js b/src/api/playground/services/playground.js new file mode 100644 index 0000000..9d860a2 --- /dev/null +++ b/src/api/playground/services/playground.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * playground service. + */ + +const { createCoreService } = require('@strapi/strapi').factories; + +module.exports = createCoreService('api::playground.playground'); diff --git a/src/api/project/content-types/project/schema.json b/src/api/project/content-types/project/schema.json new file mode 100644 index 0000000..2a3f30b --- /dev/null +++ b/src/api/project/content-types/project/schema.json @@ -0,0 +1,36 @@ +{ + "kind": "collectionType", + "collectionName": "projects", + "info": { + "singularName": "project", + "pluralName": "projects", + "displayName": "Project", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "editorMeta": { + "type": "component", + "repeatable": false, + "component": "misc.editor-meta" + }, + "steps": { + "displayName": "projectSteps", + "type": "component", + "repeatable": true, + "component": "project.project-steps", + "required": true + }, + "title": { + "type": "string", + "required": true + }, + "slug": { + "type": "string", + "required": true + } + } +} diff --git a/src/api/project/controllers/project.js b/src/api/project/controllers/project.js new file mode 100644 index 0000000..edcf1de --- /dev/null +++ b/src/api/project/controllers/project.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * project controller + */ + +const { createCoreController } = require('@strapi/strapi').factories; + +module.exports = createCoreController('api::project.project'); diff --git a/src/api/project/routes/project.js b/src/api/project/routes/project.js new file mode 100644 index 0000000..345a51f --- /dev/null +++ b/src/api/project/routes/project.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * project router. + */ + +const { createCoreRouter } = require('@strapi/strapi').factories; + +module.exports = createCoreRouter('api::project.project'); diff --git a/src/api/project/services/project.js b/src/api/project/services/project.js new file mode 100644 index 0000000..4a8706b --- /dev/null +++ b/src/api/project/services/project.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * project service. + */ + +const { createCoreService } = require('@strapi/strapi').factories; + +module.exports = createCoreService('api::project.project'); diff --git a/src/api/sublesson/content-types/sublesson/schema.json b/src/api/sublesson/content-types/sublesson/schema.json index 8bc0bf4..3d23b39 100644 --- a/src/api/sublesson/content-types/sublesson/schema.json +++ b/src/api/sublesson/content-types/sublesson/schema.json @@ -41,6 +41,12 @@ "relation": "oneToOne", "target": "api::syntax-entry.syntax-entry", "inversedBy": "sublesson" + }, + "steps": { + "displayName": "steps", + "type": "component", + "repeatable": true, + "component": "content.steps" } } } diff --git a/src/api/syntax-entry/content-types/syntax-entry/schema.json b/src/api/syntax-entry/content-types/syntax-entry/schema.json index 13de575..759271c 100644 --- a/src/api/syntax-entry/content-types/syntax-entry/schema.json +++ b/src/api/syntax-entry/content-types/syntax-entry/schema.json @@ -30,7 +30,7 @@ "type": "relation", "relation": "oneToOne", "target": "api::sublesson.sublesson", - "inversedBy": "syntaxEntry" + "mappedBy": "syntaxEntry" }, "lesson": { "type": "relation", diff --git a/src/api/translation-group/content-types/translation-group/schema.json b/src/api/translation-group/content-types/translation-group/schema.json new file mode 100644 index 0000000..f3f3566 --- /dev/null +++ b/src/api/translation-group/content-types/translation-group/schema.json @@ -0,0 +1,26 @@ +{ + "kind": "singleType", + "collectionName": "translation_groups", + "info": { + "singularName": "translation-group", + "pluralName": "translation-groups", + "displayName": "translationGroup", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "aboutPage": { + "type": "component", + "repeatable": false, + "component": "translations.about-page" + }, + "coreComponents": { + "type": "component", + "repeatable": false, + "component": "translations.core-components" + } + } +} diff --git a/src/api/translation-group/controllers/translation-group.js b/src/api/translation-group/controllers/translation-group.js new file mode 100644 index 0000000..cf5f271 --- /dev/null +++ b/src/api/translation-group/controllers/translation-group.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * translation-group controller + */ + +const { createCoreController } = require('@strapi/strapi').factories; + +module.exports = createCoreController('api::translation-group.translation-group'); diff --git a/src/api/translation-group/routes/translation-group.js b/src/api/translation-group/routes/translation-group.js new file mode 100644 index 0000000..464854a --- /dev/null +++ b/src/api/translation-group/routes/translation-group.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * translation-group router. + */ + +const { createCoreRouter } = require('@strapi/strapi').factories; + +module.exports = createCoreRouter('api::translation-group.translation-group'); diff --git a/src/api/translation-group/services/translation-group.js b/src/api/translation-group/services/translation-group.js new file mode 100644 index 0000000..4c2c86b --- /dev/null +++ b/src/api/translation-group/services/translation-group.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * translation-group service. + */ + +const { createCoreService } = require('@strapi/strapi').factories; + +module.exports = createCoreService('api::translation-group.translation-group'); diff --git a/src/components/challenge/challenge-meta.json b/src/components/challenge/challenge-meta.json new file mode 100644 index 0000000..6a612a8 --- /dev/null +++ b/src/components/challenge/challenge-meta.json @@ -0,0 +1,34 @@ +{ + "collectionName": "components_challenge_challenge_metas", + "info": { + "displayName": "challengeMeta", + "icon": "arrow-right", + "description": "" + }, + "options": {}, + "attributes": { + "isDebuggingChallenge": { + "type": "boolean", + "default": false, + "required": true + }, + "lesson": { + "type": "relation", + "relation": "oneToOne", + "target": "api::lesson.lesson" + }, + "difficulty": { + "type": "enumeration", + "enum": [ + "easy", + "medium", + "hard" + ] + }, + "sublesson": { + "type": "relation", + "relation": "oneToOne", + "target": "api::sublesson.sublesson" + } + } +} diff --git a/src/components/challenge/meta-test.json b/src/components/challenge/meta-test.json new file mode 100644 index 0000000..055d17d --- /dev/null +++ b/src/components/challenge/meta-test.json @@ -0,0 +1,20 @@ +{ + "collectionName": "components_challenge_meta_tests", + "info": { + "displayName": "MetaTest", + "icon": "balance-scale", + "description": "" + }, + "options": {}, + "attributes": { + "caseCode": { + "type": "richtext" + }, + "label": { + "type": "string" + }, + "passes": { + "type": "boolean" + } + } +} diff --git a/src/components/challenge/challenge-hints.json b/src/components/content/challenge-hints.json similarity index 76% rename from src/components/challenge/challenge-hints.json rename to src/components/content/challenge-hints.json index 4d47c95..8bb46b4 100644 --- a/src/components/challenge/challenge-hints.json +++ b/src/components/content/challenge-hints.json @@ -1,8 +1,9 @@ { "collectionName": "components_challenge_challenge_hints", "info": { - "displayName": "ChallengeHints", - "icon": "align-center" + "displayName": "hints", + "icon": "align-center", + "description": "" }, "options": {}, "attributes": { diff --git a/src/components/content/challenges.json b/src/components/content/challenges.json index 06a0a33..c1ec5dc 100644 --- a/src/components/content/challenges.json +++ b/src/components/content/challenges.json @@ -2,7 +2,8 @@ "collectionName": "components_content_challenges", "info": { "displayName": "Challenges", - "icon": "atlas" + "icon": "atlas", + "description": "" }, "options": {}, "attributes": { @@ -15,6 +16,11 @@ "type": "relation", "relation": "oneToOne", "target": "api::multiple-choice-challenge.multiple-choice-challenge" + }, + "playground": { + "type": "relation", + "relation": "oneToOne", + "target": "api::playground.playground" } } } diff --git a/src/components/content/steps.json b/src/components/content/steps.json new file mode 100644 index 0000000..0d76780 --- /dev/null +++ b/src/components/content/steps.json @@ -0,0 +1,26 @@ +{ + "collectionName": "components_content_steps", + "info": { + "displayName": "steps", + "icon": "bacon", + "description": "" + }, + "options": {}, + "attributes": { + "codeChallenge": { + "type": "relation", + "relation": "oneToOne", + "target": "api::code-challenge.code-challenge" + }, + "multipleChoiceChallenge": { + "type": "relation", + "relation": "oneToOne", + "target": "api::multiple-choice-challenge.multiple-choice-challenge" + }, + "playground": { + "type": "relation", + "relation": "oneToOne", + "target": "api::playground.playground" + } + } +} diff --git a/src/components/misc/editor-meta.json b/src/components/misc/editor-meta.json new file mode 100644 index 0000000..a926514 --- /dev/null +++ b/src/components/misc/editor-meta.json @@ -0,0 +1,13 @@ +{ + "collectionName": "components_misc_editor_metas", + "info": { + "displayName": "editorMeta", + "icon": "anchor" + }, + "options": {}, + "attributes": { + "context": { + "type": "richtext" + } + } +} diff --git a/src/components/project/project-steps.json b/src/components/project/project-steps.json new file mode 100644 index 0000000..b172c70 --- /dev/null +++ b/src/components/project/project-steps.json @@ -0,0 +1,23 @@ +{ + "collectionName": "components_project_project_steps", + "info": { + "displayName": "projectSteps", + "icon": "arrow-down", + "description": "" + }, + "options": {}, + "attributes": { + "text": { + "type": "richtext", + "required": true + }, + "hints": { + "type": "component", + "repeatable": true, + "component": "content.challenge-hints" + }, + "exampleSolution": { + "type": "richtext" + } + } +} diff --git a/src/components/translations/about-page.json b/src/components/translations/about-page.json new file mode 100644 index 0000000..e34b04c --- /dev/null +++ b/src/components/translations/about-page.json @@ -0,0 +1,14 @@ +{ + "collectionName": "components_translations_about_pages", + "info": { + "displayName": "aboutPage", + "icon": "align-right", + "description": "" + }, + "options": {}, + "attributes": { + "title": { + "type": "text" + } + } +} diff --git a/src/components/translations/core-components.json b/src/components/translations/core-components.json new file mode 100644 index 0000000..ce5cd53 --- /dev/null +++ b/src/components/translations/core-components.json @@ -0,0 +1,23 @@ +{ + "collectionName": "components_translations_core_components", + "info": { + "displayName": "coreComponents", + "icon": "angry", + "description": "" + }, + "options": {}, + "attributes": { + "backButton": { + "type": "string" + }, + "nextButton": { + "type": "string" + }, + "wefwe": { + "displayName": "withinComponent", + "type": "component", + "repeatable": false, + "component": "translations.within-component" + } + } +} diff --git a/src/components/translations/within-component.json b/src/components/translations/within-component.json new file mode 100644 index 0000000..eb3bb8a --- /dev/null +++ b/src/components/translations/within-component.json @@ -0,0 +1,9 @@ +{ + "collectionName": "components_translations_within_components", + "info": { + "displayName": "withinComponent", + "icon": "apple-alt" + }, + "options": {}, + "attributes": {} +} diff --git a/src/extensions/.gitkeep b/src/extensions/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/index.js b/src/index.js index ac5feae..03f9f76 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; module.exports = { /** @@ -7,7 +7,72 @@ module.exports = { * * This gives you an opportunity to extend code. */ - register(/*{ strapi }*/) {}, + register({ strapi }) { + const extensionService = strapi.plugin("graphql").service("extension"); + + const extension = ({ nexus }) => ({ + // Nexus + types: [ + nexus.queryType({ + definition(t) { + t.field("nextLessonSlug", { + type: "String", + args: { + currentLessonId: nexus.intArg(), + }, + }); + }, + }), + ], + // GraphQL SDL + typeDefs: ` + type Article { + name: String + } + `, + resolvers: { + Query: { + nextLessonSlug: { + async resolve(_context, { currentLessonId }) { + console.log("before"); + const result = await strapi.db + .query("api::module.module") + .findOne({ + where: { + id: 1, + }, + populate: { + moduleLessons: { + populate: ["lesson"], + }, + }, + }); + const { moduleLessons: lessons } = result; + const currentLessonIndex = lessons.findIndex( + ({ lesson: { id } }) => id === currentLessonId + ); + + if (currentLessonIndex === -1) { + throw new Error(`Lesson of id ${currentLessonId} not found`); + } + + if (currentLessonIndex === lessons.length - 1) { + return null; + } + + return lessons[currentLessonIndex + 1].lesson.slug; + }, + }, + }, + }, + resolversConfig: { + "Query.nextLessonSlug": { + auth: false, + }, + }, + }); + extensionService.use(extension); + }, /** * An asynchronous bootstrap function that runs before diff --git a/src/plugins/challenge-view/README.md b/src/plugins/challenge-view/README.md new file mode 100644 index 0000000..752e537 --- /dev/null +++ b/src/plugins/challenge-view/README.md @@ -0,0 +1,3 @@ +# Strapi plugin challenge-view + +A quick description of challenge-view. diff --git a/src/plugins/challenge-view/admin/src/components/Initializer/index.js b/src/plugins/challenge-view/admin/src/components/Initializer/index.js new file mode 100644 index 0000000..71dc50e --- /dev/null +++ b/src/plugins/challenge-view/admin/src/components/Initializer/index.js @@ -0,0 +1,26 @@ +/** + * + * Initializer + * + */ + +import { useEffect, useRef } from 'react'; +import PropTypes from 'prop-types'; +import pluginId from '../../pluginId'; + +const Initializer = ({ setPlugin }) => { + const ref = useRef(); + ref.current = setPlugin; + + useEffect(() => { + ref.current(pluginId); + }, []); + + return null; +}; + +Initializer.propTypes = { + setPlugin: PropTypes.func.isRequired, +}; + +export default Initializer; diff --git a/src/plugins/challenge-view/admin/src/components/PluginIcon/index.js b/src/plugins/challenge-view/admin/src/components/PluginIcon/index.js new file mode 100644 index 0000000..a7c98f7 --- /dev/null +++ b/src/plugins/challenge-view/admin/src/components/PluginIcon/index.js @@ -0,0 +1,12 @@ +/** + * + * PluginIcon + * + */ + +import React from 'react'; +import Puzzle from '@strapi/icons/Puzzle'; + +const PluginIcon = () =>+ |
+ |
+
+ |
+
+ |
+
+ |
+
+ |
+
+ |
+
---|---|---|---|---|---|---|
+ {/* TODO: make passing in the id unnecessary */} + |