5d2b58cc1dc871b6d8d898582bb9c486a1913dd4
[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 const FriendlyUnitNames = new Map<Unit, string>();
22 FriendlyUnitNames.set(Unit.SOLDIERS, 'Soldiers');
23 FriendlyUnitNames.set(Unit.ATTACKERS, 'Attackers');
24 FriendlyUnitNames.set(Unit.DEFENDERS, 'Defenders');
25 FriendlyUnitNames.set(Unit.SPECIAL_ATTACKERS, 'Special Attackers');
26 FriendlyUnitNames.set(Unit.SPECIAL_DEFENDERS, 'Special Defenders');
27
28 export class UnitTrainingQueueRepository extends Repository<UnitTrainingQueue> {
29     constructor() {
30         super('unit_training_queue');
31     }
32
33     async create(owner: string, due: number, type: string, amount: number): Promise<UnitTrainingQueue> {
34         const data: UnitTrainingQueue = {
35             id: uuid(),
36             unit_type: type,
37             created: Date.now(),
38             amount,
39             due,
40             owner
41         }
42
43         await this.Insert(data);
44         return data;
45     }
46
47     list(owner: string): Promise<UnitTrainingQueue[]> {
48         return this.FindAll({owner}).orderBy('due');
49     }
50 }