openapi: 3.0.0
info:
  title: 智能算法展示平台API
  description: 智能算法展示平台的RESTful API接口文档
  version: 1.0.0
servers:
  - url: http://localhost:8001/api/v1
    description: 本地开发环境

components:
  schemas:
    Algorithm:
      type: object
      properties:
        id:
          type: string
          description: 算法ID
        name:
          type: string
          description: 算法名称
        description:
          type: string
          description: 算法描述
        type:
          type: string
          description: 算法类型
        status:
          type: string
          description: 算法状态
        created_at:
          type: string
          format: date-time
          description: 创建时间
        updated_at:
          type: string
          format: date-time
          description: 更新时间
        versions:
          type: array
          items:
            $ref: '#/components/schemas/AlgorithmVersion'
      required:
        - id
        - name
        - description
        - type

    AlgorithmVersion:
      type: object
      properties:
        id:
          type: string
          description: 版本ID
        algorithm_id:
          type: string
          description: 算法ID
        version:
          type: string
          description: 版本号
        url:
          type: string
          description: 算法API地址
        params:
          type: object
          description: 算法参数配置
        input_schema:
          type: object
          description: 输入数据格式
        output_schema:
          type: object
          description: 输出数据格式
        is_default:
          type: boolean
          description: 是否为默认版本
        created_at:
          type: string
          format: date-time
          description: 创建时间
        updated_at:
          type: string
          format: date-time
          description: 更新时间
      required:
        - id
        - algorithm_id
        - version
        - url

    AlgorithmCallRequest:
      type: object
      properties:
        algorithm_id:
          type: string
          description: 算法ID
        version_id:
          type: string
          description: 版本ID
        input_data:
          type: object
          description: 输入数据
        params:
          type: object
          description: 算法参数
      required:
        - algorithm_id
        - version_id
        - input_data

    AlgorithmCallResult:
      type: object
      properties:
        id:
          type: string
          description: 调用ID
        user_id:
          type: string
          description: 用户ID
        algorithm_id:
          type: string
          description: 算法ID
        version_id:
          type: string
          description: 版本ID
        input_data:
          type: object
          description: 输入数据
        params:
          type: object
          description: 算法参数
        output_data:
          type: object
          description: 输出数据
        status:
          type: string
          description: 调用状态
        response_time:
          type: number
          description: 响应时间（秒）
        error_message:
          type: string
          description: 错误信息
        created_at:
          type: string
          format: date-time
          description: 创建时间
        updated_at:
          type: string
          format: date-time
          description: 更新时间
      required:
        - id
        - status

    OpenAIGenerateRequest:
      type: object
      properties:
        prompt:
          type: string
          description: 描述
        data_type:
          type: string
          description: 数据类型
      required:
        - prompt

    OpenAIGenerateResponse:
      type: object
      properties:
        data:
          type: object
          description: 生成的数据
        type:
          type: string
          description: 数据类型

    User:
      type: object
      properties:
        id:
          type: string
          description: 用户ID
        username:
          type: string
          description: 用户名
        email:
          type: string
          description: 邮箱
        role:
          type: string
          description: 角色
        status:
          type: string
          description: 状态
        created_at:
          type: string
          format: date-time
          description: 创建时间
        updated_at:
          type: string
          format: date-time
          description: 更新时间

    UserLoginRequest:
      type: object
      properties:
        username:
          type: string
          description: 用户名
        password:
          type: string
          description: 密码
      required:
        - username
        - password

    UserRegisterRequest:
      type: object
      properties:
        username:
          type: string
          description: 用户名
        email:
          type: string
          description: 邮箱
        password:
          type: string
          description: 密码
      required:
        - username
        - email
        - password

    TokenResponse:
      type: object
      properties:
        access_token:
          type: string
          description: 访问令牌
        token_type:
          type: string
          description: 令牌类型
        expires_at:
          type: string
          format: date-time
          description: 过期时间

    APIKey:
      type: object
      properties:
        id:
          type: string
          description: API密钥ID
        user_id:
          type: string
          description: 用户ID
        key:
          type: string
          description: API密钥
        name:
          type: string
          description: 密钥名称
        expires_at:
          type: string
          format: date-time
          description: 过期时间
        status:
          type: string
          description: 状态
        created_at:
          type: string
          format: date-time
          description: 创建时间
        updated_at:
          type: string
          format: date-time
          description: 更新时间

    APIKeyCreateRequest:
      type: object
      properties:
        name:
          type: string
          description: 密钥名称
        expires_at:
          type: string
          format: date-time
          description: 过期时间
      required:
        - name
        - expires_at

  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

