diff --git a/init.sql b/init.sql index a07f694..faa59de 100644 --- a/init.sql +++ b/init.sql @@ -31,6 +31,19 @@ VALUES ( 'user' ) ON CONFLICT (username) DO NOTHING; +-- Créer la table user_page_permissions (permissions d'accès aux pages par utilisateur) +CREATE TABLE IF NOT EXISTS user_page_permissions ( + id VARCHAR PRIMARY KEY DEFAULT gen_random_uuid(), + user_id VARCHAR NOT NULL REFERENCES users(id) ON DELETE CASCADE, + page_id VARCHAR NOT NULL REFERENCES social_pages(id) ON DELETE CASCADE, + created_at TIMESTAMP DEFAULT NOW(), + UNIQUE(user_id, page_id) +); + +-- Index pour optimiser les requêtes de permissions +CREATE INDEX IF NOT EXISTS idx_user_page_permissions_user_id ON user_page_permissions(user_id); +CREATE INDEX IF NOT EXISTS idx_user_page_permissions_page_id ON user_page_permissions(page_id); + -- Liste des tables créées automatiquement par Drizzle ORM : -- - users (utilisateurs avec rôles) -- - social_pages (pages Facebook/Instagram connectées) @@ -41,3 +54,4 @@ VALUES ( -- - scheduled_posts (publications programmées) -- - ai_generations (historique des générations IA) -- - post_media (relation many-to-many entre posts et media) +-- - user_page_permissions (permissions d'accès aux pages par utilisateur) diff --git a/server/routes.ts b/server/routes.ts index da9b905..93f4e08 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -772,12 +772,18 @@ export async function registerRoutes(app: Express): Promise { const allPostsArrays = await Promise.all(allPostsPromises); scheduledPosts = allPostsArrays.flat(); } else { - // User voit uniquement les posts des pages qui lui sont attribuées + // User voit tous les posts programmés sur les pages qui lui sont attribuées (peu importe qui les a créés) const accessiblePages = await storage.getUserAccessiblePages(userId); const accessiblePageIds = accessiblePages.map(p => p.id); - const userScheduledPosts = await storage.getScheduledPosts(userId, start, end); - scheduledPosts = userScheduledPosts.filter(sp => accessiblePageIds.includes(sp.pageId)); + // Récupérer tous les posts programmés de tous les utilisateurs + const allUsers = await storage.getAllUsers(); + const allPostsPromises = allUsers.map(u => storage.getScheduledPosts(u.id, start, end)); + const allPostsArrays = await Promise.all(allPostsPromises); + const allScheduledPosts = allPostsArrays.flat(); + + // Filtrer uniquement les posts des pages accessibles + scheduledPosts = allScheduledPosts.filter(sp => accessiblePageIds.includes(sp.pageId)); } res.json(scheduledPosts);