refactor: consolidate formations into trails
This commit is contained in:
5
server/migrations/012_consolidate_learning_paths.sql
Normal file
5
server/migrations/012_consolidate_learning_paths.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
-- Trilhas and Formações described the same object: an ordered collection of
|
||||
-- existing courses. Preserve every record while collapsing the duplicate type.
|
||||
update learning_paths set kind = 'trail' where kind = 'formation';
|
||||
drop index if exists learning_paths_kind_index;
|
||||
alter table learning_paths drop column kind;
|
||||
@@ -56,7 +56,6 @@ const learningPathSchema = z.object({
|
||||
coverImagePositionX: z.number().min(0).max(100).default(50),
|
||||
coverImagePositionY: z.number().min(0).max(100).default(50),
|
||||
status: z.enum(['draft', 'published']).default('draft'),
|
||||
kind: z.enum(['trail', 'formation']).default('trail'),
|
||||
courseIds: z.array(z.string().uuid()).min(1).max(100),
|
||||
});
|
||||
|
||||
@@ -69,7 +68,7 @@ const getLearningPaths = async () => {
|
||||
p.cover_image_zoom as "coverImageZoom",
|
||||
p.cover_image_position_x as "coverImagePositionX",
|
||||
p.cover_image_position_y as "coverImagePositionY",
|
||||
p.status, p.kind, p.published_at as "publishedAt", p.created_at as "createdAt",
|
||||
p.status, p.published_at as "publishedAt", p.created_at as "createdAt",
|
||||
coalesce(jsonb_agg(jsonb_build_object(
|
||||
'id', c.id, 'title', c.title, 'status', c.status,
|
||||
'coverImageUrl', c.cover_image_url, 'position', pc.position
|
||||
@@ -176,10 +175,10 @@ export const adminRoutes: FastifyPluginAsync = async (app) => {
|
||||
const courseIds = await validatePathCourses(client, input);
|
||||
const path = await client.query<{ id: string }>(
|
||||
`insert into learning_paths (
|
||||
title, description, cover_image_url, cover_image_zoom, cover_image_position_x, cover_image_position_y, status, kind, published_at
|
||||
) values ($1, $2, $3, $4, $5, $6, $7::course_status, $8, case when $7 = 'published' then now() else null end)
|
||||
title, description, cover_image_url, cover_image_zoom, cover_image_position_x, cover_image_position_y, status, published_at
|
||||
) values ($1, $2, $3, $4, $5, $6, $7::course_status, case when $7 = 'published' then now() else null end)
|
||||
returning id`,
|
||||
[input.title, input.description, input.coverImageUrl, input.coverImageZoom, input.coverImagePositionX, input.coverImagePositionY, input.status, input.kind],
|
||||
[input.title, input.description, input.coverImageUrl, input.coverImageZoom, input.coverImagePositionX, input.coverImagePositionY, input.status],
|
||||
);
|
||||
await writePathCourses(client, path.rows[0].id, courseIds);
|
||||
await client.query('commit');
|
||||
@@ -205,11 +204,11 @@ export const adminRoutes: FastifyPluginAsync = async (app) => {
|
||||
const path = await client.query<{ id: string }>(
|
||||
`update learning_paths set
|
||||
title = $2, description = $3, cover_image_url = $4, cover_image_zoom = $5,
|
||||
cover_image_position_x = $6, cover_image_position_y = $7, status = $8::course_status, kind = $9,
|
||||
cover_image_position_x = $6, cover_image_position_y = $7, status = $8::course_status,
|
||||
published_at = case when $8 = 'published' then coalesce(published_at, now()) else null end
|
||||
where id = $1
|
||||
returning id`,
|
||||
[pathId, input.title, input.description, input.coverImageUrl, input.coverImageZoom, input.coverImagePositionX, input.coverImagePositionY, input.status, input.kind],
|
||||
[pathId, input.title, input.description, input.coverImageUrl, input.coverImageZoom, input.coverImagePositionX, input.coverImagePositionY, input.status],
|
||||
);
|
||||
if (!path.rows[0]) {
|
||||
await client.query('rollback');
|
||||
|
||||
@@ -153,7 +153,7 @@ export const courseRoutes: FastifyPluginAsync = async (app) => {
|
||||
app.get('/paths', async () => {
|
||||
const result = await pool.query(
|
||||
`select
|
||||
p.id, p.title, p.description, p.kind,
|
||||
p.id, p.title, p.description,
|
||||
coalesce(p.cover_image_url, (
|
||||
select value #>> '{}' from platform_settings where key = 'media.defaultCoverImageUrl'
|
||||
)) as "coverImageUrl",
|
||||
|
||||
Reference in New Issue
Block a user