11import express from "express" ;
22import { QuestionDao } from "../models/questions" ;
33import { ApiResponse , EMPTY_OBJECT , StatusMessageType } from "../types" ;
4+ import { handleCustomError , handleServerError } from "../utils" ;
45
56// GET /questions/:id
67export const getQuestion = async (
@@ -10,28 +11,18 @@ export const getQuestion = async (
1011 try {
1112 const id = req . params . id ;
1213 if ( ! id ) {
13- const response : ApiResponse = {
14- payload : EMPTY_OBJECT ,
15- statusMessage : {
16- type : StatusMessageType . ERROR ,
17- message : "No ID provided" ,
18- } ,
19- } ;
20-
21- res . status ( 400 ) . json ( response ) ;
14+ handleCustomError ( res , {
15+ type : StatusMessageType . ERROR ,
16+ message : "Question ID must be provided" ,
17+ } ) ;
2218 }
2319
2420 const question = await QuestionDao . getQuestionById ( id ) ;
2521 if ( ! question ) {
26- const response : ApiResponse = {
27- payload : EMPTY_OBJECT ,
28- statusMessage : {
29- type : StatusMessageType . ERROR ,
30- message : "No question found" ,
31- } ,
32- } ;
33-
34- res . status ( 404 ) . json ( response ) ;
22+ handleCustomError ( res , {
23+ type : StatusMessageType . ERROR ,
24+ message : "Question not found" ,
25+ } ) ;
3526 }
3627
3728 const response : ApiResponse = {
@@ -40,16 +31,7 @@ export const getQuestion = async (
4031 } ;
4132 res . status ( 200 ) . json ( response ) ;
4233 } catch ( error ) {
43- console . log ( error ) ;
44- const response : ApiResponse = {
45- payload : EMPTY_OBJECT ,
46- statusMessage : {
47- type : StatusMessageType . ERROR ,
48- message : "Something went wrong" ,
49- } ,
50- } ;
51-
52- res . status ( 500 ) . json ( response ) ;
34+ handleServerError ( error , res ) ;
5335 }
5436} ;
5537
@@ -61,33 +43,93 @@ export const createQuestion = async (
6143 try {
6244 const { title, description } = req . body ;
6345 if ( ! title || ! description ) {
64- const response : ApiResponse = {
65- payload : EMPTY_OBJECT ,
66- statusMessage : {
67- type : StatusMessageType . ERROR ,
68- message : "Title or description must provided" ,
69- } ,
70- } ;
71-
72- res . status ( 400 ) . json ( response ) ;
46+ handleCustomError ( res , {
47+ type : StatusMessageType . ERROR ,
48+ message : "Title and description must be provided" ,
49+ } ) ;
7350 }
7451
7552 const question = await QuestionDao . createQuestion ( title , description ) ;
7653 const response : ApiResponse = {
7754 payload : question ,
78- statusMessage : null ,
55+ statusMessage : {
56+ type : StatusMessageType . SUCCESS ,
57+ message : "Question created successfully" ,
58+ } ,
7959 } ;
8060 res . status ( 201 ) . json ( response ) ;
8161 } catch ( error ) {
82- console . log ( error ) ;
62+ handleServerError ( error , res ) ;
63+ }
64+ } ;
65+
66+ // PUT /questions/:id
67+ export const updateQuestion = async (
68+ req : express . Request ,
69+ res : express . Response
70+ ) => {
71+ try {
72+ const id = req . params . id ;
73+ const { title, description } = req . body ;
74+ if ( ! id || ! title || ! description ) {
75+ handleCustomError ( res , {
76+ type : StatusMessageType . ERROR ,
77+ message : "Question ID, title, and description must be provided" ,
78+ } ) ;
79+ }
80+
81+ const question = await QuestionDao . updateQuestion ( id , title , description ) ;
82+ if ( ! question ) {
83+ handleCustomError ( res , {
84+ type : StatusMessageType . ERROR ,
85+ message : "Question not found" ,
86+ } ) ;
87+ }
88+
8389 const response : ApiResponse = {
84- payload : EMPTY_OBJECT ,
90+ payload : question ,
8591 statusMessage : {
86- type : StatusMessageType . ERROR ,
87- message : "Something went wrong " ,
92+ type : StatusMessageType . SUCCESS ,
93+ message : "Question updated successfully " ,
8894 } ,
8995 } ;
96+ res . status ( 200 ) . json ( response ) ;
97+ } catch ( error ) {
98+ handleServerError ( error , res ) ;
99+ }
100+ } ;
101+
102+ // DELETE /questions/:id
103+ export const deleteQuestion = async (
104+ req : express . Request ,
105+ res : express . Response
106+ ) => {
107+ try {
108+ const id = req . params . id ;
109+ if ( ! id ) {
110+ handleCustomError ( res , {
111+ type : StatusMessageType . ERROR ,
112+ message : "Question ID must be provided" ,
113+ } ) ;
114+ }
115+
116+ const question = await QuestionDao . deleteQuestion ( id ) ;
117+ if ( ! question ) {
118+ handleCustomError ( res , {
119+ type : StatusMessageType . ERROR ,
120+ message : "Question not found" ,
121+ } ) ;
122+ }
90123
91- res . status ( 500 ) . json ( response ) ;
124+ const response : ApiResponse = {
125+ payload : question ,
126+ statusMessage : {
127+ type : StatusMessageType . SUCCESS ,
128+ message : "Question deleted successfully" ,
129+ } ,
130+ } ;
131+ res . status ( 200 ) . json ( response ) ;
132+ } catch ( error ) {
133+ handleServerError ( error , res ) ;
92134 }
93135} ;
0 commit comments