Skip to content
Closed
18 changes: 18 additions & 0 deletions migrations/20251127135355-add-unique-index-file-versions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
'use strict';

const tableName = 'file_versions';
const indexName = 'file_versions_file_id_network_file_id_unique';

/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up(queryInterface) {
await queryInterface.addIndex(tableName, ['file_id', 'network_file_id'], {
unique: true,
name: indexName,
});
},

async down(queryInterface) {
await queryInterface.removeIndex(tableName, indexName);
},
};
25 changes: 25 additions & 0 deletions migrations/20251201134624-add-user-id-to-file-versions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
'use strict';

module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.addColumn('file_versions', 'user_id', {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'users',
key: 'id',
},
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
});

await queryInterface.addIndex('file_versions', ['user_id', 'status'], {
name: 'file_versions_user_id_status_idx',
});
},

async down(queryInterface) {
await queryInterface.removeIndex('file_versions', 'file_versions_user_id_status_idx');
await queryInterface.removeColumn('file_versions', 'user_id');
},
};
2 changes: 2 additions & 0 deletions src/modules/file/file-version.domain.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ describe('FileVersion Domain', () => {
const mockAttributes: FileVersionAttributes = {
id: 'version-id-123',
fileId: 'file-id-456',
userId: 1,
networkFileId: 'network-file-id-789',
size: BigInt(1024),
status: FileVersionStatus.EXISTS,
Expand Down Expand Up @@ -63,6 +64,7 @@ describe('FileVersion Domain', () => {
expect(json).toEqual({
id: mockAttributes.id,
fileId: mockAttributes.fileId,
userId: mockAttributes.userId,
networkFileId: mockAttributes.networkFileId,
size: mockAttributes.size,
status: mockAttributes.status,
Expand Down
4 changes: 4 additions & 0 deletions src/modules/file/file-version.domain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export enum FileVersionStatus {
export interface FileVersionAttributes {
id: string;
fileId: string;
userId: number;
networkFileId: string;
size: bigint;
status: FileVersionStatus;
Expand All @@ -16,6 +17,7 @@ export interface FileVersionAttributes {
export class FileVersion implements FileVersionAttributes {
id: string;
fileId: string;
userId: number;
networkFileId: string;
size: bigint;
status: FileVersionStatus;
Expand All @@ -25,6 +27,7 @@ export class FileVersion implements FileVersionAttributes {
private constructor(attributes: FileVersionAttributes) {
this.id = attributes.id;
this.fileId = attributes.fileId;
this.userId = attributes.userId;
this.networkFileId = attributes.networkFileId;
this.size = attributes.size;
this.status = attributes.status;
Expand All @@ -48,6 +51,7 @@ export class FileVersion implements FileVersionAttributes {
return {
id: this.id,
fileId: this.fileId,
userId: this.userId,
networkFileId: this.networkFileId,
size: this.size,
status: this.status,
Expand Down
8 changes: 8 additions & 0 deletions src/modules/file/file-version.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
Table,
} from 'sequelize-typescript';
import { FileModel } from './file.model';
import { UserModel } from '../user/user.model';
import {
FileVersionAttributes,
FileVersionStatus,
Expand All @@ -33,6 +34,13 @@ export class FileVersionModel extends Model implements FileVersionAttributes {
@BelongsTo(() => FileModel, 'fileId')
file: FileModel;

@ForeignKey(() => UserModel)
@Column(DataType.INTEGER)
userId: number;

@BelongsTo(() => UserModel, 'userId')
user: UserModel;

@Column(DataType.STRING)
networkFileId: string;

Expand Down
Loading
Loading