From 1c461abfd19737dd2a66ee88d94d343533211263 Mon Sep 17 00:00:00 2001 From: Richard Fernando Heise Ferreira <rfhf19@inf.ufpr.br> Date: Thu, 9 Apr 2020 09:12:16 -0300 Subject: [PATCH] Issue #72: Add method to get form answers number Signed-off-by: Richard Heise <rfhf19@inf.ufpr.br> --- CHANGELOG.md | 6 +++++ package.json | 2 +- src/api/controllers/form.ts | 32 ++++++++++++++++++++++++++ src/api/controllers/formAnswer.spec.ts | 14 +++++++++++ src/api/controllers/formAnswer.ts | 2 +- src/main.ts | 1 + 6 files changed, 55 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0449a75..523a244 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 a8160ee..9812c02 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 5990cc2..55a163d 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 b92c7cf..cf065c0 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 8234153..8fa21ee 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 8a913b0..bb6e5e6 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); -- GitLab