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
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;
|
|
}
|
|
},
|
|
};
|