diff --git a/src/database/service/package.ts b/src/database/service/package.ts index 4d1e9fe..bbde6a5 100644 --- a/src/database/service/package.ts +++ b/src/database/service/package.ts @@ -1,5 +1,7 @@ import { getMongoRepository } from "typeorm"; +import fastify, { FastifyReply } from "fastify"; +import { ServerResponse } from "http"; import BaseService from "./base"; import PackageModel from "../model/package"; import { @@ -81,18 +83,21 @@ class PackageService extends BaseService { sort: PackageSortFields | "SearchScore", order: SortOrder, searchOptions: IPackageSearchOptions, + response: fastify.FastifyReply, ): Promise<[Omit[], number]> { // const optionFields = Object.values(queryOptions).filter(e => e != null); // error if query AND another field is set (query only requirement) if (queryOptions.query != null && optionFields.length > 1) { + response.code(400); throw new Error("no other queryOptions should be set when 'query' is non-null"); } // error if non-query fields are set and ensureContains is false, in which case // all non-query fields behave like a qquery and may be misleading if (queryOptions.query == null && optionFields.length >= 1 && searchOptions.ensureContains === false) { + response.code(400); throw new Error("non-query search parameters are redundant if ensureContains is false"); } @@ -280,7 +285,6 @@ class PackageService extends BaseService { sort: PackageSortFields, order: SortOrder, ): Promise<[Omit[], number]> { - // const pkgs = await this.repository.aggregate([ { $match: { diff --git a/src/server/routes/v2/packages.ts b/src/server/routes/v2/packages.ts index 03c14cc..35603fb 100644 --- a/src/server/routes/v2/packages.ts +++ b/src/server/routes/v2/packages.ts @@ -117,7 +117,7 @@ export default async (fastify: FastifyInstance): Promise => { // NOTE: query searches name > publisher > description // NOTE: tags are exact match, separated by ',' - fastify.get("/", { schema: packageSchema }, async request => { + fastify.get("/", { schema: packageSchema }, async (request, response) => { const { query, name, @@ -146,7 +146,7 @@ export default async (fastify: FastifyInstance): Promise => { publisher, description, ...(tags == null ? {} : { tags: tags.split(",") }), - }, take, page, sort, order, searchOptions); + }, take, page, sort, order, searchOptions, response); return { Packages: pkgs, @@ -154,7 +154,7 @@ export default async (fastify: FastifyInstance): Promise => { }; }); - fastify.get("/:publisher", { schema: publisherPackageSchema }, async request => { + fastify.get("/:publisher", { schema: publisherPackageSchema }, async (request) => { const { publisher } = request.params; const { take = DEFAULT_PAGE_SIZE,