TOI Platform — карта моделей данных

11 микросервисов · 72 сущности · Tortoise ORM, отдельная PostgreSQL БД на сервис

🗄 Открыть карту баз данных →
родитель (FK внутри сервиса) дочерние (обратная связь 1—N) связь с другим сервисом (логическая, без FK — общая БД отсутствует) 1—N / N—1 / 1—1 кардинальность

Обзор архитектуры

AUTH F USER external_id U·F HALL U·F PARTNER restaurant_id resource_id U BOOKING U CALENDAR U·F ECARD U CHAT calendar_event_id ⇄ source_id booking_id ⇄ ecard_event_id booking_request_id автономные сервисы — без прямых связей CATALOG NOTIFICATION
Стрелки — прямая бизнес-связь между сервисами. Бейдж «U» — сервис хранит user_id (ссылка на User-service), «F» — хранит file_id (ссылка на File-service). Catalog и Notification изолированы.

Сервисы и сущности

auth-service auth_db6 сущностей

AuthUser auth_user

AuthUserRole 1—1, AuthMagicLink, AuthPasswordReset, PlatformRoleAssignment, RefreshToken 1—N
user-service.User.external_user_id ссылается на external_id

AuthUserRole auth_user_role

AuthUser 1—1

AuthMagicLink auth_magic_link

AuthUser N—1

AuthPasswordReset auth_password_reset

AuthUser N—1

PlatformRoleAssignment platform_role_assignment

AuthUser N—1

RefreshToken refresh_token

AuthUser N—1
user-service user_db3 сущности

User user

Contacts 1—N; Subscription как follower и как following 1—N (self M:N)
auth-service.AuthUser.external_id (external_user_id)
file-service.StoredFileRecord.file_id (avatar_file_id)

Contacts contacts

User N—1

Subscription subscription

User × 2 — follower N—1, following N—1
file-service file_db1 сущность

StoredFileRecord stored_files

Внутренних связей нет. file_id (строковый PK) используется как логическая ссылка из user-, hall-, partner- и ecard-service.

hall-service hall_db15 сущностей

City cities

Restaurant 1—N

Restaurant restaurants

City N—1
Hall, PriceList, Media, RestaurantMembership, RestaurantInvitation, RestaurantOwnershipTransfer, RestaurantReview, RestaurantModerationRecord 1—N; RestaurantOwnershipDocument 1—1; Complaint 1—N
user-service.User (external_owner_user_id)

HallCategory hall_categories

Hall 1—N

Hall halls

Restaurant N—1, HallCategory N—1
Media, HallModerationRecord 1—N

PriceList price_lists

Restaurant N—1

Media media

Restaurant N—1, Hall N—1
MediaModerationRecord 1—N
file-service.StoredFileRecord (file_id)

RestaurantOwnershipDocument restaurant_ownership_documents

Restaurant 1—1
file-service.StoredFileRecord (file_id)

RestaurantMembership restaurant_memberships

Restaurant N—1
user-service.User (external_user_id)

RestaurantInvitation restaurant_invitations

Restaurant N—1
user-service.User (invited/accepted_by_external_user_id)

RestaurantOwnershipTransfer restaurant_ownership_transfers

Restaurant N—1
user-service.User (from/initiated/accepted_by_external_user_id)

RestaurantReview restaurant_reviews

Restaurant N—1
Complaint 1—N
booking-service.Booking (booking_id); user-service.User (external_user_id)

Complaint complaints

Restaurant N—1, RestaurantReview N—1
user-service.User (reporter/resolved_by_user_id)

RestaurantModerationRecord restaurant_moderation_records

Restaurant N—1
user-service.User (actor_external_user_id)

HallModerationRecord hall_moderation_records

Hall N—1
user-service.User (actor_external_user_id)

MediaModerationRecord media_moderation_records

Media N—1
user-service.User (actor_external_user_id)
partner-service partner_db18 сущностей

City cities

Partner 1—N

Language languages

ProfileLanguage 1—N

Category categories

Profile 1—N

Partner partners

City N—1
Profile, Media, Review, Recommendation, Verification, Subscription, PartnerDocument, PartnerModerationRecord, OwnershipTransfer 1—N; Contact 1—1; Complaint 1—N
user-service.User (external_user_id)

Profile profiles

Partner N—1, Category N—1
Service, ProfileLanguage, Media, Review 1—N

ProfileLanguage profile_languages

Profile N—1, Language N—1

Service services

Profile N—1

Contact contacts

Partner 1—1

Media media

Partner N—1, Profile N—1
file-service.StoredFileRecord (file_id)

Review reviews

Partner N—1, Profile N—1
Complaint 1—N
booking-service.Booking (booking_id); user-service.User (client_user_id)

Recommendation recommendations

Partner N—1
hall-service.Restaurant (restaurant_id)

Verification verifications

Partner N—1
user-service.User (checked_by_external_user_id)

Subscription subscriptions — тарифный план партнёра

Partner N—1

PartnerDocument partner_documents

Partner N—1
file-service.StoredFileRecord (file_id)

PartnerModerationRecord partner_moderation_records

Partner N—1
user-service.User (actor_external_user_id)

ContentModerationRecord content_moderation_records

Profile / Service / Media — полиморфно по target_type+target_id, без FK
user-service.User (actor_external_user_id)

OwnershipTransfer partner_ownership_transfers

Partner N—1
user-service.User (from/initiated/accepted_by_external_user_id)

Complaint complaints

Partner N—1, Review N—1
user-service.User (reporter/resolved_by_external_user_id)
booking-service booking_db7 сущностей

BookingRequest booking_requests

BookingRequestItem 1—N
user-service.User (client_user_id, resource_owner_user_id); hall-service.Hall / partner-service.Profile (resource_id, по resource_type); ecard-service.Event (ecard_event_id)

