Skip to content

Roadmap: nodeId support in custom return types #1

Open
@marshall007

Description

In addition to the roadmap items outlined in the README, we've identified another use case.

In the following example we have a user_history table in a private schema with custom queries and mutations exposed in the public schema. We create a custom type public.user_history_item which matches the underlying table definition.

In this scenario it would be nice if we could expose a nodeId computed property on the custom type so that we can interact with it more like a default CRUD operation from the client's perspective.

create table private.user_history (
  id                  uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id             text NOT NULL REFERENCES public.users(auid),
  data                jsonb NOT NULL,
  visited_date        timestamptz NOT NULL DEFAULT now()
);


create type public.user_history_item as (
  id                  uuid,
  user_id             text,
  data                jsonb,
  visited_date        timestamptz
);


create function public.get_history(
  "between" tstzrange default tstzrange(now() - interval '1 DAY', now())
) returns setof public.user_history_item
as $$
  select *
  from private.user_history
  where
    "between" @> visited_date AND
    user_id = current_setting('user.auid')::text
  order by visited_date desc;
$$ language sql stable strict security definer;


create function public.set_history(
  data json
) returns public.user_history_item
as $$
  insert into private.user_history (user_id, data, visited_date)
  values (
    current_setting('user.auid')::text,
    data,
    now()
  )
  returning *;
$$ language sql volatile strict security definer;

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions