recent claim added to claim page

This commit is contained in:
2025-06-04 22:51:44 +05:30
parent 27039d18f4
commit 99b826568d
5 changed files with 293 additions and 10 deletions

View File

@@ -76,8 +76,43 @@ router.post("/selenium", upload.array("pdfs"), async (req: Request, res: Respons
}
});
// Get all claims for the logged-in user
// GET /api/claims?page=1&limit=5
router.get("/", async (req: Request, res: Response) => {
const userId = req.user!.id;
const page = parseInt(req.query.page as string) || 1;
const limit = parseInt(req.query.limit as string) || 5;
const offset = (page - 1) * limit;
try {
const [claims, total] = await Promise.all([
storage.getClaimsPaginated(userId, offset, limit),
storage.countClaimsByUserId(userId),
]);
res.json({
data: claims,
page,
limit,
total,
});
} catch (error) {
res.status(500).json({ message: "Failed to retrieve paginated claims" });
}
});
// GET /api/claims/recent
router.get("/recent", async (req: Request, res: Response) => {
try {
const claims = await storage.getClaimsMetadataByUser(req.user!.id);
res.json(claims); // Just ID and createdAt
} catch (error) {
res.status(500).json({ message: "Failed to retrieve recent claims" });
}
});
// Get all claims for the logged-in user
router.get("/all", async (req: Request, res: Response) => {
try {
const claims = await storage.getClaimsByUserId(req.user!.id);
res.json(claims);
@@ -86,6 +121,7 @@ router.get("/", async (req: Request, res: Response) => {
}
});
// Get a single claim by ID
router.get("/:id", async (req: Request, res: Response): Promise<any> => {
try {

View File

@@ -132,6 +132,19 @@ type InsertInsuranceCredential = z.infer<
typeof insertInsuranceCredentialSchema
>;
type ClaimWithServiceLines = Claim & {
serviceLines: {
id: number;
claimId: number;
procedureCode: string;
procedureDate: Date;
oralCavityArea: string | null;
toothNumber: string | null;
toothSurface: string | null;
billedAmount: number;
}[];
};
export interface IStorage {
// User methods
getUser(id: number): Promise<User | undefined>;
@@ -171,6 +184,15 @@ export interface IStorage {
getClaimsByUserId(userId: number): Promise<Claim[]>;
getClaimsByPatientId(patientId: number): Promise<Claim[]>;
getClaimsByAppointmentId(appointmentId: number): Promise<Claim[]>;
getClaimsPaginated(
userId: number,
offset: number,
limit: number
): Promise<Claim[]>;
countClaimsByUserId(userId: number): Promise<number>;
getClaimsMetadataByUser(
userId: number
): Promise<{ id: number; createdAt: Date; status: string }[]>;
createClaim(claim: InsertClaim): Promise<Claim>;
updateClaim(id: number, updates: UpdateClaim): Promise<Claim>;
deleteClaim(id: number): Promise<void>;
@@ -185,7 +207,10 @@ export interface IStorage {
updates: Partial<InsuranceCredential>
): Promise<InsuranceCredential>;
deleteInsuranceCredential(id: number): Promise<void>;
getInsuranceCredentialByUserAndSiteKey(userId: number, siteKey: string): Promise<InsuranceCredential | null>;
getInsuranceCredentialByUserAndSiteKey(
userId: number,
siteKey: string
): Promise<InsuranceCredential | null>;
}
export const storage: IStorage = {
@@ -389,7 +414,9 @@ export const storage: IStorage = {
},
async createInsuranceCredential(data: InsertInsuranceCredential) {
return await db.insuranceCredential.create({ data: data as InsuranceCredential });
return await db.insuranceCredential.create({
data: data as InsuranceCredential,
});
},
async updateInsuranceCredential(
@@ -406,9 +433,44 @@ export const storage: IStorage = {
await db.insuranceCredential.delete({ where: { id } });
},
async getInsuranceCredentialByUserAndSiteKey(userId: number, siteKey: string) {
return await db.insuranceCredential.findFirst({
where: { userId, siteKey },
});
},
async getInsuranceCredentialByUserAndSiteKey(
userId: number,
siteKey: string
): Promise<InsuranceCredential | null> {
return await db.insuranceCredential.findFirst({
where: { userId, siteKey },
});
},
async getClaimsPaginated(
userId: number,
offset: number,
limit: number
): Promise<ClaimWithServiceLines[]> {
return db.claim.findMany({
where: { userId },
orderBy: { createdAt: "desc" },
skip: offset,
take: limit,
include: { serviceLines: true },
});
},
async countClaimsByUserId(userId: number): Promise<number> {
return db.claim.count({ where: { userId } });
},
async getClaimsMetadataByUser(
userId: number
): Promise<{ id: number; createdAt: Date; status: string }[]> {
return db.claim.findMany({
where: { userId },
orderBy: { createdAt: "desc" },
select: {
id: true,
createdAt: true,
status: true,
},
});
},
};