openapi: 3.0.4
info:
  title: HelloCrifGateway
  description: Hello Crif - Api Gateway
  version: '1.1.0'
servers:
  - url: https://api-uat.crif.com/hello-crif/1.1.0
paths:
  /consents:
    get:
      tags:
        - Consents
      summary: Get all consents
      operationId: findAllUsingGET
      parameters:
        - name: page
          in: query
          description: Page number (default value 0)
          schema:
            type: integer
            format: int32
          x-example: 0
        - name: size
          in: query
          description: Page size (default value 20)
          schema:
            type: integer
            format: int32
          x-example: 20
        - name: sort
          in: query
          description: 'Sort using format FIELD_NAME,ORDER (ORDER can be asc or desc)'
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageOfConsent'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    post:
      tags:
        - Consents
      summary: Insert a new Consent
      operationId: insertUsingPOST
      requestBody:
        description: dto
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateConsent'
        required: true
        x-bodyName: dto
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Consent'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Maximum number of consents reached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  '/consents/{identifier}/{showcase}':
    get:
      tags:
        - Consents
      summary: Get a single consent (with all details) by identifier and showcase
      operationId: findByIdUsingGET
      parameters:
        - name: identifier
          in: path
          description: identifier
          required: true
          schema:
            type: integer
            format: int32
        - name: showcase
          in: path
          description: showcase
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Consent'
        '404':
          description: Consent not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    delete:
      tags:
        - Consents
      summary: Delete a single consent (with all details) by identifier and showcase
      operationId: deleteUsingDELETE
      parameters:
        - name: identifier
          in: path
          description: identifier
          required: true
          schema:
            type: integer
            format: int32
        - name: showcase
          in: path
          description: showcase
          required: true
          schema:
            type: string
      responses:
        '204':
          description: No Content
          content:
            application/json: { }
        '401':
          description: Unauthorized error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Consent not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /showcases:
    get:
      tags:
        - Showcases
      summary: Get all showcases
      operationId: findAllUsingGET_2
      parameters:
        - name: page
          in: query
          description: Page number (default value 0)
          schema:
            type: integer
            format: int32
          x-example: 0
        - name: size
          in: query
          description: Page size (default value 20)
          schema:
            type: integer
            format: int32
          x-example: 20
        - name: sort
          in: query
          description: 'Sort using format FIELD_NAME,ORDER (ORDER can be asc or desc)'
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageOfShowcase'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    post:
      tags:
        - Showcases
      summary: Insert a new showcase
      operationId: insertUsingPOST_2
      requestBody:
        description: dto
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateShowcase'
        required: true
        x-bodyName: dto
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Showcase'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Maximum number of showcases reached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /showcases/search:
    post:
      tags:
        - Showcases
      summary: Search showcases by filter
      operationId: searchUsingPOST_1
      parameters:
        - name: page
          in: query
          description: Page number (default value 0)
          schema:
            type: integer
            format: int32
          x-example: 0
        - name: size
          in: query
          description: Page size (default value 20)
          schema:
            type: integer
            format: int32
          x-example: 20
        - name: sort
          in: query
          description: 'Sort using format FIELD_NAME,ORDER (ORDER can be asc or desc)'
          schema:
            type: array
            items:
              type: string
      requestBody:
        description: searchDto
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchShowcase'
        required: true
        x-bodyName: searchDto
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageOfShowcase'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  '/showcases/{name}':
    get:
      tags:
        - Showcases
      summary: Get a single showcase (with all details) by name
      operationId: findByIdUsingGET_2
      parameters:
        - name: name
          in: path
          description: name
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Showcase'
        '404':
          description: Showcase not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    delete:
      tags:
        - Showcases
      summary: Delete a single showcase (with all details) by name
      operationId: deleteUsingDELETE_2
      parameters:
        - name: name
          in: path
          description: name
          required: true
          schema:
            type: string
      responses:
        '204':
          description: No Content
          content:
            application/json: { }
        '404':
          description: Consent not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    patch:
      tags:
        - Showcases
      summary: Update showcase
      operationId: updateUsingPATCH_1
      parameters:
        - name: name
          in: path
          description: name
          required: true
          schema:
            type: string
      requestBody:
        description: dto
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchShowcase'
        required: true
        x-bodyName: dto
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Showcase'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  '/showcases/{showcase}/reminders':
    get:
      tags:
        - Reminders
      summary: Get all reminders
      operationId: findAllUsingGET_1
      parameters:
        - name: page
          in: query
          description: Page number (default value 0)
          schema:
            type: integer
            format: int32
          x-example: 0
        - name: showcase
          in: path
          description: showcase
          required: true
          schema:
            type: string
        - name: size
          in: query
          description: Page size (default value 20)
          schema:
            type: integer
            format: int32
          x-example: 20
        - name: sort
          in: query
          description: 'Sort using format FIELD_NAME,ORDER (ORDER can be asc or desc)'
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageOfReminder'
        '404':
          description: Showcase not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    post:
      tags:
        - Reminders
      summary: Insert a new reminder
      operationId: insertUsingPOST_1
      parameters:
        - name: showcase
          in: path
          description: showcase
          required: true
          schema:
            type: string
      requestBody:
        description: dto
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateReminder'
        required: true
        x-bodyName: dto
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Reminder'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Showcase not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Maximum number of reminders reached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  '/showcases/{showcase}/reminders/search':
    post:
      tags:
        - Reminders
      summary: Search reminders by filter
      operationId: searchUsingPOST
      parameters:
        - name: page
          in: query
          description: Page number (default value 0)
          schema:
            type: integer
            format: int32
          x-example: 0
        - name: showcase
          in: path
          description: showcase
          required: true
          schema:
            type: string
        - name: size
          in: query
          description: Page size (default value 20)
          schema:
            type: integer
            format: int32
          x-example: 20
        - name: sort
          in: query
          description: 'Sort using format FIELD_NAME,ORDER (ORDER can be asc or desc)'
          schema:
            type: array
            items:
              type: string
      requestBody:
        description: searchDto
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchReminder'
        required: true
        x-bodyName: searchDto
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageOfReminder'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  '/showcases/{showcase}/reminders/{identifier}':
    get:
      tags:
        - Reminders
      summary: Get a single reminder (with all details) by identifier and showcase
      operationId: findByIdUsingGET_1
      parameters:
        - name: identifier
          in: path
          description: identifier
          required: true
          schema:
            type: string
        - name: showcase
          in: path
          description: showcase
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Reminder'
        '404':
          description: Reminder not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    delete:
      tags:
        - Reminders
      summary: Delete a single reminder (with all details) by identifier and showcase
      operationId: deleteUsingDELETE_1
      parameters:
        - name: identifier
          in: path
          description: identifier
          required: true
          schema:
            type: string
        - name: showcase
          in: path
          description: showcase
          required: true
          schema:
            type: string
      responses:
        '204':
          description: No Content
          content:
            application/json: { }
        '404':
          description: Reminder not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Generic Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    patch:
      tags:
        - Reminders
      summary: Update a reminder
      operationId: updateUsingPATCH
      parameters:
        - name: identifier
          in: path
          description: identifier
          required: true
          schema:
            type: string
        - name: showcase
          in: path
          description: showcase
          required: true
          schema:
            type: string
      requestBody:
        description: dto
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchReminder'
        required: true
        x-bodyName: dto
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Reminder'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    Consent:
      title: Consent
      type: object
      properties:
        consentLevel:
          enum:
            - READ_ONLY
            - FULL_ACCESS
          type: string
          description: Permission Level
          example: READ_ONLY
        identifier:
          type: integer
          description: Identifier of the consent
          format: int32
          example: 0
        showcase:
          type: string
          description: Showcase name
          example: showcase1
        username:
          type: string
          description: Username
          example: user1
      description: Consent (Full Information)
    CreateConsent:
      title: CreateConsent
      type: object
      properties:
        consentLevel:
          enum:
            - READ_ONLY
            - FULL_ACCESS
          type: string
          description: Permission Level
          example: READ_ONLY
        showcase:
          type: string
          description: Showcase name
          example: showcase1
        username:
          type: string
          description: Username
          example: user1
      description: Consent for creation (without identifier). Identifier will be generated automatically.
    CreateReminder:
      title: CreateReminder
      type: object
      properties:
        relevance:
          type: integer
          description: Reminder relevance
          format: int32
          example: 1
        selectableTextIdx:
          type: integer
          description: Index in a list of texts
          format: int32
          example: 1
      description: Reminder to create (without identifier) in a specified showcase. Identifier will be generated automatically.
    CreateShowcase:
      title: CreateShowcase
      type: object
      properties:
        validFrom:
          type: string
          description: Start validity of showcase
          format: date-time
          example: '0001-01-01T00:00:00.000Z'
        validTo:
          type: string
          description: Final validity of showcase
          format: date-time
          example: '0001-01-01T00:00:00.000Z'
      description: Showcase for insert/update.
    ErrorResponse:
      title: ErrorResponse
      type: object
      properties:
        fault:
          $ref: '#/components/schemas/Fault'
      description: All details about an occurred error
    Fault:
      title: Fault
      type: object
      properties:
        code:
          type: integer
          description: Error code
          format: int32
          example: 404
        description:
          type: string
          description: Error description
          example: 'Entity not found with id [123]'
        message:
          type: string
          description: Error message
          example: Not Found
      description: Fault details
    PageOfConsent:
      title: PageOfConsent
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/Consent'
          description: Elements contained in this page
        numberOfElements:
          type: integer
          description: Number of Elements in this page
          format: int32
          example: 5
        page:
          type: integer
          description: Page number
          format: int32
          example: 100
        size:
          type: integer
          description: Page size
          format: int32
          example: 10
        totalElements:
          type: integer
          description: Number of total elements (indipendent from pagination)
          format: int64
          example: 995
        totalPages:
          type: integer
          description: Number of total pages available
          format: int32
          example: 100
      description: Paged list
    PageOfReminder:
      title: PageOfReminder
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/Reminder'
          description: Elements contained in this page
        numberOfElements:
          type: integer
          description: Number of Elements in this page
          format: int32
          example: 5
        page:
          type: integer
          description: Page number
          format: int32
          example: 100
        size:
          type: integer
          description: Page size
          format: int32
          example: 10
        totalElements:
          type: integer
          description: Number of total elements (indipendent from pagination)
          format: int64
          example: 995
        totalPages:
          type: integer
          description: Number of total pages available
          format: int32
          example: 100
      description: Paged list
    PageOfShowcase:
      title: PageOfShowcase
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/Showcase'
          description: Elements contained in this page
        numberOfElements:
          type: integer
          description: Number of Elements in this page
          format: int32
          example: 5
        page:
          type: integer
          description: Page number
          format: int32
          example: 100
        size:
          type: integer
          description: Page size
          format: int32
          example: 10
        totalElements:
          type: integer
          description: Number of total elements (indipendent from pagination)
          format: int64
          example: 995
        totalPages:
          type: integer
          description: Number of total pages available
          format: int32
          example: 100
      description: Paged list
    PatchReminder:
      title: PatchReminder
      type: object
      properties:
        relevance:
          type: integer
          description: Reminder relevance
          format: int32
          example: 1
        selectableTextIdx:
          type: integer
          description: Index in a list of texts
          format: int32
          example: 1
      description: Reminder for insert/update.
    PatchShowcase:
      title: PatchShowcase
      type: object
      properties:
        validFrom:
          type: string
          description: Start validity of showcase
          format: date-time
          example: '0001-01-01T00:00:00.000Z'
        validTo:
          type: string
          description: Final validity of showcase
          format: date-time
          example: '0001-01-01T00:00:00.000Z'
      description: Showcase for insert/update.
    Reminder:
      title: Reminder
      type: object
      properties:
        identifier:
          type: string
          description: Identifier of reminder
          example: reminder-showcase-user1-10
        relevance:
          type: integer
          description: Relevance of this reminder
          format: int32
          example: 1
        showcase:
          type: string
          description: Showcase that contains this reminder
          example: showcase-user1-10
        text:
          type: string
          description: Text of this reminder
          example: This is a simple reminder
      description: Reminder (Full Information)
    SearchReminder:
      title: SearchReminder
      type: object
      properties:
        relevance:
          type: integer
          description: Filter by relevance
          format: int32
          example: 1
        textFilter:
          type: string
          description: Filter by text
          example: this
      description: Reminder Search Object
    SearchShowcase:
      title: SearchShowcase
      type: object
      properties:
        endValidity:
          type: string
          description: Filter by end validity
          format: date-time
          example: '0001-01-01T00:00:00.000Z'
        nameFilter:
          type: string
          description: Filter by name
          example: show1
        startValidity:
          type: string
          description: Filter by start validity
          format: date-time
          example: '0001-01-01T00:00:00.000Z'
      description: Showcase Search Object
    Showcase:
      title: Showcase
      type: object
      properties:
        name:
          type: string
          description: Name of showcase
          example: shocase-user1-10
        owner:
          type: string
          description: User that has created showcase
          example: user1
        validFrom:
          type: string
          description: Start validity of showcase
          format: date-time
          example: '0001-01-01T00:00:00.000Z'
        validTo:
          type: string
          description: Final validity of showcase
          format: date-time
          example: '0001-01-01T00:00:00.000Z'
      description: Showcase (Full Information)
  securitySchemes:
    Password:
      type: oauth2
      flows:
        password:
          tokenUrl: https://iam-uat.crif.com/oauth2/token
          scopes: { }
    Authorization_Code:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://iam-uat.crif.com/oauth2/authorize
          tokenUrl: https://iam-uat.crif.com/oauth2/token
          scopes: { }
security:
  - Password: [ ]
  - Authorization_Code: [ ]
tags:
  - name: Consents
    description: Consents APIs
  - name: Reminders
    description: Reminders APIs
  - name: Showcases
    description: Showcases APIs