64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
// ============================================================================
|
|
// Workspaces API
|
|
// ============================================================================
|
|
|
|
import { api } from "./client";
|
|
import type {
|
|
Workspace,
|
|
WorkspaceCreateRequest,
|
|
WorkspaceUpdateRequest,
|
|
Project,
|
|
PaginatedResponse,
|
|
PaginationParams,
|
|
} from "@/lib/types/api";
|
|
|
|
const BASE_PATH = "/workspaces";
|
|
|
|
export const workspacesApi = {
|
|
/**
|
|
* Get list of workspaces for current user
|
|
*/
|
|
list: (params?: PaginationParams) =>
|
|
api.get<PaginatedResponse<Workspace>>(BASE_PATH, { params }),
|
|
|
|
/**
|
|
* Create new workspace
|
|
*/
|
|
create: (data: WorkspaceCreateRequest) =>
|
|
api.post<Workspace>(BASE_PATH, data),
|
|
|
|
/**
|
|
* Update workspace
|
|
*/
|
|
update: (workspaceId: string, data: WorkspaceUpdateRequest) =>
|
|
api.patch<Workspace>(`${BASE_PATH}/${workspaceId}`, data),
|
|
|
|
/**
|
|
* Delete workspace
|
|
*/
|
|
delete: (workspaceId: string) =>
|
|
api.delete<void>(`${BASE_PATH}/${workspaceId}`),
|
|
|
|
/**
|
|
* Upload workspace avatar
|
|
*/
|
|
uploadAvatar: (workspaceId: string, file: File) => {
|
|
const formData = new FormData();
|
|
formData.append("file", file);
|
|
return api.post<Workspace>(`${BASE_PATH}/${workspaceId}/avatar`, formData);
|
|
},
|
|
|
|
/**
|
|
* Delete workspace avatar
|
|
*/
|
|
deleteAvatar: (workspaceId: string) =>
|
|
api.delete<Workspace>(`${BASE_PATH}/${workspaceId}/avatar`),
|
|
|
|
/**
|
|
* Get projects for workspace
|
|
*/
|
|
getProjects: (workspaceId: string, params?: PaginationParams) =>
|
|
api.get<PaginatedResponse<Project>>(`${BASE_PATH}/${workspaceId}/projects`, { params }),
|
|
};
|
|
|