feat: add player deletion and update functionality, enhance player controller

This commit is contained in:
Paritosh Chudasama
2024-12-26 15:45:03 +05:30
parent d79392ca8c
commit 55fd1c4c8d
10 changed files with 79 additions and 9 deletions

View File

@@ -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<Player> = req.body;
console.log(data);
const updatedPlayer = await this.interactor.updatePlayer(id, data);
res.status(200).json(new ApiResponse(200, updatedPlayer, 'Successfully updated'));
}
}

View File

@@ -12,5 +12,4 @@ export class Player {
@Column()
name!: string;
}

View File

@@ -27,9 +27,17 @@ export class PlayerInteractor implements IPlayerInteractor {
async createPlayer(data : Player): Promise<Player> {
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<void> {
await this.repository.delete(id);
}
async updatePlayer(id: number, data: Partial<Player>): Promise<Player> {
const player = await this.repository.update(id, data);
return player;
}
}

View File

@@ -1,3 +1,15 @@
export interface IMessageBroker {
NotifyToPromotionService(product: unknown): Promise<boolean>;
}
}

View File

@@ -2,5 +2,7 @@ import { Player } from "../entities/principletype";
export interface IPlayerInteractor {
createPlayer(input: Partial<Player>): Promise<Player>;
deletePlayer(id: number): Promise<void>;
updatePlayer(id: number, input: Partial<Player>): Promise<Player>;
}

View File

@@ -2,6 +2,8 @@ import { Player } from "../entities/principletype";
export interface IPlayerRepository {
create(data: Player): Promise<Player[]>;
delete(id: number): Promise<void>;
update(id: number, data: Partial<Player>): Promise<Player>;
}

View File

@@ -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<void> {
await this.playerRepository.delete(id);
}
// Update a product
async update(id: number, data: Partial<Player>): Promise<Player> {
await this.playerRepository.update(id, data);
const player = await this.playerRepository.findOne({ where: { id } });
if (!player) {
throw new Error("Player not found");
}
return player;
}
}

View File

@@ -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;

View File

@@ -37,5 +37,9 @@ const playerController = container.get<PlayerController>(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;

View File

@@ -9,4 +9,16 @@ export const INTERFACE_TYPE = {
MessageBroker: Symbol.for("MessageBroker"),
PlayerRepository: Symbol.for("PlayerRepository"),
PlayerInteractor: Symbol.for("PlayerInteractor"),
}
}