import { CustomFieldWithUserCopyValue, CustomFieldWithValidatorsAndValue, CustomFieldWithValue, InputFieldValue, } from "../types/custom-fields-types.js"; import { z } from "zod"; class ClientPartEntitiesApi { GET_EventPeTypes = { res: z.object({ code: z.enum(["success"]), peTypes: z.array( z.object({ peTypeId: z.string().uuid(), code: z.string(), name: z.string(), }), ), }), }; GET_PeType = { req: z.object({ peTypeCode: z.string(), }), res: z.object({ code: z.enum(["success"]), peType: z.object({ peTypeId: z.string().uuid(), code: z.string(), name: z.string(), fields: z.array( CustomFieldWithUserCopyValue.extend({ peFfId: z.string(), }), ), }), }), }; GET_MyPes = { res: z.object({ code: z.enum(["success"]), owner: z.array( z.object({ peId: z.string().uuid(), peTypeId: z.string().uuid(), peTypeCode: z.string(), peTypeName: z.string(), name: z.string(), eventInstId: z.string().uuid(), ownerId: z.string().uuid(), }), ), memeber: z.array( z.object({ peMemberId: z.string().uuid(), peId: z.string().uuid(), peTypeId: z.string().uuid(), peTypeCode: z.string(), peTypeName: z.string(), ownerId: z.string().uuid(), name: z.string(), }), ), }), }; GET_PartEntity = { req: z.object({ peId: z.string().uuid(), }), res: z.object({ code: z.enum(["success"]), pe: z.discriminatedUnion("userRole", [ z.object({ userRole: z.literal("owner"), peId: z.string().uuid(), peTypeId: z.string().uuid(), peTypeCode: z.string(), peTypeName: z.string(), maxMembers: z.number().int().nullable(), isWithMembers: z.boolean(), eventInstId: z.string().uuid(), name: z.string(), ownerId: z.string().uuid(), fields: z.array( CustomFieldWithValue.extend({ peFfId: z.string().uuid() }), ), members: z.array( z.object({ peMemberId: z.string(), userId: z.string().uuid(), email: z.string().email(), fields: z.array( CustomFieldWithValue.extend({ userEfId: z.string().uuid() }), ), }), ), invites: z.array( z.object({ peInviteId: z.string().uuid(), peInviteUuid: z.string().uuid(), name: z.string(), limitVal: z.number().int().nullable(), countVal: z.number().int(), expirationDate: z.string().datetime().nullable(), }), ), peMembersRequests: z.array( z.object({ peMemberRequestId: z.string().uuid(), peInviteId: z.string().uuid(), userId: z.string().uuid(), userIdentity: z.string(), status: z.enum(["PENDING", "ACCEPTED", "REJECTED"]), }), ), }), z.object({ userRole: z.literal("member"), peId: z.string().uuid(), peTypeId: z.string().uuid(), peTypeCode: z.string(), peTypeName: z.string(), eventInstId: z.string().uuid(), ownerId: z.string().uuid(), name: z.string(), }), ]), }), }; POST_PartEntity = { req: { formData: { body: z.object({ peTypeCode: z.string(), name: z.string(), fields: z.array( z.object({ peFfId: z.string().uuid(), value: InputFieldValue, }), ), }), }, }, res: z.object({ code: z.enum(["success"]), peId: z.string().uuid(), }), }; GET_PeForPatch = { req: z.object({ peId: z.string().uuid(), }), res: z.object({ code: z.enum(["success"]), pe: z.object({ peId: z.string().uuid(), peTypeId: z.string().uuid(), peTypeCode: z.string(), peTypeName: z.string(), eventInstId: z.string().uuid(), ownerId: z.string().uuid(), name: z.string(), fields: z.array( CustomFieldWithValidatorsAndValue.extend({ peFfId: z.string().uuid(), }), ), }), }), }; PATCH_PartEntity = { req: { formData: { body: z.object({ name: z.string().optional(), fields: z.array( z.object({ peFfId: z.string().uuid(), value: InputFieldValue, }), ), }), }, params: z.object({ peId: z.string().uuid(), }), }, res: z.object({ code: z.enum(["success"]), }), }; POST_Invite = { req: { body: z.object({ name: z.string(), limitVal: z.number().int().nullable(), expirationDate: z.string().datetime().nullable(), }), params: z.object({ peId: z.string().uuid(), }), }, res: z.object({ code: z.enum(["success"]), peInviteId: z.string().uuid(), }), }; GET_Invites = { req: z.object({ peId: z.string().uuid(), }), res: z.object({ code: z.enum(["success"]), invites: z.array( z.object({ peInviteId: z.string().uuid(), peInviteUuid: z.string().uuid(), name: z.string(), limitVal: z.number().int().nullable(), countVal: z.number().int(), expirationDate: z.string().datetime().nullable(), }), ), }), }; GET_InviteInfo = { req: { params: z.object({ peInviteUuid: z.string().uuid(), }), }, res: z.object({ code: z.enum(["success"]), invite: z.object({ peInviteId: z.string().uuid(), peInviteUuid: z.string().uuid(), peId: z.string().uuid(), peName: z.string(), peOwnerId: z.string().uuid(), expirationDate: z.string().datetime().nullable(), peOwnerIdentity: z.string(), }), }), }; POST_AcceptInvite = { req: { params: z.object({ peInviteUuid: z.string().uuid(), }), }, res: z.discriminatedUnion("code", [ z.object({ code: z.literal("success"), peId: z.string().uuid(), }), z.object({ code: z.literal("inviteNotFound"), }), z.object({ code: z.literal("inviteLimitExceeded"), }), z.object({ code: z.literal("peMemberAlreadyExists"), }), z.object({ code: z.literal("peMemberInviteAlreadyExists"), }), z.object({ code: z.literal("inviteExpired"), }), ]), }; PATCH_PeMembersRequests = { req: { body: z.array( z.object({ peMemberRequestId: z.string().uuid(), status: z.enum(["ACCEPTED", "REJECTED"]), }), ), }, res: z.object({ code: z.enum(["success"]), }), }; GET_MyPesForActivity = { res: z.object({ code: z.enum(["success"]), pes: z.array( z.object({ peId: z.string().uuid(), peTypeId: z.string().uuid(), peTypeCode: z.string(), peTypeName: z.string(), eventInstId: z.string().uuid(), ownerId: z.string().uuid(), name: z.string(), members: z.array( z.object({ peMemberId: z.string().uuid(), userId: z.string().uuid(), email: z.string().email(), fields: z.array( CustomFieldWithValue.extend({ userEfId: z.string().uuid(), }), ), }), ), fields: z.array( CustomFieldWithValue.extend({ peFfId: z.string().uuid(), }), ), }), ), }), }; DELETE_PeMember = { req: { params: z.object({ peMemberId: z.string().uuid(), }), }, res: z.object({ code: z.enum(["success"]), }), }; GET_RelatedActivityRegsToPe = { req: { params: z.object({ peId: z.string().uuid(), }), }, res: z.object({ code: z.enum(["success"]), activityRegs: z.array( z.object({ activityRegId: z.string().uuid(), activityRegNumber: z.string(), }), ), }), }; } export const clientPartEntitiesApi = new ClientPartEntitiesApi();