Skip to main content
Glama
ai-assistant.dto.ts12.2 kB
import { IsString, IsOptional, IsEnum, IsBoolean, IsObject, IsArray, IsUUID, IsNumber, Min, Max, Length, ValidateNested, } from 'class-validator'; import { Type, Transform } from 'class-transformer'; import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { AssistantType, TemplateCategory, TemplateStatus, } from '../entities/ai-assistant-template.entity'; import { ConfigStatus, ExportFormat, } from '../entities/ai-assistant-config.entity'; // 创建模板DTO export class CreateTemplateDto { @ApiProperty({ description: '模板名称', maxLength: 100 }) @IsString() @Length(1, 100) name: string; @ApiPropertyOptional({ description: '模板描述' }) @IsOptional() @IsString() description?: string; @ApiProperty({ description: 'AI助手类型', enum: AssistantType }) @IsEnum(AssistantType) type: AssistantType; @ApiProperty({ description: '模板分类', enum: TemplateCategory }) @IsEnum(TemplateCategory) category: TemplateCategory; @ApiProperty({ description: '配置模板内容' }) @IsObject() configTemplate: Record<string, any>; @ApiPropertyOptional({ description: '默认配置值' }) @IsOptional() @IsObject() defaultValues?: Record<string, any>; @ApiPropertyOptional({ description: '配置字段验证规则' }) @IsOptional() @IsObject() validationRules?: Record<string, any>; @ApiPropertyOptional({ description: '模板标签' }) @IsOptional() @IsArray() @IsString({ each: true }) tags?: string[]; @ApiPropertyOptional({ description: '是否公开模板', default: true }) @IsOptional() @IsBoolean() isPublic?: boolean; @ApiPropertyOptional({ description: '模板版本', default: '1.0.0' }) @IsOptional() @IsString() version?: string; @ApiPropertyOptional({ description: '作者信息' }) @IsOptional() @IsString() @Length(1, 100) author?: string; } // 更新模板DTO export class UpdateTemplateDto { @ApiPropertyOptional({ description: '模板名称', maxLength: 100 }) @IsOptional() @IsString() @Length(1, 100) name?: string; @ApiPropertyOptional({ description: '模板描述' }) @IsOptional() @IsString() description?: string; @ApiPropertyOptional({ description: '模板分类', enum: TemplateCategory }) @IsOptional() @IsEnum(TemplateCategory) category?: TemplateCategory; @ApiPropertyOptional({ description: '模板状态', enum: TemplateStatus }) @IsOptional() @IsEnum(TemplateStatus) status?: TemplateStatus; @ApiPropertyOptional({ description: '配置模板内容' }) @IsOptional() @IsObject() configTemplate?: Record<string, any>; @ApiPropertyOptional({ description: '默认配置值' }) @IsOptional() @IsObject() defaultValues?: Record<string, any>; @ApiPropertyOptional({ description: '配置字段验证规则' }) @IsOptional() @IsObject() validationRules?: Record<string, any>; @ApiPropertyOptional({ description: '模板标签' }) @IsOptional() @IsArray() @IsString({ each: true }) tags?: string[]; @ApiPropertyOptional({ description: '是否公开模板' }) @IsOptional() @IsBoolean() isPublic?: boolean; @ApiPropertyOptional({ description: '模板版本' }) @IsOptional() @IsString() version?: string; @ApiPropertyOptional({ description: '作者信息' }) @IsOptional() @IsString() @Length(1, 100) author?: string; } // 模板查询DTO export class TemplateQueryDto { @ApiPropertyOptional({ description: '页码', default: 1 }) @IsOptional() @Type(() => Number) @IsNumber() @Min(1) page?: number = 1; @ApiPropertyOptional({ description: '每页数量', default: 10 }) @IsOptional() @Type(() => Number) @IsNumber() @Min(1) @Max(100) limit?: number = 10; @ApiPropertyOptional({ description: '搜索关键词' }) @IsOptional() @IsString() search?: string; @ApiPropertyOptional({ description: 'AI助手类型', enum: AssistantType }) @IsOptional() @IsEnum(AssistantType) type?: AssistantType; @ApiPropertyOptional({ description: '模板分类', enum: TemplateCategory }) @IsOptional() @IsEnum(TemplateCategory) category?: TemplateCategory; @ApiPropertyOptional({ description: '模板状态', enum: TemplateStatus }) @IsOptional() @IsEnum(TemplateStatus) status?: TemplateStatus; @ApiPropertyOptional({ description: '是否只显示公开模板' }) @IsOptional() @Transform(({ value }) => value === 'true') @IsBoolean() publicOnly?: boolean; @ApiPropertyOptional({ description: '标签过滤' }) @IsOptional() @IsArray() @IsString({ each: true }) tags?: string[]; @ApiPropertyOptional({ description: '排序字段', default: 'createdAt' }) @IsOptional() @IsString() sortBy?: string = 'createdAt'; @ApiPropertyOptional({ description: '排序方向', default: 'DESC' }) @IsOptional() @IsEnum(['ASC', 'DESC']) sortOrder?: 'ASC' | 'DESC' = 'DESC'; } // 生成配置DTO export class GenerateConfigDto { @ApiProperty({ description: '模板ID' }) @IsUUID() templateId: string; @ApiProperty({ description: '配置名称', maxLength: 100 }) @IsString() @Length(1, 100) name: string; @ApiPropertyOptional({ description: '配置描述' }) @IsOptional() @IsString() description?: string; @ApiPropertyOptional({ description: '自定义参数' }) @IsOptional() @IsObject() customParameters?: Record<string, any>; @ApiPropertyOptional({ description: '配置标签' }) @IsOptional() @IsArray() @IsString({ each: true }) tags?: string[]; @ApiPropertyOptional({ description: '创建者信息' }) @IsOptional() @IsString() @Length(1, 100) createdBy?: string; @ApiPropertyOptional({ description: '备注信息' }) @IsOptional() @IsString() notes?: string; } // 导出配置DTO export class ExportConfigDto { @ApiProperty({ description: '导出格式', enum: ExportFormat }) @IsEnum(ExportFormat) format: ExportFormat; @ApiPropertyOptional({ description: '是否包含敏感信息', default: false }) @IsOptional() @IsBoolean() includeSensitive?: boolean = false; @ApiPropertyOptional({ description: '自定义导出选项' }) @IsOptional() @IsObject() exportOptions?: Record<string, any>; } // 配置查询DTO export class ConfigQueryDto { @ApiPropertyOptional({ description: '页码', default: 1 }) @IsOptional() @Type(() => Number) @IsNumber() @Min(1) page?: number = 1; @ApiPropertyOptional({ description: '每页数量', default: 10 }) @IsOptional() @Type(() => Number) @IsNumber() @Min(1) @Max(100) limit?: number = 10; @ApiPropertyOptional({ description: '搜索关键词' }) @IsOptional() @IsString() search?: string; @ApiPropertyOptional({ description: '模板ID' }) @IsOptional() @IsUUID() templateId?: string; @ApiPropertyOptional({ description: '配置状态', enum: ConfigStatus }) @IsOptional() @IsEnum(ConfigStatus) status?: ConfigStatus; @ApiPropertyOptional({ description: '是否只显示收藏' }) @IsOptional() @Transform(({ value }) => value === 'true') @IsBoolean() favoritesOnly?: boolean; @ApiPropertyOptional({ description: '标签过滤' }) @IsOptional() @IsArray() @IsString({ each: true }) tags?: string[]; @ApiPropertyOptional({ description: '排序字段', default: 'createdAt' }) @IsOptional() @IsString() sortBy?: string = 'createdAt'; @ApiPropertyOptional({ description: '排序方向', default: 'DESC' }) @IsOptional() @IsEnum(['ASC', 'DESC']) sortOrder?: 'ASC' | 'DESC' = 'DESC'; } // 批量操作DTO export class BatchOperationDto { @ApiProperty({ description: '操作的ID列表' }) @IsArray() @IsUUID(undefined, { each: true }) ids: string[]; @ApiProperty({ description: '操作类型' }) @IsEnum(['delete', 'archive', 'activate', 'export']) operation: 'delete' | 'archive' | 'activate' | 'export'; @ApiPropertyOptional({ description: '操作参数' }) @IsOptional() @IsObject() parameters?: Record<string, any>; } // 响应DTO export class TemplateResponseDto { @ApiProperty({ description: '模板ID' }) id: string; @ApiProperty({ description: '模板名称' }) name: string; @ApiProperty({ description: '模板描述' }) description: string; @ApiProperty({ description: 'AI助手类型', enum: AssistantType }) type: AssistantType; @ApiProperty({ description: '模板分类', enum: TemplateCategory }) category: TemplateCategory; @ApiProperty({ description: '模板状态', enum: TemplateStatus }) status: TemplateStatus; @ApiProperty({ description: '配置模板内容' }) configTemplate: Record<string, any>; @ApiProperty({ description: '默认配置值' }) defaultValues: Record<string, any>; @ApiProperty({ description: '配置字段验证规则' }) validationRules: Record<string, any>; @ApiProperty({ description: '模板标签' }) tags: string[]; @ApiProperty({ description: '是否公开模板' }) isPublic: boolean; @ApiProperty({ description: '模板版本' }) version: string; @ApiProperty({ description: '作者信息' }) author: string; @ApiProperty({ description: '使用次数' }) usageCount: number; @ApiProperty({ description: '评分' }) rating: number; @ApiProperty({ description: '创建时间' }) createdAt: Date; @ApiProperty({ description: '更新时间' }) updatedAt: Date; } export class ConfigResponseDto { @ApiProperty({ description: '配置ID' }) id: string; @ApiProperty({ description: '配置名称' }) name: string; @ApiProperty({ description: '配置描述' }) description: string; @ApiProperty({ description: '模板信息', type: TemplateResponseDto }) template: TemplateResponseDto; @ApiProperty({ description: '生成的配置内容' }) generatedConfig: Record<string, any>; @ApiProperty({ description: '用户自定义参数' }) customParameters: Record<string, any>; @ApiProperty({ description: '配置状态', enum: ConfigStatus }) status: ConfigStatus; @ApiProperty({ description: '导出格式', enum: ExportFormat }) exportFormat: ExportFormat; @ApiProperty({ description: '配置标签' }) tags: string[]; @ApiProperty({ description: '是否收藏' }) isFavorite: boolean; @ApiProperty({ description: '使用次数' }) usageCount: number; @ApiProperty({ description: '最后使用时间' }) lastUsedAt: Date; @ApiProperty({ description: '创建者信息' }) createdBy: string; @ApiProperty({ description: '备注信息' }) notes: string; @ApiProperty({ description: '创建时间' }) createdAt: Date; @ApiProperty({ description: '更新时间' }) updatedAt: Date; } export class PaginatedTemplateResponseDto { @ApiProperty({ description: '模板列表', type: [TemplateResponseDto] }) data: TemplateResponseDto[]; @ApiProperty({ description: '总数量' }) total: number; @ApiProperty({ description: '当前页码' }) page: number; @ApiProperty({ description: '每页数量' }) limit: number; @ApiProperty({ description: '总页数' }) totalPages: number; } export class PaginatedConfigResponseDto { @ApiProperty({ description: '配置列表', type: [ConfigResponseDto] }) data: ConfigResponseDto[]; @ApiProperty({ description: '总数量' }) total: number; @ApiProperty({ description: '当前页码' }) page: number; @ApiProperty({ description: '每页数量' }) limit: number; @ApiProperty({ description: '总页数' }) totalPages: number; } export class ExportResponseDto { @ApiProperty({ description: '导出格式', enum: ExportFormat }) format: ExportFormat; @ApiProperty({ description: '导出内容' }) content: string; @ApiProperty({ description: '文件名建议' }) filename: string; @ApiProperty({ description: '内容类型' }) contentType: string; } export class BatchOperationResponseDto { @ApiProperty({ description: '成功处理的数量' }) successCount: number; @ApiProperty({ description: '失败处理的数量' }) failureCount: number; @ApiProperty({ description: '处理结果详情' }) results: Array<{ id: string; success: boolean; message?: string; }>; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zaizaizhao/mcp-swagger-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server