const { DataTypes } = require('sequelize'); const { sequelize } = require('../config/database'); const Portfolio = sequelize.define('Portfolio', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true }, title: { type: DataTypes.STRING, allowNull: false, validate: { len: [1, 255] }, set(value) { this.setDataValue('title', value.trim()); } }, description: { type: DataTypes.TEXT, allowNull: false }, shortDescription: { type: DataTypes.STRING(200), allowNull: false }, category: { type: DataTypes.ENUM('web-development', 'mobile-app', 'ui-ux-design', 'branding', 'e-commerce', 'other'), allowNull: false }, technologies: { type: DataTypes.ARRAY(DataTypes.STRING), defaultValue: [] }, images: { type: DataTypes.JSONB, defaultValue: [] }, clientName: { type: DataTypes.STRING, allowNull: true, set(value) { this.setDataValue('clientName', value ? value.trim() : null); } }, projectUrl: { type: DataTypes.STRING, allowNull: true, validate: { isUrl: true } }, githubUrl: { type: DataTypes.STRING, allowNull: true, validate: { isUrl: true } }, status: { type: DataTypes.ENUM('completed', 'in-progress', 'planning'), defaultValue: 'completed' }, featured: { type: DataTypes.BOOLEAN, defaultValue: false }, publishedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW }, completedAt: { type: DataTypes.DATE, allowNull: true }, isPublished: { type: DataTypes.BOOLEAN, defaultValue: true }, viewCount: { type: DataTypes.INTEGER, defaultValue: 0 }, likes: { type: DataTypes.INTEGER, defaultValue: 0 }, order: { type: DataTypes.INTEGER, defaultValue: 0 }, seo: { type: DataTypes.JSONB, defaultValue: {} } }, { tableName: 'portfolios', timestamps: true, indexes: [ { fields: ['category', 'publishedAt'] }, { fields: ['featured', 'publishedAt'] }, { type: 'gin', fields: ['technologies'] } ] }); // Virtual for primary image Portfolio.prototype.getPrimaryImage = function() { if (!this.images || this.images.length === 0) return null; const primary = this.images.find(img => img.isPrimary); return primary || this.images[0]; }; module.exports = Portfolio;