feat(api): add schedule series delete endpoint

This commit is contained in:
avicenan
2026-03-25 13:45:10 +07:00
parent ab14a0b670
commit ab40036f45
3 changed files with 77 additions and 0 deletions

View File

@ -354,6 +354,42 @@ export class ScheduleModel {
return OrmHelper.DB.manager.save(exception);
}
static async deleteSeries(id: string, hard: boolean, actor: string): Promise<number> {
const manager = OrmHelper.DB.manager;
if (hard) {
await manager.delete(ScheduleException, { series_id: id });
const result = await manager.delete(ScheduleSeries, { id });
return result.affected ?? 0;
}
const series = await OrmHelper.DB.getRepository(ScheduleSeries)
.createQueryBuilder("ScheduleSeries")
.where("ScheduleSeries.id = :id", { id })
.andWhere("ScheduleSeries.deleted_at IS NULL")
.getOne();
if (!series) return 0;
const now = new Date();
await manager.transaction(async (tx) => {
await tx
.createQueryBuilder()
.update(ScheduleException)
.set({ deleted_at: now, deleted_by: actor })
.where("series_id = :id", { id })
.andWhere("deleted_at IS NULL")
.execute();
series.deleted_at = now;
series.deleted_by = actor;
await tx.save(series);
});
return 1;
}
private static expandSeriesOccurrences(series: ScheduleSeries, rangeStart: Date, rangeEnd: Date): Date[] {
const seriesStart = ScheduleModel.startOfDay(new Date(series.start_date));
const seriesUntil = series.until_date ? ScheduleModel.endOfDay(new Date(series.until_date)) : null;