mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-26 01:06:23 +02:00
feat: add logs api service
This commit is contained in:
parent
ff47ac911b
commit
eae84d1229
2 changed files with 160 additions and 49 deletions
119
surfsense_web/lib/apis/logs-api.service.ts
Normal file
119
surfsense_web/lib/apis/logs-api.service.ts
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
import {
|
||||
type CreateLogRequest,
|
||||
createLogRequest,
|
||||
createLogResponse,
|
||||
type DeleteLogRequest,
|
||||
deleteLogRequest,
|
||||
deleteLogResponse,
|
||||
type GetLogRequest,
|
||||
type GetLogSummaryRequest,
|
||||
type GetLogsRequest,
|
||||
getLogRequest,
|
||||
getLogResponse,
|
||||
getLogSummaryRequest,
|
||||
getLogSummaryResponse,
|
||||
getLogsRequest,
|
||||
getLogsResponse,
|
||||
type Log,
|
||||
log,
|
||||
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}`);
|
||||
}
|
||||
const transformedQueryParams = Object.fromEntries(
|
||||
Object.entries(parsedRequest.data).map(([k, v]) => [
|
||||
k,
|
||||
Array.isArray(v) ? v.join(",") : String(v),
|
||||
])
|
||||
);
|
||||
const queryParams = 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();
|
||||
Loading…
Add table
Add a link
Reference in a new issue