Printer CRUD OK

This commit is contained in:
Douglas Barone 2023-06-20 09:13:28 -04:00
parent 220fc48b35
commit 31204d4327
7 changed files with 76 additions and 8 deletions

View File

@ -22,6 +22,7 @@ CREATE TABLE "User" (
CREATE TABLE "Printer" ( CREATE TABLE "Printer" (
"id" SERIAL NOT NULL, "id" SERIAL NOT NULL,
"friendlyName" TEXT, "friendlyName" TEXT,
"location" TEXT,
"serialNumber" TEXT, "serialNumber" TEXT,
"hostname" TEXT, "hostname" TEXT,
"ip" TEXT NOT NULL, "ip" TEXT NOT NULL,

View File

@ -34,6 +34,7 @@ model Printer {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
friendlyName String? friendlyName String?
location String?
serialNumber String? @unique serialNumber String? @unique
hostname String? hostname String?

View File

@ -6,31 +6,31 @@ async function main() {
await prisma.printer.createMany({ await prisma.printer.createMany({
data: [ data: [
{ {
friendlyName: 'p04', friendlyName: 'P04',
ip: '10.7.0.134', ip: '10.7.0.134',
model: 'm3655idn', model: 'm3655idn',
serialNumber: 'R4P1478461' serialNumber: 'R4P1478461'
}, },
{ {
friendlyName: 'p05', friendlyName: 'P05',
ip: '10.7.0.135', ip: '10.7.0.135',
model: 'm2040dn', model: 'm2040dn',
serialNumber: 'VR91483974' serialNumber: 'VR91483974'
}, },
{ {
friendlyName: 'p06', friendlyName: 'P06',
ip: '10.7.0.136', ip: '10.7.0.136',
model: 'm2040dn', model: 'm2040dn',
serialNumber: 'VR91586433' serialNumber: 'VR91586433'
}, },
{ {
friendlyName: 'p07', friendlyName: 'P07',
ip: '10.7.0.137', ip: '10.7.0.137',
model: 'm2040dn', model: 'm2040dn',
serialNumber: 'VR91586432' serialNumber: 'VR91586432'
}, },
{ {
friendlyName: 'p08', friendlyName: 'P08',
ip: '10.7.0.138', ip: '10.7.0.138',
model: 'p6235cdn', model: 'p6235cdn',
serialNumber: 'RCG0304510' serialNumber: 'RCG0304510'

View File

@ -0,0 +1,64 @@
import { Request, Response, Router } from 'express'
import { hasRolesMiddleware } from '../middleware/hasRolesMiddleware.js'
import { prisma } from '../prisma.js'
const router = Router()
class PrinterController {
static async index(req: Request, res: Response) {
const printers = await prisma.printer.findMany()
res.json(printers)
}
static async show(req: Request, res: Response) {
const { id } = req.params
// 30 days
const gte = new Date(Date.now() - 1000 * 60 * 60 * 24 * 30)
const printer = await prisma.printer.findUnique({
where: { id: Number(id) },
include: {
PrinterStatus: {
where: {
createdAt: {
gte
}
}
}
}
})
res.json(printer)
}
static async edit(req: Request, res: Response) {
const { id } = req.params
const { friendlyName, ip, location } = req.body
const printer = await prisma.printer.update({
where: { id: Number(id) },
data: { friendlyName, ip, location }
})
res.json(printer)
}
static async delete(req: Request, res: Response) {
const { id } = req.params
await prisma.printer.delete({ where: { id: Number(id) } })
res.json({ message: 'Printer deleted' })
}
}
router.use(hasRolesMiddleware(['ADMIN', 'INSPECTOR']))
router.get('/', PrinterController.index)
router.get('/:id', PrinterController.show)
router.put('/:id', PrinterController.edit)
export default router

0
src/cron.ts Normal file
View File

View File

@ -12,7 +12,7 @@ function getToken(req: Request) {
return token return token
} }
export async function injectUserMiddleware( export async function populateUserMiddleware(
req: Request, req: Request,
res: Response, res: Response,
next: NextFunction next: NextFunction

View File

@ -1,19 +1,21 @@
import express, { Request, Response } from 'express' import express, { Request, Response } from 'express'
import bodyParser from 'body-parser' import bodyParser from 'body-parser'
import { injectUserMiddleware } from './middleware/injectUserMiddleware.js' import { populateUserMiddleware } from './middleware/populateUserMiddleware.js'
import { authMiddleware } from './middleware/authMiddleware.js' import { authMiddleware } from './middleware/authMiddleware.js'
import LoginRouter from './controllers/LoginController.js' import LoginRouter from './controllers/LoginController.js'
import PrinterRouter from './controllers/PrinterController.js'
export const app = express() export const app = express()
app.use('/', express.static('public')) app.use('/', express.static('public'))
app.use(bodyParser.json()) app.use(bodyParser.json())
app.use(injectUserMiddleware) app.use(populateUserMiddleware)
app.use('/api/login', LoginRouter) app.use('/api/login', LoginRouter)
app.use('/api/printer', PrinterRouter)
app.get('/api/me', authMiddleware, async (req: Request, res: Response) => app.get('/api/me', authMiddleware, async (req: Request, res: Response) =>
res.json(res.locals.user) res.json(res.locals.user)