feat: add RSS feeds management page with automation rules

This commit is contained in:
Manus Deploy
2026-04-25 22:51:35 +02:00
parent 8b9a1ace2f
commit ea40cdfd4f
18 changed files with 1184 additions and 912 deletions

View File

@@ -135,3 +135,50 @@ export const ideas = mysqlTable("ideas", {
export type Idea = typeof ideas.$inferSelect;
export type InsertIdea = typeof ideas.$inferInsert;
// ─── Flux RSS ────────────────────────────────────────────────────────────────────────────────────
export const rssFeeds = mysqlTable("rss_feeds", {
id: int("id").autoincrement().primaryKey(),
// URL du flux RSS
url: text("url").notNull(),
// Nom descriptif du flux
name: varchar("name", { length: 255 }).notNull(),
// Type de contenu alimenté par ce flux
feedType: mysqlEnum("feedType", ["veille", "aap"]).notNull(),
// Pour les flux de type veille : type de veille par défaut
defaultTypeVeille: mysqlEnum("defaultTypeVeille", ["reglementaire", "concurrentielle", "technologique", "generale"]),
// Pour les flux de type aap : catégorie par défaut
defaultCategorieAap: mysqlEnum("defaultCategorieAap", ["Handicap", "PA", "Enfance", "Précarité", "Sanitaire", "Autre"]),
// Règles d'automatisme JSON : [{keyword, typeVeille|categorieAap}]
autoRules: json("autoRules"),
// Actif ou non
isActive: boolean("isActive").default(true).notNull(),
// Dernière lecture réussie
lastFetchedAt: timestamp("lastFetchedAt"),
// Dernier statut de lecture
lastFetchStatus: mysqlEnum("lastFetchStatus", ["ok", "error", "pending"]).default("pending"),
lastFetchError: text("lastFetchError"),
createdAt: timestamp("createdAt").defaultNow().notNull(),
updatedAt: timestamp("updatedAt").defaultNow().onUpdateNow().notNull(),
});
export type RssFeed = typeof rssFeeds.$inferSelect;
export type InsertRssFeed = typeof rssFeeds.$inferInsert;
// Paramètres globaux RSS (fréquence de lecture, etc.)
export const rssSettings = mysqlTable("rss_settings", {
id: int("id").autoincrement().primaryKey(),
// Fréquence de lecture en minutes (ex: 60, 360, 1440)
fetchIntervalMinutes: int("fetchIntervalMinutes").default(360).notNull(),
// Heure de lecture automatique (format HH:MM, si mode planifié)
scheduledTime: varchar("scheduledTime", { length: 5 }).default("06:00"),
// Mode : interval (toutes les N minutes) ou scheduled (heure fixe)
fetchMode: mysqlEnum("fetchMode", ["interval", "scheduled"]).default("scheduled").notNull(),
// Activer/désactiver la lecture automatique
autoFetchEnabled: boolean("autoFetchEnabled").default(true).notNull(),
updatedAt: timestamp("updatedAt").defaultNow().onUpdateNow().notNull(),
});
export type RssSettings = typeof rssSettings.$inferSelect;
export type InsertRssSettings = typeof rssSettings.$inferInsert;