Skip to content

Commit ecdfdcf

Browse files
Merge pull request #2109 from OneCommunityGlobal/Abhinav-Kitchen-Inventory-Management-planting-trimming-culling-events
Abhinav kitchen inventory management planting trimming culling events
2 parents aad51d8 + da6b1d5 commit ecdfdcf

10 files changed

Lines changed: 263 additions & 0 deletions

File tree

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
const cullingController = function (CullingEvent) {
2+
const postEvent = async (req, res) => {
3+
try {
4+
const { name, related_to, count, purpose, notes, scheduled_date } = req.body;
5+
6+
if (!name || !related_to || !count || !purpose || !scheduled_date) {
7+
return res.status(400).send({
8+
error: 'Name, related_to, count, purpose, and scheduled_date are required.',
9+
});
10+
}
11+
12+
const validModules = ['Garden', 'Orchard', 'Animals'];
13+
if (!validModules.includes(related_to)) {
14+
return res.status(400).send({
15+
error: `Invalid related_to value. Must be one of: ${validModules.join(', ')}`,
16+
});
17+
}
18+
19+
const event = new CullingEvent({
20+
name,
21+
related_to,
22+
count,
23+
purpose,
24+
notes,
25+
scheduled_date,
26+
});
27+
28+
await event.save();
29+
return res.status(201).send(event);
30+
} catch (err) {
31+
// eslint-disable-next-line no-console
32+
console.error('Error creating culling event:', err);
33+
return res.status(500).send({ error: 'Internal Server Error' });
34+
}
35+
};
36+
37+
const getEvents = async (req, res) => {
38+
try {
39+
const events = await CullingEvent.find().sort({ scheduled_date: 1 });
40+
return res.status(200).send(events);
41+
} catch (err) {
42+
// eslint-disable-next-line no-console
43+
console.error('Error fetching culling events:', err);
44+
return res.status(500).send({ error: 'Internal Server Error' });
45+
}
46+
};
47+
48+
return {
49+
postEvent,
50+
getEvents,
51+
};
52+
};
53+
54+
module.exports = cullingController;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
const plantingController = function (PlantingEvent) {
2+
const postEvent = async (req, res) => {
3+
try {
4+
const { name, related_to, count, date, location } = req.body;
5+
6+
if (!name || !related_to || !count || !date || !location) {
7+
return res.status(400).send({
8+
error: 'Name, related_to, count, date, and location are required.',
9+
});
10+
}
11+
12+
const validModules = ['Garden', 'Orchard', 'Animals'];
13+
if (!validModules.includes(related_to)) {
14+
return res.status(400).send({
15+
error: `Invalid related_to value. Must be one of: ${validModules.join(', ')}`,
16+
});
17+
}
18+
19+
const event = new PlantingEvent({
20+
name,
21+
related_to,
22+
count,
23+
date,
24+
location,
25+
});
26+
27+
await event.save();
28+
return res.status(201).send(event);
29+
} catch (err) {
30+
// eslint-disable-next-line no-console
31+
console.error('Error creating planting event:', err);
32+
return res.status(500).send({ error: 'Internal Server Error' });
33+
}
34+
};
35+
36+
const getEvents = async (req, res) => {
37+
try {
38+
const events = await PlantingEvent.find().sort({ date: 1 });
39+
return res.status(200).send(events);
40+
} catch (err) {
41+
// eslint-disable-next-line no-console
42+
console.error('Error fetching planting events:', err);
43+
return res.status(500).send({ error: 'Internal Server Error' });
44+
}
45+
};
46+
47+
return {
48+
postEvent,
49+
getEvents,
50+
};
51+
};
52+
53+
module.exports = plantingController;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
const trimmingController = function (TrimmingEvent) {
2+
const postEvent = async (req, res) => {
3+
try {
4+
const { name, related_to, pruning_type, last_trim_date, next_trim_date } = req.body;
5+
6+
if (!name || !related_to || !pruning_type || !last_trim_date || !next_trim_date) {
7+
return res.status(400).send({
8+
error: 'Name, related_to, pruning_type, last_trim_date, and next_trim_date are required.',
9+
});
10+
}
11+
12+
const validModules = ['Garden', 'Orchard', 'Animals'];
13+
if (!validModules.includes(related_to)) {
14+
return res.status(400).send({
15+
error: `Invalid related_to value. Must be one of: ${validModules.join(', ')}`,
16+
});
17+
}
18+
19+
const event = new TrimmingEvent({
20+
name,
21+
related_to,
22+
pruning_type,
23+
last_trim_date,
24+
next_trim_date,
25+
});
26+
27+
await event.save();
28+
return res.status(201).send(event);
29+
} catch (err) {
30+
// eslint-disable-next-line no-console
31+
console.error('Error creating trimming event:', err);
32+
return res.status(500).send({ error: 'Internal Server Error' });
33+
}
34+
};
35+
36+
const getEvents = async (req, res) => {
37+
try {
38+
const events = await TrimmingEvent.find().sort({ next_trim_date: 1 });
39+
return res.status(200).send(events);
40+
} catch (err) {
41+
// eslint-disable-next-line no-console
42+
console.error('Error fetching trimming events:', err);
43+
return res.status(500).send({ error: 'Internal Server Error' });
44+
}
45+
};
46+
47+
return {
48+
postEvent,
49+
getEvents,
50+
};
51+
};
52+
53+
module.exports = trimmingController;

