From 31204d4327bad8fe7b43d55a09044c31138213ee Mon Sep 17 00:00:00 2001 From: Douglas Barone Date: Tue, 20 Jun 2023 09:13:28 -0400 Subject: [PATCH] Printer CRUD OK --- .../migration.sql | 1 + prisma/schema.prisma | 1 + prisma/seed.ts | 10 +-- src/controllers/PrinterController.ts | 64 +++++++++++++++++++ src/cron.ts | 0 ...iddleware.ts => populateUserMiddleware.ts} | 2 +- src/server.ts | 6 +- 7 files changed, 76 insertions(+), 8 deletions(-) rename prisma/migrations/{20230619174010_init => 20230620130909_init}/migration.sql (98%) create mode 100644 src/controllers/PrinterController.ts create mode 100644 src/cron.ts rename src/middleware/{injectUserMiddleware.ts => populateUserMiddleware.ts} (93%) diff --git a/prisma/migrations/20230619174010_init/migration.sql b/prisma/migrations/20230620130909_init/migration.sql similarity index 98% rename from prisma/migrations/20230619174010_init/migration.sql rename to prisma/migrations/20230620130909_init/migration.sql index de74d18..37152b2 100644 --- a/prisma/migrations/20230619174010_init/migration.sql +++ b/prisma/migrations/20230620130909_init/migration.sql @@ -22,6 +22,7 @@ CREATE TABLE "User" ( CREATE TABLE "Printer" ( "id" SERIAL NOT NULL, "friendlyName" TEXT, + "location" TEXT, "serialNumber" TEXT, "hostname" TEXT, "ip" TEXT NOT NULL, diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 804e9e1..fc37caa 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -34,6 +34,7 @@ model Printer { id Int @id @default(autoincrement()) friendlyName String? + location String? serialNumber String? @unique hostname String? diff --git a/prisma/seed.ts b/prisma/seed.ts index 69708f1..4dd5251 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -6,31 +6,31 @@ async function main() { await prisma.printer.createMany({ data: [ { - friendlyName: 'p04', + friendlyName: 'P04', ip: '10.7.0.134', model: 'm3655idn', serialNumber: 'R4P1478461' }, { - friendlyName: 'p05', + friendlyName: 'P05', ip: '10.7.0.135', model: 'm2040dn', serialNumber: 'VR91483974' }, { - friendlyName: 'p06', + friendlyName: 'P06', ip: '10.7.0.136', model: 'm2040dn', serialNumber: 'VR91586433' }, { - friendlyName: 'p07', + friendlyName: 'P07', ip: '10.7.0.137', model: 'm2040dn', serialNumber: 'VR91586432' }, { - friendlyName: 'p08', + friendlyName: 'P08', ip: '10.7.0.138', model: 'p6235cdn', serialNumber: 'RCG0304510' diff --git a/src/controllers/PrinterController.ts b/src/controllers/PrinterController.ts new file mode 100644 index 0000000..1fd7c8d --- /dev/null +++ b/src/controllers/PrinterController.ts @@ -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 diff --git a/src/cron.ts b/src/cron.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/middleware/injectUserMiddleware.ts b/src/middleware/populateUserMiddleware.ts similarity index 93% rename from src/middleware/injectUserMiddleware.ts rename to src/middleware/populateUserMiddleware.ts index 66b78ee..8e2c8f1 100644 --- a/src/middleware/injectUserMiddleware.ts +++ b/src/middleware/populateUserMiddleware.ts @@ -12,7 +12,7 @@ function getToken(req: Request) { return token } -export async function injectUserMiddleware( +export async function populateUserMiddleware( req: Request, res: Response, next: NextFunction diff --git a/src/server.ts b/src/server.ts index 815bc62..eec0709 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,19 +1,21 @@ import express, { Request, Response } from 'express' import bodyParser from 'body-parser' -import { injectUserMiddleware } from './middleware/injectUserMiddleware.js' +import { populateUserMiddleware } from './middleware/populateUserMiddleware.js' import { authMiddleware } from './middleware/authMiddleware.js' import LoginRouter from './controllers/LoginController.js' +import PrinterRouter from './controllers/PrinterController.js' export const app = express() app.use('/', express.static('public')) app.use(bodyParser.json()) -app.use(injectUserMiddleware) +app.use(populateUserMiddleware) app.use('/api/login', LoginRouter) +app.use('/api/printer', PrinterRouter) app.get('/api/me', authMiddleware, async (req: Request, res: Response) => res.json(res.locals.user)