Рефакторинг обработчиков. Финальное тестирование #21

This commit is contained in:
2026-05-18 14:37:59 +03:00
parent 40806df62a
commit 3abf5c94ee
21 changed files with 630 additions and 89 deletions
+13 -37
View File
@@ -4,8 +4,6 @@
start(_StartType, _StartArgs) ->
pg:start_link(),
application:ensure_all_started(mnesia),
application:ensure_all_started(cowboy),
case infra_sup:start_link() of
{ok, Pid} ->
% Определяем список узлов кластера, если режим CLUSTER_MODE=true
@@ -22,7 +20,7 @@ start(_StartType, _StartArgs) ->
lists:prefix("eventhub-node", Name)];
_ -> []
end
end, IPs),
end, IPs),
% Исключаем свой узел, чтобы не подключаться к самому себе
AllNodes -- [node()];
_ -> []
@@ -40,15 +38,16 @@ start(_StartType, _StartArgs) ->
io:format("~nCluster: discovered nodes ~p, joining cluster~n", [Nodes]),
application:set_env(eventhub, extra_db_nodes, Nodes)
end,
application:ensure_all_started(mnesia),
ok = infra_mnesia:init_tables(),
ok = infra_mnesia:wait_for_tables(),
calendar_html_renderer:init_cache(),
application:ensure_all_started(cowboy),
start_http(), % Пользовательский API (8080)
start_admin_http(), % Административный API (8445)
start_swagger_http(), % Swagger UI и спецификация (8447)
application:ensure_all_started(prometheus),
application:ensure_all_started(prometheus_cowboy),
init_default_admins(),
{ok, Pid};
Error ->
Error
@@ -91,7 +90,11 @@ start_http() ->
]),
Middlewares = [cowboy_router, cowboy_handler],
Env = #{dispatch => Dispatch},
cowboy:start_clear(http, [{port, Port}], #{env => Env, middlewares => Middlewares}),
cowboy:start_clear(http, [{port, Port}],
#{env => Env, middlewares => Middlewares,
metrics_callback => fun prometheus_cowboy2_instrumenter:observe/1,
stream_handlers => [cowboy_metrics_h, cowboy_stream_h]
}),
io:format("HTTP server started on port ~p~n", [Port]).
%% ===================================================================
@@ -139,7 +142,11 @@ start_admin_http() ->
Middlewares = [cowboy_router, cowboy_handler],
Env = #{dispatch => Dispatch},
cowboy:start_clear(admin_http, [{port, PortAdmin}], #{env => Env, middlewares => Middlewares}),
cowboy:start_clear(admin_http, [{port, PortAdmin}],
#{env => Env, middlewares => Middlewares,
metrics_callback => fun prometheus_cowboy2_instrumenter:observe/1,
stream_handlers => [cowboy_metrics_h, cowboy_stream_h]
}),
io:format("Admin HTTP server started on port ~p~n", [PortAdmin]),
% WebSocket для пользователей
@@ -170,37 +177,6 @@ start_swagger_http() ->
cowboy:start_clear(swagger_http, [{port, PortSwagger}], #{env => Env, middlewares => Middlewares}),
io:format("Swagger HTTP server started on port ~p~n", [PortSwagger]).
%% ---------- Инициализация администраторов ----------
init_default_admins() ->
case core_admin:list_all() of
[] ->
% Суперадмин
SuperEmail = list_to_binary(os:getenv("ADMIN_SUPER_EMAIL", "superadmin@eventhub.local")),
SuperPass = list_to_binary(os:getenv("ADMIN_SUPER_PASSWORD", "123456")),
{ok, _} = core_admin:create(SuperEmail, SuperPass, superadmin),
io:format("Default superadmin created: ~s~n", [SuperEmail]),
% Админ
AdminEmail = list_to_binary(os:getenv("ADMIN_EMAIL", "admin@eventhub.local")),
AdminPass = list_to_binary(os:getenv("ADMIN_PASSWORD", "123456")),
{ok, _} = core_admin:create(AdminEmail, AdminPass, admin),
io:format("Default admin created: ~s~n", [AdminEmail]),
% Модератор
ModerEmail = list_to_binary(os:getenv("ADMIN_MODER_EMAIL", "moderator@eventhub.local")),
ModerPass = list_to_binary(os:getenv("ADMIN_MODER_PASSWORD", "123456")),
{ok, _} = core_admin:create(ModerEmail, ModerPass, moderator),
io:format("Default moderator created: ~s~n", [ModerEmail]),
% Поддержка
SupportEmail = list_to_binary(os:getenv("ADMIN_SUPPORT_EMAIL", "support@eventhub.local")),
SupportPass = list_to_binary(os:getenv("ADMIN_SUPPORT_PASSWORD", "123456")),
{ok, _} = core_admin:create(SupportEmail, SupportPass, support),
io:format("Default support created: ~s~n", [SupportEmail]);
_ ->
io:format("Admins already exist. Skipping creation.~n")
end.
get_env_int(Key, Default) ->
case application:get_env(eventhub, Key, Default) of
Val when is_list(Val) -> list_to_integer(Val);