# Required Schema for Ingestion
properties:
  u_id:
    type: string
    examples: [testUserId]
    description: user Id in the app
  d_id:
    type: string
    examples: [testDeviceId]
    description: device Id of the user
  ip:
    type: string
    examples: [0.0.0.0]
    description: ip address of the user's device
  ol:
    type: boolean
    examples: [false]
    description: connectivity status of the device when event was triggered.
  up:
    type: integer
    examples: [2300]
    description: upload speed for device when log was triggered. In kbps
  dn:
    type: integer
    examples: [2300]
    description: download speed for device when log was triggered. In kbps
  os:
    type: string
    examples: [android(30), macIntel]
    description: device, app is currently running on.
  sdk:
    type: string
    examples: [js/1.0.0-beta.5]
    description: version of the sdk used to log
  ts:
    type: string
    examples: [2022-04-27T10:30:06.239+02:00]
    description: timestamp when the event is triggered, RFC 3339 format
  block:
    type: string
    examples: [core]
    description: content block for the event being logged. default is core
    enum: [ core, e-commerce, e-learning, loyalty, payment ]
  type:
    type: string
    examples: [app]
    description: type of event being logged
    enum: [ app, cart, checkout, deferred_payment, exam, identify, item, level, media, milestone, module, nudge_response, page, question, search, delivery]
  props:
    type: object
    oneOf: [
      {"$ref":"#/$defs/app"},
      {"$ref":"#/$defs/page"},
      {"$ref":"#/$defs/identify"},
      {"$ref":"#/$defs/search"},
      {"$ref":"#/$defs/media"},
      {"$ref":"#/$defs/nudge_response"},
      {"$ref":"#/$defs/item"},
      {"$ref":"#/$defs/cart"},
      {"$ref":"#/$defs/checkout"},
      {"$ref":"#/$defs/delivery"},
      {"$ref":"#/$defs/module"},
      {"$ref":"#/$defs/exam"},
      {"$ref":"#/$defs/question"},
      {"$ref":"#/$defs/level"},
      {"$ref":"#/$defs/milestone"},
      {"$ref":"#/$defs/deferred_payment"}
    ]
    description: props depends on different event types based. it can contain one or more elements as a part of the property. Details for each event type are provided below.
required:
  - u_id
  - d_id
  - ol
  - up
  - dn
  - os
  - sdk
  - ts
  - block
  - type
  - props

#--------------------------------------------------------------------------------------------------
# SDK is divided into multiple content blocks based on the app niche. This includes: core, e-commerce, e-learning, payment and loyalty. Below is the details for the events in each content block:

# Blocks and their details


