diff --git a/surfsense_web/contracts/types/roles.types.ts b/surfsense_web/contracts/types/roles.types.ts new file mode 100644 index 000000000..31ad0e970 --- /dev/null +++ b/surfsense_web/contracts/types/roles.types.ts @@ -0,0 +1,86 @@ +import { z } from "zod"; + +export const role = z.object({ + id: z.number(), + name: z.string().min(1).max(100), + description: z.string().max(500).nullable(), + permissions: z.array(z.string()), + is_default: z.boolean(), + is_system_role: z.boolean(), + search_space_id: z.number(), + created_at: z.string(), +}); + +/** + * Create role + */ +export const createRoleRequest = z.object({ + search_space_id: z.number(), + data: role.pick({ + name: true, + description: true, + permissions: true, + is_default: true, + }), +}); + +export const createRoleResponse = role; + +/** + * Get roles + */ +export const getRolesRequest = z.object({ + search_space_id: z.number(), +}); + +export const getRolesResponse = z.array(role); + +/** + * Get role by ID + */ +export const getRoleByIdRequest = z.object({ + search_space_id: z.number(), + role_id: z.number(), +}); + +export const getRoleByIdResponse = role; + +/** + * Update role + */ +export const updateRoleRequest = z.object({ + search_space_id: z.number(), + role_id: z.number(), + data: role.pick({ + name: true, + description: true, + permissions: true, + is_default: true, + }).partial(), +}); + +export const updateRoleResponse = role; + +/** + * Delete role + */ +export const deleteRoleRequest = z.object({ + search_space_id: z.number(), + role_id: z.number(), +}); + +export const deleteRoleResponse = z.object({ + message: z.string(), +}); + +export type Role = z.infer; +export type CreateRoleRequest = z.infer; +export type CreateRoleResponse = z.infer; +export type GetRolesRequest = z.infer; +export type GetRolesResponse = z.infer; +export type GetRoleByIdRequest = z.infer; +export type GetRoleByIdResponse = z.infer; +export type UpdateRoleRequest = z.infer; +export type UpdateRoleResponse = z.infer; +export type DeleteRoleRequest = z.infer; +export type DeleteRoleResponse = z.infer;