history status reserve

This commit is contained in:
2026-06-30 11:46:14 +03:30
parent 442de8582f
commit c1105c9954
5 changed files with 173 additions and 1 deletions
+35
View File
@@ -19,6 +19,7 @@ import { CreateReserveDto } from './dto/create-reserve.dto';
import { FindReservesQueryDto } from './dto/find-reserves-query.dto';
import { UpdateReserveDto } from './dto/update-reserve.dto';
import { ReserveItem } from './entities/reserve-item.entity';
import { ReserveStatusHistory } from './entities/reserve-status-history.entity';
import { Reserve } from './entities/reserve.entity';
import { ReserveStatus } from './enums/reserve-status.enum';
@@ -29,6 +30,8 @@ export class ReservesService {
private readonly reservesRepository: Repository<Reserve>,
@InjectRepository(ReserveItem)
private readonly reserveItemsRepository: Repository<ReserveItem>,
@InjectRepository(ReserveStatusHistory)
private readonly reserveStatusHistoryRepository: Repository<ReserveStatusHistory>,
@InjectRepository(Service)
private readonly servicesRepository: Repository<Service>,
@InjectRepository(ServiceSkill)
@@ -86,6 +89,7 @@ export class ReservesService {
});
const saved = await this.reservesRepository.save(reserve);
await this.logStatusChange(saved.id, null, saved.status, user.id);
return this.findOne(saved.id, user);
}
@@ -199,6 +203,9 @@ export class ReservesService {
}
if (status !== undefined) {
if (status !== reserve.status) {
await this.logStatusChange(reserve.id, reserve.status, status, user.id);
}
reserve.status = status;
if (status === ReserveStatus.CANCELLED) {
reserve.cancellationReason = cancellationReason ?? null;
@@ -213,6 +220,34 @@ export class ReservesService {
return this.findOne(id, user);
}
async findStatusHistory(
id: string,
user: AuthUser,
): Promise<ReserveStatusHistory[]> {
await this.findOne(id, user);
return this.reserveStatusHistoryRepository.find({
where: { reserveId: id },
relations: { changedByUser: true },
order: { createdAt: 'ASC' },
});
}
private async logStatusChange(
reserveId: string,
fromStatus: ReserveStatus | null,
toStatus: ReserveStatus,
changedByUserId: string,
): Promise<void> {
const entry = this.reserveStatusHistoryRepository.create({
reserveId,
fromStatus,
toStatus,
changedByUserId,
});
await this.reserveStatusHistoryRepository.save(entry);
}
private readonly defaultRelations = {
salon: true,
customer: { user: true },