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.",