@@ -48,6 +48,7 @@ const KIInventoryController = () => {
4848 const items = await KIInventoryItem . find ( null , { __v : 0 } ) . lean ( ) . sort ( { createdAt : - 1 } ) ;
4949 res . status ( 200 ) . json ( { message : 'All Items fetched successfully.' , data : items } ) ;
5050 } catch ( err ) {
51+ console . error ( err ) ;
5152 res . status ( 400 ) . json ( { message : 'Something went wrong while fetching items.' } ) ;
5253 }
5354 } ;
@@ -59,6 +60,7 @@ const KIInventoryController = () => {
5960 . sort ( { createdAt : - 1 } ) ;
6061 res . status ( 200 ) . json ( { message : 'Items fetched successfully.' , data : items } ) ;
6162 } catch ( err ) {
63+ console . error ( err ) ;
6264 res . status ( 400 ) . json ( { message : 'Something went wrong while fetching items.' } ) ;
6365 }
6466 } ;
@@ -74,6 +76,7 @@ const KIInventoryController = () => {
7476 . sort ( { presentQuantity : - 1 } ) ;
7577 res . status ( 200 ) . json ( { message : 'Preserved stock items fetched successfully.' , data : items } ) ;
7678 } catch ( err ) {
79+ console . error ( err ) ;
7780 res
7881 . status ( 400 )
7982 . json ( { message : 'Something went wrong while fetching preserved stock items.' } ) ;
@@ -154,6 +157,39 @@ const KIInventoryController = () => {
154157 res . status ( 400 ) . json ( { message : err . message } ) ;
155158 }
156159 } ;
160+ const getInventoryStats = async ( req , res ) => {
161+ try {
162+ // Only fetch the fields needed for stats — avoids sending full item payloads
163+ const items = await KIInventoryItem . find (
164+ { } ,
165+ { presentQuantity : 1 , reorderAt : 1 , category : 1 , expiryDate : 1 } ,
166+ ) . lean ( ) ;
167+ const totalItems = items . length ;
168+ const criticalStock = items . filter ( ( i ) => i . presentQuantity <= i . reorderAt * 0.5 ) . length ;
169+ const lowStock = items . filter (
170+ ( i ) => i . presentQuantity <= i . reorderAt && i . presentQuantity > i . reorderAt * 0.5 ,
171+ ) . length ;
172+
173+ const oneYearFromNow = new Date ( ) ;
174+ oneYearFromNow . setFullYear ( oneYearFromNow . getFullYear ( ) + 1 ) ;
175+ const preserved = items . filter (
176+ ( i ) => i . category === 'INGREDIENT' && new Date ( i . expiryDate ) >= oneYearFromNow ,
177+ ) . length ;
178+
179+ res . status ( 200 ) . json ( {
180+ message : 'Inventory stats fetched successfully.' ,
181+ data : {
182+ totalItems,
183+ criticalStock,
184+ lowStock,
185+ preserved,
186+ } ,
187+ } ) ;
188+ } catch ( err ) {
189+ console . error ( err ) ;
190+ res . status ( 500 ) . json ( { message : 'Something went wrong while fetching inventory stats.' } ) ;
191+ }
192+ } ;
157193 return {
158194 addItem,
159195 getItems,
@@ -162,6 +198,7 @@ const KIInventoryController = () => {
162198 updateOnUsage,
163199 updateStoredQuantity,
164200 updateNextHarvest,
201+ getInventoryStats,
165202 } ;
166203} ;
167204module . exports = KIInventoryController ;
0 commit comments