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 {Program} from "../models/Programs";
import {deleteRequest, getRequest, postRequest, putRequest} from "./shared";
interface ProgramRepository {
fetchAll(): Promise<Program[]>
save(program: Partial<Program>): Promise<boolean>
delete(program: Pick<Program, "id">): Promise<boolean>
}
export default function programRepo(): ProgramRepository {
switch (import.meta.env.VITE_MODE) {
case "webapp":
return defaultImpl;
case "chrome-plugin":
default:
throw new Error("Not implemented");
}
}
const defaultImpl: ProgramRepository = {
fetchAll() {
return getRequest("/programs") || null;
},
async save({id, name, steps}: Partial<Program>): Promise<boolean> {
try {
if (id) {
await putRequest(`/programs/${id}`, {name, steps});
return true;
} else if (name && steps) {
await postRequest("/programs", {name, steps});
return true;
}
return false;
} catch (e) {
return false;
}
},
async delete({id}: Pick<Program, "id">): Promise<boolean> {
try {
await deleteRequest(`/programs/${id}`);
return true;
} catch (e) {
return false;
}
},
};