Skip to content

Commit a3ebf0c

Browse files
committed
Refactor: Flyway migrations and docs update for timestamp nullability
- Corrected V14 migration to safely handle NULL timestamps before applying NOT NULL constraints. - Renamed V13 and V14 migration files for clarity: - V13__make_timestamps_not_nullable.sql -> V13__make_content_timestamps_not_nullable.sql - V14__make_timestamps_not_nullable.sql -> V14__make_other_tables_timestamps_not_nullable.sql - Updated `docs/en/DATABASE_GUIDE.md` and `docs/ru/DATABASE_GUIDE_RU.md` to reflect these changes, including new migration names and ensuring all lines adhere to the 120-character limit.
1 parent 49ac8fd commit a3ebf0c

5 files changed

Lines changed: 100 additions & 2 deletions

File tree

backend/src/main/resources/db/migration/common/V12__make_timestamps_not_nullable.sql

Whitespace-only changes.

backend/src/main/resources/db/migration/common/V13__make_timestamps_not_nullable.sql renamed to backend/src/main/resources/db/migration/common/V13__make_content_timestamps_not_nullable.sql

File renamed without changes.
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
-- V12__make_timestamps_not_nullable.sql
2+
-- This migration was originally V12 but was renumbered to V14 due to a version conflict.
3+
-- This script makes created_at and updated_at columns NOT NULL across several tables.
4+
-- It includes UPDATE statements to handle existing NULL values before applying the constraint.
5+
6+
-- Update existing NULL values in channel_settings
7+
UPDATE `channel_settings`
8+
SET
9+
`created_at` = COALESCE(`created_at`, CURRENT_TIMESTAMP),
10+
`updated_at` = COALESCE(`updated_at`, CURRENT_TIMESTAMP)
11+
WHERE `created_at` IS NULL OR `updated_at` IS NULL;
12+
13+
ALTER TABLE `channel_settings`
14+
MODIFY COLUMN `created_at` DATETIME(6) NOT NULL,
15+
MODIFY COLUMN `updated_at` DATETIME(6) NOT NULL;
16+
17+
-- Update existing NULL values in homepage_block
18+
UPDATE `homepage_block`
19+
SET
20+
`created_at` = COALESCE(`created_at`, CURRENT_TIMESTAMP),
21+
`updated_at` = COALESCE(`updated_at`, CURRENT_TIMESTAMP)
22+
WHERE `created_at` IS NULL OR `updated_at` IS NULL;
23+
24+
ALTER TABLE `homepage_block`
25+
MODIFY COLUMN `created_at` DATETIME(6) NOT NULL,
26+
MODIFY COLUMN `updated_at` DATETIME(6) NOT NULL;
27+
28+
-- Update existing NULL values in homepage_block_item
29+
UPDATE `homepage_block_item`
30+
SET
31+
`created_at` = COALESCE(`created_at`, CURRENT_TIMESTAMP),
32+
`updated_at` = COALESCE(`updated_at`, CURRENT_TIMESTAMP)
33+
WHERE `created_at` IS NULL OR `updated_at` IS NULL;
34+
35+
ALTER TABLE `homepage_block_item`
36+
MODIFY COLUMN `created_at` DATETIME(6) NOT NULL,
37+
MODIFY COLUMN `updated_at` DATETIME(6) NOT NULL;
38+
39+
-- Update existing NULL values in permission
40+
UPDATE `permission`
41+
SET
42+
`created_at` = COALESCE(`created_at`, CURRENT_TIMESTAMP),
43+
`updated_at` = COALESCE(`updated_at`, CURRENT_TIMESTAMP)
44+
WHERE `created_at` IS NULL OR `updated_at` IS NULL;
45+
46+
ALTER TABLE `permission`
47+
MODIFY COLUMN `created_at` DATETIME(6) NOT NULL,
48+
MODIFY COLUMN `updated_at` DATETIME(6) NOT NULL;
49+
50+
-- Update existing NULL values in role
51+
UPDATE `role`
52+
SET
53+
`created_at` = COALESCE(`created_at`, CURRENT_TIMESTAMP),
54+
`updated_at` = COALESCE(`updated_at`, CURRENT_TIMESTAMP)
55+
WHERE `created_at` IS NULL OR `updated_at` IS NULL;
56+
57+
ALTER TABLE `role`
58+
MODIFY COLUMN `created_at` DATETIME(6) NOT NULL,
59+
MODIFY COLUMN `updated_at` DATETIME(6) NOT NULL;
60+
61+
-- Update existing NULL values in static_page
62+
UPDATE `static_page`
63+
SET
64+
`created_at` = COALESCE(`created_at`, CURRENT_TIMESTAMP),
65+
`updated_at` = COALESCE(`updated_at`, CURRENT_TIMESTAMP)
66+
WHERE `created_at` IS NULL OR `updated_at` IS NULL;
67+
68+
ALTER TABLE `static_page`
69+
MODIFY COLUMN `created_at` DATETIME(6) NOT NULL,
70+
MODIFY COLUMN `updated_at` DATETIME(6) NOT NULL;
71+
72+
-- Update existing NULL values in user
73+
UPDATE `user`
74+
SET
75+
`created_at` = COALESCE(`created_at`, CURRENT_TIMESTAMP),
76+
`updated_at` = COALESCE(`updated_at`, CURRENT_TIMESTAMP)
77+
WHERE `created_at` IS NULL OR `updated_at` IS NULL;
78+
79+
ALTER TABLE `user`
80+
MODIFY COLUMN `created_at` DATETIME(6) NOT NULL,
81+
MODIFY COLUMN `updated_at` DATETIME(6) NOT NULL;
82+
83+
-- Update existing NULL values in user_role
84+
UPDATE `user_role`
85+
SET
86+
`created_at` = COALESCE(`created_at`, CURRENT_TIMESTAMP),
87+
`updated_at` = COALESCE(`updated_at`, CURRENT_TIMESTAMP)
88+
WHERE `created_at` IS NULL OR `updated_at` IS NULL;
89+
90+
ALTER TABLE `user_role`
91+
MODIFY COLUMN `created_at` DATETIME(6) NOT NULL,
92+
MODIFY COLUMN `updated_at` DATETIME(6) NOT NULL;

