Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ pids
node_modules

# compiled app
dist
#dist

# prisma
src/generated/prisma/
Expand Down
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,30 @@ The arocapi provides the following endpoints:
- `GET /file/:id` - Download or access file content
- `POST /search` - Search entities using OpenSearch

## Customising OpenSearch query

The OpenSearch query builder used in the `/search` endpoint can be customised to match any
structure of the actual OpenSearch data. The default OpensearchQueryBuilder class is used to
build all the queries for the search and an optional config can be passed on
to customise the class behaviour.

### Query Builder (Optional)
Use the `queryBuilderClass` optional parameter to specify a custom builder class.
If not apecified, the default `OpensearchQueryBuilder` is used.
The custom class should extend the `OpensearchQueryBuilder` class and
may override any or all of the methods as required:

- `buildQuery`: For generating the base search query.
- `buildAggregations`: For generating the facets or aggregations related query.
- `buildSort`: For generating the ordering/sorting part of the query.

### Query Builder Options (Optional)
The `queryBuilderOptions` optional parameter is passed as a constructor argument
when instantiating the queryBuilderClass. The default `OpensearchQueryBuilder` can be
configured with:

- `aggregations`: This field controls the aggregation and will be passed verbatim as the `aggs` field in the generated search query.

## Customising Entity Responses

The API provides a flexible transformer system for customising entity responses
Expand Down
33 changes: 33 additions & 0 deletions dist/app.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import type { Client } from '@opensearch-project/opensearch';
import type { FastifyPluginAsync } from 'fastify';
import type { PrismaClient } from './generated/prisma/client.js';
import type { FileHandler, RoCrateHandler } from './types/fileHandlers.js';
import type { AccessTransformer, EntityTransformer, FileAccessTransformer, FileTransformer } from './types/transformers.js';
import { OpensearchQueryBuilder, QueryBuilderOptions } from './utils/queryBuilder.js';
export type { AuthorisedEntity, AuthorisedFile, StandardEntity, StandardFile } from './transformers/default.js';
export { AllPublicAccessTransformer, AllPublicFileAccessTransformer } from './transformers/default.js';
export type { FileHandler, FileHandlerContext, FileMetadata, FilePathResult, FileRedirectResult, FileResult, FileStreamResult, GetFileHandler, GetRoCrateHandler, HeadFileHandler, HeadRoCrateHandler, RoCrateHandler, } from './types/fileHandlers.js';
export type { AccessTransformer, EntityTransformer, FileAccessTransformer, FileTransformer, TransformerContext, } from './types/transformers.js';
export { OpensearchQueryBuilder };
export type { QueryBuilderOptions };
declare module 'fastify' {
interface FastifyInstance {
prisma: PrismaClient;
opensearch: Client;
}
}
export type Options = {
prisma: PrismaClient;
opensearch: Client;
queryBuilderClass?: typeof OpensearchQueryBuilder;
queryBuilderOptions?: QueryBuilderOptions;
disableCors?: boolean;
accessTransformer: AccessTransformer;
entityTransformers?: EntityTransformer[];
fileAccessTransformer: FileAccessTransformer;
fileTransformers?: FileTransformer[];
fileHandler: FileHandler;
roCrateHandler: RoCrateHandler;
};
declare const _default: FastifyPluginAsync<Options>;
export default _default;
83 changes: 83 additions & 0 deletions dist/app.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dist/app.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dist/app.test.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export {};
124 changes: 124 additions & 0 deletions dist/app.test.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dist/app.test.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions dist/express.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import type { Express } from 'express';
import { type Options } from './app.js';
declare const _default: (options: Options) => Promise<Express>;
export default _default;
Loading
Loading