1- import { createOrder , getMyOrders , getOrderById , modifyStatus } from "../models/order.model.js"
1+ import {
2+ createOrder ,
3+ getMyOrders ,
4+ getOrderById ,
5+ modifyStatus ,
6+ getOrderStats ,
7+ getOrdersByStatus ,
8+ cancelOrder ,
9+ getAllOrders
10+ } from "../models/order.model.js"
211
312export async function createOrderController ( req , res ) {
413 try {
5- const order = await createOrder ( req . user . userId , req . body )
6- res . status ( 201 ) . send ( { order, message : "Order created successfully" } )
14+ // Validate required fields
15+ const { products, shippingAddress, totalPrice } = req . body ;
16+
17+ if ( ! products || ! Array . isArray ( products ) || products . length === 0 ) {
18+ return res . status ( 400 ) . send ( { error : "Products are required" } ) ;
19+ }
20+
21+ if ( ! shippingAddress || ! shippingAddress . fullName || ! shippingAddress . addressLine1 ) {
22+ return res . status ( 400 ) . send ( { error : "Complete shipping address is required" } ) ;
23+ }
24+
25+ if ( ! totalPrice || totalPrice <= 0 ) {
26+ return res . status ( 400 ) . send ( { error : "Valid total price is required" } ) ;
27+ }
28+
29+ const order = await createOrder ( req . user . userId , req . body ) ;
30+ res . status ( 201 ) . send ( {
31+ success : true ,
32+ order,
33+ message : "Order created successfully"
34+ } ) ;
735 } catch ( error ) {
8- res . status ( 500 ) . send ( { error : error . message } )
36+ console . log ( `Error: ${ error . message } ` ) ;
37+ if ( error . message . includes ( 'stock' ) || error . message . includes ( 'mismatch' ) || error . message . includes ( 'not found' ) ) {
38+ return res . status ( 400 ) . send ( { error : error . message } ) ;
39+ }
40+ res . status ( 500 ) . send ( { error : "Internal Server Error" } ) ;
941 }
1042}
1143
1244export async function getMyOrdersController ( req , res ) {
1345 try {
14- const myOrders = await getMyOrders ( req . user . userId )
15- return res . status ( 200 ) . send ( myOrders )
46+ const { page = 1 , limit = 10 , status } = req . query ;
47+
48+ let myOrders ;
49+ if ( status ) {
50+ myOrders = await getOrdersByStatus ( status , parseInt ( page ) , parseInt ( limit ) ) ;
51+ // Filter by user
52+ myOrders . orders = myOrders . orders . filter ( order => order . userId === req . user . userId ) ;
53+ } else {
54+ myOrders = await getMyOrders ( req . user . userId ) ;
55+ }
56+
57+ return res . status ( 200 ) . send ( {
58+ success : true ,
59+ orders : myOrders
60+ } ) ;
1661 } catch ( error ) {
17- res . status ( 500 ) . send ( { error : error . message } )
62+ console . log ( `Error: ${ error . message } ` ) ;
63+ res . status ( 500 ) . send ( { error : "Internal Server Error" } ) ;
1864 }
1965}
2066
2167export async function getOrderByIdController ( req , res ) {
2268 try {
23- const order = await getOrderById ( req . user . userId , req . params . id )
24- res . status ( 200 ) . send ( order )
69+ const order = await getOrderById ( req . user . userId , req . params . id ) ;
70+ res . status ( 200 ) . send ( {
71+ success : true ,
72+ order
73+ } ) ;
2574 } catch ( error ) {
26- res . status ( 500 ) . send ( { error : error . message } )
75+ console . log ( `Error: ${ error . message } ` ) ;
76+ if ( error . message . includes ( 'not allowed' ) || error . message . includes ( 'not found' ) ) {
77+ return res . status ( 404 ) . send ( { error : error . message } ) ;
78+ }
79+ res . status ( 500 ) . send ( { error : "Internal Server Error" } ) ;
2780 }
2881}
2982
3083export async function modifyStatusController ( req , res ) {
3184 try {
32- const order = await modifyStatus ( req . params . id , req . body . status )
33- res . status ( 200 ) . send ( { order, message : "Order status modified successfully" } )
85+ const { status, trackingNumber, estimatedDelivery } = req . body ;
86+
87+ if ( ! status ) {
88+ return res . status ( 400 ) . send ( { error : "Status is required" } ) ;
89+ }
90+
91+ const order = await modifyStatus ( req . params . id , status , trackingNumber , estimatedDelivery ) ;
92+ res . status ( 200 ) . send ( {
93+ success : true ,
94+ order,
95+ message : "Order status updated successfully"
96+ } ) ;
97+ } catch ( error ) {
98+ console . log ( `Error: ${ error . message } ` ) ;
99+ if ( error . message . includes ( 'Cannot change status' ) ) {
100+ return res . status ( 400 ) . send ( { error : error . message } ) ;
101+ }
102+ res . status ( 500 ) . send ( { error : "Internal Server Error" } ) ;
103+ }
104+ }
105+
106+ export async function cancelOrderController ( req , res ) {
107+ try {
108+ const { reason } = req . body ;
109+ const order = await cancelOrder ( req . params . id , req . user . userId , reason ) ;
110+ res . status ( 200 ) . send ( {
111+ success : true ,
112+ order,
113+ message : "Order cancelled successfully"
114+ } ) ;
115+ } catch ( error ) {
116+ console . log ( `Error: ${ error . message } ` ) ;
117+ if ( error . message . includes ( 'Cannot cancel' ) || error . message . includes ( 'not found' ) ) {
118+ return res . status ( 400 ) . send ( { error : error . message } ) ;
119+ }
120+ res . status ( 500 ) . send ( { error : "Internal Server Error" } ) ;
121+ }
122+ }
123+
124+ export async function getOrderStatsController ( req , res ) {
125+ try {
126+ const stats = await getOrderStats ( req . user . userId ) ;
127+ res . status ( 200 ) . send ( {
128+ success : true ,
129+ stats
130+ } ) ;
131+ } catch ( error ) {
132+ console . log ( `Error: ${ error . message } ` ) ;
133+ res . status ( 500 ) . send ( { error : "Internal Server Error" } ) ;
134+ }
135+ }
136+
137+ // Admin only controllers
138+ export async function getAllOrdersController ( req , res ) {
139+ try {
140+ const { page = 1 , limit = 10 , status } = req . query ;
141+
142+ let orders ;
143+ if ( status ) {
144+ orders = await getOrdersByStatus ( status , parseInt ( page ) , parseInt ( limit ) ) ;
145+ } else {
146+ orders = await getAllOrders ( ) ;
147+ }
148+
149+ res . status ( 200 ) . send ( {
150+ success : true ,
151+ orders
152+ } ) ;
153+ } catch ( error ) {
154+ console . log ( `Error: ${ error . message } ` ) ;
155+ res . status ( 500 ) . send ( { error : "Internal Server Error" } ) ;
156+ }
157+ }
158+
159+ export async function getAdminOrderStatsController ( req , res ) {
160+ try {
161+ const stats = await getOrderStats ( ) ;
162+ res . status ( 200 ) . send ( {
163+ success : true ,
164+ stats
165+ } ) ;
34166 } catch ( error ) {
35- res . status ( 500 ) . send ( { error : error . message } )
167+ console . log ( `Error: ${ error . message } ` ) ;
168+ res . status ( 500 ) . send ( { error : "Internal Server Error" } ) ;
36169 }
37170}
0 commit comments