/** * © 2026 Niolla. All rights reserved. * * This file is part of the Niolla software project and is intended for internal use only. * Unauthorized copying, modification, distribution, or disclosure of this file, * via any medium, is strictly prohibited without written permission from Niolla. * * For inquiries, contact: support@niolla.lk */ // app/models/upload.model.js module.exports = (sequelize, DataTypes) => { const upload = sequelize.define( "upload", { id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true, }, file_path: { type: DataTypes.STRING, allowNull: false, }, file_type: { type: DataTypes.STRING, allowNull: false, }, file_size: { type: DataTypes.INTEGER, allowNull: false, }, original_name: { type: DataTypes.STRING, allowNull: false, }, use_for: { type: DataTypes.STRING, allowNull: false, }, uploaded_by: { type: DataTypes.STRING, allowNull: false, }, storage_provider: { type: DataTypes.STRING, allowNull: false, defaultValue: "S3" }, safe_name: { type: DataTypes.STRING, allowNull: true }, checksum: { type: DataTypes.STRING(64), allowNull: true }, owner_type: { type: DataTypes.STRING, allowNull: false, defaultValue: "USER" }, owner_id: { type: DataTypes.STRING, allowNull: false }, visibility: { type: DataTypes.ENUM("PRIVATE", "PUBLIC"), allowNull: false, defaultValue: "PRIVATE" }, status: { type: DataTypes.ENUM("PENDING", "AVAILABLE", "FAILED", "DELETED"), allowNull: false, defaultValue: "PENDING" }, deletedAt: { type: DataTypes.DATE, allowNull: true }, }, { tableName: "uploads", timestamps: true, }, ); upload.associate = (models) => upload.belongsTo(models.User, { foreignKey: "uploaded_by", as: "uploader", constraints: false }); return upload; };