@@ -2,7 +2,7 @@ import { NextFunction, Request, Response } from "express";
22import * as achievementService from "../services/achievement.service" ;
33import { ApiError } from "../utils/apiError" ;
44
5- export const getAchievements = async ( req : Request , res : Response , next : NextFunction ) => {
5+ export const getAchievements = async ( req : Request , res : Response ) => {
66 const achievements = await achievementService . getAchievements ( ) ;
77
88 if ( ! achievements || achievements . length === 0 ) {
@@ -17,9 +17,13 @@ export const getAchievements = async (req: Request, res: Response, next: NextFun
1717} ;
1818
1919
20- export const getAchievementById = async ( req : Request , res : Response , next : NextFunction ) => {
20+ export const getAchievementById = async ( req : Request , res : Response ) => {
2121 const achievementId = parseInt ( req . params . achievementId ) ;
2222
23+ if ( ! achievementId || isNaN ( achievementId ) ) {
24+ throw new ApiError ( "Invalid achievement ID" , 400 ) ;
25+ }
26+
2327 const achievement = await achievementService . getAchievementById ( achievementId ) ;
2428
2529 if ( ! achievement ) {
@@ -33,16 +37,90 @@ export const getAchievementById = async (req: Request, res: Response, next: Next
3337} ;
3438
3539
36- export const updateAchievementById = async ( req : Request , res : Response , next : NextFunction ) => {
40+ // export const createAchievement = async (req: Request, res: Response) => {
41+ // const { title, achievedAt, imageUrl} = req.body;
42+
43+ // if (!title || !achievedAt ) {
44+ // throw new ApiError("title, achievedAt, and adminId are required", 400);
45+ // }
46+
47+ // const newAchievement = await achievementService.createAchievement({
48+ // title,
49+ // achievedAt,
50+ // imageUrl,
51+ // });
52+
53+ // res.status(201).json({
54+ // success: true,
55+ // data: newAchievement,
56+ // });
57+ // };
58+
59+
60+ export const createAchievement = async ( req : Request , res : Response ) => {
61+ const { title, achievedAt, imageUrl, memberIds } = req . body ;
62+
63+ if ( ! title || ! achievedAt ) {
64+ throw new ApiError ( "Title, achievedAt, and adminId are required" , 400 ) ;
65+ }
66+
67+ if ( ! Array . isArray ( memberIds ) ) {
68+ throw new ApiError ( "memberIds must be an array" , 400 ) ;
69+ }
70+
71+ const achievement = await achievementService . createAchievement ( {
72+ title,
73+ achievedAt,
74+ imageUrl,
75+ memberIds,
76+ } ) ;
77+
78+ res . status ( 201 ) . json ( {
79+ success : true ,
80+ data : achievement ,
81+ } ) ;
82+ } ;
83+
84+
85+ // export const addMemberToAchievement = async (req: Request, res: Response) => {
86+ // const achievementId = parseInt(req.params.achievementId);
87+ // const { memberId } = req.body;
88+
89+ // if (!achievementId || isNaN(achievementId)) {
90+ // throw new ApiError("Invalid achievement ID", 400);
91+ // }
92+
93+ // if (!memberId) {
94+ // throw new ApiError("Member ID is required", 400);
95+ // }
96+
97+ // const newLink = await achievementService.addMemberToAchievement({
98+ // achievementId,
99+ // memberId,
100+ // });
101+
102+ // res.status(201).json({
103+ // success: true,
104+ // data: newLink,
105+ // });
106+ // };
107+
108+
109+ export const updateAchievementById = async ( req : Request , res : Response ) => {
37110 const achievementId = parseInt ( req . params . achievementId ) ;
38111
39- if ( ! achievementId ) {
112+ if ( ! achievementId || isNaN ( achievementId ) ) {
40113 throw new ApiError ( "Invalid achievement ID" , 400 ) ;
41114 }
42115
43- const { title, achievedAt, imageUrl} = req . body ;
116+ const { title, achievedAt, imageUrl, memberIds } = req . body ;
44117
45- const existingAchievement = await achievementService . getAchievementById ( achievementId ) ;
118+ // if (!adminId) {
119+ // return next(new ApiError("Admin ID is required", 400));
120+ // }
121+
122+
123+ const existingAchievement = await achievementService . getAchievementById ( achievementId ) ;
46124
47125 if ( ! existingAchievement ) {
48126 throw new ApiError ( "Achievement not found" , 404 ) ;
@@ -54,20 +132,22 @@ export const updateAchievementById = async (req: Request, res: Response, next: N
54132 imageUrl,
55133 } ) ;
56134
135+ if ( Array . isArray ( memberIds ) && memberIds . length > 0 ) {
136+ await achievementService . addMembersToAchievement ( achievementId , memberIds ) ;
137+ }
138+
139+
57140 res . status ( 200 ) . json ( {
58141 success : true ,
59142 data : updatedAchievement ,
60143 } ) ;
61144} ;
62145
63-
64- export const deleteAchievementById = async ( req : Request , res : Response , next : NextFunction ) => {
146+ export const deleteAchievementById = async ( req : Request , res : Response ) => {
65147 const achievementId = parseInt ( req . params . achievementId ) ;
66148
67- const existingAchievement = await achievementService . getAchievementById ( achievementId ) ;
68-
69- if ( ! existingAchievement ) {
70- throw new ApiError ( "Achievement not found" , 404 ) ;
149+ if ( ! achievementId || isNaN ( achievementId ) ) {
150+ throw new ApiError ( "Invalid achievement ID" , 400 ) ;
71151 }
72152
73153 await achievementService . deleteAchievementById ( achievementId ) ;
@@ -78,3 +158,23 @@ export const deleteAchievementById = async (req: Request, res: Response, next: N
78158 } ) ;
79159} ;
80160
161+
162+ export const removeMemberFromAchievement = async ( req : Request , res : Response , next : NextFunction ) => {
163+ const achievementId = parseInt ( req . params . achievementId ) ;
164+ const { memberId } = req . body ;
165+
166+ if ( ! achievementId || isNaN ( achievementId ) ) {
167+ return next ( new ApiError ( "Invalid achievement ID" , 400 ) ) ;
168+ }
169+
170+ if ( ! memberId ) {
171+ return next ( new ApiError ( "Member ID is required" , 400 ) ) ;
172+ }
173+
174+ await achievementService . removeMemberFromAchievement ( achievementId , memberId ) ;
175+
176+ res . status ( 200 ) . json ( {
177+ success : true ,
178+ message : "Member removed from achievement successfully" ,
179+ } ) ;
180+ } ;
0 commit comments