1
0
Fork 0
mirror of https://github.com/mealie-recipes/mealie.git synced 2025-07-23 15:19:41 +02:00

refactor(frontend): ♻️ update API folder structure

This commit is contained in:
Hayden 2021-10-23 16:42:20 -08:00
parent 9b79b82c4d
commit a94b9d504f
25 changed files with 83 additions and 36 deletions

View file

@ -1,60 +0,0 @@
import { ApiRequestInstance } from "~/types/api";
export interface CrudAPIInterface {
requests: ApiRequestInstance;
// Route Properties / Methods
baseRoute: string;
itemRoute(itemId: string | number): string;
// Methods
}
export interface CrudAPIMethodsInterface {
// CRUD Methods
getAll(): any;
createOne(): any;
getOne(): any;
updateOne(): any;
patchOne(): any;
deleteOne(): any;
}
export abstract class BaseAPI {
requests: ApiRequestInstance;
constructor(requests: ApiRequestInstance) {
this.requests = requests;
}
}
export abstract class BaseCRUDAPI<T, U> extends BaseAPI implements CrudAPIInterface {
abstract baseRoute: string;
abstract itemRoute(itemId: string | number): string;
async getAll(start = 0, limit = 9999, params = {}) {
return await this.requests.get<T[]>(this.baseRoute, {
params: { start, limit, ...params },
});
}
async createOne(payload: U) {
return await this.requests.post<T>(this.baseRoute, payload);
}
async getOne(itemId: string | number) {
return await this.requests.get<T>(this.itemRoute(itemId));
}
async updateOne(itemId: string | number, payload: T) {
return await this.requests.put<T>(this.itemRoute(itemId), payload);
}
async patchOne(itemId: string, payload: T) {
return await this.requests.patch(this.itemRoute(itemId), payload);
}
async deleteOne(itemId: string | number) {
return await this.requests.delete<T>(this.itemRoute(itemId));
}
}

View file

@ -1,47 +0,0 @@
import { BaseAPI } from "./_base";
const prefix = "/api";
const routes = {
about: `${prefix}/admin/about`,
aboutStatistics: `${prefix}/admin/about/statistics`,
check: `${prefix}/admin/about/check`,
};
export interface AdminAboutInfo {
production: boolean;
version: string;
demoStatus: boolean;
apiPort: number;
apiDocs: boolean;
dbType: string;
dbUrl: string;
defaultGroup: string;
}
export interface AdminStatistics {
totalRecipes: number;
totalUsers: number;
totalGroups: number;
uncategorizedRecipes: number;
untaggedRecipes: number;
}
export interface CheckAppConfig {
emailReady: boolean;
baseUrlSet: boolean;
}
export class AdminAboutAPI extends BaseAPI {
async about() {
return await this.requests.get<AdminAboutInfo>(routes.about);
}
async statistics() {
return await this.requests.get(routes.aboutStatistics);
}
async checkApp() {
return await this.requests.get<CheckAppConfig>(routes.check);
}
}

View file

@ -1,4 +1,4 @@
import { BaseAPI } from "./_base";
import { BaseAPI } from "../_base";
export interface BackupOptions {
recipes?: boolean;

View file

@ -1,4 +1,4 @@
import { BaseCRUDAPI } from "./_base";
import { BaseCRUDAPI } from "../_base";
import { Recipe } from "~/types/api-types/recipe";
const prefix = "/api";

View file

@ -1,4 +1,4 @@
import { BaseAPI } from "./_base";
import { BaseAPI } from "../_base";
const routes = {
base: "/api/admin/email",

View file

@ -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";

View file

@ -1,4 +1,4 @@
import { BaseAPI } from "./_base";
import { BaseAPI } from "../_base";
export type EventCategory = "general" | "recipe" | "backup" | "scheduled" | "migration" | "group" | "user";

View file

@ -1,4 +1,4 @@
import { BaseCRUDAPI } from "./_base";
import { BaseCRUDAPI } from "../_base";
import { Category } from "./categories";
import { CategoryBase } from "~/types/api-types/recipe";

View file

@ -1,4 +1,4 @@
import { BaseCRUDAPI } from "./_base";
import { BaseCRUDAPI } from "../_base";
const prefix = "/api";

View file

@ -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<ServerTask[]>(routes.base);
}
}

View file

@ -1,4 +1,4 @@
import { BaseCRUDAPI } from "./_base";
import { BaseCRUDAPI } from "../_base";
const prefix = "/api";

View file

@ -1,4 +1,4 @@
import { BaseCRUDAPI } from "./_base";
import { BaseCRUDAPI } from "../_base";
import { GroupInDB, UserOut } from "~/types/api-types/user";
const prefix = "/api";

View file

@ -1,4 +1,4 @@
import { BaseAPI } from "./_base";
import { BaseAPI } from "../_base";
interface BasePayload {
recipes: string[];

View file

@ -1,4 +1,4 @@
import { BaseCRUDAPI } from "./_base";
import { BaseCRUDAPI } from "../_base";
const prefix = "/api";

View file

@ -1,4 +1,4 @@
import { BaseCRUDAPI } from "./_base";
import { BaseCRUDAPI } from "../_base";
const prefix = "/api";

View file

@ -1,4 +1,4 @@
import { BaseCRUDAPI } from "./_base";
import { BaseCRUDAPI } from "../_base";
import { Recipe, CreateRecipe } from "~/types/api-types/recipe";
const prefix = "/api";

View file

@ -1,4 +1,4 @@
import { BaseCRUDAPI } from "./_base";
import { BaseCRUDAPI } from "../_base";
import { Recipe } from "~/types/api-types/admin";
const prefix = "/api";

View file

@ -1,4 +1,4 @@
import { BaseAPI } from "./_base";
import { BaseAPI } from "../_base";
export class UploadFile extends BaseAPI {
file(url: string, fileObject: any) {

View file

@ -1,4 +1,4 @@
import { BaseAPI } from "./_base";
import { BaseAPI } from "../_base";
export interface RegisterPayload {
group: string;

View file

@ -1,4 +1,4 @@
import { BaseCRUDAPI } from "./_base";
import { BaseCRUDAPI } from "../_base";
import { UserIn, UserOut } from "~/types/api-types/user";
// Interfaces

View file

@ -1,4 +1,4 @@
import { BaseAPI } from "./_base";
import { BaseAPI } from "../_base";
const prefix = "/api";