pdf upload checkpoint1

This commit is contained in:
2025-06-13 22:59:53 +05:30
parent dd814b902d
commit 56ef5ab65d
9 changed files with 226 additions and 16 deletions

View File

@@ -6,6 +6,7 @@ import {
StaffUncheckedCreateInputObjectSchema,
ClaimUncheckedCreateInputObjectSchema,
InsuranceCredentialUncheckedCreateInputObjectSchema,
ClaimPdfUncheckedCreateInputObjectSchema
} from "@repo/db/usedSchemas";
import { z } from "zod";
@@ -145,6 +146,15 @@ type ClaimWithServiceLines = Claim & {
}[];
};
// claim types:
type ClaimPdf = z.infer<typeof ClaimPdfUncheckedCreateInputObjectSchema>;
export interface ClaimPdfMetadata {
id: number;
filename: string;
uploadedAt: Date;
}
export interface IStorage {
// User methods
getUser(id: number): Promise<User | undefined>;
@@ -211,6 +221,27 @@ export interface IStorage {
userId: number,
siteKey: string
): Promise<InsuranceCredential | null>;
// Claim PDF Methods
createClaimPdf(
patientId: number,
claimId: number,
filename: string,
pdfData: Buffer
): Promise<ClaimPdf>;
getClaimPdfById(id: number): Promise<ClaimPdf | undefined>;
getAllClaimPdfs(): Promise<ClaimPdfMetadata[]>;
getRecentClaimPdfs(limit: number, offset: number): Promise<ClaimPdfMetadata[]>;
deleteClaimPdf(id: number): Promise<boolean>;
updateClaimPdf(
id: number,
updates: Partial<Pick<ClaimPdf, "filename" | "pdfData">>
): Promise<ClaimPdf | undefined>;
}
export const storage: IStorage = {
@@ -474,5 +505,66 @@ export const storage: IStorage = {
});
},
// pdf claims
async createClaimPdf(
patientId,
claimId,
filename,
pdfData
): Promise<ClaimPdf> {
return db.claimPdf.create({
data: {
patientId,
claimId,
filename,
pdfData,
},
});
},
async getClaimPdfById(id: number): Promise<ClaimPdf | undefined> {
const pdf = await db.claimPdf.findUnique({ where: { id } });
return pdf ?? undefined;
},
async getAllClaimPdfs(): Promise<ClaimPdfMetadata[]> {
return db.claimPdf.findMany({
select: { id: true, filename: true, uploadedAt: true },
orderBy: { uploadedAt: "desc" },
});
},
async getRecentClaimPdfs(limit: number, offset: number): Promise<ClaimPdfMetadata[]> {
return db.claimPdf.findMany({
skip: offset,
take: limit,
orderBy: { uploadedAt: "desc" },
select: {
id: true,
filename: true,
uploadedAt: true,
},
});
},
async deleteClaimPdf(id: number): Promise<boolean> {
try {
await db.claimPdf.delete({ where: { id } });
return true;
} catch {
return false;
}
},
async updateClaimPdf(
id: number,
updates: Partial<Pick<ClaimPdf, "filename" | "pdfData">>
): Promise<ClaimPdf | undefined> {
try {
const updated = await db.claimPdf.update({ where: { id }, data: updates });
return updated;
} catch {
return undefined;
}
},
};