mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 04:50:54 +00:00
63 lines
2.3 KiB
TypeScript
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 };
|
|
}
|
|
}
|