brokeyourbike/lets-go-chat

View on GitHub
api/openapi.yaml

Summary

Maintainability
Test Coverage
openapi: 3.1.0
info:
  title: Fancy Golang chat
  description: Just a simple chat service
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  version: 1.0.0
servers:
- url: /v1
tags:
- name: user
  description: Operations about user
- name: chat
  description: Operations related to chat
paths:
  /user:
    post:
      tags:
      - user
      summary: Register (create) user
      operationId: createUser
      requestBody:
        description: Created user object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUserRequest'
        required: true
      responses:
        200:
          description: user created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateUserResponse'
        400:
          description: Bad request, empty username or id
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-codegen-request-body-name: body
  /user/login:
    post:
      tags:
      - user
      summary: Logs user into the system
      operationId: loginUser
      requestBody:
        description: User credendials
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginUserRequest'
        required: true
      responses:
        200:
          description: successful operation, returns link to join chat
          headers:
            X-Rate-Limit:
              description: calls per hour allowed by the user
              schema:
                type: integer
                format: int32
            X-Expires-After:
              description: date in UTC when token expires
              schema:
                type: string
                format: date-time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginUserResonse'
        400:
          description: Invalid username/password
          content: {}
        500:
          description: Internal Server Error
          content: {}
  /user/active:
    get:
      tags:
      - user
      - chat
      summary: Number of active users in a chat
      operationId: getActiveUsers
      responses:
        200:
          description: successful operation, returns number of active users
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActiveUsersResponse'
        500:
          description: Internal Server Error
          content: {}  
  /chat/ws.rtm.start:
    get:
      tags:
      - chat
      summary: Endpoint to start real time chat
      operationId: wsRTMStart
      parameters:
        - name: token
          in: query
          required: true
          description: One time token for a loged user
          schema:
            type: string
      responses:
        101:
          description: Upgrade to websocket protocol
          content: {}
        400:
          description: Invalid token
          content: {}
        500:
          description: Internal Server Error
          content: {}  
components:
  schemas:
    LoginUserRequest:
      required:
      - password
      - userName
      type: object
      properties:
        userName:
          type: string
          description: The user name for login
        password:
          type: string
          description: The password for login in clear text
    LoginUserResonse:
      required:
      - url
      type: object
      properties:
        url:
          type: string
          description: A url for websoket API with a one-time token for starting chat
          example: ws://fancy-chat.io/ws&token=one-time-token
    CreateUserRequest:
      required:
      - password
      - userName
      type: object
      properties:
        userName:
          minLength: 4
          type: string
        password:
          minLength: 8
          type: string
    CreateUserResponse:
      required:
      - id
      - userName
      type: object
      properties:
        id:
          type: string
          format: uuid
        userName:
          type: string
    ActiveUsersResponse:
      required:
        - count
      type: object
      properties:
        count:
          type: integer