mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-11 17:27:31 +02:00
Implement database migration scripts and SQL to create the 'announcements' table with relevant columns, constraints, and indexes. Also, adjust frontend component logic for handling 'all' store selection. Replit-Commit-Author: Agent Replit-Commit-Session-Id: e437ffed-c31b-44eb-9fd5-b6f9faa8e7ce Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/e437ffed-c31b-44eb-9fd5-b6f9faa8e7ce/biGr9ER
103 lines
3.6 KiB
JavaScript
103 lines
3.6 KiB
JavaScript
// Script de migration production pour créer la table announcements
|
|
// Usage: node migrations/production_fix_announcements.js
|
|
|
|
import { drizzle } from 'drizzle-orm/node-postgres';
|
|
import pg from 'pg';
|
|
import { fileURLToPath } from 'url';
|
|
import { dirname, join } from 'path';
|
|
import { readFileSync } from 'fs';
|
|
|
|
const { Pool } = pg;
|
|
|
|
async function createAnnouncementsTable() {
|
|
const pool = new Pool({
|
|
connectionString: process.env.DATABASE_URL,
|
|
});
|
|
|
|
const db = drizzle(pool);
|
|
|
|
try {
|
|
console.log('🔄 Création de la table announcements...');
|
|
|
|
// SQL pour créer la table announcements
|
|
const sql = `
|
|
-- Création de la table announcements
|
|
CREATE TABLE IF NOT EXISTS announcements (
|
|
id SERIAL PRIMARY KEY,
|
|
title VARCHAR(255) NOT NULL,
|
|
content TEXT NOT NULL,
|
|
priority VARCHAR(20) NOT NULL DEFAULT 'normal' CHECK (priority IN ('normal', 'important', 'urgent')),
|
|
author_id VARCHAR(255) NOT NULL,
|
|
group_id INTEGER,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
CONSTRAINT announcements_author_id_fkey FOREIGN KEY (author_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
CONSTRAINT announcements_group_id_fkey FOREIGN KEY (group_id) REFERENCES groups(id) ON DELETE CASCADE
|
|
);
|
|
|
|
-- Création des index
|
|
CREATE INDEX IF NOT EXISTS idx_announcements_priority ON announcements(priority);
|
|
CREATE INDEX IF NOT EXISTS idx_announcements_created_at ON announcements(created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_announcements_author_id ON announcements(author_id);
|
|
CREATE INDEX IF NOT EXISTS idx_announcements_group_id ON announcements(group_id);
|
|
|
|
-- Commentaires
|
|
COMMENT ON TABLE announcements IS 'Admin-managed announcements/information system';
|
|
COMMENT ON COLUMN announcements.priority IS 'Priority level: normal, important, urgent';
|
|
COMMENT ON COLUMN announcements.group_id IS 'NULL for global announcements, specific group_id for store-specific announcements';
|
|
`;
|
|
|
|
await pool.query(sql);
|
|
|
|
console.log('✅ Table announcements créée avec succès!');
|
|
|
|
// Vérification que la table existe
|
|
const checkResult = await pool.query(`
|
|
SELECT EXISTS (
|
|
SELECT FROM information_schema.tables
|
|
WHERE table_schema = 'public'
|
|
AND table_name = 'announcements'
|
|
);
|
|
`);
|
|
|
|
if (checkResult.rows[0].exists) {
|
|
console.log('✅ Vérification: La table announcements existe bien');
|
|
|
|
// Afficher la structure de la table
|
|
const structure = await pool.query(`
|
|
SELECT column_name, data_type, is_nullable, column_default
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'announcements'
|
|
ORDER BY ordinal_position;
|
|
`);
|
|
|
|
console.log('📋 Structure de la table:');
|
|
structure.rows.forEach(row => {
|
|
console.log(` ${row.column_name}: ${row.data_type}${row.is_nullable === 'NO' ? ' NOT NULL' : ''}`);
|
|
});
|
|
} else {
|
|
console.log('❌ Erreur: La table announcements n\'a pas été créée');
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('❌ Erreur lors de la création de la table:', error);
|
|
throw error;
|
|
} finally {
|
|
await pool.end();
|
|
}
|
|
}
|
|
|
|
// Exécution
|
|
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
createAnnouncementsTable()
|
|
.then(() => {
|
|
console.log('🎉 Migration terminée avec succès');
|
|
process.exit(0);
|
|
})
|
|
.catch((error) => {
|
|
console.error('💥 Échec de la migration:', error);
|
|
process.exit(1);
|
|
});
|
|
}
|
|
|
|
export { createAnnouncementsTable }; |