first
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
import { createModelApi } from "./api_client";
|
||||
import type {
|
||||
Employee,
|
||||
EmployeeCreate,
|
||||
EmployeeUpdate,
|
||||
EmployeeListParams,
|
||||
Message,
|
||||
MessageCreate,
|
||||
MessageUpdate,
|
||||
MessageListParams,
|
||||
Task,
|
||||
TaskCreate,
|
||||
TaskUpdate,
|
||||
TaskListParams,
|
||||
User,
|
||||
UserCreate,
|
||||
UserUpdate,
|
||||
UserListParams,
|
||||
} from "./models";
|
||||
|
||||
export const employeeApi = createModelApi<Employee, EmployeeCreate, EmployeeUpdate, EmployeeListParams>("employee");
|
||||
export const messageApi = createModelApi<Message, MessageCreate, MessageUpdate, MessageListParams>("message");
|
||||
export const taskApi = createModelApi<Task, TaskCreate, TaskUpdate, TaskListParams>("task");
|
||||
export const userApi = createModelApi<User, UserCreate, UserUpdate, UserListParams>("users");
|
||||
@@ -0,0 +1,86 @@
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
|
||||
export interface BaseEntity {
|
||||
id?: number;
|
||||
}
|
||||
|
||||
export interface ListParams {
|
||||
ordering?: string;
|
||||
limit?: number;
|
||||
offset?: number;
|
||||
[key: string]: string | number | boolean | null | undefined;
|
||||
}
|
||||
|
||||
export interface PaginatedResponse<T> {
|
||||
count: number;
|
||||
results: T[];
|
||||
}
|
||||
|
||||
export interface ApiError {
|
||||
code: string;
|
||||
detail: string;
|
||||
}
|
||||
|
||||
export interface ModelApi<
|
||||
T extends BaseEntity,
|
||||
CreateDTO = Partial<T>,
|
||||
UpdateDTO = Partial<T>,
|
||||
Params extends ListParams = ListParams,
|
||||
> {
|
||||
list: (params?: Params) => Promise<PaginatedResponse<T>>;
|
||||
retrieve: (id: number) => Promise<T>;
|
||||
create: (payload: CreateDTO) => Promise<T>;
|
||||
update: (id: number, payload: UpdateDTO) => Promise<T>;
|
||||
remove: (id: number) => Promise<{ deleted: true }>;
|
||||
}
|
||||
|
||||
export function createModelApi<
|
||||
T extends BaseEntity,
|
||||
CreateDTO = Partial<T>,
|
||||
UpdateDTO = Partial<T>,
|
||||
Params extends ListParams = ListParams,
|
||||
>(resource: string): ModelApi<T, CreateDTO, UpdateDTO, Params> {
|
||||
return {
|
||||
list(params) {
|
||||
return invoke<PaginatedResponse<T>>("che_api", {
|
||||
request: { resource, action: "list", params: serializeListParams(params) },
|
||||
});
|
||||
},
|
||||
|
||||
retrieve(id) {
|
||||
return invoke<T>("che_api", {
|
||||
request: { resource, action: "retrieve", id },
|
||||
});
|
||||
},
|
||||
|
||||
create(payload) {
|
||||
return invoke<T>("che_api", {
|
||||
request: { resource, action: "create", payload },
|
||||
});
|
||||
},
|
||||
|
||||
update(id, payload) {
|
||||
return invoke<T>("che_api", {
|
||||
request: { resource, action: "update", id, payload },
|
||||
});
|
||||
},
|
||||
|
||||
remove(id) {
|
||||
return invoke<{ deleted: true }>("che_api", {
|
||||
request: { resource, action: "delete", id },
|
||||
});
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function serializeListParams(params?: ListParams) {
|
||||
const serialized: Record<string, string> = {};
|
||||
|
||||
for (const [key, value] of Object.entries(params ?? {})) {
|
||||
if (value !== null && value !== undefined) {
|
||||
serialized[key] = String(value);
|
||||
}
|
||||
}
|
||||
|
||||
return serialized;
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
import type { ListParams } from "./api_client";
|
||||
|
||||
export interface Employee {
|
||||
id: number;
|
||||
name: string;
|
||||
avatar: string;
|
||||
}
|
||||
|
||||
export interface EmployeeCreate {
|
||||
name: string;
|
||||
avatar: string;
|
||||
}
|
||||
|
||||
export interface EmployeeUpdate {
|
||||
name?: string;
|
||||
avatar?: string;
|
||||
}
|
||||
|
||||
export interface EmployeeListParams extends ListParams {
|
||||
id?: number;
|
||||
name?: string;
|
||||
name__contains?: string;
|
||||
}
|
||||
|
||||
export interface Message {
|
||||
id: number;
|
||||
task_id: number;
|
||||
employee_id: number;
|
||||
text: string;
|
||||
}
|
||||
|
||||
export interface MessageCreate {
|
||||
task_id: number;
|
||||
employee_id: number;
|
||||
text: string;
|
||||
}
|
||||
|
||||
export interface MessageUpdate {
|
||||
task_id?: number;
|
||||
employee_id?: number;
|
||||
text?: string;
|
||||
}
|
||||
|
||||
export interface MessageListParams extends ListParams {
|
||||
id?: number;
|
||||
task_id?: number;
|
||||
employee_id?: number;
|
||||
}
|
||||
|
||||
export interface Task {
|
||||
id: number;
|
||||
name: string;
|
||||
author_id: number | null;
|
||||
responsible_id: number | null;
|
||||
}
|
||||
|
||||
export interface TaskCreate {
|
||||
name: string;
|
||||
author_id?: number | null;
|
||||
responsible_id?: number | null;
|
||||
}
|
||||
|
||||
export interface TaskUpdate {
|
||||
name?: string;
|
||||
author_id?: number | null;
|
||||
responsible_id?: number | null;
|
||||
}
|
||||
|
||||
export interface TaskListParams extends ListParams {
|
||||
id?: number;
|
||||
name?: string;
|
||||
name__contains?: string;
|
||||
author_id?: number | null;
|
||||
responsible_id?: number | null;
|
||||
}
|
||||
|
||||
export interface User {
|
||||
id: number;
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface UserCreate {
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface UserUpdate {
|
||||
name?: string;
|
||||
}
|
||||
|
||||
export interface UserListParams extends ListParams {
|
||||
id?: number;
|
||||
name?: string;
|
||||
name__contains?: string;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user