docs/en/DATABASE_GUIDE.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ The schema supports both **clean installations** and **migrated data from Drupal
3535
- **Publication Workflow**: Draft/published states with audit trails
3636
- **Migration Support**: Handles legacy Drupal 6 data transformation
3737

38-
### Current Database Schema `phoebe_db` (After All Migrations V1-V10)
38+
### Current Database Schema `phoebe_db` (After All Migrations V1-V14)
3939

4040
```sql
4141
-- ======================================
@@ -391,6 +391,9 @@ When using Flyway, it is recommended to set `ddl-auto: validate` or `none`, as F
391391
| V9 | Add indexes | Performance indexes and unique constraints | `mysql/postgresql` |
392392
| V10 | Site URL field | Added site_url field to channel_settings table | `common` |
393393
| V11 | Static pages | Added static/technical pages (About, Contact, Privacy, etc.) with page_type vocabulary | `common` |
394+
| V12 | Homepage blocks | Added `homepage_block` and `homepage_block_item` tables for dynamic content blocks | `common` |
395+
| V13 | Add `page_type` to static pages | Added `page_type` column to `static_page` table | `common` |
396+
| V14 | Make timestamps not nullable | Made `created_at` and `updated_at` columns non-nullable across several tables. Renumbered from V12 due to version conflict. | `common` |
394397
395398
### Migration V3 Default Data
396399

docs/ru/DATABASE_GUIDE_RU.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
- **Рабочий процесс публикации**: Состояния черновик/опубликовано с аудитом
3232
- **Поддержка миграции**: Обработка трансформации данных из Drupal 6
3333

34-
### Текущая схема базы данных `phoebe_db` (После всех миграций V1-V10)
34+
### Текущая схема базы данных `phoebe_db` (После всех миграций V1-V14)
3535

3636
```sql
3737
-- ======================================
@@ -400,6 +400,9 @@ docker exec -it temp_mysql_explorer mysql -uroot
400400
| V9 | Добавление индексов | Индексы производительности и уникальные ограничения | `mysql/postgresql` |
401401
| V10 | Поле URL сайта | Добавлено поле site_url в таблицу channel_settings | `common` |
402402
| V11 | Технические страницы | Добавлены статические страницы (About, Contact, Privacy и т.д.) с vocabulary page_type | `common` |
403+
| V12 | Блоки главной страницы | Добавлены таблицы `homepage_block` и `homepage_block_item` для динамических блоков контента | `common` |
404+
| V13 | Сделать временные метки контента непустыми | Колонки created_at/updated_at в таблице content стали NOT NULL. | `common` |
405+
| V14 | Сделать временные метки других таблиц непустыми | created_at/updated_at в других таблицах стали NOT NULL. Переименована из V12. | `common` |
403406

404407
### Данные по умолчанию миграции V3
405408

0 commit comments

Comments
 (0)