fix: owner event bookings list and paid plan durations from plan_to_months.
CI / test (push) Successful in 6m55s
CI / deploy-ift (push) Successful in 3m33s
CI / e2e-ift (push) Failing after 1m4s
CI / deploy-stage (push) Has been skipped
CI / e2e-stage (push) Has been skipped

Fixes EventHub/EventHubBack#51
Fixes EventHub/EventHubBack#52

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-21 20:18:49 +03:00
parent 7368adfb37
commit 5ac23219ca
6 changed files with 133 additions and 26 deletions
+27 -2
View File
@@ -3,7 +3,8 @@
-export([create_booking/2, confirm_booking/2, confirm_booking/3,
cancel_booking/2, cancel_booking/3, get_booking/2,
list_bookings/2, list_user_bookings/1, delete_booking/2,
list_bookings_admin/0, get_booking_admin/1, list_event_bookings/1]).
list_bookings_admin/0, get_booking_admin/1,
list_event_bookings/1, list_event_bookings/2]).
%%%-------------------------------------------------------------------
%%% @doc Создание бронирования со статусом `pending`.
@@ -151,13 +152,37 @@ get_booking_admin(BookingId) ->
core_booking:get_by_id(BookingId).
%%%-------------------------------------------------------------------
%%% @doc Список бронирований события (административный).
%%% @doc Список бронирований события (административный / внутренний).
%%% @end
%%%-------------------------------------------------------------------
-spec list_event_bookings(EventId :: binary()) -> {ok, [#booking{}]}.
list_event_bookings(EventId) ->
core_booking:list_by_event(EventId).
%%%-------------------------------------------------------------------
%%% @doc Список бронирований события для владельца календаря (или admin).
%%% Возвращает полный список заявок без фильтрации по участнику.
%%% @end
%%%-------------------------------------------------------------------
-spec list_event_bookings(UserId :: binary(), EventId :: binary()) ->
{ok, [#booking{}]} | {error, not_found | access_denied}.
list_event_bookings(UserId, EventId) ->
case core_event:get_by_id(EventId) of
{ok, Event} ->
case core_calendar:get_by_id(Event#event.calendar_id) of
{ok, Calendar} ->
case admin_utils:is_admin(UserId)
orelse Calendar#calendar.owner_id =:= UserId of
true -> core_booking:list_by_event(EventId);
false -> {error, access_denied}
end;
{error, not_found} ->
{error, not_found}
end;
{error, not_found} ->
{error, not_found}
end.
%%%-------------------------------------------------------------------
%%% @doc Список всех бронирований (административный).
%%% @end
+3 -4
View File
@@ -6,8 +6,6 @@
-export([check_user_subscription/1, can_create_commercial_calendar/1]).
-export([handle_expired_subscriptions/0]).
-define(TRIAL_DAYS, 30).
%% ============ Управление подписками ============
%% Начать пробный период (вызывается при первой попытке создать commercial календарь)
@@ -22,6 +20,7 @@ start_trial(UserId) ->
true ->
{error, trial_already_used};
false ->
% trial_used=true — флаг; длительность из plan=trial (~1 месяц)
case core_subscription:create(UserId, trial, true) of
{ok, Subscription} ->
{ok, Subscription};
@@ -34,7 +33,7 @@ start_trial(UserId) ->
activate_subscription(UserId, Plan, PaymentInfo) ->
case process_payment(PaymentInfo, plan_price(Plan)) of
ok ->
% Проверяем, была ли у пользователя хоть одна подписка
% Флаг trial_used: была ли уже любая подписка (не влияет на длительность)
{ok, AllSubs} = core_subscription:list_by_user(UserId),
TrialUsed = length(AllSubs) > 0,
@@ -45,7 +44,7 @@ activate_subscription(UserId, Plan, PaymentInfo) ->
_ -> ok
end,
% Создаём новую подписку
% Длительность всегда из Plan (plan_to_months), TrialUsed — только флаг
case core_subscription:create(UserId, Plan, TrialUsed) of
{ok, Subscription} ->
{ok, Subscription};