feat: reworked ttn webhook endpoint logic

This commit is contained in:
2025-01-03 02:01:55 +01:00
parent ffdb644700
commit 62847f569d
17 changed files with 273 additions and 356 deletions

View File

@ -1,7 +1,21 @@
import { inject, injectable } from "tsyringe";
import { WifiScan } from "../models/wifiScan";
import { getLocationForWifiMemoized } from "../proxy/wigle";
import { WifiScanRepository } from "../repositories/wifiScanRepository";
interface CreateWifiScanParams {
lp_ttn_end_device_uplinks_id: string;
mac: string;
rssi: number;
}
interface UpdateWifiScanParams {
wifi_scan_id: string;
mac?: string;
rssi?: number;
latitude?: number;
longitude?: number;
}
@injectable()
export class WifiScanService {
constructor(
@ -16,16 +30,28 @@ export class WifiScanService {
return this.repository.findById(id);
}
public async createWifiScan(data: Partial<WifiScan>) {
return this.repository.create(data);
public async createWifiScan(data: CreateWifiScanParams) {
const apiResponse = await getLocationForWifiMemoized(data.mac);
if (apiResponse !== undefined && apiResponse.results.length > 0)
return this.repository.create({
...data,
latitude: apiResponse.results[0].trilat,
longitude: apiResponse.results[0].trilong,
});
}
public async createWifiScans(data: Partial<WifiScan>[]) {
return this.repository.createMany(data);
public async createWifiScans(data: CreateWifiScanParams[]) {
let wifiScans = await Promise.all(
data.map(async (wifi) => {
return await this.createWifiScan(wifi);
})
);
return wifiScans.filter((wifi) => wifi !== undefined);
}
public async updateWifiScan(id: string, data: Partial<WifiScan>) {
return this.repository.update(id, data);
public async updateWifiScan(data: UpdateWifiScanParams) {
return this.repository.update(data.wifi_scan_id, data);
}
public async deleteWifiScan(id: string) {