This commit is contained in:
2026-04-20 21:04:16 +03:00
parent b24cbc97f3
commit 19f82768e4
18 changed files with 1851 additions and 131 deletions

View File

@@ -43,9 +43,8 @@ update_event(Req) ->
try jsx:decode(Body, [return_maps]) of
UpdatesMap when is_map(UpdatesMap) ->
Updates = maps:to_list(UpdatesMap),
% Преобразуем строку времени в datetime если есть
UpdatesWithTime = convert_time_field(Updates),
case logic_event:update_event(UserId, EventId, UpdatesWithTime) of
UpdatesWithTypes = convert_fields(Updates),
case logic_event:update_event(UserId, EventId, UpdatesWithTypes) of
{ok, Event} ->
Response = event_to_json(Event),
send_json(Req2, 200, Response);
@@ -88,13 +87,22 @@ delete_event(Req) ->
end.
%% Вспомогательные функции
convert_time_field(Updates) ->
convert_fields(Updates) ->
lists:map(fun
({start_time, Value}) when is_binary(Value) ->
case parse_datetime(Value) of
{ok, DateTime} -> {start_time, DateTime};
_ -> {start_time, Value}
end;
({location, Value}) when is_map(Value) ->
case Value of
#{<<"lat">> := Lat, <<"lon">> := Lon} ->
Address = maps:get(<<"address">>, Value, <<"">>),
{location, #location{address = Address, lat = Lat, lon = Lon}};
_ -> {location, undefined}
end;
({tags, Value}) when is_list(Value) ->
{tags, Value};
(Other) -> Other
end, Updates).
@@ -125,6 +133,16 @@ event_to_json(Event) ->
#{address => Addr, lat => Lat, lon => Lon}
end,
RecurrenceJson = case Event#event.recurrence_rule of
undefined -> null;
Rule ->
Decoded = jsx:decode(Rule, [return_maps]),
case Decoded of
Map when is_map(Map) -> Map;
{ok, Map} -> Map
end
end,
#{
id => Event#event.id,
calendar_id => Event#event.calendar_id,
@@ -133,6 +151,9 @@ event_to_json(Event) ->
event_type => Event#event.event_type,
start_time => datetime_to_iso8601(Event#event.start_time),
duration => Event#event.duration,
recurrence => RecurrenceJson,
master_id => Event#event.master_id,
is_instance => Event#event.is_instance,
specialist_id => Event#event.specialist_id,
location => LocationJson,
tags => Event#event.tags,