diff --git a/projects/api/deno.json b/projects/api/deno.json index 75b7d4a..15231fe 100644 --- a/projects/api/deno.json +++ b/projects/api/deno.json @@ -1,7 +1,7 @@ { "name": "@trakt/api", "exports": "./src/index.ts", - "version": "0.3.6", + "version": "0.3.7", "imports": { "@anatine/zod-openapi": "npm:@anatine/zod-openapi@^2.2.6", "@std/testing": "jsr:@std/testing@^1.0.5", diff --git a/projects/api/src/contracts/users/schema/request/addFilterRequestSchema.ts b/projects/api/src/contracts/users/schema/request/addFilterRequestSchema.ts new file mode 100644 index 0000000..94b4d69 --- /dev/null +++ b/projects/api/src/contracts/users/schema/request/addFilterRequestSchema.ts @@ -0,0 +1,6 @@ +import { z } from '../../../_internal/z.ts'; + +export const addFilterRequestSchema = z.object({ + name: z.string(), + url: z.string(), +}); diff --git a/projects/api/src/contracts/users/schema/request/filterIdParamsSchema.ts b/projects/api/src/contracts/users/schema/request/filterIdParamsSchema.ts new file mode 100644 index 0000000..c69fd0f --- /dev/null +++ b/projects/api/src/contracts/users/schema/request/filterIdParamsSchema.ts @@ -0,0 +1,7 @@ +import { z } from '../../../_internal/z.ts'; + +export const filterIdParamsSchema = z.object({ + id: z.number().int().or(z.string()).describe( + 'ID of the saved filter', + ), +}); diff --git a/projects/api/src/contracts/users/schema/response/addFilterResponseSchema.ts b/projects/api/src/contracts/users/schema/response/addFilterResponseSchema.ts new file mode 100644 index 0000000..e471c07 --- /dev/null +++ b/projects/api/src/contracts/users/schema/response/addFilterResponseSchema.ts @@ -0,0 +1,8 @@ +import { z } from '../../../_internal/z.ts'; +import { addFilterRequestSchema } from '../request/addFilterRequestSchema.ts'; +import { filterResponseSchema } from './filterResponseSchema.ts'; + +export const addFilterResponseSchema = z.object({ + added: filterResponseSchema.array(), + skipped: addFilterRequestSchema.array(), +}); diff --git a/projects/api/src/contracts/users/subroutes/filters.ts b/projects/api/src/contracts/users/subroutes/filters.ts index 4466bce..8ad6370 100644 --- a/projects/api/src/contracts/users/subroutes/filters.ts +++ b/projects/api/src/contracts/users/subroutes/filters.ts @@ -1,7 +1,10 @@ import { builder } from '../../_internal/builder.ts'; import { pageQuerySchema } from '../../_internal/request/pageQuerySchema.ts'; -import type { z } from '../../_internal/z.ts'; +import { z } from '../../_internal/z.ts'; +import { addFilterRequestSchema } from '../schema/request/addFilterRequestSchema.ts'; +import { filterIdParamsSchema } from '../schema/request/filterIdParamsSchema.ts'; import { sectionParamsSchema } from '../schema/request/sectionParamsSchema.ts'; +import { addFilterResponseSchema } from '../schema/response/addFilterResponseSchema.ts'; import { filterResponseSchema } from '../schema/response/filterResponseSchema.ts'; export const filters = builder.router({ @@ -14,6 +17,23 @@ export const filters = builder.router({ 200: filterResponseSchema.array(), }, }, + add: { + path: '', + method: 'POST', + body: addFilterRequestSchema.array(), + responses: { + 201: addFilterResponseSchema, + }, + }, + delete: { + path: '/:id', + method: 'DELETE', + pathParams: filterIdParamsSchema, + responses: { + 204: z.undefined(), + 404: z.undefined(), + }, + }, }, { pathPrefix: '/saved_filters', });