Skip to main content
Glama
openapi-document.entity.ts3.14 kB
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, ManyToOne, JoinColumn, Index, } from 'typeorm'; import { ApiProperty } from '@nestjs/swagger'; import { User } from './user.entity'; export enum DocumentStatus { DRAFT = 'draft', PUBLISHED = 'published', ARCHIVED = 'archived', VALID = 'valid', INVALID = 'invalid', PENDING = 'pending', } @Entity('openapi_documents') @Index(['userId']) @Index(['status']) @Index(['createdAt']) export class OpenAPIDocument { @ApiProperty({ description: '文档ID' }) @PrimaryGeneratedColumn('uuid') id: string; @ApiProperty({ description: '文档名称' }) @Column({ type: 'varchar', length: 255 }) name: string; @ApiProperty({ description: '文档描述' }) @Column({ type: 'text', nullable: true }) description?: string; @ApiProperty({ description: 'OpenAPI规范内容(JSON字符串)' }) @Column({ type: 'text' }) content: string; @ApiProperty({ description: '文档状态' }) @Column({ type: 'enum', enum: DocumentStatus, default: DocumentStatus.DRAFT, }) status: DocumentStatus; @ApiProperty({ description: '文档版本' }) @Column({ type: 'varchar', length: 50, default: '1.0.0' }) version: string; @ApiProperty({ description: '文档标签' }) @Column({ type: 'simple-array', nullable: true }) tags?: string[]; @ApiProperty({ description: '文档元数据' }) @Column({ type: 'jsonb', nullable: true }) metadata?: { originalUrl?: string; importSource?: 'file' | 'url' | 'manual'; fileSize?: number; lastValidated?: Date; validationErrors?: string[]; [key: string]: any; }; @ApiProperty({ description: '所属用户ID' }) @Column({ name: 'user_id' }) userId: string; @ApiProperty({ description: '所属用户', type: () => User }) @ManyToOne(() => User, { eager: false }) @JoinColumn({ name: 'user_id' }) user: User; @ApiProperty({ description: '创建时间' }) @CreateDateColumn() createdAt: Date; @ApiProperty({ description: '更新时间' }) @UpdateDateColumn() updatedAt: Date; // 获取解析后的OpenAPI规范对象 getParsedContent(): any { try { return JSON.parse(this.content); } catch (error) { return null; } } // 设置OpenAPI规范内容 setParsedContent(spec: any): void { this.content = JSON.stringify(spec, null, 2); } // 验证内容是否为有效的JSON isValidContent(): boolean { try { JSON.parse(this.content); return true; } catch { return false; } } // 获取文档信息摘要 getInfo(): { title?: string; version?: string; description?: string } { const parsed = this.getParsedContent(); if (!parsed || !parsed.info) { return {}; } return { title: parsed.info.title, version: parsed.info.version, description: parsed.info.description, }; } // 获取API端点数量 getEndpointCount(): number { const parsed = this.getParsedContent(); if (!parsed || !parsed.paths) { return 0; } return Object.keys(parsed.paths).length; } }

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