%% =================================================================== %% EventHub Records Definition %% =================================================================== %% ------------------- Пользователи и аутентификация ------------------- -record(user, { id :: binary(), email :: binary(), password_hash :: binary(), role :: user | admin, status :: active | frozen | deleted, created_at :: calendar:datetime(), updated_at :: calendar:datetime() }). -record(session, { token :: binary(), % JWT или refresh токен user_id :: binary(), expires_at :: calendar:datetime(), type :: access | refresh }). %% ------------------- Календари --------------------------------------- -record(calendar, { id :: binary(), owner_id :: binary(), title :: binary(), description :: binary(), tags :: [binary()], type :: personal | commercial, confirmation :: auto | manual | {timeout, integer()}, % секунд rating_avg :: float(), rating_count :: non_neg_integer(), status :: active | frozen | deleted, created_at :: calendar:datetime(), updated_at :: calendar:datetime() }). -record(calendar_share, { calendar_id :: binary(), user_id :: binary(), rights :: read | write | admin }). -record(location, { address :: binary(), lat :: float(), lon :: float() }). %% ------------------- События (включая повторяющиеся) ---------------- -record(event, { id :: binary(), calendar_id :: binary(), title :: binary(), description :: binary(), event_type :: single | recurring, start_time :: calendar:datetime(), duration :: integer(), % минуты recurrence_rule :: binary() | undefined, master_id :: binary() | undefined, is_instance :: boolean(), specialist_id :: binary() | undefined, location :: #location{} | undefined, tags :: [binary()], capacity :: integer() | undefined, online_link :: binary() | undefined, status :: active | cancelled | completed, rating_avg :: float(), rating_count :: non_neg_integer(), created_at :: calendar:datetime(), updated_at :: calendar:datetime() }). -record(recurrence_exception, { master_id :: binary(), original_start :: calendar:datetime(), action :: cancel | reschedule, new_start :: calendar:datetime() | undefined }). %% ------------------- Бронирования ------------------------------------ -record(booking, { id :: binary(), event_id :: binary(), % ссылка на конкретный экземпляр события user_id :: binary(), status :: pending | confirmed | cancelled, confirmed_at :: calendar:datetime() | undefined, created_at :: calendar:datetime(), updated_at :: calendar:datetime() }). %% ------------------- Отзывы ------------------------------------------ -record(review, { id :: binary(), user_id :: binary(), target_type :: calendar | event, target_id :: binary(), rating :: 1..5, comment :: binary(), status :: visible | hidden | deleted, created_at :: calendar:datetime(), updated_at :: calendar:datetime() }). %% ------------------- Жалобы и модерация ------------------------------ -record(report, { id :: binary(), reporter_id :: binary(), target_type :: calendar | event | review, target_id :: binary(), reason :: binary(), status :: pending | reviewed | dismissed, created_at :: calendar:datetime(), resolved_at :: calendar:datetime() | undefined, resolved_by :: binary() | undefined }). -record(banned_word, { id :: binary(), word :: binary() }). %% ------------------- Баг-трекер -------------------------------------- -record(ticket, { id :: binary(), error_hash :: binary(), error_message :: binary(), stacktrace :: binary(), count :: non_neg_integer(), first_seen :: calendar:datetime(), last_seen :: calendar:datetime(), status :: open | in_progress | resolved | closed, assigned_to :: binary() | undefined, resolution_note :: binary() | undefined }). %% ------------------- Подписки ---------------------------------------- -record(subscription, { id :: binary(), user_id :: binary(), plan :: monthly | quarterly | biannual | annual, status :: active | expired | cancelled, trial_used :: boolean(), started_at :: calendar:datetime(), expires_at :: calendar:datetime(), created_at :: calendar:datetime(), updated_at :: calendar:datetime() }). %% ------------------- Аудит ------------------------------------------- -record(audit_log, { id :: binary(), admin_id :: binary(), action :: binary(), target_type :: binary() | undefined, target_id :: binary() | undefined, details :: binary() | undefined, created_at :: calendar:datetime() }).