140 lines
5.4 KiB
SQL
140 lines
5.4 KiB
SQL
INSERT INTO "users" ("id", "email", "name", "auth_role", "primary_organization_name", "createdAt", "updatedAt")
|
|
VALUES (gen_random_uuid(), 'system@autonomystudio.local', 'Autonomy Studio', 'SYSTEM', 'Autonomy Studio', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
|
ON CONFLICT ("email") DO UPDATE
|
|
SET "name" = EXCLUDED."name",
|
|
"auth_role" = EXCLUDED."auth_role",
|
|
"primary_organization_name" = EXCLUDED."primary_organization_name",
|
|
"updatedAt" = CURRENT_TIMESTAMP;
|
|
|
|
WITH teacher AS (
|
|
SELECT "id" FROM "users" WHERE "email" = 'system@autonomystudio.local'
|
|
)
|
|
INSERT INTO "courses" ("slug", "title", "subtitle", "description", "organization_name", "teacher_id", "is_active", "updated_at")
|
|
SELECT
|
|
'autonomy-studio-lms-guide',
|
|
'NAV2 알아보기',
|
|
'처음 사용하는 수강생을 위한 짧은 체험 강좌',
|
|
'강좌 배정 전 신규 사용자가 LMS 화면 흐름을 빠르게 익힐 수 있는 공통 체험 강좌입니다. NAV2 개념을 예시로 커리큘럼 확인, 학습단계 열람, 질의응답 사용법만 간단히 안내합니다.',
|
|
'Autonomy Studio',
|
|
teacher."id",
|
|
true,
|
|
CURRENT_TIMESTAMP
|
|
FROM teacher
|
|
ON CONFLICT ("slug") DO UPDATE
|
|
SET "title" = EXCLUDED."title",
|
|
"subtitle" = EXCLUDED."subtitle",
|
|
"description" = EXCLUDED."description",
|
|
"organization_name" = EXCLUDED."organization_name",
|
|
"teacher_id" = EXCLUDED."teacher_id",
|
|
"is_active" = true,
|
|
"updated_at" = CURRENT_TIMESTAMP;
|
|
|
|
WITH course AS (
|
|
SELECT "id" FROM "courses" WHERE "slug" = 'autonomy-studio-lms-guide'
|
|
)
|
|
INSERT INTO "course_weeks" (
|
|
"course_id",
|
|
"week",
|
|
"title",
|
|
"tags",
|
|
"progress",
|
|
"state",
|
|
"duration",
|
|
"github",
|
|
"overview",
|
|
"deliverable",
|
|
"requires_source_submission",
|
|
"updated_at"
|
|
)
|
|
SELECT
|
|
course."id",
|
|
1,
|
|
'NAV2 알아보기',
|
|
ARRAY['NAV2','진행중']::TEXT[],
|
|
0,
|
|
'current',
|
|
'15분',
|
|
'제출 없음',
|
|
'NAV2가 어떤 역할을 하는지 간단히 살펴보고, LMS에서 강좌 내용과 학습단계, 질문 기능을 어떻게 사용하는지 확인합니다.',
|
|
'이 강좌는 체험용이므로 별도 제출은 없습니다. 실제 수업 강좌가 배정되면 해당 강좌가 우선 표시됩니다.',
|
|
false,
|
|
CURRENT_TIMESTAMP
|
|
FROM course
|
|
ON CONFLICT ("course_id", "week") DO UPDATE
|
|
SET "title" = EXCLUDED."title",
|
|
"tags" = EXCLUDED."tags",
|
|
"progress" = EXCLUDED."progress",
|
|
"state" = EXCLUDED."state",
|
|
"duration" = EXCLUDED."duration",
|
|
"github" = EXCLUDED."github",
|
|
"overview" = EXCLUDED."overview",
|
|
"deliverable" = EXCLUDED."deliverable",
|
|
"requires_source_submission" = false,
|
|
"updated_at" = CURRENT_TIMESTAMP;
|
|
|
|
DELETE FROM "course_weeks"
|
|
USING "courses"
|
|
WHERE "course_weeks"."course_id" = "courses"."id"
|
|
AND "courses"."slug" = 'autonomy-studio-lms-guide'
|
|
AND "course_weeks"."week" <> 1;
|
|
|
|
DELETE FROM "course_week_practices"
|
|
USING "course_weeks", "courses"
|
|
WHERE "course_week_practices"."week_id" = "course_weeks"."id"
|
|
AND "course_weeks"."course_id" = "courses"."id"
|
|
AND "courses"."slug" = 'autonomy-studio-lms-guide';
|
|
|
|
DELETE FROM "course_week_topics"
|
|
USING "course_weeks", "courses"
|
|
WHERE "course_week_topics"."week_id" = "course_weeks"."id"
|
|
AND "course_weeks"."course_id" = "courses"."id"
|
|
AND "courses"."slug" = 'autonomy-studio-lms-guide';
|
|
|
|
WITH week1 AS (
|
|
SELECT w."id" AS week_id
|
|
FROM "course_weeks" w
|
|
JOIN "courses" c ON c."id" = w."course_id"
|
|
WHERE c."slug" = 'autonomy-studio-lms-guide' AND w."week" = 1
|
|
)
|
|
INSERT INTO "course_week_topics" ("week_id", "sort_order", "title", "detail")
|
|
SELECT week1.week_id, data.sort_order, data.title, data.detail
|
|
FROM week1
|
|
CROSS JOIN (
|
|
VALUES
|
|
(1, 'NAV2란 무엇인가', 'NAV2는 ROS 2 기반 로봇 내비게이션 스택입니다. 지도, 위치추정, 경로계획, 제어 흐름이 어떻게 이어지는지 큰 그림을 확인합니다.'),
|
|
(2, 'LMS에서 강좌 읽기', '주차 카드와 학습단계를 열어 강의 내용, 참고 자료, 진행 상태를 확인하는 방법을 익힙니다.'),
|
|
(3, '질문 기능 사용하기', '학습 중 궁금한 내용을 AI 또는 강사에게 질문하고, 답변을 확인하는 기본 흐름을 살펴봅니다.')
|
|
) AS data(sort_order, title, detail);
|
|
|
|
WITH week1 AS (
|
|
SELECT w."id" AS week_id
|
|
FROM "course_weeks" w
|
|
JOIN "courses" c ON c."id" = w."course_id"
|
|
WHERE c."slug" = 'autonomy-studio-lms-guide' AND w."week" = 1
|
|
)
|
|
INSERT INTO "course_week_practices" ("week_id", "sort_order", "title", "description")
|
|
SELECT week1.week_id, data.sort_order, data.title, data.description
|
|
FROM week1
|
|
CROSS JOIN (
|
|
VALUES
|
|
(1, '화면 둘러보기', '커리큘럼 화면에서 주차 카드, 학습단계, 강의 내용을 차례로 확인합니다.'),
|
|
(2, '질문 남겨보기', '질의응답 화면에서 NAV2 관련 질문을 입력하는 위치를 확인합니다.')
|
|
) AS data(sort_order, title, description);
|
|
|
|
WITH guide AS (
|
|
SELECT "id" FROM "courses" WHERE "slug" = 'autonomy-studio-lms-guide'
|
|
),
|
|
local_platform AS (
|
|
SELECT "id" FROM "platforms" WHERE "platform_key" = 'futuredrive-local-pc'
|
|
)
|
|
INSERT INTO "course_platforms" ("course_id", "platform_id", "status", "action", "state", "sort_order", "updated_at")
|
|
SELECT guide."id", local_platform."id", '사용 가능', '연결', 'ready', 1, CURRENT_TIMESTAMP
|
|
FROM guide
|
|
CROSS JOIN local_platform
|
|
ON CONFLICT ("course_id", "platform_id") DO UPDATE
|
|
SET "status" = EXCLUDED."status",
|
|
"action" = EXCLUDED."action",
|
|
"state" = EXCLUDED."state",
|
|
"sort_order" = EXCLUDED."sort_order",
|
|
"updated_at" = CURRENT_TIMESTAMP;
|