Initial commit
This commit is contained in:
106
dist/shared/store/deviceStore.js
vendored
Normal file
106
dist/shared/store/deviceStore.js
vendored
Normal file
@ -0,0 +1,106 @@
|
||||
import { randomUUID } from "node:crypto";
|
||||
import { getPool } from "../db/pool";
|
||||
function nowIso() {
|
||||
return new Date().toISOString();
|
||||
}
|
||||
function makeCode(id) {
|
||||
return `d_${id.slice(0, 6)}`;
|
||||
}
|
||||
function mapDevice(row) {
|
||||
return {
|
||||
id: row.id,
|
||||
device_code: row.device_code,
|
||||
serial_number: row.serial_number || undefined,
|
||||
vendor: row.vendor || undefined,
|
||||
model: row.model || undefined,
|
||||
communication_mode: row.communication_mode,
|
||||
capability_profile_json: row.capability_profile_json || {},
|
||||
auth_method: row.auth_method || undefined,
|
||||
status: row.status,
|
||||
last_seen_at: row.last_seen_at || undefined,
|
||||
firmware_version: row.firmware_version || undefined,
|
||||
created_at: row.created_at,
|
||||
updated_at: row.updated_at
|
||||
};
|
||||
}
|
||||
export async function createDevice(payload) {
|
||||
const id = randomUUID();
|
||||
const now = nowIso();
|
||||
const { rows } = await getPool().query(`INSERT INTO devices (
|
||||
id,
|
||||
device_code,
|
||||
serial_number,
|
||||
vendor,
|
||||
model,
|
||||
communication_mode,
|
||||
capability_profile_json,
|
||||
auth_method,
|
||||
status,
|
||||
last_seen_at,
|
||||
firmware_version,
|
||||
created_at,
|
||||
updated_at
|
||||
) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13)
|
||||
RETURNING *`, [
|
||||
id,
|
||||
payload.device_code || makeCode(id),
|
||||
payload.serial_number,
|
||||
payload.vendor,
|
||||
payload.model,
|
||||
payload.communication_mode || "static",
|
||||
payload.capability_profile_json || {},
|
||||
payload.auth_method || "token",
|
||||
payload.status || "active",
|
||||
payload.last_seen_at || null,
|
||||
payload.firmware_version,
|
||||
now,
|
||||
now
|
||||
]);
|
||||
return mapDevice(rows[0]);
|
||||
}
|
||||
export async function listDevices() {
|
||||
const { rows } = await getPool().query("SELECT * FROM devices ORDER BY created_at DESC");
|
||||
return rows.map(mapDevice);
|
||||
}
|
||||
export async function getDeviceById(id) {
|
||||
const { rows } = await getPool().query("SELECT * FROM devices WHERE id = $1", [id]);
|
||||
return rows[0] ? mapDevice(rows[0]) : null;
|
||||
}
|
||||
export async function patchDevice(id, patch) {
|
||||
const existing = await getDeviceById(id);
|
||||
if (!existing) {
|
||||
throw new Error("DEVICE_NOT_FOUND");
|
||||
}
|
||||
const merged = { ...existing, ...patch, updated_at: nowIso() };
|
||||
const { rows } = await getPool().query(`UPDATE devices
|
||||
SET device_code = $2,
|
||||
serial_number = $3,
|
||||
vendor = $4,
|
||||
model = $5,
|
||||
communication_mode = $6,
|
||||
capability_profile_json = $7,
|
||||
auth_method = $8,
|
||||
status = $9,
|
||||
firmware_version = $10,
|
||||
last_seen_at = $11,
|
||||
updated_at = $12
|
||||
WHERE id = $1
|
||||
RETURNING *`, [
|
||||
id,
|
||||
merged.device_code,
|
||||
merged.serial_number,
|
||||
merged.vendor,
|
||||
merged.model,
|
||||
merged.communication_mode || "static",
|
||||
merged.capability_profile_json || {},
|
||||
merged.auth_method,
|
||||
merged.status,
|
||||
merged.firmware_version,
|
||||
merged.last_seen_at || null,
|
||||
merged.updated_at
|
||||
]);
|
||||
return mapDevice(rows[0]);
|
||||
}
|
||||
export function toDevicePayload(device) {
|
||||
return { ...device };
|
||||
}
|
||||
Reference in New Issue
Block a user