Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 15 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,28 @@

### Endpoints Available

#### Questionnaire

- Get All: `GET /questionnaire`
- Create: `POST /questionnaire`
- Update: `PATCH /questionnaire/:id`
- Delete: `DELETE /questionnaire/:id`

#### Usecases

- Get All: ```GET /usecases```
- Create: ```POST /usecases```
- Update: ```PATCH /usecases/:id```
- Delete: ```DELETE /usecases/:id```
- Get All: `GET /usecases`
- Create: `POST /usecases`
- Update: `PATCH /usecases/:id`
- Delete: `DELETE /usecases/:id`

#### Usecases => Personas
- Add New: ```POST /usecases/:id/persona```
- Update: ```PATCH /usecases/:id/persona/:personaId```
- Delete: ```DELETE /usecases/:id/persona/:personaId```


- Add New: `POST /usecases/:id/persona`
- Update: `PATCH /usecases/:id/persona/:personaId`
- Delete: `DELETE /usecases/:id/persona/:personaId`

### Setup

```
npm install
```
Expand Down
6 changes: 5 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require('dotenv').config();

const cors = require('cors')
const express = require('express');
const mongoose = require('mongoose');
const mongoString = process.env.DATABASE_URL;
Expand All @@ -16,12 +17,14 @@ database.once('connected', () => {
})

const usecases = require('./src/routes/usecases');
const questionnaire = require('./src/routes/questionnaire');
// Add other service routes here. e.g. questionaires
// const usecases = require('./src/routes/usecases');

const app = express();
const PORT = process.env.PORT || 3000;
app.use(express.json());
app.use(cors());

// For testing purposes
app.get("/", (req, res) => {
Expand All @@ -32,4 +35,5 @@ app.listen(PORT, () => {
console.log(`API is listening on port ${PORT}`);
});

app.use('/api/usecases/', usecases)
app.use('/api/usecases/', usecases)
app.use('/api/questionnaire/', questionnaire)
16 changes: 15 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"dotenv": "^16.0.1",
"express": "^4.18.1",
"mongoose": "^6.3.5",
"nodemon": "^2.0.16"
"nodemon": "^2.0.16",
"uuid": "^8.3.2"
}
}
49 changes: 49 additions & 0 deletions src/controllers/intent.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
const Usecase = require('../models/usecase');

module.exports.add = async (req, res) => {
try {
const usecase = await Usecase.findById(req.params.id);
let persona = usecase.personas.id(req.params.personaId);

persona.intents.push(req.body)

const save = await usecase.save();
res.status(200).json(save)
}
catch (error) {
res.status(400).json({ message: error.message })
}
}

module.exports.delete = async (req, res) => {
try {
const usecase = await Usecase.findById(req.params.id);
let persona = usecase.personas.id(req.params.personaId);

persona.intents = persona.intents.filter((intent) => intent.id != req.params.intentId)

const save = await usecase.save();
res.status(200).json(save)
}
catch (error) {
res.status(400).json({ message: error.message })
}
}

