Checkpoint: Ajout du système de connecteurs web : table webImportSources, CRUD tRPC, page WebImportSources.tsx, endpoint /api/web-import/push-invoice, script cron SFR (scripts/web-import/sfr-connector.mjs)
This commit is contained in:
@@ -524,3 +524,39 @@ export const deletedInvoices = mysqlTable("deletedInvoices", {
|
||||
});
|
||||
export type DeletedInvoice = typeof deletedInvoices.$inferSelect;
|
||||
export type InsertDeletedInvoice = typeof deletedInvoices.$inferInsert;
|
||||
|
||||
/**
|
||||
* Web import sources — connecteurs web pour scraper des factures depuis des sites
|
||||
* (ex: espace client SFR, Starlink, Orange...) avec login/mot de passe.
|
||||
* Le scraping est exécuté par un script cron externe (Node.js + Playwright) sur LWS.
|
||||
*/
|
||||
export const webImportSources = mysqlTable("webImportSources", {
|
||||
id: int("id").autoincrement().primaryKey(),
|
||||
userId: int("userId").notNull(),
|
||||
/** Nom affiché (ex: "SFR Pro", "Starlink") */
|
||||
name: varchar("name", { length: 100 }).notNull(),
|
||||
/** Type de connecteur — détermine le script Playwright à utiliser */
|
||||
connectorType: varchar("connectorType", { length: 50 }).notNull(), // ex: "sfr", "starlink", "orange"
|
||||
/** URL de l'espace client */
|
||||
portalUrl: varchar("portalUrl", { length: 500 }).notNull(),
|
||||
/** Identifiant de connexion (email ou login) */
|
||||
loginEmail: varchar("loginEmail", { length: 320 }).notNull(),
|
||||
/** Mot de passe chiffré (AES-256) */
|
||||
loginPassword: text("loginPassword").notNull(),
|
||||
/** Fréquence de vérification automatique */
|
||||
frequency: mysqlEnum("frequency", ["manual", "daily", "weekly", "monthly"]).default("monthly").notNull(),
|
||||
/** Activation de l'import automatique */
|
||||
autoEnabled: int("autoEnabled").default(0).notNull(), // 0 = désactivé, 1 = activé
|
||||
/** Date du dernier import réussi */
|
||||
lastSuccessAt: timestamp("lastSuccessAt"),
|
||||
/** Statut du dernier import */
|
||||
lastStatus: text("lastStatus"),
|
||||
/** Nombre de factures importées lors du dernier run */
|
||||
lastImportCount: int("lastImportCount").default(0),
|
||||
/** Token d'API pour que le script externe puisse s'authentifier */
|
||||
apiToken: varchar("apiToken", { length: 128 }).notNull(),
|
||||
createdAt: timestamp("createdAt").defaultNow().notNull(),
|
||||
updatedAt: timestamp("updatedAt").defaultNow().onUpdateNow().notNull(),
|
||||
});
|
||||
export type WebImportSource = typeof webImportSources.$inferSelect;
|
||||
export type InsertWebImportSource = typeof webImportSources.$inferInsert;
|
||||
|
||||
Reference in New Issue
Block a user