const { DataTypes } = require('sequelize'); const sequelize = require('../config/database'); module.exports = (sequelize) => { const Reservation = sequelize.define('Reservation', { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true }, client_id: { type: DataTypes.INTEGER, allowNull: true, references: { model: 'clients', key: 'id' } }, table_id: { type: DataTypes.INTEGER, allowNull: false, references: { model: 'tables', key: 'id' } }, date_reservation: { type: DataTypes.DATE, allowNull: false, validate: { isDate: { msg: 'Date de réservation invalide' }, isAfter: { args: new Date().toISOString().split('T')[0], msg: 'La date de réservation doit être future' } } }, nombre_personnes: { type: DataTypes.INTEGER, allowNull: false, validate: { min: { args: [1], msg: 'Le nombre de personnes doit être au moins de 1' }, max: { args: [20], msg: 'Le nombre de personnes ne peut dépasser 20' } } }, statut: { type: DataTypes.ENUM('confirmee', 'en_attente', 'annulee', 'terminee'), defaultValue: 'en_attente' }, commentaires: { type: DataTypes.TEXT, allowNull: true }, telephone: { type: DataTypes.STRING(20), allowNull: true, validate: { is: { args: /^[0-9+\-\s]+$/, msg: 'Numéro de téléphone invalide' } } }, nom_contact: { type: DataTypes.STRING(100), allowNull: true }, email_contact: { type: DataTypes.STRING(255), allowNull: true, validate: { isEmail: { msg: 'Email de contact invalide' } } } }, { tableName: 'reservations', timestamps: true, createdAt: 'created_at', updatedAt: 'updated_at' }); return Reservation; }