From 7b9c6ae5b80a3a8874a139a86ad3b0a89b5fa7562fcd516154b9dea6e4a2336c Mon Sep 17 00:00:00 2001
From: Philipp Schweizer <Philipp.Schw@directbox.com>
Date: Sat, 11 Jan 2025 12:13:34 +0100
Subject: [PATCH] feat: added controller for new services

---
 server/src/controller/ttnController.ts        | 14 ++++----
 .../src/controller/wifiLocationController.ts  | 32 +++++++++++++++++
 .../wifiLocationHistoryController.ts          | 35 +++++++++++++++++++
 server/src/index.ts                           |  6 +++-
 .../wifiLocationHistoryRepository.ts          | 17 ---------
 .../services/wifiLocationHistoryService.ts    | 18 ++++------
 6 files changed, 86 insertions(+), 36 deletions(-)
 create mode 100644 server/src/controller/wifiLocationController.ts
 create mode 100644 server/src/controller/wifiLocationHistoryController.ts

diff --git a/server/src/controller/ttnController.ts b/server/src/controller/ttnController.ts
index 0b0dbcc..28c88b1 100644
--- a/server/src/controller/ttnController.ts
+++ b/server/src/controller/ttnController.ts
@@ -1,5 +1,7 @@
 import express, { Request, Response } from "express";
+import { StatusCodes } from "http-status-codes";
 import { container } from "tsyringe";
+import { authenticateHeader } from "../middleware/authentificationMiddleware";
 import { validateData } from "../middleware/validationMiddleware";
 import { TtnMessage } from "../models/ttnMessage";
 import { LocationService } from "../services/locationService";
@@ -7,8 +9,6 @@ import { LpTtnEndDeviceUplinksService } from "../services/lpTtnEndDeviceUplinksS
 import { TtnGatewayReceptionService } from "../services/ttnGatewayReceptionService";
 import { WifiScanService } from "../services/wifiScanService";
 import { ttnMessageValidator } from "../validation/ttn/ttnMessageValidation";
-import { authenticateHeader } from "../middleware/authentificationMiddleware";
-import { StatusCodes } from "http-status-codes";
 
 const lpTtnEndDeviceUplinksService = container.resolve(
   LpTtnEndDeviceUplinksService
@@ -94,9 +94,9 @@ router.post(
           gnss:
             gnnsLocation.latitude && gnnsLocation.longitude
               ? {
-                latitude: gnnsLocation.latitude,
-                longitude: gnnsLocation.longitude,
-              }
+                  latitude: gnnsLocation.latitude,
+                  longitude: gnnsLocation.longitude,
+                }
               : undefined,
         });
       };
@@ -104,7 +104,9 @@ router.post(
       res.status(StatusCodes.OK).send();
     } catch (error) {
       console.log(error);
-      res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: "Error creating uplink" });
+      res
+        .status(StatusCodes.INTERNAL_SERVER_ERROR)
+        .json({ error: "Error creating uplink" });
     }
   }
 );
diff --git a/server/src/controller/wifiLocationController.ts b/server/src/controller/wifiLocationController.ts
new file mode 100644
index 0000000..7773ee6
--- /dev/null
+++ b/server/src/controller/wifiLocationController.ts
@@ -0,0 +1,32 @@
+import express, { Request, Response } from "express";
+import { container } from "tsyringe";
+import { WifiLocationService } from "../services/wifiLocationService";
+
+const wifiLocationService = container.resolve(WifiLocationService);
+const router = express.Router();
+
+router.get("/", async (req: Request, res: Response) => {
+  try {
+    const wifiLocations = await wifiLocationService.getAllWifiLocations();
+    res.status(200).json(wifiLocations);
+  } catch (error) {
+    console.log(error);
+    res.status(500).json({ error: "Error retrieving wifi location" });
+  }
+});
+
+router.delete("/:id", async (req: Request, res: Response) => {
+  try {
+    const { id } = req.params;
+    const deleted = await wifiLocationService.deleteWifiLocation(id);
+    if (!deleted) {
+      res.status(404).json({ error: "Wifi Location not found" });
+      return;
+    }
+    res.status(204).send();
+  } catch (error) {
+    res.status(500).json({ error: "Error deleting wifi location" });
+  }
+});
+
+export default router;
diff --git a/server/src/controller/wifiLocationHistoryController.ts b/server/src/controller/wifiLocationHistoryController.ts
new file mode 100644
index 0000000..5d97416
--- /dev/null
+++ b/server/src/controller/wifiLocationHistoryController.ts
@@ -0,0 +1,35 @@
+import express, { Request, Response } from "express";
+import { container } from "tsyringe";
+import { WifiLocationHistoryService } from "../services/wifiLocationHistoryService";
+
+const wifiLocationHistoryService = container.resolve(
+  WifiLocationHistoryService
+);
+const router = express.Router();
+
+router.get("/", async (req: Request, res: Response) => {
+  try {
+    const wifiLocationHistory =
+      await wifiLocationHistoryService.getAllWifiLocationHistories();
+    res.status(200).json(wifiLocationHistory);
+  } catch (error) {
+    res.status(500).json({ error: "Error retrieving wifi location history" });
+  }
+});
+
+router.get("/:id", async (req: Request, res: Response) => {
+  try {
+    const { id } = req.params;
+    const wifiLocationHistory =
+      await wifiLocationHistoryService.getWifiLocationHistoryById(id);
+    if (!wifiLocationHistory) {
+      res.status(404).json({ error: "Wifi location history not found" });
+      return;
+    }
+    res.status(200).json(wifiLocationHistory);
+  } catch (error) {
+    res.status(500).json({ error: "Error retrieving wifi location history" });
+  }
+});
+
+export default router;
diff --git a/server/src/index.ts b/server/src/index.ts
index a73af84..a1f4292 100644
--- a/server/src/index.ts
+++ b/server/src/index.ts
@@ -7,6 +7,8 @@ import locationRoutes from "./controller/locationController";
 import lpTtnEndDeviceUplinksRoutes from "./controller/lpTtnEndDeviceUplinksController";
 import ttnRoutes from "./controller/ttnController";
 import ttnGatewayReceptionRoutes from "./controller/ttnGatewayReceptionController";
