feat: add CASL authorization and AI configuration

This commit is contained in:
2026-07-11 14:25:34 +08:00
parent 8f0991a51f
commit 1e1c476bc3
59 changed files with 7733 additions and 120 deletions

View File

@@ -0,0 +1,17 @@
import 'reflect-metadata';
import { plainToInstance } from 'class-transformer';
import { validate } from 'class-validator';
import { NotificationQueryDto } from './notification.dto';
describe('NotificationQueryDto', () => {
it('converts numeric query-string values before integer validation', async () => {
const dto = plainToInstance(NotificationQueryDto, {
after: '42',
limit: '20',
});
await expect(validate(dto)).resolves.toEqual([]);
expect(dto.after).toBe(42);
expect(dto.limit).toBe(20);
});
});

View File

@@ -1,4 +1,5 @@
import { IsString, IsNotEmpty, IsOptional, IsArray, IsInt } from 'class-validator';
import { Type } from 'class-transformer';
export class CreateNotificationDto {
@IsArray()
@@ -24,10 +25,12 @@ export class CreateNotificationDto {
export class NotificationQueryDto {
@IsOptional()
@Type(() => Number)
@IsInt()
after?: number;
@IsOptional()
@Type(() => Number)
@IsInt()
limit?: number;
}