swagger: '2.0'
info:
  title: Report API
  description: Move your app forward with the Report API
  version: "1.0.0"
# the domain of the service
host: 127.0.0.1
# array of all schemes that your API supports
schemes:
  - http
# will be prefixed to all paths
basePath: /v1
produces:
  - application/json
paths:
  /reports/new:
    post:
      summary: Create a new report
      description: Create a new report
      parameters:
        - name: NewReport
          in: body
          required: true
          schema:
            $ref: '#/definitions/Report'
      tags:
        - Report
      responses:
        200:
          description: OK
  /reports/{id}/delete:
    post:
      summary: Delete a report
      description: Delete a report
      parameters:
        - name: id
          in: path
          description: report id to delete
          required: true
          type: integer
      tags:
        - Reports
      responses:
        200:
          description: OK
  /reports/outbox:
    get:
      summary: Query User Created Reports List
      description: |
        The Reports endpoint returns reports.
      parameters:
        - name: curPage
          in: query
          required: false
          type: integer
          format: int32
        - name: pageSize
          in: query
          required: false
          type: integer
          format: int32
      tags:
        - Report
      responses:
        200:
          description: An array of reports
          schema:
            type: object
            properties:
              curPage:
                type: integer
                format: int32
              pageSize:
                type: integer
                format: int32
              totalAmount:
                type: integer
                format: int32
              reports:
                type: array
                items:
                  $ref: '#/definitions/Report'
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
  /reports/inbox:
    get:
      summary: User Received Reports List
      description: |
        The Reports endpoint returns reports.
      parameters:
        - name: curPage
          in: query
          required: false
          type: integer
          format: int32
        - name: pageSize
          in: query
          required: false
          type: integer
          format: int32
        - name: year
          in: query
          required: false
          type: integer
          format: int32
        - name: week
          in: query
          required: false
          type: integer
          format: int32
      tags:
        - Report
      responses:
        200:
          description: An array of reports
          schema:
            type: object
            properties:
              curPage:
                type: integer
                format: int32
              pageSize:
                type: integer
                format: int32
              totalAmount:
                type: integer
                format: int32
              reports:
                type: array
                items:
                  $ref: '#/definitions/Report'
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
  /reports/{id}:
    get:
      summary: Get Report Details
      description: Get report details.
      parameters:
        - name: id
          in: path
          description: Report id.
          required: true
          type: integer
          format: int32
      tags:
        - Report
      responses:
        201:
          description: A Report Object
          type: object
          schema:
            $ref: '#/definitions/Report'
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
    put:
      summary: Update Report
      description: Update report.
      parameters:
        - name: id
          in: path
          description: Report id.
          required: true
          type: integer
          format: int32
        - name: NewReport
          in: body
          description: New report content
          required: true
          schema:
            $ref: '#/definitions/Report'
      tags:
        - Report
      responses:
        200:
          description: A Report Object
          schema:
            $ref: '#/definitions/Report'
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
  /login:
    post:
      summary: Login
      description: |
        Login.
      parameters:
        - name: username
          in: body
          description: Login name.
          required: true
          type: string
        - name: password
          in: body
          description: Login password.
          required: true
          type: string
      tags:
        - Login
      responses:
        200:
          description: Login result
          schema:
            type: object
            properties:
              authToken:
                type: string
                required: true
        401:
          description: unauthorized
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
  /logout:
    post:
      summary: Logout
      description: |
        Logout.
      tags:
        - Login
      responses:
        200:
          description: Logout result
        401:
          description: unauthorized
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
  /projects:
    get:
      summary: Get Projects
      description: Get projects.
      tags:
        - Project
      responses:
        200:
          description: All Projects
          type: array
          items:
            $ref: '#/definitions/Project'
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
  /projects/new:
    post:
      summary: Create A New Project
      description: Create a new project.
      parameters:
        - name: NewProject
          in: body
          required: true
          schema:
            $ref: '#/definitions/Project'
      tags:
        - Project
      responses:
        200:
          description: New created project
          schema:
            $ref: '#/definitions/Project'
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
  /projects/{id}/delete:
    post:
      summary: Delete A Project
      description: Delete a project.
      parameters:
        - name: id
          in: path
          type: iinteger
          format: int32
          required: true
      tags:
        - Project
      responses:
        200:
          description: All Projects
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
  /users:
    get:
      summary: Get Users
      description: Get Users.
      tags:
        - User
      responses:
        200:
          description: All Users
          type: array
          items:
            schema:
              $ref: '#/definitions/User'
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
  /profile:
    put:
      summary: Update signature
      description: Update report signature.
      parameters:
        - name: signature
          in: body
          type: string
          description: Additional information for report.
        - name: signatureEnabled
          in: body
          type: boolean
          description: Whether attach signature while cc.
      tags:
        - User
      responses:
        200:
          description: Updated profile
          schema:
            $ref: '#/definitions/Profile'
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
definitions:
  User:
    type: object
    properties:
      userId:
        type: integer
        format: int32
      username:
        type: string
      displayName:
        type: string
      authToken:
        type: string
      signature:
        type: string
      signatureEnabled:
        type: boolean
      createdAt:
        type: string
        format: date-time
      updatedAt:
        type: string
        format: date-time
  Profile:
    type: object
    properties:
      displayName:
        type: string
      signature:
        type: string
      signatureEnabled:
        type: boolean
  Project:
    type: object
    properties:
      projectId:
        type: integer
        format: int32
      projectName:
        type: string
      description:
        type: string
      createdAt:
        type: string
        format: date-time
      updatedAt:
        type: string
        format: date-time
  Message:
    type: object
    properties:
      messageId:
        type: integer
        format: int32
      reportId:
        type: integer
        format: int32
      fromUserId:
        type: integer
        format: int32
      toUserId:
        type: integer
        format: int32
      createdAt:
        type: string
        format: date-time
      updatedAt:
        type: string
        format: date-time
  Keypoint:
    type: object
    properties:
      highlight:
        type: string
      weakPoint:
        type: string
      risk:
        type: string
      specialProblems:
        type: string
      requestInstruction:
        type: string
      research:
        type: string
  ProjectSummary:
    type: object
    properties:
      projectId:
        type: integer
        format: int32
      content:
        type: string
  Report:
    type: object
    properties:
      reportId:
        type: integer
        format: int32
      userId:
        type: integer
        format: int32
      schedule:
        type: string
      year:
        type: integer
        format: int32
      month:
        type: integer
        format: int32
      week:
        type: integer
        format: int32
      content:
        type: object
        properties:
          keypoint:
            $ref: '#/definitions/Keypoint'
          summary:
            type: array
            items:
              $ref: '#/definitions/ProjectSummary'
          planning:
            type: array
            items:
              $ref: '#/definitions/ProjectSummary'
      createdAt:
        type: string
        format: date-time
      updatedAt:
        type: string
        format: date-time
  Error:
    type: object
    properties:
      code:
        type: integer
        format: int32
      message:
        type: string
      fields:
        type: string
