From 55fd1c4c8d43318e5ae976e8d89a1e1a4dd1835c Mon Sep 17 00:00:00 2001 From: Paritosh Chudasama Date: Thu, 26 Dec 2024 15:45:03 +0530 Subject: [PATCH] feat: add player deletion and update functionality, enhance player controller --- src/controllers/playerController.ts | 20 +++++++++++++++++++- src/entities/principletype.ts | 1 - src/interactors/playerinteracter.ts | 14 +++++++++++--- src/interfaces/IMessageBroker.ts | 14 +++++++++++++- src/interfaces/IPlayerInteractor.ts | 2 ++ src/interfaces/IPlayerRepository.ts | 4 +++- src/repositories/playerRepository.ts | 13 +++++++++++++ src/routes/index.ts | 2 +- src/routes/playerRoutes.ts | 4 ++++ src/utils/constant/appConstant.ts | 14 +++++++++++++- 10 files changed, 79 insertions(+), 9 deletions(-) diff --git a/src/controllers/playerController.ts b/src/controllers/playerController.ts index cacdf82..f2e8e58 100644 --- a/src/controllers/playerController.ts +++ b/src/controllers/playerController.ts @@ -18,11 +18,29 @@ export class PlayerController { @AsyncHandler() async onCreatePlayer(req: Request, res: Response) { const data :Player = req.body; - console.log(data); + console.log(req.body); const newPlayer= await this.interactor.createPlayer(data); res.status(201).json(new ApiResponse(201, newPlayer, 'Successfully created')); } +@AsyncHandler() +async onDeletePlayer(req: Request, res: Response) { + const id: number = parseInt(req.params.id, 10); + console.log(req.params.id); + await this.interactor.deletePlayer(id); + res.status(200).json(new ApiResponse(200, null, 'Successfully deleted')); +} + +@AsyncHandler() +async onUpdatePlayer(req: Request, res: Response) { + const id: number = parseInt(req.params.id, 10); + const data: Partial = req.body; + console.log(data); + const updatedPlayer = await this.interactor.updatePlayer(id, data); + res.status(200).json(new ApiResponse(200, updatedPlayer, 'Successfully updated')); +} + + } diff --git a/src/entities/principletype.ts b/src/entities/principletype.ts index 203b303..25610f0 100644 --- a/src/entities/principletype.ts +++ b/src/entities/principletype.ts @@ -12,5 +12,4 @@ export class Player { @Column() name!: string; - } \ No newline at end of file diff --git a/src/interactors/playerinteracter.ts b/src/interactors/playerinteracter.ts index 0b98223..dde9170 100644 --- a/src/interactors/playerinteracter.ts +++ b/src/interactors/playerinteracter.ts @@ -27,9 +27,17 @@ export class PlayerInteractor implements IPlayerInteractor { async createPlayer(data : Player): Promise { const players = await this.repository.create(data); - return players[0]; // Assuming the first player is the one you need - // Do something notify promotion message - + return players[0]; + +} + + async deletePlayer(id: number): Promise { + await this.repository.delete(id); + +} +async updatePlayer(id: number, data: Partial): Promise { + const player = await this.repository.update(id, data); + return player; } } \ No newline at end of file diff --git a/src/interfaces/IMessageBroker.ts b/src/interfaces/IMessageBroker.ts index 5d0581b..92c811b 100644 --- a/src/interfaces/IMessageBroker.ts +++ b/src/interfaces/IMessageBroker.ts @@ -1,3 +1,15 @@ export interface IMessageBroker { NotifyToPromotionService(product: unknown): Promise; -} \ No newline at end of file +} + + + + + + + + + + + + diff --git a/src/interfaces/IPlayerInteractor.ts b/src/interfaces/IPlayerInteractor.ts index 1e0ea47..6f40e85 100644 --- a/src/interfaces/IPlayerInteractor.ts +++ b/src/interfaces/IPlayerInteractor.ts @@ -2,5 +2,7 @@ import { Player } from "../entities/principletype"; export interface IPlayerInteractor { createPlayer(input: Partial): Promise; + deletePlayer(id: number): Promise; + updatePlayer(id: number, input: Partial): Promise; } \ No newline at end of file diff --git a/src/interfaces/IPlayerRepository.ts b/src/interfaces/IPlayerRepository.ts index 1100519..45a13b1 100644 --- a/src/interfaces/IPlayerRepository.ts +++ b/src/interfaces/IPlayerRepository.ts @@ -2,6 +2,8 @@ import { Player } from "../entities/principletype"; export interface IPlayerRepository { create(data: Player): Promise; + delete(id: number): Promise; + update(id: number, data: Partial): Promise; - + } \ No newline at end of file diff --git a/src/repositories/playerRepository.ts b/src/repositories/playerRepository.ts index 5649588..e8ac97d 100644 --- a/src/repositories/playerRepository.ts +++ b/src/repositories/playerRepository.ts @@ -19,7 +19,20 @@ export class PlayerRepository implements IPlayerRepository { const savedPlayer = await this.playerRepository.save(player); return [savedPlayer]; } + // Delete a player + async delete(id: number): Promise { + await this.playerRepository.delete(id); + } // Update a product + async update(id: number, data: Partial): Promise { + await this.playerRepository.update(id, data); + const player = await this.playerRepository.findOne({ where: { id } }); + if (!player) { + throw new Error("Player not found"); + } + return player; + } } + diff --git a/src/routes/index.ts b/src/routes/index.ts index 1d44eee..d91e72c 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -67,7 +67,7 @@ class Routes { console.error(`Failed to load route at path: ${path}`, error); } } - + // Return the router instance public getRouter(): Router { return this.router; diff --git a/src/routes/playerRoutes.ts b/src/routes/playerRoutes.ts index 3c4bb22..c8c1614 100644 --- a/src/routes/playerRoutes.ts +++ b/src/routes/playerRoutes.ts @@ -37,5 +37,9 @@ const playerController = container.get(INTERFACE_TYPE.PlayerCo router.post('/create', playerController.onCreatePlayer.bind(playerController)); +router.delete('/delete/:id', playerController.onDeletePlayer.bind(playerController)); + +router.put('/update/:id', playerController.onUpdatePlayer.bind(playerController)); + export default router; \ No newline at end of file diff --git a/src/utils/constant/appConstant.ts b/src/utils/constant/appConstant.ts index f6d1575..e51b912 100644 --- a/src/utils/constant/appConstant.ts +++ b/src/utils/constant/appConstant.ts @@ -9,4 +9,16 @@ export const INTERFACE_TYPE = { MessageBroker: Symbol.for("MessageBroker"), PlayerRepository: Symbol.for("PlayerRepository"), PlayerInteractor: Symbol.for("PlayerInteractor"), -} \ No newline at end of file +} + + + + + + + + + + + +