initial commit
[browser-rts.git] / src / tasks / unit-training.ts
1 import { CityRepository } from '../repository/city';
2 import { MailRepository } from '../repository/mail';
3 import { UnitTrainingQueue, UnitTrainingQueueRepository } from '../repository/training-queue';
4 import { UnitRepository } from '../repository/unit';
5 import { Task } from './task';
6
7
8 const unitTrainigQueueRepo = new UnitTrainingQueueRepository();
9 const cityRepo = new CityRepository();
10 const unitRepo = new UnitRepository();
11 const mailRepo = new MailRepository();
12
13
14 export const unitTraining = new Task<UnitTrainingQueue>('unit-training', async (task, job) => {
15     const dbEntry = await unitTrainigQueueRepo.FindOne({id: job.data.id});
16
17     if(!dbEntry) {
18         console.error(`Build queue ${job.data.id} is invalid`);
19         return;
20     }
21     const unit = await unitRepo.findBySlug(job.data.unit_type); 
22
23     if(!unit) {
24         console.error(`Invalid unit type for training ${job.data.unit_type}`);
25     }
26
27     // get the city!
28     const city = await cityRepo.getUsersCity(dbEntry.owner);
29
30     if(!city) {
31         console.error(`City for owner ${job.data.owner} does not exist`);
32         return;
33     }
34
35     city[unit.slug] += dbEntry.amount;
36
37     await Promise.all([
38         cityRepo.save(city),
39         unitTrainigQueueRepo.Delete({id: dbEntry.id}),
40         mailRepo.createSystemMessage(
41             '-',
42             dbEntry.owner,
43             `Your ${unit.display} (${dbEntry.amount}) were trained!`,
44             `
45             <b>Your army grows!</b>
46             <p>You have trained ${dbEntry.amount} more ${unit.display}</p>
47             `
48         )
49     ]);
50 });