1+ import { ProductsService } from "../services/productsService.js" ;
2+ import { Middleware } from "../utils/auth/middleware.js" ;
3+ import { decode } from "jsonwebtoken"
4+ import { once } from "node:events" ;
5+
6+ export class ProductsController {
7+ _productsService ;
8+ _userMiddleware ;
9+
10+ constructor ( productsService = new ProductsService , userMiddleware = new Middleware ( ) ) {
11+ this . _productsService = productsService ;
12+ this . _userMiddleware = userMiddleware ;
13+ }
14+
15+ async createProduct ( request , response ) {
16+
17+ const checkToken = await this . _userMiddleware . ensureUserAuthenthicated ( request , response ) ;
18+
19+ if ( checkToken === true ) {
20+
21+ const { product_name, price, category } = JSON . parse ( await once ( request , "data" ) ) ;
22+
23+ if ( product_name === "" || price === "" || category === "" ) {
24+ response . writeHead ( 401 ) ;
25+ return response . end ( JSON . stringify ( { message : "All data must have a value !" } ) ) ;
26+
27+ } else if ( typeof ( product_name ) !== "string" || typeof ( category ) !== "string" ) {
28+ response . writeHead ( 401 ) ;
29+ return response . end ( JSON . stringify ( { message : "ProductName and Cataegory must be a string !" } ) ) ;
30+
31+ } else if ( typeof ( price ) !== "number" ) {
32+ response . writeHead ( 401 ) ;
33+ return response . end ( JSON . stringify ( { message : "Price must be a float/decimal number !" } ) ) ;
34+ }
35+
36+ const authToken = request . headers . authorization ;
37+ const [ , token ] = authToken . split ( ' ' ) ;
38+ const getUserId = decode ( token ) ;
39+
40+ const createProduct = await this . _productsService . create ( {
41+ product_name,
42+ price,
43+ category,
44+ user_id : getUserId . user . user_id
45+ } ) ;
46+
47+ return response . end ( JSON . stringify ( {
48+ product : {
49+ user_id : createProduct . user_id ,
50+ product_id : createProduct . product_id ,
51+ product_name : createProduct . product_name ,
52+ price : createProduct . price ,
53+ category : createProduct . category ,
54+ createdAt : createProduct . createdAt
55+ }
56+ } ) ) ;
57+
58+ }
59+
60+ response . writeHead ( 401 ) ;
61+ return response . end ( JSON . stringify ( { message : checkToken } ) ) ;
62+ }
63+
64+ }
0 commit comments