Files
starr-philproperties/apps/api/database/migrations/20270101000073-create-media-playback-positions.js
kennethobsequio eec1cd22cb db migration
testing live in another VM environment for self hosting

Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
2026-08-29 15:48:02 +08:00

33 lines
1.3 KiB
JavaScript

'use strict';
// Raw SQL for the same CockroachDB DO-block/CREATE TYPE reason as
// 20270101000067-create-completion-requirements.js.
//
// Decoupled from completion_requirements entirely — tracks last-known
// playback position for ANY video/audio block, regardless of whether the
// lesson has a watch-type completion requirement configured.
module.exports = {
async up(queryInterface) {
await queryInterface.sequelize.query(`
CREATE TABLE media_playback_positions (
position_id UUID PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users (user_id) ON DELETE CASCADE,
lesson_id BIGINT NOT NULL REFERENCES lessons (lesson_id) ON DELETE CASCADE,
block_id TEXT NOT NULL,
percent INTEGER NOT NULL,
"createdAt" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT uq_mpp_user_lesson_block UNIQUE (user_id, lesson_id, block_id)
);
`);
await queryInterface.sequelize.query(
`CREATE INDEX idx_mpp_user_lesson ON media_playback_positions (user_id, lesson_id);`
);
},
async down(queryInterface) {
await queryInterface.sequelize.query(`DROP TABLE IF EXISTS media_playback_positions;`);
},
};