44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
|
|
import type { CabinetEventsRepository, CreateCabinetEventData } from './cabinet-events.repository.js';
|
||
|
|
import type { CabinetEventQueryInput, SpendingSummaryQueryInput } from '@meshitrack/shared';
|
||
|
|
|
||
|
|
interface Deps {
|
||
|
|
cabinetEventsRepository: CabinetEventsRepository;
|
||
|
|
}
|
||
|
|
|
||
|
|
export class CabinetEventsService {
|
||
|
|
private readonly cabinetEventsRepository: CabinetEventsRepository;
|
||
|
|
|
||
|
|
public constructor({ cabinetEventsRepository }: Deps) {
|
||
|
|
this.cabinetEventsRepository = cabinetEventsRepository;
|
||
|
|
}
|
||
|
|
|
||
|
|
public async logEvent(data: CreateCabinetEventData) {
|
||
|
|
return this.cabinetEventsRepository.create(data);
|
||
|
|
}
|
||
|
|
|
||
|
|
public async logEvents(events: CreateCabinetEventData[]) {
|
||
|
|
if (events.length === 0) return [];
|
||
|
|
return this.cabinetEventsRepository.createMany(events);
|
||
|
|
}
|
||
|
|
|
||
|
|
public async listEvents(householdId: string, query: CabinetEventQueryInput) {
|
||
|
|
return this.cabinetEventsRepository.findByHousehold(householdId, query);
|
||
|
|
}
|
||
|
|
|
||
|
|
public async getEventsByItem(
|
||
|
|
householdId: string,
|
||
|
|
cabinetItemId: string,
|
||
|
|
query: { cursor?: string; limit: number },
|
||
|
|
) {
|
||
|
|
return this.cabinetEventsRepository.findByCabinetItem(householdId, cabinetItemId, query);
|
||
|
|
}
|
||
|
|
|
||
|
|
public async getSpendingSummary(householdId: string, query: SpendingSummaryQueryInput) {
|
||
|
|
return this.cabinetEventsRepository.getSpendingSummary(householdId, query);
|
||
|
|
}
|
||
|
|
|
||
|
|
public async getAvgUnitPrices(householdId: string, medicineIds: string[]) {
|
||
|
|
return this.cabinetEventsRepository.getAvgUnitPriceByMedicine(householdId, medicineIds);
|
||
|
|
}
|
||
|
|
}
|