import * as storage from "../storage/documents.storage"; import { db } from "../db"; import { documentSignatures, documentGenerations } from "@shared/schema"; import { eq, and, desc } from "drizzle-orm"; import type { DocumentSignature } from "@shared/schema"; export class SignatureService { async listByGeneration(generationId: number): Promise { return storage.listDocumentSignatures(generationId); } async createPendingSignature( generationId: number, signedBy: number, comment?: string, ): Promise { // Сбрасываем флаг isCurrent у предыдущих подписей await db .update(documentSignatures) .set({ isCurrent: false }) .where(eq(documentSignatures.documentGenerationId, generationId)); const signature = await storage.createDocumentSignature({ documentGenerationId: generationId, type: "manual", status: "pending", signedBy, comment, isCurrent: true, }); // Обновляем статус генерации const generation = await storage.getDocumentGeneration(generationId, 0); if (generation) { await db .update(documentGenerations) .set({ signatureStatus: "pending" }) .where(eq(documentGenerations.id, generationId)); } return signature; } async sign(generationId: number, userId: number, comment?: string): Promise { // Сбрасываем флаг isCurrent await db .update(documentSignatures) .set({ isCurrent: false }) .where(eq(documentSignatures.documentGenerationId, generationId)); const signature = await storage.createDocumentSignature({ documentGenerationId: generationId, type: "manual", status: "signed", signedBy: userId, signedAt: new Date(), comment, isCurrent: true, }); await db .update(documentGenerations) .set({ signatureStatus: "signed" }) .where(eq(documentGenerations.id, generationId)); return signature; } async reject(generationId: number, userId: number, comment?: string): Promise { await db .update(documentSignatures) .set({ isCurrent: false }) .where(eq(documentSignatures.documentGenerationId, generationId)); const signature = await storage.createDocumentSignature({ documentGenerationId: generationId, type: "manual", status: "rejected", signedBy: userId, signedAt: new Date(), comment, isCurrent: true, }); await db .update(documentGenerations) .set({ signatureStatus: "unsigned" }) .where(eq(documentGenerations.id, generationId)); return signature; } }