Get status
This commit is contained in:
parent
d02c580d1b
commit
dff6905050
|
@ -3,6 +3,7 @@ import { Request, Response, Router } from 'express'
|
||||||
import { hasRolesMiddleware } from '../middlewares/hasRolesMiddleware.js'
|
import { hasRolesMiddleware } from '../middlewares/hasRolesMiddleware.js'
|
||||||
import { prisma } from '../prisma.js'
|
import { prisma } from '../prisma.js'
|
||||||
import { PrinterStatusService } from '../services/PrinterStatusService.js'
|
import { PrinterStatusService } from '../services/PrinterStatusService.js'
|
||||||
|
import { distributedCopy } from '../utils/distributedCopy.js'
|
||||||
|
|
||||||
const router = Router()
|
const router = Router()
|
||||||
|
|
||||||
|
@ -15,9 +16,9 @@ class PrinterController {
|
||||||
|
|
||||||
static async show(req: Request, res: Response) {
|
static async show(req: Request, res: Response) {
|
||||||
const { id } = req.params
|
const { id } = req.params
|
||||||
|
const { take, minutes = 43200 } = req.query
|
||||||
|
|
||||||
// 30 days
|
const gte = new Date(Date.now() - 1000 * 60 * Number(minutes))
|
||||||
const gte = new Date(Date.now() - 1000 * 60 * 60 * 24 * 30)
|
|
||||||
|
|
||||||
const printer = await prisma.printer.findUnique({
|
const printer = await prisma.printer.findUnique({
|
||||||
where: { id: Number(id) },
|
where: { id: Number(id) },
|
||||||
|
@ -27,12 +28,21 @@ class PrinterController {
|
||||||
createdAt: {
|
createdAt: {
|
||||||
gte
|
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) {
|
static async create(req: Request, res: Response) {
|
||||||
|
|
|
@ -16,5 +16,6 @@ class PrinterStatusController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
router.get('/update', PrinterStatusController.update)
|
router.post('/update', PrinterStatusController.update)
|
||||||
|
|
||||||
export default router
|
export default router
|
||||||
|
|
23
src/utils/distributedCopy.ts
Normal file
23
src/utils/distributedCopy.ts
Normal 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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user