diff --git a/projects/ngx-http-repository/src/lib/configuration/context/http-offline-queue-context.configuration.ts b/projects/ngx-http-repository/src/lib/configuration/context/http-offline-queue-context.configuration.ts new file mode 100644 index 00000000..8e7d55ce --- /dev/null +++ b/projects/ngx-http-repository/src/lib/configuration/context/http-offline-queue-context.configuration.ts @@ -0,0 +1,24 @@ +export interface HttpOfflineQueueContext { + + /** + * @description + * The time to live of the queued request in milliseconds. + * @default 3600000 + */ + timeToLive?: number; + + /** + * @description + * The maximum number of requests that can be queued. + * @default 100 + */ + maxQueueSize?: number; + + /** + * @description + * The maximum number of times a queued request can be retried. + * @default 0 + */ + maxRetryCount?: number; + +} diff --git a/projects/ngx-http-repository/src/lib/decorator/http-offline-queue.decorator.spec.ts b/projects/ngx-http-repository/src/lib/decorator/http-offline-queue.decorator.spec.ts new file mode 100644 index 00000000..0b4fc93c --- /dev/null +++ b/projects/ngx-http-repository/src/lib/decorator/http-offline-queue.decorator.spec.ts @@ -0,0 +1,15 @@ +import { HttpOfflineQueueContext } from '../configuration/context/http-offline-queue-context.configuration'; +import { HTTP_OFFLINE_QUEUE_METADATA_KEY, HttpOfflineQueue } from './http-offline-queue.decorator'; + +describe('HttpOfflineQueueDecorator', () => { + + it('should place http offline queue context in metadata', () => { + const obj: unknown = {}; + const context: HttpOfflineQueueContext = { + timeToLive: 6000 + }; + + HttpOfflineQueue(context)(obj); + expect(Reflect.getMetadata(HTTP_OFFLINE_QUEUE_METADATA_KEY, obj)).toEqual(context); + }); +}); diff --git a/projects/ngx-http-repository/src/lib/decorator/http-offline-queue.decorator.ts b/projects/ngx-http-repository/src/lib/decorator/http-offline-queue.decorator.ts new file mode 100644 index 00000000..41720b16 --- /dev/null +++ b/projects/ngx-http-repository/src/lib/decorator/http-offline-queue.decorator.ts @@ -0,0 +1,12 @@ +import { HttpOfflineQueueContext } from '../configuration/context/http-offline-queue-context.configuration'; + +/** + * @ignore + */ +export const HTTP_OFFLINE_QUEUE_METADATA_KEY: string = 'ngx-http-repository:http-offline-queue'; + +export function HttpOfflineQueue(params: HttpOfflineQueueContext): (target: unknown) => void { + return (target: unknown): void => { + Reflect.defineMetadata(HTTP_OFFLINE_QUEUE_METADATA_KEY, params, target); + }; +} diff --git a/projects/ngx-http-repository/src/lib/decorator/http-request.decorator.ts b/projects/ngx-http-repository/src/lib/decorator/http-request.decorator.ts index d604ac9b..edff82da 100644 --- a/projects/ngx-http-repository/src/lib/decorator/http-request.decorator.ts +++ b/projects/ngx-http-repository/src/lib/decorator/http-request.decorator.ts @@ -65,7 +65,7 @@ function buildHttpRequestDecorator(params: string | HttpRequestParamsContext, re } /** - * Generate method to invoke Http Get request. By default HttpQueryFn but can be changed to HttpBodyFn (see withBody option) + * Generate method to invoke Http Get request. By default, HttpQueryFn but can be changed to HttpBodyFn (see withBody option) * @param params path or full configuration object. * @param responseType type of the response for deserialization. */ diff --git a/projects/ngx-http-repository/src/lib/repository/http.repository.ts b/projects/ngx-http-repository/src/lib/repository/http.repository.ts index 1f225eea..640d3588 100644 --- a/projects/ngx-http-repository/src/lib/repository/http.repository.ts +++ b/projects/ngx-http-repository/src/lib/repository/http.repository.ts @@ -262,7 +262,7 @@ export class HttpRepository extends AbstractRepository implements FindA } protected getResourceConfiguration(resourceType: Type, configuration: ResourceConfiguration): ResourceConfiguration { - const config = mergeDeep(configuration, Reflect.getMetadata(HTTP_RESOURCE_METADATA_KEY, resourceType)); + const config: ResourceConfiguration = mergeDeep(configuration, Reflect.getMetadata(HTTP_RESOURCE_METADATA_KEY, resourceType)); return createHttpRepositoryConfiguration(config); } diff --git a/projects/ngx-http-repository/src/public-api.ts b/projects/ngx-http-repository/src/public-api.ts index 484ea346..54be230f 100644 --- a/projects/ngx-http-repository/src/public-api.ts +++ b/projects/ngx-http-repository/src/public-api.ts @@ -1,5 +1,6 @@ export { HttpHeaderContext } from './lib/configuration/context/http-header-context.configuration'; export { HttpQueryParamContext } from './lib/configuration/context/http-query-param-context.configuration'; +export { HttpOfflineQueueContext } from './lib/configuration/context/http-offline-queue-context.configuration'; export * from './lib/configuration/context/http-request-params-context.configuration'; export { HttpHeader } from './lib/decorator/http-header.decorator'; @@ -7,6 +8,7 @@ export { HttpLiveResource } from './lib/decorator/http-live-resource.decorator'; export { HttpQueryParam } from './lib/decorator/http-query-param.decorator'; export { HttpResource } from './lib/decorator/http-resource.decorator'; export { OnHttpResourceChange } from './lib/decorator/on-http-resource-change.decorator'; +export { HttpOfflineQueue } from './lib/decorator/http-offline-queue.decorator'; export * from './lib/decorator/http-request.decorator'; export { AfterExecuteHttpRequestEvent } from './lib/driver/event/after-execute-http-request.event';