table:
  schema: public
  name: appointment
object_relationships:
  - name: appointment_cancel_reason
    using:
      foreign_key_constraint_on: cancellation_reason
  - name: assistant
    using:
      foreign_key_constraint_on: assistant_user_id
  - name: origin_appointment
    using:
      foreign_key_constraint_on: origin_appointment_id
  - name: patient
    using:
      foreign_key_constraint_on: patient_id
  - name: user
    using:
      foreign_key_constraint_on: user_id
array_relationships:
  - name: availability_times
    using:
      foreign_key_constraint_on:
        column: appointment_id
        table:
          schema: public
          name: availability_time
  - name: food_plans
    using:
      foreign_key_constraint_on:
        column: appointment_id
        table:
          schema: public
          name: food_plan
  - name: return_appointments
    using:
      foreign_key_constraint_on:
        column: origin_appointment_id
        table:
          schema: public
          name: appointment
  - name: teleconsultations_credits
    using:
      foreign_key_constraint_on:
        column: appointment_id
        table:
          schema: public
          name: teleconsultations_credit
computed_fields:
  - name: consultation_duration_in_seconds
    definition:
      function:
        schema: public
        name: appointment_consultation_duration_in_seconds
  - name: is_first_appointment
    definition:
      function:
        schema: public
        name: appointment_is_first_appointment
    comment: ""
insert_permissions:
  - role: patient
    permission:
      check: {}
      set:
        patient_id: x-hasura-User-Id
      columns:
        - canceled_at
        - consultation_finished_at
        - consultation_started_at
        - finished_at
        - id
        - scheduled_to
        - user_id
      backend_only: false
select_permissions:
  - role: marketplace
    permission:
      columns:
        - appointment_id_rescheduled
        - assistant_user_id
        - canceled_at
        - cancellation_reason
        - cancellation_reason_comment
        - confirmed_at
        - consultation_finished_at
        - consultation_started_at
        - created_at
        - feedback
        - finished_at
        - has_return
        - id
        - is_return
        - patient_arrived_at
        - patient_id
        - rating
        - reschedule_credit
        - scheduled_to
        - state
        - updated_at
        - user_id
        - user_video_token
        - video_session
      computed_fields:
        - is_first_appointment
      filter:
        _or:
          - user_id:
              _eq: X-Hasura-User-Id
          - patient:
              user_id:
                _eq: X-Hasura-User-Id
      allow_aggregations: true
  - role: nutritionist_manager
    permission:
      columns:
        - appointment_id_rescheduled
        - assistant_user_id
        - canceled_at
        - cancellation_reason
        - cancellation_reason_comment
        - confirmed_at
        - consultation_finished_at
        - consultation_started_at
        - created_at
        - external_book_hash
        - external_book_id
        - feedback
        - finished_at
        - has_return
        - id
        - is_return
        - patient_arrived_at
        - patient_id
        - rating
        - reschedule_credit
        - scheduled_to
        - state
        - type
        - updated_at
        - user_id
        - user_video_token
        - video_session
      computed_fields:
        - is_first_appointment
      filter: {}
      allow_aggregations: true
  - role: patient
    permission:
      columns:
        - canceled_at
        - cancellation_reason
        - cancellation_reason_comment
        - confirmed_at
        - consultation_finished_at
        - consultation_started_at
        - created_at
        - feedback
        - finished_at
        - has_return
        - id
        - is_return
        - patient_arrived_at
        - patient_id
        - patient_video_token
        - rating
        - reschedule_credit
        - scheduled_to
        - state
        - updated_at
        - user_id
        - video_session
      computed_fields:
        - is_first_appointment
      filter:
        patient_id:
          _eq: X-Hasura-User-Id
      allow_aggregations: true
  - role: personal_trainer
    permission:
      columns:
        - appointment_id_rescheduled
        - assistant_user_id
        - canceled_at
        - cancellation_reason
        - cancellation_reason_comment
        - confirmed_at
        - consultation_finished_at
        - consultation_started_at
        - created_at
        - feedback
        - finished_at
        - id
        - patient_arrived_at
        - patient_id
        - rating
        - reschedule_credit
        - scheduled_to
        - state
        - updated_at
        - user_id
        - user_video_token
        - video_session
      computed_fields:
        - is_first_appointment
      filter:
        _or:
          - user_id:
              _eq: X-Hasura-User-Id
          - patient:
              personal_trainer_id:
                _eq: X-Hasura-User-Id
      allow_aggregations: true
  - role: user
    permission:
      columns:
        - appointment_id_rescheduled
        - assistant_user_id
        - canceled_at
        - cancellation_reason
        - cancellation_reason_comment
        - confirmed_at
        - consultation_finished_at
        - consultation_started_at
        - created_at
        - feedback
        - finished_at
        - id
        - patient_arrived_at
        - patient_id
        - rating
        - reschedule_credit
        - scheduled_to
        - state
        - updated_at
        - user_id
        - user_video_token
        - video_session
        - has_return
        - is_return
      computed_fields:
        - is_first_appointment
      filter: {}
      allow_aggregations: true