src/models/cullingEvent.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const mongoose = require('mongoose');
2+
3+
const { Schema } = mongoose;
4+
5+
const CullingEventSchema = new Schema({
6+
name: { type: String, required: true },
7+
related_to: {
8+
type: String,
9+
enum: ['Garden', 'Orchard', 'Animals'],
10+
required: true,
11+
},
12+
count: { type: Number, required: true },
13+
purpose: { type: String, required: true },
14+
notes: { type: String },
15+
scheduled_date: { type: Date, required: true },
16+
created_at: { type: Date, default: Date.now },
17+
updated_at: { type: Date, default: Date.now },
18+
});
19+
20+
module.exports = mongoose.model('cullingEvent', CullingEventSchema, 'cullingEvents');

src/models/plantingEvent.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const mongoose = require('mongoose');
2+
3+
const { Schema } = mongoose;
4+
5+
const PlantingEventSchema = new Schema({
6+
name: { type: String, required: true },
7+
related_to: {
8+
type: String,
9+
enum: ['Garden', 'Orchard', 'Animals'],
10+
required: true,
11+
},
12+
count: { type: Number, required: true },
13+
date: { type: Date, required: true },
14+
location: { type: String, required: true },
15+
created_at: { type: Date, default: Date.now },
16+
updated_at: { type: Date, default: Date.now },
17+
});
18+
19+
module.exports = mongoose.model('plantingEvent', PlantingEventSchema, 'plantingEvents');

src/models/trimmingEvent.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const mongoose = require('mongoose');
2+
3+
const { Schema } = mongoose;
4+
5+
const TrimmingEventSchema = new Schema({
6+
name: { type: String, required: true },
7+
related_to: {
8+
type: String,
9+
enum: ['Garden', 'Orchard', 'Animals'],
10+
required: true,
11+
},
12+
pruning_type: { type: String, required: true },
13+
last_trim_date: { type: Date, required: true },
14+
next_trim_date: { type: Date, required: true },
15+
created_at: { type: Date, default: Date.now },
16+
updated_at: { type: Date, default: Date.now },
17+
});
18+
19+
module.exports = mongoose.model('trimmingEvent', TrimmingEventSchema, 'trimmingEvents');

src/routes/cullingRouter.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const express = require('express');
2+
3+
const routes = function (CullingEvent) {
4+
const controller = require('../controllers/cullingController')(CullingEvent);
5+
const cullingRouter = express.Router();
6+
7+
cullingRouter.route('/').get(controller.getEvents).post(controller.postEvent);
8+
9+
return cullingRouter;
10+
};
11+
12+
module.exports = routes;

src/routes/plantingRouter.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const express = require('express');
2+
3+
const routes = function (PlantingEvent) {
4+
const controller = require('../controllers/plantingController')(PlantingEvent);
5+
const plantingRouter = express.Router();
6+
7+
plantingRouter.route('/').get(controller.getEvents).post(controller.postEvent);
8+
9+
return plantingRouter;
10+
};
11+
12+
module.exports = routes;

src/routes/trimmingRouter.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const express = require('express');
2+
3+
const routes = function (TrimmingEvent) {
4+
const controller = require('../controllers/trimmingController')(TrimmingEvent);
5+
const trimmingRouter = express.Router();
6+
7+
trimmingRouter.route('/').get(controller.getEvents).post(controller.postEvent);
8+
9+
return trimmingRouter;
10+
};
11+
12+
module.exports = routes;

src/startup/routes.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ const inventoryItem = require('../models/inventoryItem');
1717
const inventoryItemType = require('../models/inventoryItemType');
1818
const transplantingEvent = require('../models/transplantingEvent');
1919
const harvestingEvent = require('../models/harvestingEvent');
20+
const plantingEvent = require('../models/plantingEvent');
21+
const trimmingEvent = require('../models/trimmingEvent');
22+
const cullingEvent = require('../models/cullingEvent');
2023
const role = require('../models/role');
2124
const rolePreset = require('../models/rolePreset');
2225
const ownerMessage = require('../models/ownerMessage');
@@ -162,6 +165,9 @@ const inventoryRouter = require('../routes/inventoryRouter')(
162165
const timeZoneAPIRouter = require('../routes/timeZoneAPIRoutes')();
163166
const transplantingRouter = require('../routes/transplantingRouter')(transplantingEvent);
164167
const harvestingRouter = require('../routes/harvestingRouter')(harvestingEvent);
168+
const plantingRouter = require('../routes/plantingRouter')(plantingEvent);
169+
const trimmingRouter = require('../routes/trimmingRouter')(trimmingEvent);
170+
const cullingRouter = require('../routes/cullingRouter')(cullingEvent);
165171
const profileInitialSetupRouter = require('../routes/profileInitialSetupRouter')(
166172
profileInitialSetuptoken,
167173
userProfile,
@@ -453,6 +459,9 @@ module.exports = function (app) {
453459
app.use('/api', inventoryRouter);
454460
app.use('/api/kitchenandinventory/transplanting', transplantingRouter);
455461
app.use('/api/kitchenandinventory/harvesting', harvestingRouter);
462+
app.use('/api/kitchenandinventory/planting', plantingRouter);
463+
app.use('/api/kitchenandinventory/trimming', trimmingRouter);
464+
app.use('/api/kitchenandinventory/culling', cullingRouter);
456465
app.use('/api', timeZoneAPIRouter);
457466
app.use('/api', taskEditSuggestionRouter);
458467
app.use('/api', roleRouter);

0 commit comments

Comments
 (0)