mirror of
https://github.com/navidrome/navidrome.git
synced 2026-04-03 06:41:01 +00:00
* fix(db): add user foreign key constraint to annotation table Associates user_id with user.id, with cascade for delete (drop annotation) and update (update annotation). Migration script will only copy/insert annotations for user IDs that exist * remove default for user_id * refactor(db): rename migration correct sequencing Signed-off-by: Deluan <deluan@navidrome.org> --------- Signed-off-by: Deluan <deluan@navidrome.org> Co-authored-by: Deluan <deluan@navidrome.org>
47 lines
1.2 KiB
SQL
47 lines
1.2 KiB
SQL
-- +goose Up
|
|
-- +goose StatementBegin
|
|
CREATE TABLE IF NOT EXISTS annotation_tmp
|
|
(
|
|
user_id varchar(255) not null
|
|
REFERENCES user(id)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE,
|
|
item_id varchar(255) default '' not null,
|
|
item_type varchar(255) default '' not null,
|
|
play_count integer default 0,
|
|
play_date datetime,
|
|
rating integer default 0,
|
|
starred bool default FALSE not null,
|
|
starred_at datetime,
|
|
unique (user_id, item_id, item_type)
|
|
);
|
|
|
|
|
|
INSERT INTO annotation_tmp(
|
|
user_id, item_id, item_type, play_count, play_date, rating, starred, starred_at
|
|
)
|
|
SELECT user_id, item_id, item_type, play_count, play_date, rating, starred, starred_at
|
|
FROM annotation
|
|
WHERE user_id IN (
|
|
SELECT id FROM user
|
|
);
|
|
|
|
DROP TABLE annotation;
|
|
ALTER TABLE annotation_tmp RENAME TO annotation;
|
|
|
|
CREATE INDEX annotation_play_count
|
|
on annotation (play_count);
|
|
CREATE INDEX annotation_play_date
|
|
on annotation (play_date);
|
|
CREATE INDEX annotation_rating
|
|
on annotation (rating);
|
|
CREATE INDEX annotation_starred
|
|
on annotation (starred);
|
|
CREATE INDEX annotation_starred_at
|
|
on annotation (starred_at);
|
|
|
|
-- +goose StatementEnd
|
|
|
|
-- +goose Down
|
|
|