module.exports.update = async (req, res) => {
try {
const usecase = await Usecase.findById(req.params.id);
let persona = usecase.personas.id(req.params.personaId);

const intentIndex = persona.intents.map((e) => e.id).indexOf(req.params.intentId);

persona.intents[intentIndex] = req.body;


const save = await usecase.save();
res.status(200).json(save)
}
catch (error) {
res.status(400).json({ message: error.message })
}
}
1 change: 1 addition & 0 deletions src/controllers/persona.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ module.exports.updateDetails = async (req, res) => {
console.log("personaId", personaId)

let persona = usecase.personas.id(personaId);
console.log(persona)
persona.details = req.body;

const save = await usecase.save();
Expand Down
61 changes: 61 additions & 0 deletions src/controllers/questionnaire.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
const questionnaire = require("../models/questionnaire");

module.exports.create = async (req, res) => {
const data = new questionnaire(req.body);

try {
const result = await data.save();
res.status(200).json(result);
} catch (error) {
res
.status(400)
.send({
message:
error.message ||
"Some error occurred while creating the questionnaire.",
});
}
};

module.exports.findAll = async (req, res) => {
try {
const data = await questionnaire.find();
res.json(data);
} catch (error) {
res.status(500).json({ message: error.message });
}
};

module.exports.findOne = async (req, res) => {
try {
const data = await questionnaire.findById(req.params.id);
res.json(data);
} catch (error) {
res.status(500).json({ message: error.message });
}
};

module.exports.update = async (req, res) => {
try {
const data = await questionnaire.findByIdAndUpdate(
req.params.id,
req.body
);
res.send(`Questionnaire ${data._id} has been updated.`);
} catch (error) {
res.status(500).send({
message: "Error updating questionnaire with id=" + req.params.id,
});
}
};

module.exports.remove = async (req, res) => {
try {
const data = await questionnaire.findByIdAndRemove(req.params.id);
res.send(`Questionnaire ${data._id} has been deleted.`);
} catch (error) {
res.status(500).json({
message: "Could not delete Questionnaire with id=" + req.params.id,
});
}
};
18 changes: 17 additions & 1 deletion src/controllers/usecase.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ const Usecase = require('../models/usecase');

module.exports.create = async (req, res) => {
const data = new Usecase(req.body)

try {
const dataToSave = await data.save();
res.status(200).json(dataToSave)
Expand Down Expand Up @@ -39,6 +38,7 @@ module.exports.update = async (req, res) => {
}

module.exports.updateSettings = async (req, res) => {
console.log("test")
try {
const id = req.params.id;
const updatedData = { "settings": req.body.settings };
Expand All @@ -54,6 +54,7 @@ module.exports.updateSettings = async (req, res) => {
}
}
catch (error) {
console.log(error)
res.status(400).json({ message: error.message })
}
}
Expand Down Expand Up @@ -81,4 +82,19 @@ module.exports.delete = async (req, res) => {
}
}

module.exports.updatePublish = async (req, res) => {
try {
const id = req.params.id;
const data = await Usecase.findById(id)

data.published = req.body.status

data.save()

res.send(`Publish state of ${data.name} has been updated.`)
}
catch (error) {
res.status(400).json({ message: error.message })
}
}

25 changes: 25 additions & 0 deletions src/models/questionnaire.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const mongoose = require('mongoose');

const questionnaireschema = new mongoose.Schema({
_id: String,
name: String,
dimension: String,
questions: [{
id: String,
content: String,
responseType: String,
dimension: String,
answer: [String],
responseOptions: [{
val: String,
}],
required: Boolean,
completed: Boolean,
validators: {
min: Number,
max: Number,
}
}],
}, { strict: false, timestamps: true })

module.exports = mongoose.model('questionnaires', questionnaireschema);
3 changes: 3 additions & 0 deletions src/models/usecase.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ const usecaseSchema = new mongoose.Schema({
stats: {
type: Object
},
published: {
type: Boolean
},
personas: {
type: [personaSchema]
}
Expand Down
16 changes: 16 additions & 0 deletions src/routes/questionnaire.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const express = require('express');
const controller = require('../controllers/questionnaire');

const router = express.Router();

router.get('/', controller.findAll);

router.get('/:id', controller.findOne);

router.post('/', controller.create);

router.delete('/:id', controller.remove);

router.patch('/:id', controller.update);

module.exports = router;
15 changes: 15 additions & 0 deletions src/routes/usecases.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const express = require('express');
const router = express.Router()
const usecasectrl = require('../controllers/usecase');
const personactrl = require('../controllers/persona');
const intentctrl = require('../controllers/intent');

//----------------------------------------------------
// Usecase Related Endpoints
Expand All @@ -22,6 +23,9 @@ router.get('/', usecasectrl.list);
// Update Settings
router.patch('/:id/settings', usecasectrl.updateSettings);

// Update published state
router.patch('/:id/publish', usecasectrl.updatePublish);

// Delete by ID
router.delete('/:id', usecasectrl.delete);

Expand All @@ -39,4 +43,15 @@ router.patch('/:id/persona/:personaId', personactrl.updateDetails);
// Delete Persona Details
router.delete('/:id/persona/:personaId', personactrl.delete);


//----------------------------------------------------
// Intent Related Endpoints
//---------------------------------------------------

// Add intent to Persona
router.post('/:id/persona/:personaId/intent', intentctrl.add);
router.delete('/:id/persona/:personaId/intent/:intentId', intentctrl.delete);
router.patch('/:id/persona/:personaId/intent/:intentId', intentctrl.update);


module.exports = router;