99 lines
3.1 KiB
TypeScript
99 lines
3.1 KiB
TypeScript
import { Router } from "express";
|
|
import { Perms, adminPerm } from "@/utility";
|
|
import capability, { Features } from "@/helpers/capability";
|
|
import usettings from "@/helpers/usettings";
|
|
import Grade from "@schemas/Grade";
|
|
import User from "@/schemas/User";
|
|
import attendence from "@/helpers/attendence";
|
|
|
|
const cleanRouter = Router()
|
|
cleanRouter.use(adminPerm(Perms.Clean))
|
|
cleanRouter.use(capability.mw(Features.Clean))
|
|
|
|
cleanRouter.get("/:date([0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?([Zz]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)/:room", async (req, res) => {
|
|
res.send(await Grade.findOne({
|
|
date: new Date(req.params.date),
|
|
room: req.params.room
|
|
}))
|
|
})
|
|
|
|
cleanRouter.post("/", async (req, res) => {
|
|
let obj = {
|
|
...req.body,
|
|
date: new Date(req.body.date),
|
|
gradeDate: new Date(),
|
|
}
|
|
await Grade.findOneAndReplace({
|
|
date: new Date(req.body.date),
|
|
room: req.body.room,
|
|
}, obj, {upsert: true})
|
|
res.send({status: 200})
|
|
})
|
|
|
|
cleanRouter.get("/summary/:start/:stop", async (req, res) => {
|
|
var data = await Grade.find({
|
|
date: {
|
|
$gte: new Date(req.params.start),
|
|
$lte: new Date(req.params.stop)
|
|
}
|
|
})
|
|
data = data.map(v => v.toJSON())
|
|
var byRoom: {[room: string]: any[]} = {}
|
|
data.forEach((v) => {
|
|
let roomarray = byRoom[v.room] ? byRoom[v.room] : [];
|
|
byRoom[v.room] = [...roomarray, {...v, room: undefined}]
|
|
})
|
|
var stat: {room: string, avg: number}[] = []
|
|
for (let i in byRoom) {
|
|
var sum: number = 0
|
|
for (let j of byRoom[i]) {
|
|
sum += j.grade
|
|
}
|
|
let avrg = sum/byRoom[i].length
|
|
stat.push({room: i, avg: avrg})
|
|
}
|
|
res.send(stat)
|
|
})
|
|
|
|
cleanRouter.delete("/:id", async (req, res) => {
|
|
if (await Grade.findByIdAndDelete(req.params.id)) {
|
|
res.send({status: 200})
|
|
} else {
|
|
res.sendStatus(500)
|
|
}
|
|
})
|
|
|
|
cleanRouter.get('/config', (req, res) => {
|
|
res.send({
|
|
rooms: usettings.settings.rooms,
|
|
things: usettings.settings.cleanThings
|
|
})
|
|
})
|
|
|
|
cleanRouter.get('/attendence/:room', async (req, res) => {
|
|
res.send({
|
|
users: await User.find({room: req.params.room}, {fname: true, surname: true, _id: true}),
|
|
attendence: attendence.getRoom(req.params.room)
|
|
})
|
|
})
|
|
|
|
cleanRouter.post('/attendence/:room', async (req, res) => {
|
|
attendence.setRoom(req.params.room, req.body)
|
|
res.send({status: 200})
|
|
})
|
|
|
|
cleanRouter.delete('/attendence/:room', async (req, res) => {
|
|
attendence.clearRoom(req.params.room)
|
|
res.send({status: 200})
|
|
})
|
|
|
|
cleanRouter.get('/attendenceSummary', async (req, res) => {
|
|
var allRooms = usettings.settings.rooms
|
|
var graded = (await Grade.find({date: new Date().setUTCHours(24,0,0,0)})).map(v => v.room)
|
|
var ungraded = allRooms.filter(x => !graded.includes(x))
|
|
var summary = attendence.summary()
|
|
var unchecked: typeof summary = ungraded.filter(x => !summary.map(v => v.room).includes(x)).map(v => ({room: v, hours: [] as string[], notes: "Nie sprawdzono", auto: true}))
|
|
res.send([...summary, ...unchecked])
|
|
})
|
|
|
|
export {cleanRouter} |