Get status

This commit is contained in:
Douglas Barone 2023-06-20 15:45:35 -04:00
parent d02c580d1b
commit dff6905050
3 changed files with 38 additions and 4 deletions

View File

@ -3,6 +3,7 @@ import { Request, Response, Router } from 'express'
import { hasRolesMiddleware } from '../middlewares/hasRolesMiddleware.js'
import { prisma } from '../prisma.js'
import { PrinterStatusService } from '../services/PrinterStatusService.js'
import { distributedCopy } from '../utils/distributedCopy.js'
const router = Router()
@ -15,9 +16,9 @@ class PrinterController {
static async show(req: Request, res: Response) {
const { id } = req.params
const { take, minutes = 43200 } = req.query
// 30 days
const gte = new Date(Date.now() - 1000 * 60 * 60 * 24 * 30)
const gte = new Date(Date.now() - 1000 * 60 * Number(minutes))
const printer = await prisma.printer.findUnique({
where: { id: Number(id) },
@ -27,12 +28,21 @@ class PrinterController {
createdAt: {
gte
}
},
orderBy: {
createdAt: 'desc'
}
}
}
})
res.json(printer)
if (printer)
res.json({
...printer,
status: distributedCopy(printer.status, Number(take))
})
else res.status(400).json({ error: 'Printer not found' })
}
static async create(req: Request, res: Response) {

View File

@ -16,5 +16,6 @@ class PrinterStatusController {
}
}
router.get('/update', PrinterStatusController.update)
router.post('/update', PrinterStatusController.update)
export default router

View File

@ -0,0 +1,23 @@
/**
* Retrieve a fixed number of elements from an array, evenly distributed but
* always including the first and last elements.
*
* @param {Array} originalArray - The array to operate on.
* @param {number} take - The number of elements to extract.
* @returns {Array}
*/
export function distributedCopy(originalArray: Array<any>, take: number = 10) {
if (originalArray.length <= take) return [...originalArray]
const newArray = [originalArray[0]]
const interval = (originalArray.length - 2) / (take - 2)
for (let i = 1; i < take - 1; i++)
newArray.push(originalArray[Math.floor(interval * i)])
newArray.push(originalArray[originalArray.length - 1])
return newArray
}