mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-25 08:46:22 +02:00
126 lines
4.2 KiB
TypeScript
126 lines
4.2 KiB
TypeScript
import {
|
|
type CreateLogRequest,
|
|
createLogRequest,
|
|
createLogResponse,
|
|
type DeleteLogRequest,
|
|
deleteLogRequest,
|
|
deleteLogResponse,
|
|
type GetLogRequest,
|
|
type GetLogSummaryRequest,
|
|
type GetLogsRequest,
|
|
getLogRequest,
|
|
getLogResponse,
|
|
getLogSummaryRequest,
|
|
getLogSummaryResponse,
|
|
getLogsRequest,
|
|
getLogsResponse,
|
|
type UpdateLogRequest,
|
|
updateLogRequest,
|
|
updateLogResponse,
|
|
} from "@/contracts/types/log.types";
|
|
import { ValidationError } from "../error";
|
|
import { baseApiService } from "./base-api.service";
|
|
|
|
class LogsApiService {
|
|
/**
|
|
* Get a list of logs with optional filtering and pagination
|
|
*/
|
|
getLogs = async (request: GetLogsRequest) => {
|
|
const parsedRequest = getLogsRequest.safeParse(request);
|
|
if (!parsedRequest.success) {
|
|
console.error("Invalid request:", parsedRequest.error);
|
|
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
|
|
throw new ValidationError(`Invalid request: ${errorMessage}`);
|
|
}
|
|
// Transform query params to be string values
|
|
const transformedQueryParams = parsedRequest.data.queryParams
|
|
? Object.fromEntries(
|
|
Object.entries(parsedRequest.data.queryParams).map(([k, v]) => {
|
|
// Handle array values (document_type)
|
|
if (Array.isArray(v)) {
|
|
return [k, v.join(",")];
|
|
}
|
|
return [k, String(v)];
|
|
})
|
|
)
|
|
: undefined;
|
|
|
|
const queryParams = transformedQueryParams
|
|
? new URLSearchParams(transformedQueryParams).toString()
|
|
: "";
|
|
return baseApiService.get(`/api/v1/logs?${queryParams}`, getLogsResponse);
|
|
};
|
|
|
|
/**
|
|
* Get a single log by ID
|
|
*/
|
|
getLog = async (request: GetLogRequest) => {
|
|
const parsedRequest = getLogRequest.safeParse(request);
|
|
if (!parsedRequest.success) {
|
|
console.error("Invalid request:", parsedRequest.error);
|
|
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
|
|
throw new ValidationError(`Invalid request: ${errorMessage}`);
|
|
}
|
|
return baseApiService.get(`/api/v1/logs/${request.id}`, getLogResponse);
|
|
};
|
|
|
|
/**
|
|
* Create a log entry
|
|
*/
|
|
createLog = async (request: CreateLogRequest) => {
|
|
const parsedRequest = createLogRequest.safeParse(request);
|
|
if (!parsedRequest.success) {
|
|
console.error("Invalid request:", parsedRequest.error);
|
|
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
|
|
throw new ValidationError(`Invalid request: ${errorMessage}`);
|
|
}
|
|
return baseApiService.post(`/api/v1/logs`, createLogResponse, {
|
|
body: parsedRequest.data,
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Update a log entry
|
|
*/
|
|
updateLog = async (logId: number, request: UpdateLogRequest) => {
|
|
const parsedRequest = updateLogRequest.safeParse(request);
|
|
if (!parsedRequest.success) {
|
|
console.error("Invalid request:", parsedRequest.error);
|
|
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
|
|
throw new ValidationError(`Invalid request: ${errorMessage}`);
|
|
}
|
|
return baseApiService.put(`/api/v1/logs/${logId}`, updateLogResponse, {
|
|
body: parsedRequest.data,
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Delete a log entry
|
|
*/
|
|
deleteLog = async (request: DeleteLogRequest) => {
|
|
const parsedRequest = deleteLogRequest.safeParse(request);
|
|
if (!parsedRequest.success) {
|
|
console.error("Invalid request:", parsedRequest.error);
|
|
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
|
|
throw new ValidationError(`Invalid request: ${errorMessage}`);
|
|
}
|
|
return baseApiService.delete(`/api/v1/logs/${parsedRequest.data.id}`, deleteLogResponse);
|
|
};
|
|
|
|
/**
|
|
* Get summary for logs by search space
|
|
*/
|
|
getLogSummary = async (request: GetLogSummaryRequest) => {
|
|
const parsedRequest = getLogSummaryRequest.safeParse(request);
|
|
if (!parsedRequest.success) {
|
|
console.error("Invalid request:", parsedRequest.error);
|
|
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
|
|
throw new ValidationError(`Invalid request: ${errorMessage}`);
|
|
}
|
|
const { search_space_id, hours } = parsedRequest.data;
|
|
const url = `/api/v1/logs/search-space/${search_space_id}/summary${hours ? `?hours=${hours}` : ""}`;
|
|
return baseApiService.get(url, getLogSummaryResponse);
|
|
};
|
|
}
|
|
|
|
export const logsApiService = new LogsApiService();
|