paths:
  /algorithms:
    get:
      summary: 获取算法列表
      description: 获取所有算法的列表，可选择按类型过滤
      parameters:
        - in: query
          name: type
          schema:
            type: string
          description: 算法类型
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                type: object
                properties:
                  algorithms:
                    type: array
                    items:
                      $ref: '#/components/schemas/Algorithm'
                  total:
                    type: integer
    post:
      summary: 创建算法
      description: 创建新的算法
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                description:
                  type: string
                type:
                  type: string
              required:
                - name
                - description
                - type
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Algorithm'

  /algorithms/{algorithm_id}:
    get:
      summary: 获取算法详情
      description: 获取指定算法的详细信息
      parameters:
        - in: path
          name: algorithm_id
          schema:
            type: string
          required: true
          description: 算法ID
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Algorithm'
    put:
      summary: 更新算法
      description: 更新指定算法的信息
      security:
        - bearerAuth: []
      parameters:
        - in: path
          name: algorithm_id
          schema:
            type: string
          required: true
          description: 算法ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                description:
                  type: string
                type:
                  type: string
                status:
                  type: string
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Algorithm'
    delete:
      summary: 删除算法
      description: 删除指定的算法
      security:
        - bearerAuth: []
      parameters:
        - in: path
          name: algorithm_id
          schema:
            type: string
          required: true
          description: 算法ID
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string

  /algorithms/{algorithm_id}/versions:
    get:
      summary: 获取算法版本列表
      description: 获取指定算法的所有版本
      parameters:
        - in: path
          name: algorithm_id
          schema:
            type: string
          required: true
          description: 算法ID
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AlgorithmVersion'
    post:
      summary: 创建算法版本
      description: 为指定算法创建新的版本
      security:
        - bearerAuth: []
      parameters:
        - in: path
          name: algorithm_id
          schema:
            type: string
          required: true
          description: 算法ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                version:
                  type: string
                url:
                  type: string
                params:
                  type: object
                input_schema:
                  type: object
                output_schema:
                  type: object
                is_default:
                  type: boolean
              required:
                - version
                - url
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlgorithmVersion'

  /algorithms/{algorithm_id}/versions/{version_id}:
    get:
      summary: 获取算法版本详情
      description: 获取指定算法版本的详细信息
      parameters:
        - in: path
          name: algorithm_id
          schema:
            type: string
          required: true
          description: 算法ID
        - in: path
          name: version_id
          schema:
            type: string
          required: true
          description: 版本ID
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlgorithmVersion'
    put:
      summary: 更新算法版本
      description: 更新指定算法版本的信息
      security:
        - bearerAuth: []
      parameters:
        - in: path
          name: algorithm_id
          schema:
            type: string
          required: true
          description: 算法ID
        - in: path
          name: version_id
          schema:
            type: string
          required: true
          description: 版本ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                version:
                  type: string
                url:
                  type: string
                params:
                  type: object
                input_schema:
                  type: object
                output_schema:
                  type: object
                is_default:
                  type: boolean
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlgorithmVersion'
    delete:
      summary: 删除算法版本
      description: 删除指定的算法版本
      security:
        - bearerAuth: []
      parameters:
        - in: path
          name: algorithm_id
          schema:
            type: string
          required: true
          description: 算法ID
        - in: path
          name: version_id
          schema:
            type: string
          required: true
          description: 版本ID
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string

  /algorithms/call:
    post:
      summary: 调用算法
      description: 调用指定的算法并获取结果
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AlgorithmCallRequest'
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlgorithmCallResult'

  /algorithms/calls/{call_id}:
    get:
      summary: 获取算法调用结果
      description: 获取指定算法调用的结果
      security:
        - bearerAuth: []
      parameters:
        - in: path
          name: call_id
          schema:
            type: string
          required: true
          description: 调用ID
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlgorithmCallResult'

  /openai/generate-data:
    post:
      summary: 生成仿真输入数据
      description: 使用OpenAI生成仿真输入数据
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OpenAIGenerateRequest'
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpenAIGenerateResponse'

  /openai/describe-image:
    post:
      summary: 生成图片描述
      description: 使用OpenAI生成图片描述
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                image_url:
                  type: string
              required:
                - image_url
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                type: object
                properties:
                  description:
                    type: string

  /users/register:
    post:
      summary: 用户注册
      description: 注册新用户
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserRegisterRequest'
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'

  /users/login:
    post:
      summary: 用户登录
      description: 用户登录获取令牌
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserLoginRequest'
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'

  /users/me:
    get:
      summary: 获取当前用户信息
      description: 获取当前登录用户的信息
      security:
        - bearerAuth: []
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'

  /api-keys:
    get:
      summary: 获取API密钥列表
      description: 获取当前用户的API密钥列表
      security:
        - bearerAuth: []
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/APIKey'
    post:
      summary: 创建API密钥
      description: 为当前用户创建新的API密钥
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/APIKeyCreateRequest'
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIKey'

  /api-keys/{key_id}:
    delete:
      summary: 删除API密钥
      description: 删除指定的API密钥
      security:
        - bearerAuth: []
      parameters:
        - in: path
          name: key_id
          schema:
            type: string
          required: true
          description: 密钥ID
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string

  /health:
    get:
      summary: 健康检查
      description: 检查系统健康状态
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
