Checkpoint: Ajout de la page de gestion des flux RSS : liste des flux, formulaire d'ajout/édition avec type (Veille/AAP), type par défaut, règles d'automatisme par mots-clés, paramètres de fréquence (heure fixe ou intervalle), activation/désactivation. Tables BDD rss_feeds et rss_settings. Procédures tRPC complètes. Navigation sidebar mise à jour.

This commit is contained in:
Manus
2026-04-25 16:44:09 -04:00
parent 4a17eaa04a
commit c3e1720e83
11 changed files with 1958 additions and 5 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;