-
Notifications
You must be signed in to change notification settings - Fork 230
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Monocular compatible search API endpoint (#598)
Closes #593 Signed-off-by: Sergio Castaño Arteaga <tegioz@icloud.com> Signed-off-by: Cintia Sanchez Garcia <cynthiasg@icloud.com> Co-authored-by: Sergio Castaño Arteaga <tegioz@icloud.com> Co-authored-by: Cintia Sanchez Garcia <cynthiasg@icloud.com>
- Loading branch information
1 parent
ba35434
commit e07dd82
Showing
15 changed files
with
401 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
61 changes: 61 additions & 0 deletions
61
database/migrations/functions/packages/search_packages_monocular.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
-- search_packages_monocular searchs packages in the database that match the | ||
-- criteria in the query provided, returning results in a format that is | ||
-- compatible with the Monocular search API. | ||
create or replace function search_packages_monocular(p_base_url text, p_tsquery_web text) | ||
returns setof json as $$ | ||
declare | ||
v_tsquery_web tsquery := websearch_to_tsquery(p_tsquery_web); | ||
begin | ||
return query | ||
with packages_found as ( | ||
select | ||
p.normalized_name as package_name, | ||
s.description, | ||
s.version, | ||
s.app_version, | ||
r.name as repository_name, | ||
(case when p_tsquery_web <> '' then | ||
ts_rank(ts_filter(tsdoc, '{a}'), v_tsquery_web, 1) + | ||
ts_rank('{0.1, 0.2, 0.2, 1.0}', ts_filter(tsdoc, '{b,c}'), v_tsquery_web) | ||
else 1 end) as rank | ||
from package p | ||
join snapshot s using (package_id) | ||
join repository r using (repository_id) | ||
where r.repository_kind_id = 0 -- Helm | ||
and s.version = p.latest_version | ||
and (s.deprecated is null or s.deprecated = false) | ||
and | ||
case when p_tsquery_web <> '' then | ||
v_tsquery_web @@ p.tsdoc | ||
else true end | ||
order by rank desc, package_name asc | ||
) | ||
select json_build_object( | ||
'data', ( | ||
select coalesce(json_agg(json_build_object( | ||
'id', format('%s/%s', repository_name, package_name), | ||
'artifactHub', json_build_object( | ||
'packageUrl', format( | ||
'%s/packages/helm/%s/%s', | ||
p_base_url, | ||
repository_name, | ||
package_name | ||
) | ||
), | ||
'attributes', json_build_object( | ||
'description', description | ||
), | ||
'relationships', json_build_object( | ||
'latestChartVersion', json_build_object( | ||
'data', json_build_object( | ||
'version', version, | ||
'app_version', app_version | ||
) | ||
) | ||
) | ||
)), '[]') | ||
from packages_found | ||
) | ||
); | ||
end | ||
$$ language plpgsql; |
78 changes: 78 additions & 0 deletions
78
database/tests/functions/packages/search_packages_monocular.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
-- Start transaction and plan tests | ||
begin; | ||
select plan(3); | ||
|
||
-- Declare some variables | ||
\set user1ID '00000000-0000-0000-0000-000000000001' | ||
\set repo1ID '00000000-0000-0000-0000-000000000001' | ||
\set package1ID '00000000-0000-0000-0000-000000000001' | ||
|
||
-- No packages at this point | ||
select is( | ||
search_packages_monocular('https://artifacthub.io', 'package1')::jsonb, | ||
'{"data": []}'::jsonb, | ||
'TsQueryWeb: package1 | No packages expected' | ||
); | ||
|
||
-- Seed some data | ||
insert into "user" (user_id, alias, email) values (:'user1ID', 'user1', 'user1@email.com'); | ||
insert into repository (repository_id, name, display_name, url, repository_kind_id, user_id) | ||
values (:'repo1ID', 'repo1', 'Repo 1', 'https://repo1.com', 0, :'user1ID'); | ||
insert into package ( | ||
package_id, | ||
name, | ||
latest_version, | ||
tsdoc, | ||
repository_id | ||
) values ( | ||
:'package1ID', | ||
'package1', | ||
'1.0.0', | ||
generate_package_tsdoc('package1', null, 'description', '{"kw1", "kw2"}', '{"repo1"}', '{"user1"}'), | ||
:'repo1ID' | ||
); | ||
insert into snapshot ( | ||
package_id, | ||
version, | ||
description, | ||
app_version | ||
) values ( | ||
:'package1ID', | ||
'1.0.0', | ||
'description', | ||
'12.1.0' | ||
); | ||
|
||
-- Run some tests | ||
select is( | ||
search_packages_monocular('https://artifacthub.io', 'package1')::jsonb, | ||
'{ | ||
"data": [{ | ||
"id": "repo1/package1", | ||
"artifactHub": { | ||
"packageUrl": "https://artifacthub.io/packages/helm/repo1/package1" | ||
}, | ||
"attributes": { | ||
"description": "description" | ||
}, | ||
"relationships": { | ||
"latestChartVersion": { | ||
"data": { | ||
"version": "1.0.0", | ||
"app_version": "12.1.0" | ||
} | ||
} | ||
} | ||
}] | ||
}'::jsonb, | ||
'TsQueryWeb: package1 | Package1 expected' | ||
); | ||
select is( | ||
search_packages_monocular('https://artifacthub.io', 'package2')::jsonb, | ||
'{"data": []}'::jsonb, | ||
'TsQueryWeb: package2 | No packages expected' | ||
); | ||
|
||
-- Finish tests and rollback transaction | ||
select * from finish(); | ||
rollback; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.