eab91174db
Co-Authored-By: Claude <noreply@anthropic.com>
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
import { PregnancyCase } from './case.types';
|
|
import { CarePlan } from './care-plan.types';
|
|
|
|
/** 个案与照护计划仓储抽象(内存实现,后续接入 DB)。 */
|
|
export abstract class CaseflowRepository {
|
|
abstract saveCase(c: PregnancyCase): Promise<PregnancyCase>;
|
|
abstract findCaseById(id: string): Promise<PregnancyCase | null>;
|
|
abstract findCaseByPatient(patientId: string): Promise<PregnancyCase | null>;
|
|
abstract savePlan(p: CarePlan): Promise<CarePlan>;
|
|
abstract findPlansByCase(caseId: string): Promise<CarePlan[]>;
|
|
}
|
|
|
|
@Injectable()
|
|
export class InMemoryCaseflowRepository extends CaseflowRepository {
|
|
private readonly cases = new Map<string, PregnancyCase>();
|
|
private readonly plans: CarePlan[] = [];
|
|
|
|
async saveCase(c: PregnancyCase): Promise<PregnancyCase> {
|
|
this.cases.set(c.id, c);
|
|
return c;
|
|
}
|
|
|
|
async findCaseById(id: string): Promise<PregnancyCase | null> {
|
|
return this.cases.get(id) ?? null;
|
|
}
|
|
|
|
async findCaseByPatient(patientId: string): Promise<PregnancyCase | null> {
|
|
for (const c of this.cases.values()) {
|
|
if (c.patientId === patientId) return c;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
async savePlan(p: CarePlan): Promise<CarePlan> {
|
|
const idx = this.plans.findIndex((x) => x.id === p.id);
|
|
if (idx >= 0) this.plans[idx] = p;
|
|
else this.plans.push(p);
|
|
return p;
|
|
}
|
|
|
|
async findPlansByCase(caseId: string): Promise<CarePlan[]> {
|
|
return this.plans.filter((p) => p.caseId === caseId);
|
|
}
|
|
}
|