version: v2
app:
  name: My App
  application_type: Custom App
sources:
  # ── Users ──────────────────────────────────────────────────────────
  all_users:
    destination: ~
    source_type: csv
    csv_filepath: ../data/sample_admin_users.csv
    field_mapping:
      ID:
        destination_field: unique_id
      NAME:
        destination_field: name
      FIRST_NAME:
        destination_field: first_name
        custom_type: STRING
      LAST_NAME:
        destination_field: last_name
        custom_type: STRING
      EMAIL:
        destination_field: email
        custom_type: STRING
      GROUP:
        destination_field: group
        custom_type: STRING
      ROLE:
        destination_field: role
        custom_type: STRING
      IS_ADMIN:
        destination_field: is_admin
        custom_type: BOOLEAN
        transforms:
          - name: validate_boolean

  admin_users:
    destination: LocalUser
    source_type: source
    source: all_users
    datasource: admins
    field_mapping:
      ID:
        destination_field: unique_id
      NAME:
        destination_field: name
      FIRST_NAME:
        destination_field: first_name
        custom_type: STRING
      LAST_NAME:
        destination_field: last_name
        custom_type: STRING
      EMAIL:
        destination_field: email
        custom_type: STRING
      GROUP:
        destination_field: group
        custom_type: STRING
      ROLE:
        destination_field: role
        custom_type: STRING
      IS_ADMIN:
        destination_field: is_admin
        custom_type: BOOLEAN
        transforms:
          - name: filter_by_field
            options:
              options: 'true'
          - name: validate_boolean
    generators:
      user_group:
        generator_type: local_group
        source_field: GROUP
      user_role:
        generator_type: local_role
        source_field: ROLE

  non_admin_users:
    destination: LocalUser
    source_type: source
    source: all_users
    datasource: non-admins
    field_mapping:
      ID:
        destination_field: unique_id
      NAME:
        destination_field: name
      FIRST_NAME:
        destination_field: first_name
        custom_type: STRING
      LAST_NAME:
        destination_field: last_name
        custom_type: STRING
      EMAIL:
        destination_field: email
        custom_type: STRING
      GROUP:
        destination_field: group
        custom_type: STRING
      ROLE:
        destination_field: role
        custom_type: STRING
      IS_ADMIN:
        destination_field: is_admin
        custom_type: BOOLEAN
        transforms:
          - name: filter_by_field
            options:
              options: 'false'
          - name: validate_boolean
    generators:
      user_group:
        generator_type: local_group
        source_field: GROUP
      user_role:
        generator_type: local_role
        source_field: ROLE

  # ── Groups ─────────────────────────────────────────────────────────
  all_groups:
    destination: ~
    source_type: csv
    csv_filepath: ../data/sample_groups.csv
    field_mapping:
      ID:
        destination_field: unique_id
      NAME:
        destination_field: name
      IS_ADMIN:
        destination_field: is_admin
        custom_type: BOOLEAN
        transforms:
          - name: validate_boolean

  admin_groups:
    destination: LocalGroup
    source_type: source
    source: all_groups
    datasource: admins
    field_mapping:
      ID:
        destination_field: unique_id
      NAME:
        destination_field: name
      IS_ADMIN:
        destination_field: is_admin
        custom_type: BOOLEAN
        transforms:
          - name: filter_by_field
            options:
              options: 'true'
          - name: validate_boolean

  non_admin_groups:
    destination: LocalGroup
    source_type: source
    source: all_groups
    datasource: non-admins
    field_mapping:
      ID:
        destination_field: unique_id
      NAME:
        destination_field: name
      IS_ADMIN:
        destination_field: is_admin
        custom_type: BOOLEAN
        transforms:
          - name: filter_by_field
            options:
              options: 'false'
          - name: validate_boolean

  # ── Roles ──────────────────────────────────────────────────────────
  all_roles:
    destination: ~
    source_type: csv
    csv_filepath: ../data/sample_roles.csv
    field_mapping:
      ID:
        destination_field: unique_id
      NAME:
        destination_field: name
      IS_ADMIN:
        destination_field: is_admin
        custom_type: BOOLEAN
        transforms:
          - name: validate_boolean

  admin_roles:
    destination: LocalRole
    source_type: source
    source: all_roles
    datasource: admins
    field_mapping:
      ID:
        destination_field: unique_id
      NAME:
        destination_field: name
      IS_ADMIN:
        destination_field: is_admin
        custom_type: BOOLEAN
        transforms:
          - name: filter_by_field
            options:
              options: 'true'
          - name: validate_boolean

  non_admin_roles:
    destination: LocalRole
    source_type: source
    source: all_roles
    datasource: non-admins
    field_mapping:
      ID:
        destination_field: unique_id
      NAME:
        destination_field: name
      IS_ADMIN:
        destination_field: is_admin
        custom_type: BOOLEAN
        transforms:
          - name: filter_by_field
            options:
              options: 'false'
          - name: validate_boolean
