Adde schema and route information for all entities.
This commit is contained in:
153
server/src/api/routes/ActivityRoutes.js
Normal file
153
server/src/api/routes/ActivityRoutes.js
Normal file
@@ -0,0 +1,153 @@
|
||||
import passport from 'passport'
|
||||
import createError from 'http-errors'
|
||||
import autobind from 'autobind-decorator'
|
||||
|
||||
@autobind
|
||||
export class ActivityRoutes {
|
||||
constructor(container) {
|
||||
const app = container.app
|
||||
|
||||
this.log = container.log
|
||||
this.db = container.db
|
||||
this.mq = container.mq
|
||||
this.ws = container.ws
|
||||
|
||||
app.route('/activities')
|
||||
.get(passport.authenticate('bearer', { session: false }), this.listActivitys)
|
||||
.post(passport.authenticate('bearer', { session: false }), this.createActivity)
|
||||
.put(passport.authenticate('bearer', { session: false }), this.updateActivity)
|
||||
|
||||
app.route('/activities/:_id([a-f0-9]{24})')
|
||||
.get(passport.authenticate('bearer', { session: false }), this.getActivity)
|
||||
.delete(passport.authenticate('bearer', { session: false }), this.deleteActivity)
|
||||
}
|
||||
|
||||
listActivitys(req, res, next) {
|
||||
const Activity = this.db.Activity
|
||||
let limit = req.params.limit || 20
|
||||
let skip = req.params.skip || 0
|
||||
let partial = !!req.params.partial
|
||||
let branch = req.params.branch
|
||||
let query = {}
|
||||
|
||||
if (branch) {
|
||||
query.branch = branch
|
||||
}
|
||||
|
||||
Activity.count({}).then((total) => {
|
||||
let activities = []
|
||||
let cursor = Activity.find(query).limit(limit).skip(skip).cursor().map((doc) => {
|
||||
return doc.toClient(partial)
|
||||
})
|
||||
|
||||
cursor.on('data', (doc) => {
|
||||
activities.push(doc)
|
||||
})
|
||||
cursor.on('end', () => {
|
||||
res.json({
|
||||
total: total,
|
||||
offset: skip,
|
||||
count: activities.length,
|
||||
items: activities
|
||||
})
|
||||
})
|
||||
cursor.on('error', (err) => {
|
||||
next(createError.InternalServerError(err.message))
|
||||
})
|
||||
}).catch((err) => {
|
||||
next(createError.InternalServerError(err.message))
|
||||
})
|
||||
}
|
||||
|
||||
createActivity(req, res, next) {
|
||||
const role = req.user.role
|
||||
|
||||
// If user's role is not Executive or Administrator, return an error
|
||||
if (role !== 'executive' && role !== 'administrator') {
|
||||
return next(new createError.Forbidden())
|
||||
}
|
||||
|
||||
// Create a new Activity template then assign it to a value in the req.body
|
||||
const Activity = this.db.Activity
|
||||
let activity = new Activity(req.body)
|
||||
|
||||
// Save the activity (with promise) - If it doesnt, catch and throw error
|
||||
activity.save().then((newActivity) => {
|
||||
res.json(newActivity.toClient())
|
||||
}).catch((err) => {
|
||||
next(createError.InternalServerError(err.message))
|
||||
})
|
||||
}
|
||||
|
||||
updateActivity(req, res, next) {
|
||||
const role = req.user.role
|
||||
|
||||
// If user's role is not Executive or Administrator, return an error
|
||||
if (role !== 'executive' && role !== 'administrator') {
|
||||
return new createError.Forbidden()
|
||||
}
|
||||
|
||||
// Do this here because Mongoose will add it automatically otherwise
|
||||
if (!req.body._id) {
|
||||
return next(createError.BadRequest('No _id given in body'))
|
||||
}
|
||||
|
||||
let Activity = this.db.Activity
|
||||
let activityUpdates = null
|
||||
|
||||
try {
|
||||
activityUpdates = new Activity(req.body)
|
||||
} catch (err) {
|
||||
return next(createError.BadRequest('Invalid data'))
|
||||
}
|
||||
|
||||
Activity.findById(activityUpdates._id).then((foundActivity) => {
|
||||
if (!foundActivity) {
|
||||
return next(createError.NotFound(`Activity with _id ${_id} was not found`))
|
||||
}
|
||||
foundActivity.merge(activityUpdates)
|
||||
return foundActivity.save()
|
||||
}).then((savedActivity) => {
|
||||
res.json(savedActivity.toClient())
|
||||
}).catch((err) => {
|
||||
next(createError.InternalServerError(err.message))
|
||||
})
|
||||
}
|
||||
|
||||
getActivity(req, res, next) {
|
||||
const Activity = this.db.Activity
|
||||
const _id = req.params._id
|
||||
|
||||
Activity.findById(_id).then((activity) => {
|
||||
if (!activity) {
|
||||
return next(createError.NotFound(`Activity with _id ${_id} not found`))
|
||||
}
|
||||
|
||||
res.json(activity.toClient())
|
||||
}).catch((err) => {
|
||||
next(createError.InternalServerError(err.message))
|
||||
})
|
||||
}
|
||||
|
||||
deleteActivity(req, res, next) {
|
||||
const role = req.user.role
|
||||
|
||||
// If user's role is not Executive or Administrator, return an error
|
||||
if (role !== 'executive' && role !== 'administrator') {
|
||||
return new createError.Forbidden()
|
||||
}
|
||||
|
||||
const Activity = this.db.Activity
|
||||
const _id = req.params._id
|
||||
|
||||
Activity.remove({ _id }).then((activity) => {
|
||||
if (!activity) {
|
||||
return next(createError.NotFound(`Activity with _id ${_id} not found`))
|
||||
}
|
||||
|
||||
res.json({})
|
||||
}).catch((err) => {
|
||||
next(createError.InternalServerError(err.message))
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user