import { FieldTypeCode } from "#api/v_0.1.0/types/custom-fields-types.js"; // Удалено, т.к. field_types.code теперь varchar import { z } from "zod"; const DbSchema = { usr: { users: { userId: z.string().uuid(), email: z.string().email(), password: z.string(), wrongPassTries: z.number().int().default(0), }, roles: { roleId: z.string().uuid(), name: z.string(), eventId: z.string().uuid().nullable(), eventTypeId: z.string().uuid().nullable(), }, groups: { groupId: z.string().uuid(), name: z.string(), }, roleGroups: { roleId: z.string().uuid(), groupId: z.string().uuid(), }, perms: { permId: z.string().uuid(), code: z.string(), name: z.string(), objId: z.string().uuid(), }, objects: { objId: z.string().uuid(), code: z.string(), name: z.string(), description: z.string(), }, groupPerms: { groupId: z.string().uuid(), permId: z.string().uuid(), }, userRoles: { roleId: z.string().uuid(), userId: z.string().uuid(), eventId: z.string().uuid(), }, confirmPins: { transactionId: z.string().uuid(), email: z.string().email(), confirmPin: z.string(), createTime: z.string().datetime(), // timestamp в БД wrongPinTries: z.number().int().default(0), // int2 в БД }, userRefreshTokens: { tokenId: z.string().uuid(), userId: z.string().uuid(), refreshToken: z.string(), rotDate: z.string().datetime(), // timestamp в БД }, }, ev: { events: { eventId: z.string().uuid(), code: z.string(), eventTypeId: z.string().uuid(), ownerId: z.string().uuid(), }, eventInst: { eventInstId: z.string().uuid(), eventId: z.string().uuid(), privateName: z.string(), publicName: z.string(), timezone: z.string(), isCurrent: z.boolean().default(false), }, eventTypes: { eventTypeId: z.string().uuid(), code: z.string(), name: z.string(), }, userEventFields: { // Таблица user_event_fields из новой БД userEfId: z.string().uuid(), eventId: z.string().uuid(), fieldDefinitionId: z.string().uuid(), fieldTitleOverride: z.string().nullable(), userIdentityOrdinalNumber: z.number().int().nullable(), orderNumber: z.number().int().nullable(), }, userEventFieldValues: { // Таблица user_event_fields_values из новой БД userEfId: z.string().uuid(), userId: z.string().uuid(), value: z.string().nullable(), }, eventDates: { evDateId: z.string().uuid(), eventInstId: z.string().uuid(), date: z.string().datetime(), // timestamp в БД }, locations: { locationId: z.string().uuid(), name: z.string(), eventInstId: z.string().uuid(), }, areas: { areaId: z.string().uuid(), name: z.string(), locationId: z.string().uuid(), parentId: z.string().uuid().nullable(), }, programBlocks: { blockId: z.string().uuid(), name: z.string(), eventInstId: z.string().uuid(), }, programPoints: { pointId: z.string().uuid(), name: z.string(), dateStart: z.string().datetime().nullable(), // timestamp в БД dateEnd: z.string().datetime().nullable(), // timestamp в БД eventInstId: z.string().uuid(), areaId: z.string().uuid().nullable(), blockId: z.string().uuid().nullable(), isInternal: z.boolean(), }, }, act: { activityCategories: { categoryId: z.string().uuid(), code: z.string(), // Новое поле name: z.string(), eventInstId: z.string().uuid(), parentId: z.string().uuid().nullable(), }, peTypes: { peTypeId: z.string().uuid(), eventInstId: z.string().uuid(), code: z.string(), name: z.string(), }, actValidators: { actValidatorId: z.string().uuid(), code: z.string(), name: z.string(), description: z.string(), isPeValidator: z.boolean(), }, actRegValidators: { actValidatorId: z.string().uuid(), activityId: z.string().uuid(), value: z.string().nullable(), value2: z.string().nullable(), errorMessage: z.string().nullable(), }, activities: { activityId: z.string().uuid(), code: z.string(), // Новое поле privateName: z.string(), publicName: z.string(), eventInstId: z.string().uuid(), categoryId: z.string().uuid().nullable(), blockId: z.string().uuid().nullable(), isUserReg: z.boolean(), paymentConfig: z.enum([ "PER_REGISTRATION", "PER_PARTICIPANT", "FREE", "NONE", ]), registrationProductId: z.string().uuid().nullable(), participantProductId: z.string().uuid().nullable(), initialRegStatusId: z.string().uuid(), nextRegStatusIdAfterPayment: z.string().uuid(), }, activityPeTypes: { activityId: z.string().uuid(), peTypeId: z.string().uuid(), }, partEntities: { peId: z.string().uuid(), peTypeId: z.string().uuid(), eventInstId: z.string().uuid(), ownerId: z.string().uuid(), name: z.string(), }, peInvites: { peInviteId: z.string().uuid(), peInviteUuid: z.string().uuid(), peId: z.string().uuid(), limitVal: z.number().int().nullable(), countVal: z.number().int(), name: z.string(), expirationDate: z.string().datetime().nullable(), }, peMembersRequests: { peMemberRequestId: z.string().uuid(), peInviteId: z.string().uuid(), userId: z.string().uuid(), status: z.enum(["PENDING", "ACCEPTED", "REJECTED"]), created_at: z.string().datetime(), updated_at: z.string().datetime(), }, peMembers: { peMemberId: z.string().uuid(), userId: z.string().uuid(), peId: z.string().uuid(), isActive: z.boolean(), }, activityRegFormFields: { // Таблица activity_reg_form_fields из новой БД arffId: z.string().uuid(), activityId: z.string().uuid(), fieldDefinitionId: z.string().uuid(), fieldTitleOverride: z.string().nullable(), isCopyUserValue: z.boolean(), isChangeResetStatus: z.boolean(), orderNumber: z.number().int().nullable(), }, activityRegs: { activityRegId: z.string().uuid(), activityId: z.string().uuid(), peId: z.string().uuid().nullable(), userId: z.string().uuid().nullable(), isPaid: z.boolean(), number: z.string(), isCanceled: z.boolean(), }, actRegStatuses: { actRegStatusId: z.string().uuid(), code: z.string(), name: z.string(), color: z.string().nullable(), isPaymentOpen: z.boolean(), }, actRegStatusHistory: { statusHistoryId: z.string().uuid(), activityRegId: z.string().uuid(), actRegStatusId: z.string().uuid(), note: z.string().nullable(), setDate: z.string().datetime(), }, arFieldValues: { // Таблица ar_field_values из новой БД activityRegId: z.string().uuid(), arffId: z.string().uuid(), value: z.string().nullable(), }, peFormFields: { // Таблица pe_form_fields из новой БД peFfId: z.string().uuid(), peTypeId: z.string().uuid(), fieldDefinitionId: z.string().uuid(), fieldTitleOverride: z.string().nullable(), isCopyUserValue: z.boolean(), orderNumber: z.number().int().nullable(), }, peFieldValues: { // Таблица pe_field_values из новой БД peFfId: z.string().uuid(), // Изменено с fieldDefinitionId peId: z.string().uuid(), value: z.string().nullable(), }, }, cf: { fieldTypes: { fieldTypeId: z.string().uuid(), code: FieldTypeCode, // Ранее FieldTypeCode, теперь varchar в БД }, fieldValidators: { validatorId: z.string().uuid(), code: z.string(), name: z.string(), fieldTypeId: z.string().uuid().nullable(), }, customFieldDefinitions: { fieldDefinitionId: z.string().uuid(), code: z.string().nullable(), fieldTypeId: z.string().uuid(), title: z.string(), mask: z.string().nullable(), options: z.array(z.string()).nullable(), // jsonb в БД, оставляем как массив строк для совместимости с прошлым использованием }, customFieldValidators: { fieldDefinitionId: z.string().uuid(), validatorId: z.string().uuid(), value: z.string().nullable(), errorMessage: z.string().nullable(), // Новое поле }, }, shop: { productCategories: { categoryId: z.string().uuid(), parentCategoryId: z.string().uuid().nullable(), name: z.string(), description: z.string().nullable(), code: z.string(), }, products: { productId: z.string().uuid(), categoryId: z.string().nullable(), productType: z.enum([ "SHOP_ORDER", "TICKET", "ACTIVITY_REGISTRATION", "ACTIVITY_PARTICIPANT", ]), sku: z.string().nullable(), name: z.string(), description: z.string().nullable(), price: z.number(), currencyCode: z.string().length(3), stockQuantity: z.number().nullable(), isActive: z.boolean(), attributes: z.any().nullable(), createdAt: z.string().datetime(), updatedAt: z.string().datetime(), }, carts: { cartId: z.string().uuid(), userId: z.string().uuid().nullable(), createdAt: z.string().datetime(), updatedAt: z.string().datetime(), }, cartItems: { cartItemId: z.string().uuid(), cartId: z.string().uuid(), productId: z.string().uuid(), // quantity: z.number(), priceAtAddition: z.number(), activityRegId: z.string().uuid().nullable(), peMemberId: z.string().uuid().nullable(), addedAt: z.string().datetime(), orderId: z.string().uuid().nullable(), }, orders: { orderId: z.string().uuid(), userId: z.string().uuid().nullable(), orderNumber: z.string(), status: z.enum([ "DRAFT", "PENDING_PAYMENT", "PAID", "PROCESSING", "COMPLETED", "CANCELLED", "FAILED", ]), totalAmount: z.number(), currencyCode: z.string().length(3), billingDataSnapshot: z.any().nullable(), createdAt: z.string().datetime(), updatedAt: z.string().datetime(), paidAt: z.string().datetime().nullable(), completedAt: z.string().datetime().nullable(), paymentDueDate: z.string().datetime(), }, orderItems: { orderItemId: z.string().uuid(), orderId: z.string().uuid(), productId: z.string().uuid(), // quantity: z.number(), unitPrice: z.number(), activityRegId: z.string().uuid().nullable(), peMemberId: z.string().uuid().nullable(), attributesSnapshot: z.any().nullable(), status: z.enum([ "PENDING_PAYMENT", "PAID", "CANCELLED", "FAILED", "REFUNDED", ]), }, payments: { paymentId: z.string().uuid(), orderId: z.string().uuid(), userId: z.string().uuid().nullable(), amount: z.number(), currencyCode: z.string().length(3), paymentMethod: z.enum(["CARD", "SBP"]), bank: z.enum(["YOOKASSA"]), status: z.enum([ "PENDING", "SUCCEEDED", "FAILED", "REFUNDED", "CANCELED", ]), externalTransactionId: z.string().nullable(), paymentGatewayDetails: z.any().nullable(), createdAt: z.string().datetime(), updatedAt: z.string().datetime(), confirmation: z .object({ type: z.enum([ "redirect", "qr", "embedded", "external", "mobile_application", ]), confirmationUrl: z.string().url().nullable(), }) .nullable(), }, }, }; export { DbSchema };