Checkpoint: Ajout de l'association Service→Signature dans l'onglet Signatures des Paramètres et apposition automatique de la signature sur les PDFs exportés lors de l'export BAP. Inclut : table serviceSignatures, routes tRPC, interface de configuration, et modification de exportToPdf pour apposer la signature en bas à droite du PDF avec le nom du signataire.
This commit is contained in:
42
server/db.ts
42
server/db.ts
@@ -35,7 +35,10 @@ import {
|
||||
LlmFieldConfig,
|
||||
signatures,
|
||||
InsertSignature,
|
||||
Signature
|
||||
Signature,
|
||||
serviceSignatures,
|
||||
InsertServiceSignature,
|
||||
ServiceSignature
|
||||
} from "../drizzle/schema";
|
||||
import { ENV } from './_core/env';
|
||||
|
||||
@@ -701,3 +704,40 @@ export async function deleteSignature(id: number): Promise<void> {
|
||||
if (!db) return;
|
||||
await db.delete(signatures).where(eq(signatures.id, id));
|
||||
}
|
||||
|
||||
// ============= SERVICE SIGNATURES HELPERS =============
|
||||
|
||||
export async function getServiceSignaturesByUser(userId: number): Promise<ServiceSignature[]> {
|
||||
const db = await getDb();
|
||||
if (!db) return [];
|
||||
return db.select().from(serviceSignatures).where(eq(serviceSignatures.userId, userId));
|
||||
}
|
||||
|
||||
export async function getServiceSignatureByService(userId: number, serviceName: string): Promise<ServiceSignature | undefined> {
|
||||
const db = await getDb();
|
||||
if (!db) return undefined;
|
||||
const results = await db.select().from(serviceSignatures)
|
||||
.where(eq(serviceSignatures.userId, userId))
|
||||
.limit(1);
|
||||
// Filter in JS to avoid SQL case sensitivity issues
|
||||
return results.find(r => r.serviceName.toLowerCase() === serviceName.toLowerCase());
|
||||
}
|
||||
|
||||
export async function upsertServiceSignature(data: InsertServiceSignature): Promise<void> {
|
||||
const db = await getDb();
|
||||
if (!db) throw new Error("Database not available");
|
||||
await db.insert(serviceSignatures).values(data)
|
||||
.onDuplicateKeyUpdate({
|
||||
set: { signatureId: data.signatureId, updatedAt: new Date() }
|
||||
});
|
||||
}
|
||||
|
||||
export async function deleteServiceSignature(userId: number, serviceName: string): Promise<void> {
|
||||
const db = await getDb();
|
||||
if (!db) return;
|
||||
const all = await db.select().from(serviceSignatures).where(eq(serviceSignatures.userId, userId));
|
||||
const match = all.find(r => r.serviceName.toLowerCase() === serviceName.toLowerCase());
|
||||
if (match) {
|
||||
await db.delete(serviceSignatures).where(eq(serviceSignatures.id, match.id));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user