From 6c672c4b2024d4c2cea984b619ecef2aaeb8d92c Mon Sep 17 00:00:00 2001 From: Yared Yemane Date: Thu, 23 Apr 2026 02:07:32 -0700 Subject: [PATCH] static data for Courses --- .../000048_seed_default_courses.down.sql | 3 +++ .../000048_seed_default_courses.up.sql | 18 ++++++++++++++++++ internal/domain/course.go | 6 +++++- 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 db/migrations/000048_seed_default_courses.down.sql create mode 100644 db/migrations/000048_seed_default_courses.up.sql diff --git a/db/migrations/000048_seed_default_courses.down.sql b/db/migrations/000048_seed_default_courses.down.sql new file mode 100644 index 0000000..93ed3d6 --- /dev/null +++ b/db/migrations/000048_seed_default_courses.down.sql @@ -0,0 +1,3 @@ +DELETE FROM courses +WHERE description = 'Default CEFR level course (system seed).' + AND name IN ('A1', 'A2', 'B1', 'B2', 'C1', 'C2'); diff --git a/db/migrations/000048_seed_default_courses.up.sql b/db/migrations/000048_seed_default_courses.up.sql new file mode 100644 index 0000000..2c00019 --- /dev/null +++ b/db/migrations/000048_seed_default_courses.up.sql @@ -0,0 +1,18 @@ +-- Default CEFR-style course names per program (custom courses can still be created via the API with any name). +-- Matches hierarchy note on courses: CEFR labels A1..C2, plus ad-hoc names allowed. +INSERT INTO courses (program_id, name, description, thumbnail) +SELECT + p.id, + v.name, + 'Default CEFR level course (system seed).', + NULL +FROM programs AS p +CROSS JOIN ( + VALUES + ('A1'), + ('A2'), + ('B1'), + ('B2'), + ('C1'), + ('C2') +) AS v (name); diff --git a/internal/domain/course.go b/internal/domain/course.go index fe5260c..e3965e3 100644 --- a/internal/domain/course.go +++ b/internal/domain/course.go @@ -2,7 +2,11 @@ package domain import "time" -// Course belongs to a Program (e.g. A1, A2, … labels are configured separately). +// DefaultCEFRCourseNames are the standard course names seeded for each program (migration 000048). +// Creating a course via the API may use any of these or a custom name. +var DefaultCEFRCourseNames = []string{"A1", "A2", "B1", "B2", "C1", "C2"} + +// Course belongs to a Program. type Course struct { ID int64 `json:"id"` ProgramID int64 `json:"program_id"`