|
| 1 | +-- search_packages_monocular searchs packages in the database that match the |
| 2 | +-- criteria in the query provided, returning results in a format that is |
| 3 | +-- compatible with the Monocular search API. |
| 4 | +create or replace function search_packages_monocular(p_base_url text, p_tsquery_web text) |
| 5 | +returns setof json as $$ |
| 6 | +declare |
| 7 | + v_tsquery_web tsquery := websearch_to_tsquery(p_tsquery_web); |
| 8 | +begin |
| 9 | + return query |
| 10 | + with packages_found as ( |
| 11 | + select |
| 12 | + p.normalized_name as package_name, |
| 13 | + s.description, |
| 14 | + s.version, |
| 15 | + s.app_version, |
| 16 | + r.name as repository_name, |
| 17 | + (case when p_tsquery_web <> '' then |
| 18 | + ts_rank(ts_filter(tsdoc, '{a}'), v_tsquery_web, 1) + |
| 19 | + ts_rank('{0.1, 0.2, 0.2, 1.0}', ts_filter(tsdoc, '{b,c}'), v_tsquery_web) |
| 20 | + else 1 end) as rank |
| 21 | + from package p |
| 22 | + join snapshot s using (package_id) |
| 23 | + join repository r using (repository_id) |
| 24 | + where r.repository_kind_id = 0 -- Helm |
| 25 | + and s.version = p.latest_version |
| 26 | + and (s.deprecated is null or s.deprecated = false) |
| 27 | + and |
| 28 | + case when p_tsquery_web <> '' then |
| 29 | + v_tsquery_web @@ p.tsdoc |
| 30 | + else true end |
| 31 | + order by rank desc, package_name asc |
| 32 | + ) |
| 33 | + select json_build_object( |
| 34 | + 'data', ( |
| 35 | + select coalesce(json_agg(json_build_object( |
| 36 | + 'id', format('%s/%s', repository_name, package_name), |
| 37 | + 'artifactHub', json_build_object( |
| 38 | + 'packageUrl', format( |
| 39 | + '%s/packages/helm/%s/%s', |
| 40 | + p_base_url, |
| 41 | + repository_name, |
| 42 | + package_name |
| 43 | + ) |
| 44 | + ), |
| 45 | + 'attributes', json_build_object( |
| 46 | + 'description', description |
| 47 | + ), |
| 48 | + 'relationships', json_build_object( |
| 49 | + 'latestChartVersion', json_build_object( |
| 50 | + 'data', json_build_object( |
| 51 | + 'version', version, |
| 52 | + 'app_version', app_version |
| 53 | + ) |
| 54 | + ) |
| 55 | + ) |
| 56 | + )), '[]') |
| 57 | + from packages_found |
| 58 | + ) |
| 59 | + ); |
| 60 | +end |
| 61 | +$$ language plpgsql; |
0 commit comments