Skip to content

Customers and guests

A dealer’s customers come in two kinds:

  • Users (users) have an account. They signed in, ordered, or were added by the dealer. One user can belong to several showrooms.
  • Guests (guest_users) gave their details without an account, for example in an enquiry form. A guest belongs to one showroom. If they later sign in with the same email, converted_to_user_id points to their new user.
query Customer($id: uuid!) {
users_by_pk(id: $id) {
id
email
first_name
last_name
phone
stage
source
created_at
last_logged_in
}
}
query Guest($id: uuid!) {
guest_users_by_pk(id: $id) {
id
email
first_name
last_name
phone
postcode
created_at
converted_to_user_id
}
}

Customers of one showroom, newest first. Team members are users too, so filter by role.

query Customers($showroomId: uuid!) {
users(
where: {
showroom_users: { showroom_id: { _eq: $showroomId } }
role: { _eq: "customer" }
}
order_by: [{ created_at: desc }, { id: asc }]
limit: 50
) {
id
email
first_name
last_name
phone
created_at
}
}

Guests of one showroom who haven’t created an account:

query Guests($showroomId: uuid!) {
guest_users(
where: { showroom_id: { _eq: $showroomId }, converted_to_user_id: { _is_null: true } }
order_by: [{ created_at: desc }, { id: asc }]
limit: 50
) {
id
email
first_name
last_name
phone
created_at
}
}

Find someone by email in either table:

query FindByEmail($email: String!) {
users(where: { email: { _ilike: $email } }) {
id
email
}
guest_users(where: { email: { _ilike: $email } }) {
id
email
showroom_id
}
}
query CustomerActivity($id: uuid!) {
users_by_pk(id: $id) {
email
moments(order_by: { created_at: desc }) {
id
type
stage
created_at
}
test_drives(order_by: { scheduled_at: desc }) {
id
stage
scheduled_at
}
trade_in_plans(order_by: { created_at: desc }) {
id
make
model
stage
}
wish_lists {
stocked_vehicle_id
}
}
}

The same lists exist on guest_users_by_pk: moments, test_drives and trade_in_plans.