mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-08 22:58:17 +00:00
Prod test issues resolution
This commit is contained in:
@@ -837,13 +837,16 @@ export class SeatsService {
|
||||
async removeSeat(seatId: string) {
|
||||
const seat = await this.prisma.seat.findUnique({ where: { id: seatId } });
|
||||
if (!seat) throw new NotFoundException('Seat not found');
|
||||
if (!seat.seatNumber) throw new BadRequestException('Seat already removed');
|
||||
if (!seat.seatNumber || seat.seatNumber.startsWith('-')) throw new BadRequestException('Seat already removed');
|
||||
|
||||
// Mark as removed, then renumber all active seats in the coach
|
||||
await this.prisma.seat.update({
|
||||
where: { id: seatId },
|
||||
data: { seatNumber: `-${seat.seatNumber}` },
|
||||
});
|
||||
|
||||
await this.renumberCoachSeats(seat.coachId);
|
||||
|
||||
return { removed: true, seatId, originalSeatNumber: seat.seatNumber };
|
||||
}
|
||||
|
||||
@@ -854,10 +857,38 @@ export class SeatsService {
|
||||
throw new BadRequestException('Seat is not removed');
|
||||
}
|
||||
|
||||
const originalNumber = seat.seatNumber.slice(1);
|
||||
await this.prisma.seat.update({ where: { id: seatId }, data: { seatNumber: originalNumber } });
|
||||
// Restore with a temporary placeholder number, then renumber
|
||||
await this.prisma.seat.update({ where: { id: seatId }, data: { seatNumber: `__restore__${seatId}` } });
|
||||
await this.renumberCoachSeats(seat.coachId);
|
||||
|
||||
return { restored: true, seatId, seatNumber: originalNumber };
|
||||
const restored = await this.prisma.seat.findUnique({ where: { id: seatId } });
|
||||
return { restored: true, seatId, seatNumber: restored?.seatNumber };
|
||||
}
|
||||
|
||||
/**
|
||||
* Renumbers all active (non-removed) seats in a coach sequentially starting from 1,
|
||||
* ordered by row then col. Removed seats (prefixed with "-") keep their slot but
|
||||
* are excluded from the numbering sequence so numbers remain continuous.
|
||||
*/
|
||||
private async renumberCoachSeats(coachId: string): Promise<void> {
|
||||
const allSeats = await this.prisma.seat.findMany({
|
||||
where: { coachId },
|
||||
orderBy: [{ row: 'asc' }, { col: 'asc' }],
|
||||
select: { id: true, seatNumber: true },
|
||||
});
|
||||
|
||||
const activeSeats = allSeats.filter(
|
||||
(s) => s.seatNumber && !s.seatNumber.startsWith('-') && !s.seatNumber.startsWith('__restore__'),
|
||||
);
|
||||
|
||||
await Promise.all(
|
||||
activeSeats.map((s, idx) =>
|
||||
this.prisma.seat.update({
|
||||
where: { id: s.id },
|
||||
data: { seatNumber: String(idx + 1) },
|
||||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@Cron(CronExpression.EVERY_MINUTE)
|
||||
|
||||
Reference in New Issue
Block a user