From 6699baf54d72253b69379944b32e4d759667d499 Mon Sep 17 00:00:00 2001 From: st196443 Date: Tue, 19 May 2026 16:27:37 +0200 Subject: [PATCH] fix: detection for the favourite drinks problem: canceled drink orders got counted to favourites --- src/express/api/controllers/user.controller.ts | 11 +++++++++++ src/express/api/services/stats.service.ts | 2 +- src/express/api/services/user.service.ts | 5 +++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/express/api/controllers/user.controller.ts b/src/express/api/controllers/user.controller.ts index 34a0d16..5e04aa5 100644 --- a/src/express/api/controllers/user.controller.ts +++ b/src/express/api/controllers/user.controller.ts @@ -16,6 +16,7 @@ class UserController implements IController { private initRoutes(): void { this.router.get('/', requireUser, this.users); this.router.get('/:name', requireUser, this.getUser); + this.router.get('/:name/favourites', requireUser, this.getUserFavourites); this.router.post('/:name', requireAdmin, this.postUser); this.router.patch('/:name', requireAdmin, this.patchUser); this.router.delete('/:name', requireAdmin, this.deleteUser); @@ -43,6 +44,16 @@ class UserController implements IController { res.status(200).json(user); }; + private getUserFavourites = (req: Request, res: Response) => { + const name = req.params.name; + if (name === undefined || name === '') { + res.status(404).end(); + return; + } + const favourites = this.userService.getUserFavourites(name); + res.status(200).json(favourites); + }; + private postUser = (req: Request, res: Response) => { const name = req.params.name; if (name === undefined || name === '') { diff --git a/src/express/api/services/stats.service.ts b/src/express/api/services/stats.service.ts index 7e80e47..c0d6144 100644 --- a/src/express/api/services/stats.service.ts +++ b/src/express/api/services/stats.service.ts @@ -24,7 +24,7 @@ class StatsService { } getTopBeverages(): Beverage[] { - const sql = this.dbService.prepare('SELECT b.name, b.stock, b.price FROM (SELECT beverage, COUNT(beverage) AS count FROM History WHERE beverage != \'\' GROUP BY beverage ORDER BY count DESC) t INNER JOIN Beverages b ON t.beverage = b.name LIMIT 5;'); + const sql = this.dbService.prepare('SELECT b.name, b.stock, b.price FROM (SELECT beverage, COUNT(beverage) AS count FROM History WHERE beverage != \'\' AND reason = beverage GROUP BY beverage ORDER BY count DESC) t INNER JOIN Beverages b ON t.beverage = b.name LIMIT 5;'); return sql.all(); } diff --git a/src/express/api/services/user.service.ts b/src/express/api/services/user.service.ts index b56f4df..77ff3c7 100644 --- a/src/express/api/services/user.service.ts +++ b/src/express/api/services/user.service.ts @@ -27,6 +27,11 @@ class UserService { return sql.get(name); } + getUserFavourites(name: string): {name: string, count: number}[] { + const sql = this.dbService.prepare('SELECT beverage as name, COUNT(beverage) as count FROM History WHERE user = ? AND beverage != \'\' AND reason = beverage GROUP BY beverage ORDER BY count DESC LIMIT 5;'); + return sql.all(name) as {name: string, count: number}[]; + } + createUser(name: string): void { const sql = this.dbService.prepare('INSERT INTO Users (name) VALUES (?);'); sql.run(name);