You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

92 lines
2.2 KiB

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;
}