---
openapi: 3.0.0
info:
  title: Mobilosoft Spec
  description: Mobilosoft API Definition
  contact:
    name: Mobilosoft
    url: https://www.Mobilosoft.com/
  version: 2.0.13
servers:
- url: https://virtserver.swaggerhub.com/HELKHAMLICHI/Mobilosoft/2.0.13
  description: SwaggerHub API Auto Mocking
- url: https://preprod-api.mobilosoft.com
paths:
  /user/notification/preferences:
    get:
      tags:
      - Module Notifications
      summary: get notifications preferences
      description: get notifications preferences
      operationId: getNotificationsPreferences
      responses:
        "200":
          description: Notification preferences
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/notificationPreferences'
    put:
      tags:
      - Module Notifications
      summary: setnotifications preferences
      description: set notifications preferences
      operationId: setNotificationsPreferenceshea
      requestBody:
        description: body with preferences
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/notificationPreferences'
        required: true
      responses:
        "200":
          description: Notification preferences saved
  /notification/list:
    get:
      tags:
      - Module Notifications
      summary: get notifications
      description: get notifications by filter
      operationId: getNotifications
      parameters:
      - name: storeIds
        in: query
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: hubs
        in: query
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      responses:
        "200":
          description: list of notifications
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/notification'
  /token/register:
    put:
      tags:
      - Module Notifications
      summary: send token
      description: send token
      operationId: sendToken
      parameters:
      - name: token
        in: query
        required: false
        style: form
        explode: true
        schema:
          type: string
      - name: previousToken
        in: query
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      responses:
        "200":
          description: token send
  /user/colleagues:
    get:
      tags:
      - Module User
      summary: get colleagues
      description: get colleagues
      operationId: getColleagues
      responses:
        "200":
          description: colleagues list
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                  description: colleague that can be notified for reviews
  /review/list:
    get:
      tags:
      - Module Reviews
      summary: get Reviews
      description: get reviews by filter
      operationId: getReviews
      parameters:
      - name: sort
        in: query
        description: sort data by oldest newest best worst
        required: false
        style: form
        explode: true
        schema:
          type: string
      - name: storeId
        in: query
        description: store id
        required: false
        style: form
        explode: true
        schema:
          type: string
      - name: rating
        in: query
        description: rating int
        required: false
        style: form
        explode: true
        schema:
          type: integer
      - name: from
        in: query
        description: filter from date
        required: false
        style: form
        explode: true
        schema:
          type: string
      - name: to
        in: query
        description: filter to date
        required: false
        style: form
        explode: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip before starting to collect the result set
        required: false
        style: form
        explode: true
        schema:
          type: integer
      - name: limit
        in: query
        description: The numbers of items to return
        required: false
        style: form
        explode: true
        schema:
          type: integer
      - name: status
        in: query
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: channels
        in: query
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
            description: channel available for reviews
      responses:
        "200":
          description: reviews List with pagination
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/review'
  /review/{reviewId}:
    get:
      tags:
      - Module Reviews
      summary: get Review by id
      description: get Review by id
      operationId: getReviewById
      parameters:
      - name: reviewId
        in: path
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: review object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/review'
  /review/reply/{reviewId}:
    post:
      tags:
      - Module Reviews
      summary: post review reply
      description: post Review Reply
      operationId: postReviewReply
      parameters:
      - name: reviewId
        in: path
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        description: body with reply
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/reply_reviewId_body'
      responses:
        "200":
          description: review reply added
  /review/reply/{replyId}/edit:
    put:
      tags:
      - Module Reviews
      summary: edit reply
      description: edit reply
      operationId: editReply
      parameters:
      - name: replyId
        in: path
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        description: body with reply
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/replyId_edit_body'
      responses:
        "200":
          description: review reply edited
  /review/skip/{reviewId}:
    post:
      tags:
      - Module Reviews
      summary: skip review
      description: skip review
      operationId: skipReview
      parameters:
      - name: reviewId
        in: path
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: review skipped
  /review/notify/{reviewId}:
    post:
      tags:
      - Module Reviews
      summary: notify review
      description: notify review
      operationId: notify review
      parameters:
      - name: reviewId
        in: path
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: users
        in: query
        description: "[user1, user2]"
        required: true
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      responses:
        "200":
          description: review skipped
  /review/response/canned:
    get:
      tags:
      - Module Reviews
      summary: get canned responses
      description: get canned responses
      operationId: getCannedResponses
      responses:
        "200":
          description: canned responses list
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                  description: canned responses
  /config:
    get:
      tags:
      - Module Config
      summary: get Config
      description: get app config
      operationId: getConfig
      responses:
        "200":
          description: config object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/appConfig'
  /user/store/{storeId}/campaigns:
    get:
      tags:
      - Module Campaigns
      summary: get Campaigns
      description: get Campaigns
      operationId: getCampaigns
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip before starting to collect the result set
        required: false
        style: form
        explode: true
        schema:
          type: integer
      - name: limit
        in: query
        description: The numbers of items to return
        required: false
        style: form
        explode: true
        schema:
          type: integer
      - name: status
        in: query
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      responses:
        "200":
          description: list of campaigns
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/campaign'
  /user/campaign/{campaignId}:
    delete:
      tags:
      - Module Campaigns
      summary: delete campaign
      description: delete campaign
      operationId: delete campaign
      parameters:
      - name: campaignId
        in: path
        description: campaign id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: channels
        in: query
        required: false
        style: form
        explode: true
        schema:
          type: array
          example: "facebook, google"
          items:
            type: string
      responses:
        "200":
          description: operation succeeded
        "401":
          description: unauthorized
  /user/campaigns:
    post:
      tags:
      - Module Campaigns
      summary: add Campaigns
      description: add Campaign
      operationId: addCampaign
      requestBody:
        description: body with new compaign
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/campaignInfo'
        required: true
      responses:
        "200":
          description: added successfully
        "400":
          description: bad request
  /user/campaigns/master/templates:
    get:
      tags:
      - Module Campaigns
      summary: get campaign templates
      description: get campaign templates
      operationId: get campaign templates
      responses:
        "200":
          description: list of campaigns templates
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/campaignTemplate'
  /user/login/partner/{partner}:
    get:
      tags:
      - Module Auth
      summary: Login via partner
      description: "Login via partner (Carrefour, Delhaize,...)"
      operationId: LoginPartner
      parameters:
      - name: partner
        in: path
        description: partner
        required: true
        style: simple
        explode: false
        schema:
          type: string
          example: google
          enum:
          - Carrefour
          - Delhaize
      - name: authorization
        in: header
        description: "Basic + [base64 of (username:pwd)]"
        required: true
        style: simple
        explode: false
        schema:
          type: string
          example: Basic HEJFQJ
      responses:
        "200":
          description: a valid token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/token'
        "400":
          description: partner invalid
  /user/login/sso/{provider}:
    get:
      tags:
      - Module Auth
      summary: "SSO login (google, Apple)"
      description: "SSO login (google, Apple)"
      operationId: loginExternal
      parameters:
      - name: provider
        in: path
        description: "provider of SSO: google | apple"
        required: true
        style: simple
        explode: false
        schema:
          type: string
          example: google
          enum:
          - google
          - apple
      - name: code
        in: query
        description: access code retrieved from SSO provider
        required: true
        style: form
        explode: true
        schema:
          type: string
          example: EVFV334534523
      responses:
        "200":
          description: a valid token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/token'
        "400":
          description: authorize code invalid
  /user/login:
    get:
      tags:
      - Module Auth
      summary: "Login Basic (email, pwd)"
      description: "Login Basic (email, pwd)"
      operationId: loginBasic
      parameters:
      - name: authorization
        in: header
        description: "Basic + [base64 of (username:pwd)]"
        required: true
        style: simple
        explode: false
        schema:
          type: string
          example: Basic HEJFQJ
      responses:
        "200":
          description: a valid token object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/token'
        "401":
          description: username&pwd not valid
  /user/login/refresh:
    post:
      tags:
      - Module Auth
      summary: refresh token
      description: Refresh token called after token expired
      operationId: Refresh token
      requestBody:
        description: body with refresh token
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/login_refresh_body'
            example:
              refresh_token: Jd5pOpizyioxa9lqPbAQcWjH6dxrN+5j7ALszB3rx6MK
        required: true
      responses:
        "200":
          description: a valid token object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/token'
        "401":
          description: refresh token invalid or user is not valid anymore
  /user/password/reset:
    post:
      tags:
      - Module Auth
      summary: Reset password for email sent in body
      description: Reset password for email sent in body
      operationId: Resetpassword
      requestBody:
        description: account email
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/password_reset_body'
            example:
              email: email@gmail.com
        required: true
      responses:
        "200":
          description: reset email sent
        "400":
          description: email not found
  /user/password/{token}:
    put:
      tags:
      - Module Auth
      summary: Set new password
      description: update password using token received by email
      operationId: Updatepassword
      parameters:
      - name: token
        in: path
        description: token sent by email
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        description: body containing new password
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/password_token_body'
            example:
              password: 1234abcd
        required: true
      responses:
        "200":
          description: password is changed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_200'
        "400":
          description: "bad request, password not found in body,.."
        "401":
          description: token is invalid
  /user/stores:
    get:
      tags:
      - Module Locations
      summary: get my stores
      description: get my stores
      operationId: getMyStores
      responses:
        "200":
          description: list of stores
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/store'
        "401":
          description: unauthorized
  /user/store/{storeId}/info/contact:
    put:
      tags:
      - Module Locations
      summary: update my store info
      description: update my store info
      operationId: update MyStore info
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        description: body with info
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/contact'
      responses:
        "200":
          description: store info updated
        "401":
          description: unauthorized
  /user/store/{storeId}/info/descriptions:
    put:
      tags:
      - Module Locations
      summary: update my store descriptions
      description: update my store descriptions
      operationId: update MyStore descriptions
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        description: body with info
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/channelDescription'
      responses:
        "200":
          description: store info updated
        "401":
          description: unauthorized
  /user/store/{storeId}/info/:
    get:
      tags:
      - Module Locations
      summary: get my store info
      description: get my store info
      operationId: getMyStore info
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: store info
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/store'
        "401":
          description: unauthorized
  /user/store/{storeId}/services:
    get:
      tags:
      - Module Locations
      summary: get my store services
      description: get my store services
      operationId: getMyStore services
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: store info
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/channelService'
        "401":
          description: unauthorized
    put:
      tags:
      - Module Locations
      summary: update my store services
      description: update my store services
      operationId: update services
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        description: body with updated services
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/channelService'
      responses:
        "200":
          description: operation succeed
        "401":
          description: unauthorized
  /user/store/{storeId}/openingHours/{id}:
    delete:
      tags:
      - Module Locations
      summary: delete opening hours by id
      description: delete special opening hours by id
      operationId: delete opening hours
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: id
        in: path
        description: hours id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: operation succeeded
        "401":
          description: unauthorized
  /user/store/{storeId}/openingHours:
    get:
      tags:
      - Module Locations
      summary: get my store opening hours
      description: get my store opening hours
      operationId: getMyStore opening hours
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: store opening hours
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/openingHours'
        "401":
          description: unauthorized
    put:
      tags:
      - Module Locations
      summary: update my store opening hours
      description: update my store opening hours
      operationId: update opening hours
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        description: body with new hours
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/openingHours'
      responses:
        "200":
          description: operation succeeded
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/openingHours'
        "401":
          description: unauthorized
  /user/store/{storeId}/holidays:
    get:
      tags:
      - Module Locations
      summary: get holidays of country's store for the next 30days
      description: get holidays of country's store for the next 30days
      operationId: get Holidays
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: store holidays
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/holiday'
        "401":
          description: unauthorized
  /user/store/{storeId}/insights/:
    get:
      tags:
      - Module Locations
      summary: get my store stats
      description: get my store stats
      operationId: getMyStore stats
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: list of store stats
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/storeInsight'
        "401":
          description: unauthorized
  /user/store/{storeId}/suggestions/:
    get:
      tags:
      - Module Locations
      summary: get my store suggestions
      description: get my store suggestions
      operationId: getMyStore suggestions
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: list of store suggestions
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/storeSuggestion'
        "401":
          description: unauthorized
  /user/store/{storeId}/type/{type}/images/{imageId}:
    delete:
      tags:
      - Module Locations
      summary: get my store images
      description: get my store images
      operationId: DeleteMyStore images
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: imageId
        in: path
        description: image id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: type
        in: path
        description: "type (Profile, Exterior...)"
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: delete success
        "401":
          description: unauthorized
  /user/store/{storeId}/images/:
    get:
      tags:
      - Module Locations
      summary: get my store images
      description: get my store images
      operationId: getMyStore images
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: list of store images
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/storeImages'
        "401":
          description: unauthorized
  /user/store/{storeId}/image/{type}:
    put:
      tags:
      - Module Locations
      summary: add store image
      description: add store image
      operationId: add MyStore images
      parameters:
      - name: storeId
        in: path
        description: store id
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: type
        in: path
        description: "type of image logo, cover, exterior ...."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        description: body with image info
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/image'
      responses:
        "200":
          description: operation succeed
        "401":
          description: unauthorized
