feat: initial import.

This commit is contained in:
mattia
2025-01-04 14:56:35 +01:00
commit 7751d37249
33 changed files with 6201 additions and 0 deletions

64
src/common/contract.ts Normal file
View File

@@ -0,0 +1,64 @@
import { initContract } from "@ts-rest/core";
import { z } from "zod";
const c = initContract();
//////
const GetSessionsResponseSchema = z.object({
total: z.number().positive(),
sessions: z
.object({
id: z.string(),
game_name: z.string(),
version: z.string(),
start_time: z.date(),
end_time: z.date(),
num_events: z.number().positive(),
})
.array(),
});
export type GetSessionsResponse = z.infer<typeof GetSessionsResponseSchema>;
const GetSessionsRequestQuery = z.object({
skip: z.coerce.number().optional(),
count: z.coerce.number().optional(),
id: z.string().optional(),
});
//////
const GetSessionResponseSchema = z.object({
game_name: z.string(),
version: z.string(),
log_entries: z.object({
message: z.string(),
timestamp: z.date(),
metadata: z.record(z.string(), z.string())
}).array(),
});
export type GetSessionResponse = z.infer<typeof GetSessionResponseSchema>;
//////
export const contract = c.router({
getSessions: {
method: "GET",
path: "/api/get-sessions",
responses: {
200: GetSessionsResponseSchema,
},
query: GetSessionsRequestQuery,
summary: "get all the sessions",
},
getSession: {
method: "GET",
path: "/api/get-session/:id",
responses: {
200: GetSessionResponseSchema,
},
summary: "get a session by id",
}
});

16
src/common/tsconfig.json Normal file
View File

@@ -0,0 +1,16 @@
{
"include": [
"**/*"
],
"exclude": ["../../node_modules"],
"compilerOptions": {
"isolatedModules": true,
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "node",
"types": [
"vite/client"
],
"jsx": "react-jsx"
}
}