Добавить автомодерацию: политики, порог жалоб, settings/hits API и тесты.
CI / test (push) Failing after 37m9s
CI / deploy-ift (push) Has been skipped
CI / e2e-ift (push) Has been skipped
CI / deploy-stage (push) Has been skipped
CI / e2e-stage (push) Has been skipped

Refs EventHub/EventHubBack#37
Refs EventHub/EventHubBack#38
Refs EventHub/EventHubBack#39
Refs EventHub/EventHubBack#40
This commit is contained in:
2026-07-17 18:09:31 +03:00
parent 4fa802702f
commit e9d1a13900
27 changed files with 1779 additions and 85 deletions
+21 -9
View File
@@ -171,11 +171,12 @@ create_event(Req) ->
case handler_utils:parse_datetime(StartTimeStr) of
{ok, StartTime} ->
Location = parse_location(maps:get(<<"location">>, Decoded, undefined)),
case maps:get(<<"recurrence">>, Decoded, undefined) of
Description = maps:get(<<"description">>, Decoded, <<>>),
case maps:get(<<"recurrence">>, Decoded, undefined) of
undefined ->
case logic_event:create_event(UserId, CalendarId, Title, StartTime, Duration) of
case logic_event:create_event(UserId, CalendarId, Title, StartTime, Duration, Description) of
{ok, Event} ->
update_event_fields(Event#event.id, Location, Decoded),
update_event_fields(UserId, Event#event.id, Location, Decoded),
{ok, UpdatedEvent} = core_event:get_by_id(Event#event.id),
Response = handler_utils:event_to_json(UpdatedEvent),
handler_utils:send_json(Req2, 201, Response);
@@ -185,13 +186,15 @@ create_event(Req) ->
handler_utils:send_error(Req2, 404, <<"Calendar not found">>);
{error, event_in_past} ->
handler_utils:send_error(Req2, 400, <<"Event cannot be in the past">>);
{error, {content_banned, _}} ->
handler_utils:send_error(Req2, 400, <<"Content contains banned words">>);
{error, _} ->
handler_utils:send_error(Req2, 500, <<"Internal server error">>)
end;
RRule ->
case logic_event:create_recurring_event(UserId, CalendarId, Title, StartTime, Duration, RRule) of
case logic_event:create_recurring_event(UserId, CalendarId, Title, StartTime, Duration, RRule, Description) of
{ok, Event} ->
update_event_fields(Event#event.id, Location, Decoded),
update_event_fields(UserId, Event#event.id, Location, Decoded),
{ok, UpdatedEvent} = core_event:get_by_id(Event#event.id),
Response = handler_utils:event_to_json(UpdatedEvent),
handler_utils:send_json(Req2, 201, Response);
@@ -203,6 +206,8 @@ create_event(Req) ->
handler_utils:send_error(Req2, 404, <<"Calendar not found">>);
{error, event_in_past} ->
handler_utils:send_error(Req2, 400, <<"Event cannot be in the past">>);
{error, {content_banned, _}} ->
handler_utils:send_error(Req2, 400, <<"Content contains banned words">>);
{error, _} ->
handler_utils:send_error(Req2, 500, <<"Internal server error">>)
end
@@ -257,14 +262,21 @@ list_events(Req) ->
%%% Вспомогательные функции
%%%===================================================================
update_event_fields(EventId, Location, Decoded) ->
update_event_fields(UserId, EventId, Location, Decoded) ->
Updates = [],
Updates1 = case Location of undefined -> Updates; _ -> [{location, Location} | Updates] end,
Updates2 = case maps:get(<<"capacity">>, Decoded, undefined) of undefined -> Updates1; Cap -> [{capacity, Cap} | Updates1] end,
Updates3 = case maps:get(<<"tags">>, Decoded, undefined) of undefined -> Updates2; Tags -> [{tags, Tags} | Updates2] end,
Updates4 = case maps:get(<<"description">>, Decoded, undefined) of undefined -> Updates3; Desc -> [{description, Desc} | Updates3] end,
Updates5 = case maps:get(<<"online_link">>, Decoded, undefined) of undefined -> Updates4; Link -> [{online_link, Link} | Updates4] end,
if Updates5 /= [] -> core_event:update(EventId, Updates5); true -> ok end.
%% description already applied in create_event/6 when present
Updates4 = case maps:get(<<"online_link">>, Decoded, undefined) of undefined -> Updates3; Link -> [{online_link, Link} | Updates3] end,
case Updates4 of
[] -> ok;
_ ->
case logic_event:update_event(UserId, EventId, Updates4) of
{ok, _} -> ok;
_ -> ok
end
end.
parse_location(undefined) -> undefined;
parse_location(LocationMap) when is_map(LocationMap) ->