Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 1x 1x 4x 4x 4x 4x 5x 1x 1x 1x 1x 1x 5x | import { LOG_ENDPOINT } from "./types/endpoints";
import { LogData } from "./types/event";
import { convertToSnakeCase } from "../utils";
/**
* Logs a user interaction event related to an AI-generated suggestion.
*
* Converts the event data to snake_case and sends it to the backend logging service.
*
* @param logData - The data describing the user event to be logged.
*/
export function trackEvent(logData: LogData) {
const logDataForBackend = convertToSnakeCase(logData);
console.log("Logging data for event:", logDataForBackend.event);
fetch(LOG_ENDPOINT, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(logDataForBackend),
}).catch((err) => console.error("Failed to log data:", err));
}
/**
* Fetches all logged user interaction events for a specific user.
*
* Supports optional filtering by user section ID and/or user class ID.
*
* @param userId - The unique ID of the user whose logs should be fetched.
* @param userSectionId - (Optional) The section ID to filter logs by user section.
* @param userClassId - (Optional) The class ID to filter logs by user class.
* @returns A promise resolving to an object containing either the logs array or an error message.
*/
export async function getLogsByUser(
userId: string,
userSectionId?: string,
userClassId?: string
): Promise<{ logs?: LogData[]; error?: string }> {
try {
const url = new URL(`${LOG_ENDPOINT}/${userId}`);
if (userSectionId) {
url.searchParams.append("user_section_id", userSectionId);
}
if (userClassId) {
url.searchParams.append("user_class_id", userClassId);
}
const response = await fetch(url.toString(), {
method: "GET",
headers: { "Content-Type": "application/json" },
});
if (!response.ok) {
throw new Error(`Failed to fetch logs: ${response.statusText}`);
}
const data = await response.json();
return { logs: data.data };
} catch (error) {
console.error("Error fetching logs:", error);
return {
error: error instanceof Error ? error.message : "Unknown error occurred",
};
}
}
|