From cc08b3b18a5b33a850af22f734d8b3025e5c22b3 Mon Sep 17 00:00:00 2001 From: Aleksey Sabilin Date: Wed, 19 Aug 2026 22:01:07 +0300 Subject: [PATCH] =?UTF-8?q?feat(search):=20default=5Flocation=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B9=20=D0=B2?= =?UTF-8?q?=20=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D0=B5=20=D0=B2=D1=81=D0=B5?= =?UTF-8?q?=D0=B3=D0=B4=D0=B0=20(=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=B8=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=BA=D0=B0=D1=80=D1=82=D1=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit format_calendar больше не требует geo_origin: default_location (address/ lat/lon либо null) включается в ответ GET /v1/search всегда, если точка задана, — вид карты на странице поиска строится и без lat/lon в запросе. distance_km по-прежнему возвращается только при гео-запросе. Refs EventHub/EventHubBack#77 --- src/logic/logic_search.erl | 11 +++++------ test/unit/logic_search_tests.erl | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/logic/logic_search.erl b/src/logic/logic_search.erl index acb5fd6..4e481a3 100755 --- a/src/logic/logic_search.erl +++ b/src/logic/logic_search.erl @@ -500,13 +500,12 @@ format_calendar(Calendar, Params) -> tags => Calendar#calendar.tags, rating_avg => Calendar#calendar.rating_avg, rating_count => Calendar#calendar.rating_count, - status => Calendar#calendar.status + status => Calendar#calendar.status, + %% Всегда отдаём координаты (не только при гео-запросе) — вид карты + %% на странице поиска строит маркеры и без lat/lon в запросе. + default_location => LocJson }, - Base1 = case geo_origin(Params) of - none -> Base; - _ -> Base#{default_location => LocJson} - end, - maybe_distance(Base1, calendar_coords(Calendar), Params). + maybe_distance(Base, calendar_coords(Calendar), Params). maybe_distance(Map, Coords, Params) -> case {geo_origin(Params), Coords} of diff --git a/test/unit/logic_search_tests.erl b/test/unit/logic_search_tests.erl index 46cc0f3..192c2ee 100755 --- a/test/unit/logic_search_tests.erl +++ b/test/unit/logic_search_tests.erl @@ -29,6 +29,7 @@ logic_search_test_() -> {"Combined search", fun test_combined_search/0}, {"Search calendars", fun test_search_calendars/0}, {"Search calendars include image_url", fun test_search_calendars_image_url/0}, + {"Calendars expose default_location without geo params", fun test_calendars_default_location_always/0}, {"Search all", fun test_search_all/0}, {"Pagination", fun test_pagination/0}, {"Sorting", fun test_sorting/0}, @@ -243,6 +244,22 @@ test_search_calendars_image_url() -> [Hit | _] = [C || C <- Cals, maps:get(id, C) =:= CalendarId], ?assertEqual(<<"https://cdn.example/cal.jpg">>, maps:get(image_url, Hit)). +%% Вид карты на странице поиска строит маркеры без lat/lon в запросе — +%% координаты календаря должны приходить всегда; distance_km — нет. +test_calendars_default_location_always() -> + OwnerId = create_test_user(user), + WithLocId = create_test_calendar(OwnerId, commercial, []), + BareId = create_test_calendar(OwnerId, commercial, []), + set_default_location(WithLocId, <<"Moscow">>, 55.7558, 37.6173), + + {_, Hits} = calendars_from(logic_search:search(<<"calendar">>, <<"Calendar">>, OwnerId, #{})), + [WithLoc] = [C || C <- Hits, maps:get(id, C) =:= WithLocId], + [Bare] = [C || C <- Hits, maps:get(id, C) =:= BareId], + ?assertMatch(#{<<"lat">> := 55.7558, <<"lon">> := 37.6173}, + maps:get(default_location, WithLoc)), + ?assertEqual(null, maps:get(default_location, Bare)), + ?assert(not maps:is_key(distance_km, WithLoc)). + test_search_all() -> OwnerId = create_test_user(user), CalendarId = create_test_calendar(OwnerId, commercial, []),