components:
  schemas:
    token:
      type: object
      properties:
        access_token:
          type: string
          nullable: false
        refresh_token:
          type: string
          nullable: true
        token_type:
          type: string
          description: Bearer
          nullable: false
        expires_in:
          type: integer
          nullable: true
        permissions:
          type: array
          items:
            type: string
            description: array of permissions
    store:
      type: object
      properties:
        id:
          type: integer
          description: id to fetch store details (can be int or string as you want)
          nullable: false
        name:
          type: string
          nullable: false
        address:
          $ref: '#/components/schemas/store_address'
        status:
          type: string
          nullable: false
        channels:
          type: array
          items:
            $ref: '#/components/schemas/channel'
        image:
          type: string
          nullable: true
        contact:
          $ref: '#/components/schemas/contact'
        descriptions:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/channelDescription'
    contact:
      type: object
      properties:
        email:
          type: string
        phone:
          type: string
    channelDescription:
      type: object
      properties:
        channel:
          type: string
        descriptions:
          type: array
          items:
            $ref: '#/components/schemas/channelDescription_descriptions'
    storeInsight:
      type: object
      properties:
        name:
          type: string
          description: "insight name (Instore visits, Rating....)"
        value:
          type: string
          description: insight's value
        insights:
          type: array
          items:
            $ref: '#/components/schemas/storeInsight_insights'
    channel:
      type: object
      properties:
        name:
          type: string
        link:
          type: string
          description: "optional for the moment, just in case the click"
        icon:
          type: string
          description: icon of the channel
    storeSuggestion:
      type: object
      properties:
        section:
          type: string
          description: section name
          example: Locations
        insight:
          type: string
          example: Your visit are lower than average
        icon:
          type: string
          description: optional (do not implement for the moment)
          nullable: false
          example: optional (do not implement for the moment)
        suggestions:
          type: array
          items:
            $ref: '#/components/schemas/storeSuggestion_suggestions'
    openingHours:
      type: object
      properties:
        usual:
          $ref: '#/components/schemas/openingHours_usual'
        special:
          $ref: '#/components/schemas/openingHours_special'
    openingHour:
      type: object
      properties:
        start:
          type: string
          description: 2015-03-08
          nullable: true
        end:
          type: string
          description: 2015-03-08
          nullable: true
    dayOpeningHourInfo:
      type: object
      properties:
        id:
          type: string
          description: id used to modify/delete
        description:
          type: string
          description: description linked to special hour
          nullable: true
        closed:
          type: boolean
          nullable: true
        openningHours:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/openingHour'
    channelService:
      type: object
      properties:
        channel:
          type: string
          description: Google FB...
        services:
          type: array
          items:
            $ref: '#/components/schemas/service'
    holiday:
      type: object
      properties:
        name:
          type: string
          description: holiday's name
          example: natinal day
        from:
          type: string
          description: start date
          example: 2023-10-10
        to:
          type: string
          description: end date
          example: 2023-10-12
    service:
      type: object
      properties:
        name:
          type: string
          description: service's name
        enabled:
          type: boolean
          description: enabled or disabled
    storeImages:
      type: object
      properties:
        type:
          type: string
          description: "Profile, Cover, logo, Exterior, Inside, Product, At work, Team, Additional"
        details:
          type: array
          items:
            type: string
        optimalSize:
          $ref: '#/components/schemas/storeImages_optimalSize'
        imagesMaxCount:
          type: integer
          description: describes max authorized images count
        channels:
          type: array
          items:
            type: string
        images:
          type: array
          items:
            $ref: '#/components/schemas/imageStore'
    imageStore:
      type: object
      properties:
        id:
          type: string
        url:
          type: string
    image:
      type: object
      properties:
        image:
          type: array
          description: image base 64
          example:
          - base64
          - base64
          items:
            type: string
        channels:
          type: array
          items:
            type: string
            example: "[\"facebook\",\"instagram\"]"
    campaignInfo:
      type: object
      properties:
        id:
          type: string
        start:
          type: string
          example: start date
        end:
          type: string
          example: start date
        storeIds:
          type: array
          example:
          - "3242345234534543"
          - "3242345234534543"
          items:
            type: string
        channel:
          $ref: '#/components/schemas/newCampaign'
    campaignTemplate:
      type: object
      properties:
        title:
          type: string
          example: New eve post
        description:
          type: string
          example: description
        tags:
          type: array
          example:
          - new year
          - new year
          items:
            type: string
        image:
          type: array
          example:
          - imageBASE64
          - imageBASE64
          items:
            type: string
        cta:
          $ref: '#/components/schemas/campaignCTA'
    newCampaign:
      type: object
      properties:
        title:
          type: string
          example: New eve post
        description:
          type: string
          example: description
        image:
          type: array
          example:
          - imageBASE64
          - imageBASE64
          items:
            type: string
        cta:
          $ref: '#/components/schemas/campaignCTA'
    campaignCTA:
      type: object
      properties:
        label:
          type: string
          enum:
          - label
        link:
          type: string
    campaign:
      type: object
      properties:
        title:
          type: string
          example: New eve post
        description:
          type: string
          example: description
        start:
          type: string
          example: start date
        end:
          type: string
          example: start date
        channels:
          type: array
          example:
          - facebook
          - instagram
          items:
            type: string
        image:
          type: string
        status:
          type: string
          enum:
          - planned
          - ongoing
          - endingSoon
          - ended
          - errorMsg
    optimalSize:
      type: object
      properties:
        height:
          type: integer
        width:
          type: integer
    channelSpec:
      type: object
      properties:
        imageTypeOptimalSize:
          $ref: '#/components/schemas/optimalSize'
        campaignOptimalSize:
          $ref: '#/components/schemas/optimalSize'
        title:
          $ref: '#/components/schemas/channelSpec_title'
        description:
          $ref: '#/components/schemas/channelSpec_title'
    appConfig:
      type: object
      properties:
        carousels:
          type: array
          items:
            $ref: '#/components/schemas/appConfig_carousels'
        channelsSpec:
          $ref: '#/components/schemas/appConfig_channelsSpec'
        availableReviewsSources:
          type: array
          items:
            type: string
            description: "enabled reviews source(Google, Facebook, Externalreviews)"
    review:
      type: object
      properties:
        id:
          type: string
        authorName:
          type: string
        channel:
          type: string
        content:
          type: string
        rating:
          type: string
        date:
          type: string
        status:
          type: string
        replies:
          type: array
          items:
            $ref: '#/components/schemas/review_replies'
    notification:
      type: object
      properties:
        id:
          type: string
        storeId:
          type: string
        type:
          type: string
          description: "type can be NEW_REVIEW, NOTIFY_REVIEW"
        reviewId:
          type: string
    notificationPreferences:
      type: object
      properties:
        enabled:
          type: boolean
        tasks:
          $ref: '#/components/schemas/notificationPreferences_tasks'
        review:
          $ref: '#/components/schemas/notificationPreferences_review'
    reply_reviewId_body:
      type: object
      properties:
        content:
          type: string
    replyId_edit_body:
      type: object
      properties:
        content:
          type: string
    login_refresh_body:
      type: object
      properties:
        refresh_token:
          type: string
          nullable: false
    password_reset_body:
      type: object
      properties:
        email:
          type: string
    password_token_body:
      type: object
      properties:
        password:
          type: string
    inline_response_200:
      type: object
      properties:
        email:
          type: string
          description: email that initiated the request
    store_address:
      type: object
      properties:
        address:
          type: string
          description: just to avoid displaying full address with city & postCode
          nullable: false
        postCode:
          type: string
        city:
          type: string
          nullable: false
        country:
          type: string
          nullable: false
      nullable: false
    channelDescription_descriptions:
      type: object
      properties:
        language:
          type: string
        description:
          type: string
        requirement:
          type: string
          description: define requirement for specific channel (per example description's lenght)
    storeInsight_insights:
      type: object
      properties:
        period:
          type: number
          description: period (days)
          example: 28
        insight:
          type: string
          description: "progression of the insight (can be value, or % )"
        progression:
          type: string
          description: enum (increase decrease)
    storeSuggestion_suggestions:
      type: object
      properties:
        action:
          type: string
          description: suggestion action
          example: add Images | activateServices
        insight:
          type: string
          description: suggestion insight
          nullable: true
          example: +15% visibility
    openingHours_usual:
      type: object
      properties:
        day:
          $ref: '#/components/schemas/dayOpeningHourInfo'
    openingHours_special:
      type: object
      properties:
        date:
          $ref: '#/components/schemas/dayOpeningHourInfo'
    storeImages_optimalSize:
      type: object
      properties:
        height:
          type: integer
        width:
          type: integer
      nullable: true
    channelSpec_title:
      type: object
      properties:
        maxCount:
          type: integer
        nullable:
          type: boolean
    appConfig_carousels:
      type: object
      properties:
        id:
          type: string
        event:
          type: string
          description: "signIn, launch,..."
    appConfig_channelsSpec:
      type: object
      properties:
        channel:
          $ref: '#/components/schemas/channelSpec'
    review_replies:
      type: object
      properties:
        id:
          type: string
        content:
          type: string
        by:
          type: string
    notificationPreferences_tasks:
      type: object
      properties:
        enabled:
          type: boolean
        frequency:
          type: string
          enum:
          - daily
          - live
          - weekly
    notificationPreferences_review:
      type: object
      properties:
        enabled:
          type: boolean
        frequency:
          type: string
          enum:
          - daily
          - live
          - weekly
        stars:
          type: array
          items:
            type: integer
