Package boarding station updates

This commit is contained in:
Stephanos A
2026-07-06 08:53:56 +03:00
parent 76bf81eec3
commit 19308e3969
2 changed files with 25 additions and 6 deletions

View File

@@ -216,7 +216,26 @@ export class PackagesService {
}, },
}); });
if (!pkg) throw new NotFoundException('Package not found'); if (!pkg) throw new NotFoundException('Package not found');
return { ...pkg, journeyType: pkg.returnScheduleId ? 'ROUND_TRIP' : 'ONE_WAY' };
// Fetch live route stops so the departure station dropdown always reflects
// the current route definition, not stale TripStopTime snapshots.
let routeStops: { sequence: number; station: any }[] = [];
if (pkg.outboundSchedule.routeId) {
const stops = await this.prisma.routeStop.findMany({
where: { routeId: pkg.outboundSchedule.routeId },
orderBy: { sequence: 'asc' },
});
const stationIds = stops.map((s) => s.stationId);
const stations = await this.prisma.station.findMany({ where: { id: { in: stationIds } } });
const stationMap = Object.fromEntries(stations.map((s) => [s.id, s]));
routeStops = stops.map((s) => ({ sequence: s.sequence, station: stationMap[s.stationId] }));
}
return {
...pkg,
journeyType: pkg.returnScheduleId ? 'ROUND_TRIP' : 'ONE_WAY',
outboundSchedule: { ...pkg.outboundSchedule, routeStops },
};
} }
create(dto: CreatePackageDto) { create(dto: CreatePackageDto) {

View File

@@ -40,7 +40,7 @@ interface TrainInfo {
operatorName: string; operatorName: string;
} }
interface StopTime { interface RouteStop {
sequence: number; sequence: number;
station: Station; station: Station;
} }
@@ -55,7 +55,7 @@ interface Schedule {
originStation: Station; originStation: Station;
destinationStation: Station; destinationStation: Station;
train: TrainInfo; train: TrainInfo;
stopTimes?: StopTime[]; routeStops?: RouteStop[];
} }
interface PriceTier { interface PriceTier {
@@ -438,9 +438,9 @@ export default function PackageDetailPage() {
enabled: !!id, enabled: !!id,
}); });
// Build departure station list from the outbound schedule's route stops (ordered by sequence) // Build departure station list from live route stops (always reflects current route definition)
const routeStopStations: Station[] = pkg?.outboundSchedule?.stopTimes?.length const routeStopStations: Station[] = pkg?.outboundSchedule?.routeStops?.length
? pkg.outboundSchedule.stopTimes.map((st) => st.station).filter(Boolean) ? pkg.outboundSchedule.routeStops.map((rs) => rs.station).filter(Boolean)
: []; : [];
const selectedTier = pkg?.priceTiers?.find((t) => t.id === selectedTierId); const selectedTier = pkg?.priceTiers?.find((t) => t.id === selectedTierId);