diff options
Diffstat (limited to 'packages/backend/src/server/api/endpoints/clips/create.ts')
| -rw-r--r-- | packages/backend/src/server/api/endpoints/clips/create.ts | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/endpoints/clips/create.ts b/packages/backend/src/server/api/endpoints/clips/create.ts index d300203a21..abc0288c89 100644 --- a/packages/backend/src/server/api/endpoints/clips/create.ts +++ b/packages/backend/src/server/api/endpoints/clips/create.ts @@ -4,6 +4,8 @@ import { IdService } from '@/core/IdService.js'; import type { ClipsRepository } from '@/models/index.js'; import { ClipEntityService } from '@/core/entities/ClipEntityService.js'; import { DI } from '@/di-symbols.js'; +import { RoleService } from '@/core/RoleService.js'; +import { ApiError } from '@/server/api/error.js'; export const meta = { tags: ['clips'], @@ -17,6 +19,14 @@ export const meta = { optional: false, nullable: false, ref: 'Clip', }, + + errors: { + tooManyClips: { + message: 'You cannot create clip any more.', + code: 'TOO_MANY_CLIPS', + id: '920f7c2d-6208-4b76-8082-e632020f5883', + }, + }, } as const; export const paramDef = { @@ -37,9 +47,17 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { private clipsRepository: ClipsRepository, private clipEntityService: ClipEntityService, + private roleService: RoleService, private idService: IdService, ) { super(meta, paramDef, async (ps, me) => { + const currentCount = await this.clipsRepository.countBy({ + userId: me.id, + }); + if (currentCount > (await this.roleService.getUserRoleOptions(me.id)).clipLimit) { + throw new ApiError(meta.errors.tooManyClips); + } + const clip = await this.clipsRepository.insert({ id: this.idService.genId(), createdAt: new Date(), |