feat: add waiting-list off-duty and return quick buttons
This commit is contained in:
1 parent
848e12e2d6
commit
7c5384621a
13 files changed
+450
-9
No files matched your search
@@ -0,0 +1,81 @@
|
||||
import { Injectable, inject } from '@angular/core';
|
||||
import { db, WaitingRole } from 'db';
|
||||
import { WaitingUmpiresService } from './waiting-umpires.service';
|
||||
import { WaitingServiceJudgesService } from './waiting-service-judges.service';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class WaitingDutyService {
|
||||
private readonly umpires = inject(WaitingUmpiresService);
|
||||
private readonly judges = inject(WaitingServiceJudgesService);
|
||||
|
||||
async moveToRest(officialId: number): Promise<void> {
|
||||
await this.moveOfficial(officialId, 'rest', false);
|
||||
}
|
||||
|
||||
async move(
|
||||
officialId: number,
|
||||
destination: WaitingRole | 'rest'
|
||||
): Promise<void> {
|
||||
await this.moveOfficial(officialId, destination, true);
|
||||
}
|
||||
|
||||
private async moveOfficial(
|
||||
officialId: number,
|
||||
destination: WaitingRole | 'rest',
|
||||
requireQuickButtons: boolean
|
||||
): Promise<void> {
|
||||
await db.transaction(
|
||||
'rw',
|
||||
[
|
||||
db.settings,
|
||||
db.umpires,
|
||||
db.waitingUmpires,
|
||||
db.waitingServiceJudges,
|
||||
db.courtUmpires,
|
||||
db.courtServiceJudges
|
||||
],
|
||||
async () => {
|
||||
const settings = await db.settings.get(1);
|
||||
const official = await db.umpires.get(officialId);
|
||||
if (
|
||||
!official ||
|
||||
(requireQuickButtons &&
|
||||
(!settings?.withServiceJudge || !settings.waitingListQuickButtons))
|
||||
)
|
||||
return;
|
||||
const umpire = await db.waitingUmpires
|
||||
.where('umpireId')
|
||||
.equals(officialId)
|
||||
.first();
|
||||
const judge = await db.waitingServiceJudges
|
||||
.where('serviceJudgeId')
|
||||
.equals(officialId)
|
||||
.first();
|
||||
const onCourt =
|
||||
(await db.courtUmpires
|
||||
.where('umpireId')
|
||||
.equals(officialId)
|
||||
.count()) ||
|
||||
(await db.courtServiceJudges
|
||||
.where('umpireId')
|
||||
.equals(officialId)
|
||||
.count());
|
||||
if (onCourt) return;
|
||||
if (destination === 'rest') {
|
||||
if (!umpire && !judge) return;
|
||||
await db.umpires.update(officialId, {
|
||||
returnToQueue: umpire ? 'umpire' : 'serviceJudge'
|
||||
});
|
||||
await this.umpires.removeByUmpireId(officialId);
|
||||
await this.judges.removeByUmpireId(officialId);
|
||||
} else {
|
||||
if (umpire || judge || !official.returnToQueue) return;
|
||||
const role = official.returnToQueue;
|
||||
if (role === 'serviceJudge') await this.judges.add(officialId);
|
||||
else await this.umpires.add(officialId);
|
||||
await db.umpires.update(officialId, { returnToQueue: undefined });
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user