Files
edr-platform/apps/edr-passenger-api/src/modules/segments/segment-fare.service.ts
2026-07-05 18:14:42 +03:00

63 lines
2.3 KiB
TypeScript

import { Injectable, NotFoundException } from '@nestjs/common';
import { PrismaService } from '../../common/prisma.service';
import { CreateSegmentFareDto, UpdateSegmentFareDto } from './segment-fare.dto';
@Injectable()
export class SegmentFareService {
constructor(private readonly prisma: PrismaService) {}
findAll(routeId?: string) {
return this.prisma.segmentFareRule.findMany({
where: routeId ? { routeId } : undefined,
include: { seatClass: true, route: { select: { id: true, code: true, name: true } } },
orderBy: [{ routeId: 'asc' }, { originStopSequence: 'asc' }, { destinationStopSequence: 'asc' }],
});
}
async findOne(id: string) {
const rule = await this.prisma.segmentFareRule.findUnique({
where: { id },
include: { seatClass: true, route: { select: { id: true, code: true, name: true } } },
});
if (!rule) throw new NotFoundException(`SegmentFareRule ${id} not found`);
return rule;
}
create(dto: CreateSegmentFareDto) {
return this.prisma.segmentFareRule.create({
data: {
routeId: dto.routeId,
originStopSequence: dto.originStopSequence,
destinationStopSequence: dto.destinationStopSequence,
seatClassId: dto.seatClassId,
baseFareMinor: dto.baseFareMinor,
nationality: dto.nationality ?? null,
currency: dto.currency ?? 'ETB',
validFrom: new Date(dto.validFrom),
validUntil: dto.validUntil ? new Date(dto.validUntil) : null,
},
include: { seatClass: true },
});
}
async update(id: string, dto: UpdateSegmentFareDto) {
await this.findOne(id);
return this.prisma.segmentFareRule.update({
where: { id },
data: {
...(dto.baseFareMinor !== undefined && { baseFareMinor: dto.baseFareMinor }),
...(dto.currency !== undefined && { currency: dto.currency }),
...(dto.validFrom !== undefined && { validFrom: new Date(dto.validFrom) }),
...(dto.validUntil !== undefined && { validUntil: new Date(dto.validUntil) }),
},
include: { seatClass: true },
});
}
async remove(id: string) {
await this.findOne(id);
await this.prisma.segmentFareRule.delete({ where: { id } });
return { deleted: true };
}
}