diff --git a/src/task/task.controller.ts b/src/task/task.controller.ts index db6be9176c3d02b13cfc82799fcd7be81b0fe369..2e0478959456215a4462ddc2f94a63490d8627ef 100644 --- a/src/task/task.controller.ts +++ b/src/task/task.controller.ts @@ -7,10 +7,13 @@ import { UseGuards, Param, } from '@nestjs/common'; + import { TaskService } from './task.service'; +import { CreateTaskDTO, EditTaskDTO } from './task.dto'; +import { AuthGuard } from '../shared/auth.guard'; import { Roles } from '../shared/roles.decorator'; import { ValidationPipe } from '../shared/validation.pipe'; -import { CreateTaskDTO, EditTaskDTO } from './task.dto'; +import { User } from 'src/user/user.decorator'; @Controller('task') export class TaskController { @@ -33,4 +36,10 @@ export class TaskController { async editTask(@Param('id') id: string, @Body() data: EditTaskDTO) { return this.taskService.editTask(data); } + + @Get('get-tasks/:id') + @UseGuards(new AuthGuard()) + async fetchTasks(@User('id') person, @Param('id') id: string) { + return this.taskService.fetchTasks(person, id); + } } diff --git a/src/task/task.module.ts b/src/task/task.module.ts index b71b4d900d28fd2d596626fc88bb0f0b7204ab1c..12112f92a47ef2c30f0c130d15dba0d5b4c41126 100644 --- a/src/task/task.module.ts +++ b/src/task/task.module.ts @@ -4,10 +4,15 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { TaskService } from './task.service'; import { TaskController } from './task.controller'; import { TaskEntity } from './task.entity'; -import { FactionEntity } from 'src/game/faction.entity'; +import { FactionEntity } from '../game/faction.entity'; +import { Game_PersonEntity } from '../game/game.entity'; +import { NotificationModule } from '../notifications/notifications.module'; @Module({ - imports: [TypeOrmModule.forFeature([TaskEntity, FactionEntity])], + imports: [ + TypeOrmModule.forFeature([TaskEntity, FactionEntity, Game_PersonEntity]), + NotificationModule, + ], controllers: [TaskController], providers: [TaskService], }) diff --git a/src/task/task.service.ts b/src/task/task.service.ts index 7df6dee55ebd71fbd2d1fb504024fb51dc4224d3..9d4fe9a2b34f31aee891ff457f53db286a2982d2 100644 --- a/src/task/task.service.ts +++ b/src/task/task.service.ts @@ -1,9 +1,12 @@ import { Injectable, HttpException, HttpStatus } from '@nestjs/common'; import { Repository } from 'typeorm'; import { InjectRepository } from '@nestjs/typeorm'; + import { TaskEntity } from './task.entity'; import { CreateTaskDTO, EditTaskDTO } from './task.dto'; import { FactionEntity } from '../game/faction.entity'; +import { Game_PersonEntity } from '../game/game.entity'; +import { NotificationGateway } from '../notifications/notifications.gateway'; @Injectable() export class TaskService { @@ -12,6 +15,9 @@ export class TaskService { private taskRepository: Repository<TaskEntity>, @InjectRepository(FactionEntity) private factionRepository: Repository<FactionEntity>, + @InjectRepository(Game_PersonEntity) + private gamePersonRepository: Repository<Game_PersonEntity>, + private notificationGateway: NotificationGateway, ) {} async newTask(task: CreateTaskDTO) { @@ -28,6 +34,12 @@ export class TaskService { const createdTask = await this.taskRepository.create(task); console.log(createdTask); await this.taskRepository.insert(createdTask); + // notify subscribers about a new task + // if faction was set it notifies only faction members, else everyone + this.notificationGateway.server.emit( + task.faction != null ? task.faction.toString() : 'global', + 'new task', + ); return { message: 'Task added', }; @@ -56,4 +68,13 @@ export class TaskService { message: 'Task updated and closed', }; } + + async fetchTasks(user, taskGame) { + // to do: limit fetch for factions + const gamePerson = await this.gamePersonRepository.findOne({ + person: user, + game: taskGame, + }); + return await this.taskRepository.find({ taskGame: taskGame }); + } }