feat(search): default_location календарей в ответе всегда (для вида карты)
format_calendar больше не требует geo_origin: default_location (address/ lat/lon либо null) включается в ответ GET /v1/search всегда, если точка задана, — вид карты на странице поиска строится и без lat/lon в запросе. distance_km по-прежнему возвращается только при гео-запросе. Refs EventHub/EventHubBack#77
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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, []),
|
||||
|
||||
Reference in New Issue
Block a user