$defs:
  blocks:
    core:
      display_name: Core
      description: "required tracking events for basic navigation"
      logs:
        type: string
        enum: [app, page, identify, search, media, nudge_response]
    e-commerce:
      display_name: E-commerce
      description: "events for online marketplace platforms"
      logs:
        type: string
        enum: [item, cart, checkout, delivery]
    e-learning:
      display_name: E-learning
      description: "events for online learning platforms"
      logs:
        type: string
        enum: [module, exam, question]
    payment:
      display_name: Payment
      description: "required tracking events for basic navigation"
      logs:
        type: string
        enum: [deferred_payment]
    loyalty:
      display_name: Loyalty
      description: "events for reward systems"
      logs:
        type: string
        enum: [level, milestone]
  itemObject:
    type: object
    properties:
      id:
        type: string
        examples: [itemId]
        description: Id for the item
      type:
        type: string
        examples: [drug]
        description: type of the item in the log
        enum: [ drug, electronics, clothing, book, misc ]
      quantity:
        type: integer
        examples: [1]
        description: quantity of the item, default is 1
      price:
        type: number
        examples: [12.3]
        description: total price for the item in log (unit_price * quantity)
      currency:
        type: string
        examples: [USD]
        description: currency of the item (ISO 4217)
      stock_status:
        type: string
        examples: [in_stock]
        description: to reflect the stock status of the item
        enum: [ in_stock, low_stock, out_of_stock ]
      promo_id:
        type: string
        examples: [testPromoId]
        description: id for the promo if any applied on the item
    required:
      - id
      - type
      - quantity
      - price
      - currency
  app:
    description: To log App usage related events. [Auto Triggered]
    type: object
    properties:
      action:
        type: string
        examples: [open]
        description: logs the operation on the app, if app is opened, closed or moved the background.
        enum: [ open, close, background, resume ]
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - action
  page:
    description: To log page viewings related events. [Auto Triggered]
    type: object
    properties:
      path:
        type: string
        examples: [ai.causalfoundry.package, causalfoundry.ai/package]
        description: the path for page currently being shown to the user.
      title:
        type: string
        examples: [HomePage]
        description: page or class name for the screen currently being shown.
      duration:
        type: number
        examples: [3.4]
        description: the time user spent on the screen in seconds.
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - path

  identify:
    description: To log user auth related events. signUp, signIn and signOut
    type: object
    properties:
      action:
        type: string
        examples: [login]
        description: identify action being logged.
        enum: [ register, login, logout ]
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - action
  search:
    description: To log search related events
    type: object
    properties:
      id:
        type: string
        examples: [testSearchId]
        description: special id associated with that search
      query:
        type: string
        examples: [Hello]
        description: query the user is searching
      result_ids_list:
        type: array
        items:
          type: string
        examples: [ [resultId1, resultId2] ]
        description: list iof id for the elements shown in the search results.
      filter:
        type: object
        examples: [maxPrice:100]
        description: object object of filters applied to that search
      page:
        type: integer
        examples: [1]
        description: page number for search on which user is currently at.
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - id
      - query
      - results_list
      - page # defaulted to 1
  media:
    description: To log media related events
    type: object
    properties:
      id:
        type: string
        examples: [video_testMediaId]
        description: id associated with that media concatenated with media type
      id_source:
        type: string
        examples: [testMediaId]
        description: id associated with that media
      type:
        type: string
        examples: [video]
        description: type of media in question
        enum: [ video, audio, image ]
      action:
        type: string
        examples: [play]
        description: actions associated to the media. For image, default is play which refers to app open.
        enum: [ play, pause, seek, finish ]
      time:
        type: number
        examples: [1354000]
        description: time in milliseconds for the media when action is performed
      meta:
        type: object
        examples: ["appName:causalfoundry"]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - id
      - id_source
      - type
      - action
      - time
  nudge_response:
    description: To log user response to nudges i.e. push notifications, in-app messages. [Auto Triggered]
    type: object
    properties:
      nudge_id:
        type: integer
        examples: [nudgeId]
        description: id associated with that nudge
      type:
        type: string
        examples: [push_notification]
        description: type of nudge the response is for. Should be same as provided by type in the request nudge API.
      response:
        type: object
        description: response object containing actions for the nudge shown. This can vary based on the type of the nudge shown to the user.
        properties:
          action:
            type: string
            examples: [open]
            description: type of action performed on the push notification
            enum: [ open, discard, block ]
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - nudge_id
      - type
      - response
  #--------------------------------------------------------------------------------------------------

  # E-COMMERCE [item, cart, checkout, delivery]

  # Below it the item object used in the following events in the e-commerce.

  item:
    description: To log events related to item view, impressions or if user opened the details.
    type: object
    properties:
      action:
        type: string
        examples: [view]
        description: action performed on the item
        enum: [ impression, view, detail ]
      item:
        $ref: "#/$defs/itemObject"
        description: details for the item in log
      search_id:
        type: string
        examples: [testSearchId]
        description: helps with logging search if if the item is showed based on search.
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - action
      - item
  cart:
    description: To log events related to cart in the app.
    type: object
    properties:
      id:
        type: string
        examples: [cartId]
        description: id of the Cart on which events are being performed
      action:
        type: string
        examples: [add_item]
        description: action performed on the item in cart
        enum: [ add_item, remove_item ]
      item:
        $ref: "#/$defs/itemObject"
        description: details for the item in log
      cart_price:
        type: number
        examples: [12.0]
        description: total price of the cart
      currency:
        type: string
        examples: [USD]
        description: currency code for the price of the whole cart. Currency in itemObject and here should be same.
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - id
      - action
      - item
      - cart_price
      - currency
  checkout:
    description: To log events related to checkout in the app.
    type: object
    properties:
      id:
        type: string
        examples: [orderId]
        description: id of the order is checkout is successful else cart id if the checkout is not successful
      cart_id:
        type: string
        examples: cartId
        description: id of the Cart on which events are being performed
      is_successful:
        type: boolean
        examples: [true]
        description: reflect if the checkout is successful or not
      items:
        type: array
        items:
          $ref: "#/$defs/itemObject"
        description: list of items in the checkout
      cart_price:
        type: number
        examples: [12.0]
        description: total price of the checkout
      currency:
        type: string
        examples: [USD]
        description: currency code for the price of the checkout. Currency in all itemObject and here should be same.
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - id
      - is_successful
      - items
      - cart_price
      - currency
  delivery:
    description: To log events related to delivery of the order
    type: object
    properties:
      id:
        type: string
        examples: deliveredId
        description: Id for the delivery
      action:
        type: string
        examples: delivered
        description: action on the delivery of the element
        enum: [ delivered ]
      order_id:
        type: string
        examples: orderId
        description: id of the order being delivered
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - id
      - action
      - order_id
  #--------------------------------------------------------------------------------------------------

  # E-LEARNING [module, exam, question]
  module:
    description: To log events related to module of e-learning section
    type: object
    properties:
      id:
        type: string
        examples: [moduleId]
        description: id of the module
      action:
        type: string
        examples: [view]
        description: action performed on the module
        enum: [ view ]
      progress:
        type: integer
        examples: [75]
        description: completion progress percentage
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - id
      - action
  exam:
    description: To log events related to exam of e-learning section
    type: object
    properties:
      id:
        type: string
        examples: [examId]
        description: id of the exam
      action:
        type: string
        examples: [start]
        description: action performed on the exam
        enum: [ start, submit, result ]
      duration:
        type: integer
        examples: [75]
        description: time spent on the exam, in seconds
      score:
        type: number
        examples: [90.5]
        description: score achieved for the exam
      is_passed:
        type: boolean
        examples: [true]
        description: if user passed the exam?
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - id
      - action
      - duration
      - score
      - is_passed
  question:
    description: To log events related to question of e-learning section
    type: object
    properties:
      id:
        type: string
        examples: [questionId]
        description: id of the question
      exam_id:
        type: string
        examples: [examId]
        description: id of the exam from which the question is asked
      action:
        type: string
        examples: [answer]
        description: action performed on the question
        enum: [ answer, skip ]
      answer_id:
        type: string
        examples: [answerId]
        description: Id for the answer to the question
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - id
      - exam_id
      - action
      - answer_id
  #--------------------------------------------------------------------------------------------------

  # LOYALTY [level, milestone]
  level:
    description: To log events related to updating user level in app
    type: object
    properties:
      prev_level:
        type: integer
        examples: [65]
        description: previous/old level score of the user
      new_level:
        type: integer
        examples: [100]
        description: new level score of the user
      module_id:
        type: string
        examples: [moduleId]
        description: Id for the module if level update is related to e-learning
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - prev_level
      - new_level
  milestone:
    description: To log events related to updating user milestone in app
    type: object
    properties:
      id:
        type: string
        examples: [milestoneId]
        description: id for the milestone
      action:
        type: string
        examples: [achieved]
        description: action regarding user milestone
        enum: [ achieved ]
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - id
      - action
  #--------------------------------------------------------------------------------------------------

  # PAYMENT [deferred_payment]
  deferred_payment:
    description: To log events related to payments in uses cases where Buy Now Pay Later is implemented
    type: object
    properties:
      id:
        type: string
        examples: [paymentId]
        description: id for the payment
      order_id:
        type: string
        examples: [orderId]
        description: id for the order payment is made for
      action:
        type: string
        examples: [payment_processed]
        description: action regarding payment
        enum: [ payment_processed ]
      payment_amount:
        type: number
        examples: [15]
        description: amount for which the payment is made
      account_balance:
        type: number
        examples: [130]
        description: current account balance for user after payment amount is added
      currency:
        type: string
        examples: [USD]
        description: currency of the payment being made (ISO 4217)
      is_successful:
        type: boolean
        examples: [true]
        description: boolean to represent if the payment is successful or not
      meta:
        type: object
        examples: [appName:causalfoundry]
        description: can use this to log extra data related to the event. This will only show on the platform and will not be processed.
    required:
      - id
      - action