BookingRequestItem booking_request_items

BookingRequest N—1
hall-service.PriceList / partner-service.Service (external_item_id)

Booking bookings

BookingItem, BookingCancellation, BookingPaymentSnapshot, BookingCalendarSyncOutbox 1—N
BookingRequest.id (booking_request_id, без FK); user-service.User (client/resource_owner_user_id); hall-service.Hall / partner-service.Profile (resource_id); ecard-service.Event (ecard_event_id); calendar-service.CalendarEvent (calendar_booking_event_id)

BookingItem booking_items

Booking N—1
hall-service.PriceList / partner-service.Service (external_item_id)

BookingCancellation booking_cancellations

Booking N—1
user-service.User (cancelled_by_user_id)

BookingPaymentSnapshot booking_payment_snapshots

Booking N—1

BookingCalendarSyncOutbox booking_calendar_sync_outbox

Booking N—1
calendar-service.CalendarEvent (calendar_event_id)
calendar-service calendar_db3 сущности

CalendarEvent calendar_events

CalendarEventSource, CalendarSyncLog 1—N
hall-service.Hall / partner-service.Profile (resource_id, по resource_type); user-service.User (resource_owner_user_id, created_by_user_id)

CalendarEventSource calendar_event_sources

CalendarEvent N—1
booking-service.Booking / ecard-service.Event (source_id, по source_service)

CalendarSyncLog calendar_sync_logs

CalendarEvent N—1
booking-service.Booking / ecard-service.Event (source_id)
ecard-service ecard_db12 сущностей

EventType event_types

Event 1—N

Event events

EventType N—1
EventPage, Guest, GuestGroup, Answer, EventMedia, SubGuest 1—N
booking-service.Booking (external_booking_id); user-service.User (owner_id)

EventPage event_pages

Event N—1
PageBlock, Answer, PageVisit, RsvpClick 1—N

PageBlock page_blocks

EventPage N—1

Guest guests

Event N—1, GuestGroup N—1
SubGuest 1—N; Answer как guest и как answered_by_guest 1—N
user-service.User (external_user_id)

GuestGroup guest_groups

Event N—1
Guest 1—N

SubGuest sub_guests

Guest N—1, Event N—1

Answer answers

Event N—1, EventPage N—1, Guest × 2 — guest и answered_by_guest N—1

EventMedia event_media

Event N—1
user-service.User (author_id); file-service.StoredFileRecord (file_id)

PageVisit page_visits

EventPage N—1
user-service.User (external_user_id, опционально)

RsvpClick rsvp_clicks

EventPage N—1
user-service.User (external_user_id, опционально)

EventModerationRecord event_moderation_records

Event / EventPage — полиморфно по resource_type+resource_id, без FK
user-service.User (actor_external_user_id)
chat-service chat_db4 сущности

Conversation conversations

Message, ConversationRead, ConversationComplaint 1—N
booking-service.BookingRequest (booking_request_id); user-service.User (created_by_user_id)

Message messages

Conversation N—1
user-service.User (author_user_id)

ConversationRead conversation_reads

Conversation N—1
user-service.User (user_id)

ConversationComplaint conversation_complaints

Conversation N—1
user-service.User (complainant_user_id, resolved_by_user_id)
catalog-service catalog_db1 сущность

CatalogItem catalog_items

Автономная справочная модель. Внутренних и межсервисных связей нет.

notification-service notification_db2 сущности

Notification notifications

NotificationLog 1—N

Межсервисных ID-связей нет: recipient хранит email/телефон, а не ссылку на запись другого сервиса.

NotificationLog notification_logs

Notification N—1

Сводная таблица межсервисных связей

ОткудаКудаПоле
user-service.Userauth-service.AuthUserexternal_user_id → external_id
user-service.Userfile-service.StoredFileRecordavatar_file_id
booking-service.Booking/BookingRequestuser-service.Userclient_user_id, resource_owner_user_id
booking-service.*hall-service.Hallresource_id (resource_type=hall)
booking-service.*partner-service.Profileresource_id (resource_type=partner)
booking-service.*ecard-service.Eventecard_event_id
booking-service.Booking/Outboxcalendar-service.CalendarEventcalendar_booking_event_id, calendar_event_id
calendar-service.CalendarEventhall-service / partner-serviceresource_id (по resource_type)
calendar-service.*Source/SyncLogbooking-service.Booking / ecard-service.Eventsource_id (по source_service)
calendar-service.CalendarEventuser-service.Userresource_owner_user_id, created_by_user_id
chat-service.Conversationbooking-service.BookingRequestbooking_request_id
chat-service.*user-service.Userauthor_user_id, user_id, complainant/resolved_by_user_id
ecard-service.Eventbooking-service.Bookingexternal_booking_id
ecard-service.*user-service.Userowner_id, external_user_id, author_id, actor_external_user_id
ecard-service.EventMediafile-service.StoredFileRecordfile_id
hall-service.Restaurantuser-service.Userexternal_owner_user_id
hall-service.*user-service.Userexternal_user_id, *_by_user_id, reporter_user_id
hall-service.RestaurantReviewbooking-service.Bookingbooking_id
hall-service.Media/OwnershipDocumentfile-service.StoredFileRecordfile_id
partner-service.Partneruser-service.Userexternal_user_id
partner-service.Reviewbooking-service.Bookingbooking_id
partner-service.Reviewuser-service.Userclient_user_id
partner-service.Recommendationhall-service.Restaurantrestaurant_id
partner-service.Media/PartnerDocumentfile-service.StoredFileRecordfile_id
partner-service.* (Verification, ModerationRecord, OwnershipTransfer, Complaint)user-service.User*_external_user_id