diff --git a/backend/src/gps/traccar-client.service.ts b/backend/src/gps/traccar-client.service.ts index 68515db..7adc21a 100644 --- a/backend/src/gps/traccar-client.service.ts +++ b/backend/src/gps/traccar-client.service.ts @@ -180,12 +180,55 @@ export class TraccarClientService implements OnModuleInit { * Create a new device in Traccar */ async createDevice(name: string, uniqueId: string, phone?: string): Promise { - return this.request('post', '/api/devices', { + const device = await this.request('post', '/api/devices', { name, uniqueId, phone, category: 'person', }); + + // Link device to all admin users so they can see it + await this.linkDeviceToAllAdmins(device.id); + + return device; + } + + /** + * Link a device to a specific user + */ + async linkDeviceToUser(deviceId: number, userId: number): Promise { + try { + await this.request('post', '/api/permissions', { + userId, + deviceId, + }); + return true; + } catch (error: any) { + // 400 means permission already exists, which is fine + if (error.response?.status === 400) { + return true; + } + this.logger.warn(`Failed to link device ${deviceId} to user ${userId}: ${error.message}`); + return false; + } + } + + /** + * Link a device to all admin users + */ + async linkDeviceToAllAdmins(deviceId: number): Promise { + try { + const users = await this.getAllUsers(); + const admins = users.filter(u => u.administrator); + + for (const admin of admins) { + await this.linkDeviceToUser(deviceId, admin.id); + } + + this.logger.log(`Linked device ${deviceId} to ${admins.length} admin users`); + } catch (error: any) { + this.logger.warn(`Failed to link device to admins: ${error.message}`); + } } /**