diff --git a/CHANGELOG.md b/CHANGELOG.md index 0449a750c07a31689ae3709636210c92900070b6..523a244bca13a2ebc56c6f4bbfeae0bc5518cc79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 1.2.2 - 07-04-2020 +## Added +- Route to return the number of answers in a form #72 (Richard Heise) + + ## 1.2.1 - 05-03-2020 ## Added - Cors to integrate front-end with back-end #68 (Richard Heise) @@ -12,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Minor route order changes on main.ts to make it more intuitive - Port on config.env from 3000 to 3333 for integration purpose + ## 1.2.0 - 19-02-2020 ### Changed - Created a stable version with user diff --git a/package.json b/package.json index a8160eedf762dbfdccaf3a66f85acbbf6a4b8440..9812c026a4716498ad0b3a789c3b655c7df3d728 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "form-creator-api", - "version": "1.2.1", + "version": "1.2.2", "description": "RESTful API used to manage and answer forms.", "main": "index.js", "scripts": { diff --git a/src/api/controllers/form.ts b/src/api/controllers/form.ts index 5990cc2f8d6d5ddfe0e97940444ec183caf94e26..55a163da9eeffae5aa47f62d70ab0747debf1c69 100644 --- a/src/api/controllers/form.ts +++ b/src/api/controllers/form.ts @@ -26,6 +26,7 @@ import { Form, FormOptions} from "../../core/form"; import { FormUpdate, FormUpdateOptions } from "../../core/formUpdate"; import { Response, NextFunction } from "express"; import { Request } from "../apiTypes"; +import { FormAnswer, FormAnswerOptions } from "../../core/formAnswer"; export class FormCtrl { @@ -166,4 +167,35 @@ export class FormCtrl { return; }); } + + public static answerNumber(req: Request, res: Response, next: NextFunction) { + + waterfall([ + (callback: (err: Error, answer?: FormAnswer[]) => void) => { + req.db.answer.readAll(req.params.id, (err: Error, resultAnswer?: FormAnswer[]) => { + if (err) { + callback(err); + return; + } + + let sum: number = 0; + for (const forms of resultAnswer) { + sum += Object.keys(forms.inputAnswers).length + } + + res.status(200).json({ + answerNumber: sum + }); + }); + } + ], (error: Error) => { + if (error) { + res.status(500).json({ + message: "Some error has ocurred. Check error property for details.", + error: error.message + }); + return; + } + }); + } } diff --git a/src/api/controllers/formAnswer.spec.ts b/src/api/controllers/formAnswer.spec.ts index b92c7cf54df2b248a94ff3e1bb124a0438c494bb..cf065c0964cd7a68e1a06ab2d63661871eaaa1b2 100644 --- a/src/api/controllers/formAnswer.spec.ts +++ b/src/api/controllers/formAnswer.spec.ts @@ -107,4 +107,18 @@ describe("API data controller", () => { }) .end(done); }); + + it ("Should respond 200 when reading the number of answers from a form", (done) => { + + request(server) + .get("/answerNumber/1") + .expect(200) + + .expect((res: any) => { + expect(res.body).to.be.an("object"); + expect(res.body.answerNumber).to.be.an("number"); + expect(res.body.answerNumber).to.be.equal(9); + }) + .end(done); + }) }); diff --git a/src/api/controllers/formAnswer.ts b/src/api/controllers/formAnswer.ts index 8234153255c1ae2c42093896c8008cc144275854..8fa21ee29d2cd9cde1c79d8e0f3942d273e9e9d3 100644 --- a/src/api/controllers/formAnswer.ts +++ b/src/api/controllers/formAnswer.ts @@ -115,7 +115,7 @@ export class AnswerCtrl { return; } - res.status(200).json( resultAnswer ) + res.status(200).json(resultAnswer); }); } ], (error: Error) => { diff --git a/src/main.ts b/src/main.ts index 8a913b0f8b4f5869f3f552da491823e30415e1ba..bb6e5e6919407c20950c4f9a15ca1d19517f66ea 100755 --- a/src/main.ts +++ b/src/main.ts @@ -56,6 +56,7 @@ app.use(express.json()); app.get("/form/:id", FormCtrl.read); app.put("/form/:id", tokenValidation(), FormCtrl.update); app.post("/form", tokenValidation(), FormCtrl.write); +app.get("/answerNumber/:id", FormCtrl.answerNumber); app.post("/answer/:id", AnswerCtrl.write); app.get("/answer/:id", tokenValidation(), AnswerCtrl.read); app.post("/user/signUp", UserCtrl.signUp);