diff --git a/frontend/api/class-interfaces/_base.ts b/frontend/api/_base.ts similarity index 100% rename from frontend/api/class-interfaces/_base.ts rename to frontend/api/_base.ts diff --git a/frontend/api/admin-api.ts b/frontend/api/admin-api.ts new file mode 100644 index 000000000000..d0ee28c42113 --- /dev/null +++ b/frontend/api/admin-api.ts @@ -0,0 +1,21 @@ +import { AdminAboutAPI } from "./admin/admin-about"; +import { AdminTaskAPI } from "./admin/admin-tasks"; +import { ApiRequestInstance } from "~/types/api"; + +export class AdminAPI { + private static instance: AdminAPI; + public about: AdminAboutAPI; + public serverTasks: AdminTaskAPI; + + constructor(requests: ApiRequestInstance) { + if (AdminAPI.instance instanceof AdminAPI) { + return AdminAPI.instance; + } + + this.about = new AdminAboutAPI(requests); + this.serverTasks = new AdminTaskAPI(requests); + + Object.freeze(this); + AdminAPI.instance = this; + } +} diff --git a/frontend/api/class-interfaces/admin-about.ts b/frontend/api/admin/admin-about.ts similarity index 96% rename from frontend/api/class-interfaces/admin-about.ts rename to frontend/api/admin/admin-about.ts index 667925d7d551..8d54032bf161 100644 --- a/frontend/api/class-interfaces/admin-about.ts +++ b/frontend/api/admin/admin-about.ts @@ -1,4 +1,4 @@ -import { BaseAPI } from "./_base"; +import { BaseAPI } from "../_base"; const prefix = "/api"; diff --git a/frontend/api/admin/admin-tasks.ts b/frontend/api/admin/admin-tasks.ts new file mode 100644 index 000000000000..09e8f0afffd1 --- /dev/null +++ b/frontend/api/admin/admin-tasks.ts @@ -0,0 +1,18 @@ +import { BaseAPI } from "../_base"; +import { ServerTask } from "~/api/types/server-task"; + +const prefix = "/api"; + +const routes = { + base: `${prefix}/admin/server-tasks`, +}; + +export class AdminTaskAPI extends BaseAPI { + async testTask() { + return await this.requests.post(`${routes.base}`, {}); + } + + async getAll() { + return await this.requests.get(routes.base); + } +} diff --git a/frontend/api/class-interfaces/backups.ts b/frontend/api/class-interfaces/backups.ts index fb124ae52091..9f3f08938a89 100644 --- a/frontend/api/class-interfaces/backups.ts +++ b/frontend/api/class-interfaces/backups.ts @@ -1,4 +1,4 @@ -import { BaseAPI } from "./_base"; +import { BaseAPI } from "../_base"; export interface BackupOptions { recipes?: boolean; diff --git a/frontend/api/class-interfaces/categories.ts b/frontend/api/class-interfaces/categories.ts index f49851a14a31..b3425d1cad2f 100644 --- a/frontend/api/class-interfaces/categories.ts +++ b/frontend/api/class-interfaces/categories.ts @@ -1,4 +1,4 @@ -import { BaseCRUDAPI } from "./_base"; +import { BaseCRUDAPI } from "../_base"; import { Recipe } from "~/types/api-types/recipe"; const prefix = "/api"; diff --git a/frontend/api/class-interfaces/email.ts b/frontend/api/class-interfaces/email.ts index 005b1276b6a1..c6faa96f216d 100644 --- a/frontend/api/class-interfaces/email.ts +++ b/frontend/api/class-interfaces/email.ts @@ -1,4 +1,4 @@ -import { BaseAPI } from "./_base"; +import { BaseAPI } from "../_base"; const routes = { base: "/api/admin/email", diff --git a/frontend/api/class-interfaces/event-notifications.ts b/frontend/api/class-interfaces/event-notifications.ts index 6e19ab319232..09112bc02337 100644 --- a/frontend/api/class-interfaces/event-notifications.ts +++ b/frontend/api/class-interfaces/event-notifications.ts @@ -1,4 +1,4 @@ -import { BaseCRUDAPI } from "./_base"; +import { BaseCRUDAPI } from "../_base"; export type EventCategory = "general" | "recipe" | "backup" | "scheduled" | "migration" | "group" | "user"; export type DeclaredTypes = "General" | "Discord" | "Gotify" | "Pushover" | "Home Assistant"; diff --git a/frontend/api/class-interfaces/events.ts b/frontend/api/class-interfaces/events.ts index c7c45e093150..ec73aa2e474e 100644 --- a/frontend/api/class-interfaces/events.ts +++ b/frontend/api/class-interfaces/events.ts @@ -1,4 +1,4 @@ -import { BaseAPI } from "./_base"; +import { BaseAPI } from "../_base"; export type EventCategory = "general" | "recipe" | "backup" | "scheduled" | "migration" | "group" | "user"; diff --git a/frontend/api/class-interfaces/group-cookbooks.ts b/frontend/api/class-interfaces/group-cookbooks.ts index aa2e884575ce..25de42c8aa2d 100644 --- a/frontend/api/class-interfaces/group-cookbooks.ts +++ b/frontend/api/class-interfaces/group-cookbooks.ts @@ -1,4 +1,4 @@ -import { BaseCRUDAPI } from "./_base"; +import { BaseCRUDAPI } from "../_base"; import { Category } from "./categories"; import { CategoryBase } from "~/types/api-types/recipe"; diff --git a/frontend/api/class-interfaces/group-mealplan.ts b/frontend/api/class-interfaces/group-mealplan.ts index f81279427008..4496eddc3331 100644 --- a/frontend/api/class-interfaces/group-mealplan.ts +++ b/frontend/api/class-interfaces/group-mealplan.ts @@ -1,4 +1,4 @@ -import { BaseCRUDAPI } from "./_base"; +import { BaseCRUDAPI } from "../_base"; const prefix = "/api"; diff --git a/frontend/api/class-interfaces/group-tasks.ts b/frontend/api/class-interfaces/group-tasks.ts new file mode 100644 index 000000000000..efd070afc130 --- /dev/null +++ b/frontend/api/class-interfaces/group-tasks.ts @@ -0,0 +1,13 @@ +import { BaseAPI } from "../_base"; +import { ServerTask } from "~/api/types/server-task"; +const prefix = "/api"; + +const routes = { + base: `${prefix}/groups/server-tasks`, +}; + +export class GroupServerTaskAPI extends BaseAPI { + async getAll() { + return await this.requests.get(routes.base); + } +} diff --git a/frontend/api/class-interfaces/group-webhooks.ts b/frontend/api/class-interfaces/group-webhooks.ts index 099f755b2904..7ba72ded0fcc 100644 --- a/frontend/api/class-interfaces/group-webhooks.ts +++ b/frontend/api/class-interfaces/group-webhooks.ts @@ -1,4 +1,4 @@ -import { BaseCRUDAPI } from "./_base"; +import { BaseCRUDAPI } from "../_base"; const prefix = "/api"; diff --git a/frontend/api/class-interfaces/groups.ts b/frontend/api/class-interfaces/groups.ts index e0f16297ac3f..8c8fe8992f2b 100644 --- a/frontend/api/class-interfaces/groups.ts +++ b/frontend/api/class-interfaces/groups.ts @@ -1,4 +1,4 @@ -import { BaseCRUDAPI } from "./_base"; +import { BaseCRUDAPI } from "../_base"; import { GroupInDB, UserOut } from "~/types/api-types/user"; const prefix = "/api"; diff --git a/frontend/api/class-interfaces/recipe-bulk-actions.ts b/frontend/api/class-interfaces/recipe-bulk-actions.ts index 036d8d547812..1530642b400f 100644 --- a/frontend/api/class-interfaces/recipe-bulk-actions.ts +++ b/frontend/api/class-interfaces/recipe-bulk-actions.ts @@ -1,4 +1,4 @@ -import { BaseAPI } from "./_base"; +import { BaseAPI } from "../_base"; interface BasePayload { recipes: string[]; diff --git a/frontend/api/class-interfaces/recipe-foods.ts b/frontend/api/class-interfaces/recipe-foods.ts index 6499a3c80d50..a04ad7a76120 100644 --- a/frontend/api/class-interfaces/recipe-foods.ts +++ b/frontend/api/class-interfaces/recipe-foods.ts @@ -1,4 +1,4 @@ -import { BaseCRUDAPI } from "./_base"; +import { BaseCRUDAPI } from "../_base"; const prefix = "/api"; diff --git a/frontend/api/class-interfaces/recipe-units.ts b/frontend/api/class-interfaces/recipe-units.ts index e583c24a8c92..7d9d14860633 100644 --- a/frontend/api/class-interfaces/recipe-units.ts +++ b/frontend/api/class-interfaces/recipe-units.ts @@ -1,4 +1,4 @@ -import { BaseCRUDAPI } from "./_base"; +import { BaseCRUDAPI } from "../_base"; const prefix = "/api"; diff --git a/frontend/api/class-interfaces/recipes.ts b/frontend/api/class-interfaces/recipes.ts index 3fd11a7efe19..aa6441cfcd37 100644 --- a/frontend/api/class-interfaces/recipes.ts +++ b/frontend/api/class-interfaces/recipes.ts @@ -1,4 +1,4 @@ -import { BaseCRUDAPI } from "./_base"; +import { BaseCRUDAPI } from "../_base"; import { Recipe, CreateRecipe } from "~/types/api-types/recipe"; const prefix = "/api"; diff --git a/frontend/api/class-interfaces/tags.ts b/frontend/api/class-interfaces/tags.ts index c63402c34ca4..17dd1fa6ccaf 100644 --- a/frontend/api/class-interfaces/tags.ts +++ b/frontend/api/class-interfaces/tags.ts @@ -1,4 +1,4 @@ -import { BaseCRUDAPI } from "./_base"; +import { BaseCRUDAPI } from "../_base"; import { Recipe } from "~/types/api-types/admin"; const prefix = "/api"; diff --git a/frontend/api/class-interfaces/upload.ts b/frontend/api/class-interfaces/upload.ts index 01433803c6e3..6e8dff2de82e 100644 --- a/frontend/api/class-interfaces/upload.ts +++ b/frontend/api/class-interfaces/upload.ts @@ -1,4 +1,4 @@ -import { BaseAPI } from "./_base"; +import { BaseAPI } from "../_base"; export class UploadFile extends BaseAPI { file(url: string, fileObject: any) { diff --git a/frontend/api/class-interfaces/user-registration.ts b/frontend/api/class-interfaces/user-registration.ts index 1f6c41dfa21f..42df307b1c1b 100644 --- a/frontend/api/class-interfaces/user-registration.ts +++ b/frontend/api/class-interfaces/user-registration.ts @@ -1,4 +1,4 @@ -import { BaseAPI } from "./_base"; +import { BaseAPI } from "../_base"; export interface RegisterPayload { group: string; diff --git a/frontend/api/class-interfaces/users.ts b/frontend/api/class-interfaces/users.ts index 437b8a71a6ef..5d2ab8c03dc1 100644 --- a/frontend/api/class-interfaces/users.ts +++ b/frontend/api/class-interfaces/users.ts @@ -1,4 +1,4 @@ -import { BaseCRUDAPI } from "./_base"; +import { BaseCRUDAPI } from "../_base"; import { UserIn, UserOut } from "~/types/api-types/user"; // Interfaces diff --git a/frontend/api/class-interfaces/utils.ts b/frontend/api/class-interfaces/utils.ts index 3f437ef43612..be01eef40296 100644 --- a/frontend/api/class-interfaces/utils.ts +++ b/frontend/api/class-interfaces/utils.ts @@ -1,4 +1,4 @@ -import { BaseAPI } from "./_base"; +import { BaseAPI } from "../_base"; const prefix = "/api"; diff --git a/frontend/api/index.ts b/frontend/api/index.ts index 3d64b90abb25..eb00d8251990 100644 --- a/frontend/api/index.ts +++ b/frontend/api/index.ts @@ -12,29 +12,14 @@ import { FoodAPI } from "./class-interfaces/recipe-foods"; import { UnitAPI } from "./class-interfaces/recipe-units"; import { CookbookAPI } from "./class-interfaces/group-cookbooks"; import { WebhooksAPI } from "./class-interfaces/group-webhooks"; -import { AdminAboutAPI } from "./class-interfaces/admin-about"; import { RegisterAPI } from "./class-interfaces/user-registration"; import { MealPlanAPI } from "./class-interfaces/group-mealplan"; import { EmailAPI } from "./class-interfaces/email"; import { BulkActionsAPI } from "./class-interfaces/recipe-bulk-actions"; +import { GroupServerTaskAPI } from "./class-interfaces/group-tasks"; +import { AdminAPI } from "./admin-api"; import { ApiRequestInstance } from "~/types/api"; -class AdminAPI { - private static instance: AdminAPI; - public about: AdminAboutAPI; - - constructor(requests: ApiRequestInstance) { - if (AdminAPI.instance instanceof AdminAPI) { - return AdminAPI.instance; - } - - this.about = new AdminAboutAPI(requests); - - Object.freeze(this); - AdminAPI.instance = this; - } -} - class Api { private static instance: Api; public recipes: RecipeAPI; @@ -54,6 +39,7 @@ class Api { public mealplans: MealPlanAPI; public email: EmailAPI; public bulk: BulkActionsAPI; + public grouperServerTasks: GroupServerTaskAPI; // Utils public upload: UploadFile; @@ -77,6 +63,7 @@ class Api { this.groupWebhooks = new WebhooksAPI(requests); this.register = new RegisterAPI(requests); this.mealplans = new MealPlanAPI(requests); + this.grouperServerTasks = new GroupServerTaskAPI(requests); // Admin this.events = new EventsAPI(requests); diff --git a/frontend/api/types/server-task.ts b/frontend/api/types/server-task.ts new file mode 100644 index 000000000000..18bc3521690c --- /dev/null +++ b/frontend/api/types/server-task.ts @@ -0,0 +1,8 @@ +export interface ServerTask { + id: number; + groupId: number; + callback: string; + createdAt: string; + status: string; + log: string; +}