Files
archtika/web-app/src/routes/(authenticated)/website/[websiteId]/logs/+page.server.ts

64 lines
2.1 KiB
TypeScript
Raw Normal View History

2024-09-13 17:04:04 +02:00
import type { PageServerLoad } from "./$types";
2024-09-25 21:45:01 +02:00
import { API_BASE_PREFIX, apiRequest } from "$lib/server/utils";
2024-09-13 17:04:04 +02:00
import type { ChangeLog, User, Collab } from "$lib/db-schema";
2024-09-25 21:45:01 +02:00
export const load: PageServerLoad = async ({ parent, fetch, params, url }) => {
2024-09-13 17:04:04 +02:00
const userFilter = url.searchParams.get("logs_filter_user");
const resourceFilter = url.searchParams.get("logs_filter_resource");
const operationFilter = url.searchParams.get("logs_filter_operation");
2024-09-15 21:37:32 +02:00
const currentPage = Number.parseInt(url.searchParams.get("logs_results_page") ?? "1");
const resultOffset = (currentPage - 1) * 50;
2024-09-13 17:04:04 +02:00
const searchParams = new URLSearchParams();
const baseFetchUrl = `${API_BASE_PREFIX}/change_log?website_id=eq.${params.websiteId}&select=id,table_name,operation,tstamp,old_value,new_value,user_id,username&order=tstamp.desc`;
2024-09-13 17:04:04 +02:00
if (userFilter && userFilter !== "all") {
searchParams.append("username", `eq.${userFilter}`);
2024-09-13 17:04:04 +02:00
}
if (resourceFilter && resourceFilter !== "all") {
searchParams.append("table_name", `eq.${resourceFilter}`);
}
if (operationFilter && operationFilter !== "all") {
searchParams.append("operation", `eq.${operationFilter.toUpperCase()}`);
}
2024-09-15 21:37:32 +02:00
const constructedFetchUrl = `${baseFetchUrl}&${searchParams.toString()}&limit=50&offset=${resultOffset}`;
2024-09-13 17:04:04 +02:00
2024-09-25 21:45:01 +02:00
const changeLog: (ChangeLog & { user: { username: User["username"] } })[] = (
await apiRequest(fetch, constructedFetchUrl, "GET", { returnData: true })
).data;
2024-09-13 17:04:04 +02:00
2024-09-25 21:45:01 +02:00
const resultChangeLogData = await apiRequest(fetch, constructedFetchUrl, "HEAD", {
2024-09-13 17:04:04 +02:00
headers: {
Prefer: "count=exact"
2024-09-25 21:45:01 +02:00
},
returnData: true
2024-09-13 17:04:04 +02:00
});
const resultChangeLogCount = Number(
2024-09-25 21:45:01 +02:00
resultChangeLogData.data.headers.get("content-range")?.split("/").at(-1)
2024-09-13 17:04:04 +02:00
);
2024-09-25 21:45:01 +02:00
const collaborators: (Collab & { user: User })[] = (
await apiRequest(
fetch,
`${API_BASE_PREFIX}/collab?website_id=eq.${params.websiteId}&select=*,user!user_id(*)&order=last_modified_at.desc,added_at.desc`,
"GET",
{ returnData: true }
)
).data;
2024-09-13 17:04:04 +02:00
const { website, home } = await parent();
return {
changeLog,
resultChangeLogCount,
website,
home,
collaborators
};
};