update_permissions:
  - role: marketplace
    permission:
      columns:
        - assistant_user_id
        - canceled_at
        - consultation_finished_at
        - consultation_started_at
        - created_at
        - finished_at
        - id
        - patient_id
        - reschedule_credit
        - scheduled_to
        - state
        - updated_at
        - user_id
      filter:
        _and:
          - user_id:
              _eq: X-Hasura-User-Id
          - patient:
              user_id:
                _eq: X-Hasura-User-Id
      check: null
  - role: nutritionist_manager
    permission:
      columns:
        - assistant_user_id
        - canceled_at
        - consultation_finished_at
        - consultation_started_at
        - finished_at
        - state
      filter: {}
      check: {}
      set:
        updated_at: now()
  - role: patient
    permission:
      columns:
        - confirmed_at
        - feedback
        - rating
      filter:
        patient_id:
          _eq: X-Hasura-User-Id
      check: null
  - role: personal_trainer
    permission:
      columns:
        - assistant_user_id
        - canceled_at
        - consultation_finished_at
        - consultation_started_at
        - created_at
        - finished_at
        - id
        - patient_id
        - reschedule_credit
        - scheduled_to
        - state
        - updated_at
        - user_id
      filter:
        _and:
          - user_id:
              _eq: X-Hasura-User-Id
          - patient:
              personal_trainer_id:
                _eq: X-Hasura-User-Id
      check: null
  - role: user
    permission:
      columns:
        - assistant_user_id
        - canceled_at
        - consultation_finished_at
        - consultation_started_at
        - finished_at
        - state
      filter: {}
      check: {}
      set:
        updated_at: now()
event_triggers:
  - name: create_income_by_appointment
    definition:
      enable_manual: false
      insert:
        columns: '*'
      update:
        columns:
          - state
    retry_conf:
      num_retries: 3
      interval_sec: 60
      timeout_sec: 60
    webhook: '{{ACTIONS_HANDLER_URL}}/nutritionists/financial/create_income_by_appointment'
    headers:
      - name: Authorization
        value_from_env: ACTIONS_HANDLER_ACCESS_TOKEN
  - name: notify_appointment_created
    definition:
      enable_manual: false
      insert:
        columns: '*'
    retry_conf:
      num_retries: 3
      interval_sec: 60
      timeout_sec: 60
    webhook: '{{ACTIONS_HANDLER_URL}}/notification/booking/creation'
    headers:
      - name: Authorization
        value_from_env: ACTIONS_HANDLER_ACCESS_TOKEN
  - name: notify_blocked_appointment
    definition:
      enable_manual: false
      update:
        columns:
          - state
    retry_conf:
      num_retries: 3
      interval_sec: 10
      timeout_sec: 60
    webhook: '{{ACTIONS_HANDLER_URL}}/notification/booking/blocking'
    headers:
      - name: Authorization
        value_from_env: ACTIONS_HANDLER_ACCESS_TOKEN
  - name: notify_cancelled_appointment
    definition:
      enable_manual: true
      update:
        columns:
          - canceled_at
    retry_conf:
      num_retries: 3
      interval_sec: 60
      timeout_sec: 60
    webhook: '{{ACTIONS_HANDLER_URL}}/notification/booking/cancellation'
    headers:
      - name: Authorization
        value_from_env: ACTIONS_HANDLER_ACCESS_TOKEN
  - name: notify_transferred_appointment
    definition:
      enable_manual: false
      update:
        columns:
          - user_id
    retry_conf:
      num_retries: 3
      interval_sec: 60
      timeout_sec: 60
    webhook: '{{ACTIONS_HANDLER_URL}}/notification/booking/transferred'
    headers:
      - name: Authorization
        value_from_env: ACTIONS_HANDLER_ACCESS_TOKEN
