diff --git a/src/server/api/controllers/create-crop.controller.js b/src/server/api/controllers/create-crop.controller.js
new file mode 100644
index 00000000..e2b4c11b
--- /dev/null
+++ b/src/server/api/controllers/create-crop.controller.js
@@ -0,0 +1,23 @@
+const knex = require('../../config/db');
+
+const createCrop = async (body) => {
+ try {
+ await knex('crops').insert({
+ name: body.name,
+ plant_variety: body.plant_variety,
+ fk_user_id: body.fk_user_id,
+ created_at: knex.fn.now(),
+ updated_at: knex.fn.now(),
+ deleted_at: null,
+ });
+ return {
+ successful: true,
+ };
+ } catch (error) {
+ return error.message;
+ }
+};
+
+module.exports = {
+ createCrop,
+};
diff --git a/src/server/api/routes/api-router.js b/src/server/api/routes/api-router.js
index ee8609ef..5d1c397f 100644
--- a/src/server/api/routes/api-router.js
+++ b/src/server/api/routes/api-router.js
@@ -15,6 +15,7 @@ const getBatchRouter = require('./batches.router');
const batchDefaultValuesRouter = require('./batch-default-values.router');
const batchStatusRouter = require('./batch-status.router');
const deleteSpecificBatchDataRouter = require('./delete-specific-batch.router');
+const createCropRouter = require('./create-crop.router');
// swagger-ui-express
// const swaggerDocument = require('../../config/swagger.json');
@@ -65,5 +66,6 @@ router.use('/batch', getBatchRouter);
router.use('/batch-default-values', batchDefaultValuesRouter);
router.use('/batch-status/', batchStatusRouter);
router.use('/delete-specific-batch', deleteSpecificBatchDataRouter);
+router.use('/create-crop', createCropRouter);
module.exports = router;
diff --git a/src/server/api/routes/create-crop.router.js b/src/server/api/routes/create-crop.router.js
new file mode 100644
index 00000000..86278397
--- /dev/null
+++ b/src/server/api/routes/create-crop.router.js
@@ -0,0 +1,93 @@
+/* eslint-disable no-console */
+const express = require('express');
+
+const router = express.Router({ mergeParams: true });
+
+const {
+ checkIfAuthorized,
+} = require('../lib/middleware/authorization.middleware');
+
+const ROLES = require('../../constants/roles');
+
+// controllers
+const createCropController = require('../controllers/create-crop.controller');
+
+/**
+ * @swagger
+ * /create-crop:
+ * post:
+ * summary:
+ * Creates a crop from values received from add crop form fields
+ * description:
+ * Post following values received from add crop form fields:
+ * name, plant variety with the userId received from header.
+ *
+ *
+ * Authentication: super_admin admin
+ * tags:
+ * - Crops
+ * operationId: createCrop
+ * produces: application/json
+ * parameters:
+ * - name: authorization
+ * in: header
+ * description: Firebase token
+ * required: true
+ * default: Bearer ENTER_FIREBASE_TOKEN
+ * type: string
+ * - in: body
+ * name: crops
+ * description: Crop info
+ * schema:
+ * type: object
+ * properties:
+ * name:
+ * type: string
+ * plant_variety:
+ * type: string
+ * fk_user_id:
+ * type: integer
+ * example: 1
+ * created_at:
+ * type: string
+ * format: date-time
+ * updated_at:
+ * type: string
+ * format: date-time
+ * deleted_at:
+ * type: string
+ * format: date-time
+ * required:
+ * - name
+ * plant_variety
+ * fk_user_id
+ * created_at
+ * updated_at
+ * deleted_at
+ * security:
+ * firebase_auth:
+ * - write
+ * responses:
+ * 200:
+ * description: Successful request
+ * 401:
+ * description: Unauthorized request.
+ * 404:
+ * description: Not found.
+ * 5XX:
+ * description: Unexpected error.
+ */
+
+// ENDPOINT: /api/create-crop :POST to Create a crop
+router.post(
+ '/',
+ checkIfAuthorized(ROLES.SUPER_ADMIN, ROLES.ADMIN),
+ (req, res, next) => {
+ createCropController
+ .createCrop(req.body)
+ .then((result) => res.json(result))
+ .catch(next);
+ },
+);
+
+module.exports = router;
diff --git a/src/server/config/swagger.json b/src/server/config/swagger.json
index 99d00352..2f93f818 100644
--- a/src/server/config/swagger.json
+++ b/src/server/config/swagger.json
@@ -480,6 +480,60 @@
}
}
},
+ "/create-crop": {
+ "post": {
+ "tags": ["create-crop"],
+ "parameters": [
+ {
+ "name": "authorization",
+ "in": "header",
+ "description": "Firebase token",
+ "required": true,
+ "type": "string",
+ "default": "Bearer ENTER_FIREBASE_TOKEN"
+ },
+ {
+ "name": "name",
+ "in": "body",
+ "type": "string",
+ "required": true
+ },
+ {
+ "name": "plantVariety",
+ "in": "body",
+ "type": "string",
+ "required": true
+ },
+ {
+ "name": "userId",
+ "in": "body",
+ "type": "integer",
+ "required": true
+ }
+ ],
+ "summary": "Post values received from add crop form fields",
+ "description": "Post following values received from add crop form fields:name, plant variety with the userId received from header), ",
+ "operationId": "createCrop",
+ "produces": ["application/json"],
+ "responses": {
+ "200": {
+ "description": "Successful POST request"
+ },
+ "401": {
+ "description": "Unauthorized request"
+ },
+ "404": {
+ "description": "Not found"
+ },
+ "500": {
+ "description": "Server error"
+ }
+ },
+ "security": {
+ "firebase_auth": ["write"]
+ }
+ }
+ },
"/batches": {
"get": {
"description": "Get all batches.",