refactor: Move course dates from registracie to kurzy table
- Add datumOd and datumDo columns to kurzy table - Remove datumOd, datumDo, pocetUcastnikov from registracie table - Update schema, validators, and services accordingly - Certificate generation now uses course dates - Migration preserves existing data by copying most recent dates Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
21
src/db/migrations/0011_refactor_ai_kurzy_dates.sql
Normal file
21
src/db/migrations/0011_refactor_ai_kurzy_dates.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
-- Migration: Move dates from registracie to kurzy table
|
||||
|
||||
-- Step 1: Add new columns to kurzy table
|
||||
ALTER TABLE kurzy ADD COLUMN IF NOT EXISTS datum_od DATE;
|
||||
ALTER TABLE kurzy ADD COLUMN IF NOT EXISTS datum_do DATE;
|
||||
|
||||
-- Step 2: Migrate existing data - copy most recent registration dates to each course
|
||||
UPDATE kurzy k
|
||||
SET datum_od = r.datum_od, datum_do = r.datum_do
|
||||
FROM (
|
||||
SELECT DISTINCT ON (kurz_id) kurz_id, datum_od, datum_do
|
||||
FROM registracie
|
||||
WHERE datum_od IS NOT NULL OR datum_do IS NOT NULL
|
||||
ORDER BY kurz_id, created_at DESC
|
||||
) r
|
||||
WHERE k.id = r.kurz_id;
|
||||
|
||||
-- Step 3: Drop columns from registracie table
|
||||
ALTER TABLE registracie DROP COLUMN IF EXISTS datum_od;
|
||||
ALTER TABLE registracie DROP COLUMN IF EXISTS datum_do;
|
||||
ALTER TABLE registracie DROP COLUMN IF EXISTS pocet_ucastnikov;
|
||||
@@ -441,6 +441,8 @@ export const kurzy = pgTable('kurzy', {
|
||||
maxKapacita: integer('max_kapacita'),
|
||||
aktivny: boolean('aktivny').default(true).notNull(),
|
||||
farba: varchar('farba', { length: 20 }), // Color for visual distinction (e.g., 'primary', 'info', 'warning')
|
||||
datumOd: date('datum_od', { mode: 'date' }),
|
||||
datumDo: date('datum_do', { mode: 'date' }),
|
||||
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
||||
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
||||
});
|
||||
@@ -473,10 +475,7 @@ export const registracie = pgTable('registracie', {
|
||||
id: serial('id').primaryKey(),
|
||||
kurzId: integer('kurz_id').notNull().references(() => kurzy.id, { onDelete: 'cascade' }),
|
||||
ucastnikId: integer('ucastnik_id').notNull().references(() => ucastnici.id, { onDelete: 'cascade' }),
|
||||
datumOd: date('datum_od', { mode: 'date' }), // dátum začiatku pre túto registráciu
|
||||
datumDo: date('datum_do', { mode: 'date' }), // dátum konca pre túto registráciu
|
||||
formaKurzu: formaKurzuEnum('forma_kurzu').default('prezencne').notNull(),
|
||||
pocetUcastnikov: integer('pocet_ucastnikov').default(1).notNull(),
|
||||
fakturaCislo: varchar('faktura_cislo', { length: 100 }),
|
||||
fakturaVystavena: boolean('faktura_vystavena').default(false).notNull(),
|
||||
zaplatene: boolean('zaplatene').default(false).notNull(),
|
||||
|
||||
Reference in New Issue
Block a user