---
swagger: "2.0"
info:
  description: "API for the user profile in the My Driving example app. https://github.com/Azure-Samples/openhack-devops-team"
  version: "0.1.0"
  title: "My Driving User Profile API"
basePath: "/api"
schemes:
- "http"
consumes:
- "application/json"
produces:
- "application/json"
paths:
  /healthcheck/user:
    x-swagger-router-controller: healthcheck
    get:
      description: "Returns healthcheck for systems looking to ensure API is up and operational"
      responses:
        200:
          description: "Service is healthy"
          schema:
            $ref: "#/definitions/Healthcheck"
        default:
          description: "An error occurred"
          schema:
            $ref: "#/definitions/error_response_default"
  /version/user:
    x-swagger-router-controller: version
    get:
      description: "Returns APP_VERSION environment variable to ensure API is running with a specific versionl"
      responses:
        200:
          description: "BuildVersion"
          schema:
            $ref: "#/definitions/Version"
        default:
          description: "An error occurred"
          schema:
            $ref: "#/definitions/error_response_default"                       
  /user:
    get:
      description: "List all user profiles"
      operationId: "getAllUsers"
      parameters: []
      responses:
        200:
          description: "List of all users"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/Profile"
        default:
          description: "An error occurred"
          schema:
            $ref: "#/definitions/inline_response_default"
      x-swagger-router-controller: "user"
  /user/{userID}:
    parameters:
      -
        name: "userID"
        in: "path"
        description: "User's unique ID"
        type: "string"
        required: true
    get:
      description: "Get a User Profile by ID"
      operationId: "userGET"
      responses:
        200:
          description: "List of profiles"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/Profile"
        default:
          description: "An error occurred"
          schema:
            $ref: "#/definitions/inline_response_default"
      x-swagger-router-controller: "user"
    post:
      description: "Declares and creates a new profile"
      operationId: "userPOST"
      parameters:
      - in: "body"
        name: "_profile"
        description: "Details of the profile"
        required: true
        schema:
          $ref: "#/definitions/Profile"
      responses:
        201:
          description: "Creation successful"
          schema:
            $ref: "#/definitions/Profile"
          headers:
            location:
              type: "string"
        default:
          description: "An error occurred"
          schema:
            $ref: "#/definitions/inline_response_default"
      x-swagger-router-controller: "user"
    patch:
      description: "Update User"
      operationId: "updateUser"
      responses:
        200:
          description: "User Updated"
          schema:
            $ref: "#/definitions/Profile"
        404:
          description: "User profile not found"
        default:
          description: "Unknown Error"
          schema:
            $ref: "#/definitions/error_response_default"
    delete:
      description: "Delete User By ID"
      operationId: "userDELETE"
      responses:
        204:
          description: "User Deleted"
        404:
          description: "User not found"
        default:
          description: "Unknown Error"
          schema:
            $ref: "#/definitions/error_response_default"
definitions:
  Healthcheck:
    type: "object"
    properties:
      message:
        type: "string"
        description: ""
      status:
        type: "string"
        description: ""
  Version:
    type: "string"         
  Profile:
    type: "object"
    properties:
      Id:
        type: "string"
        description: "User's unique identity"
      FirstName:
        type: "string"
        minLength: 0
        maxLength: 50
        pattern: "^[A-Za-z \0-\x7f][a-zA-Z \0-\x7f]*$"
      LastName:
        type: "string"
        minLength: 0
        maxLength: 80
        pattern: "^[A-Za-z \0-\x7f][a-zA-Z \0-\x7f]*$"
      UserId:
        type: "string"
        description: "User's identity"
      ProfilePictureUri:
        type: "string"
        format: "binary"
        description: "User's Profile picture"
      Rating:
        type: "integer"
        description: "User's rating"
      Ranking:
        type: "integer"
        description: "User's ranking"
      TotalDistance:
        type: "number"
        format: "float"
        description: "User's total distance traveled"
      TotalTrips:
        type: "integer"
        format: "long"
        description: "User's total number of trips"
      TotalTime:
        type: "integer"
        format: "long"
        description: "User's total driving time"
      HardStops:
        type: "integer"
        format: "long"
        description: "User's total number of hard stops"
      HardAccelerations:
        type: "integer"
        format: "long"
        description: "User's total number of hard accelerations"
      FuelConsumption:
        type: "number"
        format: "float"
        description: "User's amount of fuel consumed"
      MaxSpeed:
        type: "number"
        format: "float"
        description: "User's maximum speed"
      CreatedAt:
        type: "string"
        format: "date"
      UpdatedAt:
        type: "string"
        format: "date"
      Deleted:
        type: "boolean"
        description: "Whether the user has been deleted or not."
  error_response_default:
    type: "object"
    properties:
      status:
        description: "Error code (if available)"
        type: "integer"
        format: "int32"
      message:
        description: "Error Message"
        type: "string"
  inline_response_default:
    required:
    - "message"
    - "status"
    properties:
      status:
        type: "integer"
        format: "int32"
      message:
        type: "string"
