22//collection, rating as an array of objects with reference to ratings collection, also a brand enumeration
33
44
5- async function createProduct ( productData , dbconnection ) {
5+ async function createProduct ( productData , dbconnection , logEvents ) {
66
77 console . log ( "from createProduct DB handler" ) ;
88 const db = await dbconnection ( ) ;
@@ -18,12 +18,85 @@ async function createProduct(productData, dbconnection) {
1818 }
1919}
2020
21+ // find one product from DB
22+ const findOneProduct = async ( { productId, dbconnection } ) => {
23+
24+ const db = await dbconnection ( ) ;
25+ try {
26+ const product = await db . collection ( 'products' ) . findOne ( { _id : ObjectId ( productId ) } , {
27+ projection : {
28+ _id : 1 , title : 1 , description : 1 , price : 1 , category : 1 , brand : 1 , inventory : 1 , creationDate : 1 , expirationDate : 1 , origin : 1 , variations : 1 , salePrice : 1 , slug : 1 , totalRatings : 1 , totalReviews : 1 , totalSales : 1 , rateAverage : 1 ,
29+ lastModified : 1 ,
30+ instock : 1
31+ }
32+ } ) ;
33+ if ( ! product ) {
34+ console . log ( "No product found" ) ;
35+ return null ;
36+ }
37+ console . log ( "\n\nproduct before deleting: \n\n" , product ) ;
38+ const { _id, ...rest } = product ;
39+ const isDeleted = delete product . _id ;
40+ console . log ( "\n\nafter deleting product = : " , product ) ;
41+ console . log ( "\n\n rest after deleting: " , rest ) ;
42+
43+ if ( isDeleted ) {
44+ console . log ( "product deleted and returned " ) ;
45+ return product ;
46+ }
47+ console . log ( "product NOT deleted and REST isreturned " ) ;
48+ return rest ;
49+ } catch ( error ) {
50+ console . log ( "Error from product DB handler: " , error ) ;
51+ logEvents (
52+ `${ error . no } :${ error . code } \t${ error . name } \t${ error . message } ` ,
53+ "product.log"
54+ ) ;
55+ return null ;
56+ }
57+ }
58+
59+ // find all products from the database
60+ const findAllProducts = async ( { dbconnection } ) => {
61+
62+ const db = dbconnection ( ) ;
63+
64+ try {
65+ const allProducts = await db . collection ( 'products' ) . find ( { } , {
66+ projection : {
67+ _id : 1 , title : 1 , description : 1 , price : 1 , category : 1 , brand : 1 , inventory : 1 , creationDate : 1 , expirationDate : 1 , origin : 1 , variations : 1 , salePrice : 1 , slug : 1 , totalRatings : 1 , totalReviews : 1 , totalSales : 1 , rateAverage : 1 ,
68+ lastModified : 1 ,
69+ instock : 1
70+ }
71+ } ) ;
72+
73+ const is_IdDeleted = delete allProducts . _id ;
74+ if ( is_IdDeleted ) {
75+ console . log ( "allProducts _id deleted and returned " ) ;
76+ return allProducts ;
77+ }
78+ console . log ( "allProducts _id NOT deleted and REST isreturned " ) ;
79+ const { _id, ...rest } = allProducts ;
80+ return rest ;
81+ } catch ( error ) {
82+ console . log ( "Error from product DB handler: " , error ) ;
83+ logEvents (
84+ `${ error . no } :${ error . code } \t${ error . name } \t${ error . message } ` ,
85+ "product.log"
86+ ) ;
87+ return [ ] ;
88+ }
89+
90+ }
91+
2192
2293
2394
24- module . exports = ( { dbconnection } ) => {
95+ module . exports = ( { dbconnection, logEvents } ) => {
2596
2697 return Object . freeze ( {
27- createProductDbHandler : async ( productData ) => createProduct ( productData , dbconnection )
98+ createProductDbHandler : async ( productData ) => createProduct ( productData , dbconnection , logEvents ) ,
99+ findOneProductDbHandler : async ( { productId } ) => findOneProduct ( { productId, dbconnection, logEvents } ) ,
100+ findAllProductsDbHandler : async ( ) => findAllProducts ( { dbconnection, logEvents } ) ,
28101 } )
29102}
0 commit comments