openapi: 3.1.1
info:
  title: AuthX
  description: API for managing signing entity updates.
  version: 1.0.0
servers:
  - url: https://script.google.com/a/macros/sonymusic-pde.com/s/TODO/exec/api/v1
    description: Prod
  - url: https://script.google.com/a/macros/sonymusic-pde.com/s/TODO/exec/api/v1
    description: QA
  - url: https://script.google.com/a/macros/sonymusic-pde.com/s/TODO/exec/api/v1
    description: Dev
paths:
  /me:
    get:
      summary: Get current user profile
      operationId: getUser
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserResponse"
  /me/delete:
    post:
      summary: Logout all clients and clear user data
      operationId: deleteUser
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserDeleteResponse"
  /me/status:
    get:
      summary: Get user connection status
      operationId: getUserStatus
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserStatusResponse"
        "404":
          description: User not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"

components:
  schemas:
    BaseResponse:
      type: object
      properties:
        statusCode:
          type: integer
          example: 200
      required:
        - statusCode
    ErrorResponse:
      type: object
      properties:
        statusCode:
          type: integer
          example: 404
        error:
          type: string
      required:
        - error
        - statusCode
    User:
      type: object
      properties:
        avatarUrl:
          type: string
        displayName:
          type: string
        email:
          type: string
        firstName:
          type: string
        lastName:
          type: string
    UserResponseData:
      type: object
      properties:
        user:
          $ref: "#/components/schemas/User"
      required:
        - user
    UserResponse:
      allOf:
        - $ref: "#/components/schemas/BaseResponse"
        - type: object
          properties:
            data:
              $ref: "#/components/schemas/UserResponseData"
          required:
            - data
    UserDeleteResponseData:
      type: object
    UserDeleteResponse:
      allOf:
        - $ref: "#/components/schemas/BaseResponse"
        - type: object
          properties:
            data:
              $ref: "#/components/schemas/UserDeleteResponseData"
          required:
            - data
    UserStatusConnected:
      type: object
      properties:
        connected:
          type: boolean
          const: true
        accessToken:
          type: string
        identityToken:
          type: string
        tokenType:
          type: string
      required:
        - connected
        - accessToken
        - identityToken
        - tokenType
    UserStatusDisconnected:
      type: object
      properties:
        connected:
          type: boolean
          const: false
        authUrl:
          type: string
      required:
        - connected
        - authUrl
        - timeoutAt
    UserStatus:
      oneOf:
        - $ref: "#/components/schemas/UserStatusConnected"
        - $ref: "#/components/schemas/UserStatusDisconnected"
    UserStatusResponseData:
      type: object
      properties:
        status:
          $ref: "#/components/schemas/UserStatus"
      required:
        - status
    UserStatusResponse:
      allOf:
        - $ref: "#/components/schemas/BaseResponse"
        - type: object
          properties:
            data:
              $ref: "#/components/schemas/UserStatusResponseData"
          required:
            - data
