From 1de5cc5b56ca4b78692c67ead0b98a01c131c8e4 Mon Sep 17 00:00:00 2001 From: Mikhail Deriabin Date: Sun, 9 Feb 2025 11:25:59 +0200 Subject: [PATCH] fix found bugs --- src/dailyTasks/dailyTasks.controller.ts | 19 ++++++++------ src/dailyTasks/dailyTasks.service.ts | 33 ++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/dailyTasks/dailyTasks.controller.ts b/src/dailyTasks/dailyTasks.controller.ts index 7c7dcb88..4f442c74 100644 --- a/src/dailyTasks/dailyTasks.controller.ts +++ b/src/dailyTasks/dailyTasks.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Delete, Get, Param, Put } from "@nestjs/common"; +import {Controller, Delete, Get, HttpCode, Param, Put} from "@nestjs/common"; import { DailyTasksService } from "./dailyTasks.service"; import { LoggedUser } from "../common/decorator/param/LoggedUser.decorator"; import { User } from "../auth/user"; @@ -21,34 +21,37 @@ export class DailyTasksController { @UniformResponse(ModelName.DAILY_TASK) async getClanTasks(@LoggedUser() user: User) { const clanId = await this.playerService.getPlayerClanId(user.player_id); - return await this.dailyTasksService.basicService.readMany({ - filter: { clanId }, + return this.dailyTasksService.readMany({ + filter: { clan_id: clanId }, }); } - @Get(":_id") + @Get("/:_id") @Serialize(DailyTaskDto) @UniformResponse(ModelName.DAILY_TASK) async getTask(@Param() param: _idDto) { - return await this.dailyTasksService.basicService.readOneById(param._id); + return this.dailyTasksService.readOneById(param._id); } - @Put("/:_id") + @Put("/reserve/:_id") @UniformResponse() async reserveTask(@Param() param: _idDto, @LoggedUser() user: User) { const clanId = await this.playerService.getPlayerClanId(user.player_id); - return await this.dailyTasksService.reserveTask( + return this.dailyTasksService.reserveTask( user.player_id, param._id, clanId ); } + @HttpCode(204) @Delete("/:_id") @Serialize(DailyTaskDto) @UniformResponse(ModelName.DAILY_TASK) async deleteTask(@Param() param: _idDto, @LoggedUser() user: User) { const clanId = await this.playerService.getPlayerClanId(user.player_id); - return await this.dailyTasksService.deleteTask(param._id, clanId, user.player_id); + const [result, errors] = await this.dailyTasksService.deleteTask(param._id, clanId, user.player_id); + if(errors) + return [null, errors]; } } diff --git a/src/dailyTasks/dailyTasks.service.ts b/src/dailyTasks/dailyTasks.service.ts index 5a59db68..97881e7a 100644 --- a/src/dailyTasks/dailyTasks.service.ts +++ b/src/dailyTasks/dailyTasks.service.ts @@ -10,6 +10,7 @@ import { Task } from "./type/task.type"; import { DailyTaskQueue } from "./dailyTask.queue"; import { taskReservedError } from "./errors/taskReserved.error"; import { TaskGeneratorService } from "./taskGenerator.service"; +import {TIServiceCreateManyOptions, TReadByIdOptions} from "../common/service/basicService/IService"; @Injectable() export class DailyTasksService { @@ -24,8 +25,8 @@ export class DailyTasksService { this.refsInModel = [ModelName.PLAYER]; } public readonly modelName: ModelName; - public readonly basicService: BasicService; public readonly refsInModel: ModelName[]; + private readonly basicService: BasicService; /** * Generates a set of tasks for a new clan. @@ -65,7 +66,7 @@ export class DailyTasksService { */ async reserveTask(playerId: string, taskId: string, clanId: string) { const [task, error] = await this.basicService.readOne({ - filter: { _id: taskId, clanId }, + filter: { _id: taskId, clan_id: clanId }, }); if (error) throw error; if (task.player_id) throw taskReservedError; @@ -96,7 +97,7 @@ export class DailyTasksService { */ async deleteTask(taskId: string, clanId: string, playerId: string) { const newValues = this.taskGenerator.createTaskRandomValues(); - const filter: any = { _id: taskId, clanId }; + const filter: any = { _id: taskId, clan_id: clanId }; filter.$or = [{ playerId }, { playerId: { $exists: false } }]; return await this.basicService.updateOne( { @@ -128,7 +129,7 @@ export class DailyTasksService { if (error) throw error; task.amountLeft--; - + if (task.amountLeft === 0) { await this.deleteTask(task._id.toString(), task.clan_id, playerId); this.notifier.taskCompleted(playerId, task); @@ -142,4 +143,28 @@ export class DailyTasksService { return task; } + + /** + * Reads a DailyTask by its _id in DB. + * + * @param _id - The Mongo _id of the DailyTask to read. + * @param options - Options for reading the DailyTask. + * @returns DailyTask with the given _id on succeed or an array of ServiceErrors if any occurred. + */ + async readOneById(_id: string, options?: TReadByIdOptions) { + const optionsToApply = options; + if(options?.includeRefs) + optionsToApply.includeRefs = options.includeRefs.filter((ref) => this.refsInModel.includes(ref)); + return this.basicService.readOneById(_id, optionsToApply); + } + + /** + * Reads multiple daily tasks from the database based on the provided options. + * + * @param options - Optional settings for the read operation. + * @returns A promise that resolves to a tuple where the first element is an array of ItemDto objects, and the second element is either null or an array of ServiceError objects if something went wrong. + */ + async readMany(options?: TIServiceCreateManyOptions) { + return this.basicService.readMany(options); + } }