Stage 1
This commit is contained in:
160
include/records.hrl
Normal file
160
include/records.hrl
Normal file
@@ -0,0 +1,160 @@
|
||||
%% ===================================================================
|
||||
%% 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()
|
||||
}).
|
||||
Reference in New Issue
Block a user