+import wifiLocationRoutes from "./controller/wifiLocationController";
+import wifiLocationHistoryRoutes from "./controller/wifiLocationHistoryController";
 import wifiScanRoutes from "./controller/wifiScanController";
 
 dotenv.config();
@@ -18,8 +20,10 @@ app.use(cors());
 app.use(express.json());
 
 app.use("/api/lp-ttn-end-device-uplinks", lpTtnEndDeviceUplinksRoutes);
-app.use("/api/wifi-scans", wifiScanRoutes);
 app.use("/api/ttn-gateway-receptions", ttnGatewayReceptionRoutes);
+app.use("/api/wifi-location-history", wifiLocationHistoryRoutes);
+app.use("/api/wifi-location", wifiLocationRoutes);
+app.use("/api/wifi-scans", wifiScanRoutes);
 app.use("/api/locations", locationRoutes);
 app.use("/api/ttn", ttnRoutes);
 
diff --git a/server/src/repositories/wifiLocationHistoryRepository.ts b/server/src/repositories/wifiLocationHistoryRepository.ts
index 4ff7413..554b32a 100644
--- a/server/src/repositories/wifiLocationHistoryRepository.ts
+++ b/server/src/repositories/wifiLocationHistoryRepository.ts
@@ -23,21 +23,4 @@ export class WifiLocationHistoryRepository {
   public async createMany(data: Partial<WifiLocationHistory>[]) {
     return await WifiLocationHistory.bulkCreate(data);
   }
-
-  public async update(id: string, data: Partial<WifiLocationHistory>) {
-    const wifiScan = await this.findById(id);
-    if (wifiScan) {
-      return await wifiScan.update(data);
-    }
-    return null;
-  }
-
-  public async delete(id: string) {
-    const wifiScan = await this.findById(id);
-    if (wifiScan) {
-      await wifiScan.destroy();
-      return true;
-    }
-    return false;
-  }
 }
diff --git a/server/src/services/wifiLocationHistoryService.ts b/server/src/services/wifiLocationHistoryService.ts
index 2062888..46cb950 100644
--- a/server/src/services/wifiLocationHistoryService.ts
+++ b/server/src/services/wifiLocationHistoryService.ts
@@ -18,7 +18,7 @@ export class WifiLocationHistoryService {
   constructor(
     @inject(WifiLocationHistoryRepository)
     private repository: WifiLocationHistoryRepository
-  ) { }
+  ) {}
 
   public async getAllWifiLocationHistories() {
     return this.repository.findAll();
@@ -38,20 +38,14 @@ export class WifiLocationHistoryService {
       order: [["updated_at_utc", "DESC"]],
     });
 
-    if (!existingEntry || existingEntry.latitude !== data.latitude || existingEntry.longitude !== data.longitude) {
+    if (
+      !existingEntry ||
+      existingEntry.latitude !== data.latitude ||
+      existingEntry.longitude !== data.longitude
+    ) {
       return await this.repository.create(data);
     }
 
     return existingEntry;
   }
-
-  public async updateWifiLocationHistory(
-    data: UpdateWifiLocationHistoryParams
-  ) {
-    return this.repository.update(data.mac, data);
-  }
-
-  public async deleteWifiLocationHistory(id: string) {
-    return this.repository.delete(id);
-  }
 }