9f30ca794d25593935aa8c6779e87b5c6673daa8
[browser-rts.git] / src / repository / training-queue.ts
1 import { v4 as uuid } from 'uuid';
2 import { Repository } from './base';
3
4 export enum Unit {
5     SOLDIERS = 'SOLDIERS',
6     ATTACKERS = 'ATTACKERS',
7     DEFENDERS = 'DEFENDERS',
8     SPECIAL_ATTACKERS = 'SPECIAL_ATTACKERS',
9     SPECIAL_DEFENDERS = 'SPECIAL_DEFENDERS'
10 }
11
12 export type UnitTrainingQueue = {
13     id: string;
14     owner: string;
15     unit_type: string;
16     amount: number;
17     created: number;
18     due: number;
19 };
20
21 export type UnitTrainingQueueWithName = {
22   display: string;
23 } & UnitTrainingQueue;
24
25 export const FriendlyUnitNames = new Map<Unit, string>();
26 FriendlyUnitNames.set(Unit.SOLDIERS, 'Soldiers');
27 FriendlyUnitNames.set(Unit.ATTACKERS, 'Attackers');
28 FriendlyUnitNames.set(Unit.DEFENDERS, 'Defenders');
29 FriendlyUnitNames.set(Unit.SPECIAL_ATTACKERS, 'Special Attackers');
30 FriendlyUnitNames.set(Unit.SPECIAL_DEFENDERS, 'Special Defenders');
31
32 export class UnitTrainingQueueRepository extends Repository<UnitTrainingQueue> {
33     constructor() {
34         super('unit_training_queue');
35     }
36
37     async create(owner: string, due: number, type: string, amount: number): Promise<UnitTrainingQueue> {
38         const data: UnitTrainingQueue = {
39             id: uuid(),
40             unit_type: type,
41             created: Date.now(),
42             amount,
43             due,
44             owner
45         }
46
47         await this.Insert(data);
48         return data;
49     }
50
51     list(owner: string): Promise<UnitTrainingQueueWithName[]> {
52       return this.db.raw(`select q.*, u.display from unit_training_queue q join units u on u.slug = q.unit_type where owner = ? order by due`, owner);
53     }
54 }