You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

47 lines
1.2 KiB

import {Device} from "../models/Devices";
import {deleteRequest, getRequest, postRequest, putRequest} from "./shared";
interface DeviceRepository {
fetchAll(): Promise<Device[]>
save(device: Partial<Device>): Promise<boolean>
delete(id: string): Promise<boolean>
}
export default function deviceRepo(): DeviceRepository {
switch (import.meta.env.VITE_MODE) {
case "webapp":
return defaultImpl;
case "chrome-plugin":
default:
throw new Error("Not implemented");
}
}
const defaultImpl: DeviceRepository = {
fetchAll() {
return getRequest("/devices") || null;
},
async save({id, name, connectionString}: Partial<Device>): Promise<boolean> {
try {
if (id) {
await putRequest(`/devices/${id}`, {name, connectionString});
return true;
} else if (name && connectionString) {
await postRequest("/devices", {name, connectionString});
return true;
}
return false;
} catch (e) {
return false;
}
},
async delete(id: string): Promise<boolean> {
try {
await deleteRequest(`/devices/${id}`);
return true;
} catch (e) {
return false;
}
},
};