This commit is contained in:
che
2026-07-23 09:31:01 +05:00
commit 4cfc5d6ae6
64 changed files with 9779 additions and 0 deletions
+24
View File
@@ -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");
+86
View File
@@ -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;
}
+95
View File
@@ -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;
}