From 226ebf2ddf64405e9cdae1ee127464934727df58 Mon Sep 17 00:00:00 2001 From: CREDO23 Date: Mon, 15 Dec 2025 20:26:34 +0000 Subject: [PATCH] feat: create members.types.ts with membership and access schemas --- .../contracts/types/members.types.ts | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 surfsense_web/contracts/types/members.types.ts diff --git a/surfsense_web/contracts/types/members.types.ts b/surfsense_web/contracts/types/members.types.ts new file mode 100644 index 000000000..a6d6333ac --- /dev/null +++ b/surfsense_web/contracts/types/members.types.ts @@ -0,0 +1,87 @@ +import { z } from "zod"; +import { role } from "./roles.types"; + +export const membership = z.object({ + id: z.number(), + user_id: z.string(), + search_space_id: z.number(), + role_id: z.number().nullable(), + is_owner: z.boolean(), + joined_at: z.string(), + created_at: z.string(), + role: role.nullable().optional(), + user_email: z.string().nullable().optional(), + user_is_active: z.boolean().nullable().optional(), +}); + +/** + * Get members + */ +export const getMembersRequest = z.object({ + search_space_id: z.number(), +}); + +export const getMembersResponse = z.array(membership); + +/** + * Update membership + */ +export const updateMembershipRequest = z.object({ + search_space_id: z.number(), + membership_id: z.number(), + data: z.object({ + role_id: z.number(), + }), +}); + +export const updateMembershipResponse = membership; + +/** + * Delete membership + */ +export const deleteMembershipRequest = z.object({ + search_space_id: z.number(), + membership_id: z.number(), +}); + +export const deleteMembershipResponse = z.object({ + message: z.string(), +}); + +/** + * Leave search space + */ +export const leaveSearchSpaceRequest = z.object({ + search_space_id: z.number(), +}); + +export const leaveSearchSpaceResponse = z.object({ + message: z.string(), +}); + +/** + * Get my access + */ +export const getMyAccessRequest = z.object({ + search_space_id: z.number(), +}); + +export const getMyAccessResponse = z.object({ + user_id: z.string(), + search_space_id: z.number(), + is_owner: z.boolean(), + permissions: z.array(z.string()), + role_name: z.string().nullable(), +}); + +export type Membership = z.infer; +export type GetMembersRequest = z.infer; +export type GetMembersResponse = z.infer; +export type UpdateMembershipRequest = z.infer; +export type UpdateMembershipResponse = z.infer; +export type DeleteMembershipRequest = z.infer; +export type DeleteMembershipResponse = z.infer; +export type LeaveSearchSpaceRequest = z.infer; +export type LeaveSearchSpaceResponse = z.infer; +export type GetMyAccessRequest = z.infer; +export type GetMyAccessResponse = z.infer;