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

This commit is contained in:
2026-05-11 21:51:45 +03:00
parent 6403f061df
commit 61bb44ab4a
31 changed files with 8391 additions and 1480 deletions

View File

@@ -17,6 +17,7 @@
parse_int_qs/2,
parse_datetime_qs/1,
parse_datetime/1,
datetime_to_iso8601/1,
event_to_json/1,
user_to_json/1,
review_to_json/1,
@@ -117,18 +118,31 @@ parse_datetime_qs(Bin) ->
-spec parse_datetime(binary()) -> {ok, calendar:datetime()} | {error, invalid_format}.
parse_datetime(Str) ->
try
[DateStr, TimeStr] = string:split(Str, "T"),
TimeStrNoZ = string:trim(TimeStr, trailing, "Z"),
[YearStr, MonthStr, DayStr] = string:split(DateStr, "-", all),
[HourStr, MinuteStr, SecondStr] = string:split(TimeStrNoZ, ":", all),
Year = binary_to_integer(list_to_binary(YearStr)),
Month = binary_to_integer(list_to_binary(MonthStr)),
Day = binary_to_integer(list_to_binary(DayStr)),
Hour = binary_to_integer(list_to_binary(HourStr)),
Minute = binary_to_integer(list_to_binary(MinuteStr)),
Second = binary_to_integer(list_to_binary(SecondStr)),
%% Убираем завершающий 'Z', если он есть
Clean = case binary:last(Str) of
$Z -> binary_part(Str, 0, byte_size(Str) - 1);
_ -> Str
end,
%% Разделяем дату и время
[DatePart, TimePart] = binary:split(Clean, <<"T">>),
%% Парсим дату YYYY-MM-DD
[YearStr, MonthStr, DayStr] = binary:split(DatePart, <<"-">>, [global]),
%% Убираем дробные секунды, если есть
TimeMain = case binary:split(TimePart, <<".">>) of
[Main, _] -> Main;
[Main] -> Main
end,
%% Парсим время HH:MM:SS
[HourStr, MinuteStr, SecondStr] = binary:split(TimeMain, <<":">>, [global]),
Year = binary_to_integer(YearStr),
Month = binary_to_integer(MonthStr),
Day = binary_to_integer(DayStr),
Hour = binary_to_integer(HourStr),
Minute = binary_to_integer(MinuteStr),
Second = binary_to_integer(SecondStr),
{ok, {{Year, Month, Day}, {Hour, Minute, Second}}}
catch _:_ -> {error, invalid_format}
catch
_:_ -> {error, invalid_format}
end.
%%%===================================================================