Initial commit: HealthCarePregnant project documentation and platform
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user