From 357456a87893d94cbcdc4972303ee2995b422749 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Thu, 24 Feb 2022 17:40:40 -0800 Subject: [PATCH 01/44] chore: pg_dump db sql --- db.sql | 5477 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 5477 insertions(+) create mode 100644 db.sql diff --git a/db.sql b/db.sql new file mode 100644 index 00000000..0498d3dd --- /dev/null +++ b/db.sql @@ -0,0 +1,5477 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.14 +-- Dumped by pg_dump version 11.15 (Ubuntu 11.15-1.pgdg20.04+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: public; Type: SCHEMA; Schema: -; Owner: postgres +-- + +CREATE SCHEMA public; + + +ALTER SCHEMA public OWNER TO postgres; + +-- +-- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON SCHEMA public IS 'standard public schema'; + + +-- +-- Name: age_type; Type: TYPE; Schema: public; Owner: doadmin +-- + +CREATE TYPE public.age_type AS ENUM ( + 'new_tree', + 'over_two_years' +); + + +ALTER TYPE public.age_type OWNER TO doadmin; + +-- +-- Name: capture_approval_type; Type: TYPE; Schema: public; Owner: doadmin +-- + +CREATE TYPE public.capture_approval_type AS ENUM ( + 'simple_leaf', + 'complex_leaf', + 'acacia_like', + 'conifer', + 'fruit', + 'mangrove', + 'palm', + 'timber' +); + + +ALTER TYPE public.capture_approval_type OWNER TO doadmin; + +-- +-- Name: morphology_type; Type: TYPE; Schema: public; Owner: doadmin +-- + +CREATE TYPE public.morphology_type AS ENUM ( + 'seedling', + 'direct_seedling', + 'fmnr' +); + + +ALTER TYPE public.morphology_type OWNER TO doadmin; + +-- +-- Name: platform_type; Type: TYPE; Schema: public; Owner: doadmin +-- + +CREATE TYPE public.platform_type AS ENUM ( + 'admin_panel', + 'web_map' +); + + +ALTER TYPE public.platform_type OWNER TO doadmin; + +-- +-- Name: rejection_reason_type; Type: TYPE; Schema: public; Owner: doadmin +-- + +CREATE TYPE public.rejection_reason_type AS ENUM ( + 'not_tree', + 'unapproved_tree', + 'blurry_image', + 'dead', + 'duplicate_image', + 'flag_user', + 'needs_contact_or_review' +); + + +ALTER TYPE public.rejection_reason_type OWNER TO doadmin; + +-- +-- Name: getentityrelationshipchildren(integer); Type: FUNCTION; Schema: public; Owner: doadmin +-- + +CREATE FUNCTION public.getentityrelationshipchildren(integer) RETURNS TABLE(entity_id integer, parent_id integer, depth integer, type text, relationship_role text) + LANGUAGE sql + AS $_$ +WITH RECURSIVE children AS ( + SELECT entity.id, entity_relationship.parent_id, 1 as depth, entity_relationship.type, entity_relationship.role + FROM entity + LEFT JOIN entity_relationship ON entity_relationship.child_id = entity.id + WHERE entity.id = $1 +UNION + SELECT next_child.id, entity_relationship.parent_id, depth + 1, entity_relationship.type, entity_relationship.role + FROM entity next_child + JOIN entity_relationship ON entity_relationship.child_id = next_child.id + JOIN children c ON entity_relationship.parent_id = c.id +) +SELECT * +FROM children +$_$; + + +ALTER FUNCTION public.getentityrelationshipchildren(integer) OWNER TO doadmin; + +-- +-- Name: getentityrelationshipchildren(integer, text); Type: FUNCTION; Schema: public; Owner: doadmin +-- + +CREATE FUNCTION public.getentityrelationshipchildren(integer, text) RETURNS TABLE(entity_id integer, parent_id integer, depth integer, type text, relationship_role text) + LANGUAGE sql + AS $_$ +WITH RECURSIVE children AS ( + SELECT entity.id, entity_relationship.parent_id, 1 as depth, entity_relationship.type, entity_relationship.role + FROM entity + LEFT JOIN entity_relationship ON entity_relationship.child_id = entity.id AND entity_relationship.type = $2 + WHERE entity.id = $1 +UNION + SELECT next_child.id, entity_relationship.parent_id, depth + 1, entity_relationship.type, entity_relationship.role + FROM entity next_child + JOIN entity_relationship ON entity_relationship.child_id = next_child.id AND entity_relationship.type = $2 + JOIN children c ON entity_relationship.parent_id = c.id +) +SELECT * +FROM children +$_$; + + +ALTER FUNCTION public.getentityrelationshipchildren(integer, text) OWNER TO doadmin; + +-- +-- Name: getentityrelationshipparents(integer, text); Type: FUNCTION; Schema: public; Owner: doadmin +-- + +CREATE FUNCTION public.getentityrelationshipparents(integer, text) RETURNS TABLE(entity_id integer, parent_id integer, depth integer, type text, role text) + LANGUAGE sql + AS $_$ +WITH RECURSIVE parents AS ( + SELECT entity.id, entity_relationship.parent_id, -1 as depth, entity_relationship.type, entity_relationship.role + FROM entity + LEFT JOIN entity_relationship ON entity_relationship.parent_id = entity.id AND entity_relationship.type = $2 + WHERE entity.id = $1 +UNION + SELECT next_parent.id, entity_relationship.parent_id, depth - 1, entity_relationship.type, entity_relationship.role + FROM entity next_parent + JOIN entity_relationship ON entity_relationship.parent_id = next_parent.id AND entity_relationship.type = $2 + JOIN parents p ON entity_relationship.child_id = p.id +) +SELECT * +FROM parents +$_$; + + +ALTER FUNCTION public.getentityrelationshipparents(integer, text) OWNER TO doadmin; + +-- +-- Name: makegrid_2d(public.geometry, integer, integer); Type: FUNCTION; Schema: public; Owner: doadmin +-- + +CREATE FUNCTION public.makegrid_2d(bound_polygon public.geometry, width_step integer, height_step integer) RETURNS public.geometry + LANGUAGE plpgsql + AS $_$ +DECLARE + Xmin DOUBLE PRECISION; + Xmax DOUBLE PRECISION; + Ymax DOUBLE PRECISION; + X DOUBLE PRECISION; + Y DOUBLE PRECISION; + NextX DOUBLE PRECISION; + NextY DOUBLE PRECISION; + CPoint public.geometry; + sectors public.geometry[]; + i INTEGER; + SRID INTEGER; +BEGIN + Xmin := ST_XMin(bound_polygon); + Xmax := ST_XMax(bound_polygon); + Ymax := ST_YMax(bound_polygon); + SRID := ST_SRID(bound_polygon); + + Y := ST_YMin(bound_polygon); --current sector's corner coordinate + i := -1; + <> + LOOP + IF (Y >= Ymax) THEN + EXIT; + END IF; + + X := Xmin; + <> + LOOP + IF (X >= Xmax) THEN + EXIT; + END IF; + + CPoint := ST_SetSRID(ST_MakePoint(X, Y), SRID); + NextX := ST_X(ST_Project(CPoint, $2, radians(90))::geometry); + NextY := ST_Y(ST_Project(CPoint, $3, radians(0))::geometry); + + IF (NextX > Xmax) THEN + NextX := Xmax; + END IF; + + IF (NextX < X) THEN + NextX := Xmax; + END IF; + + i := i + 1; + sectors[i] := ST_MakeEnvelope(X, Y, NextX, NextY, SRID); + + X := NextX; + END LOOP xloop; + CPoint := ST_SetSRID(ST_MakePoint(X, Y), SRID); + NextY := ST_Y(ST_Project(CPoint, $3, radians(0))::geometry); + Y := NextY; + END LOOP yloop; + + RETURN ST_Collect(sectors); +END; +$_$; + + +ALTER FUNCTION public.makegrid_2d(bound_polygon public.geometry, width_step integer, height_step integer) OWNER TO doadmin; + +-- +-- Name: token_transaction_insert(); Type: FUNCTION; Schema: public; Owner: doadmin +-- + +CREATE FUNCTION public.token_transaction_insert() RETURNS trigger + LANGUAGE plpgsql + AS $$ + BEGIN + INSERT INTO transaction + (token_id, sender_entity_id, receiver_entity_id) + VALUES + (OLD.id, OLD.entity_id, NEW.entity_id); + RETURN NEW; + END; + $$; + + +ALTER FUNCTION public.token_transaction_insert() OWNER TO doadmin; + +-- +-- Name: trigger_set_updated_at(); Type: FUNCTION; Schema: public; Owner: doadmin +-- + +CREATE FUNCTION public.trigger_set_updated_at() RETURNS trigger + LANGUAGE plpgsql + AS $$ + BEGIN + NEW.updated_at = NOW(); + RETURN NEW; + END; + $$; + + +ALTER FUNCTION public.trigger_set_updated_at() OWNER TO doadmin; + +-- +-- Name: trees_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.trees_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.trees_id_seq OWNER TO doadmin; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: trees; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.trees ( + id integer DEFAULT nextval('public.trees_id_seq'::regclass) NOT NULL, + time_created timestamp without time zone NOT NULL, + time_updated timestamp without time zone NOT NULL, + missing boolean DEFAULT false, + priority boolean DEFAULT false, + cause_of_death_id integer, + planter_id integer, + primary_location_id integer, + settings_id integer, + override_settings_id integer, + dead integer DEFAULT 0 NOT NULL, + photo_id integer, + image_url character varying, + certificate_id integer, + estimated_geometric_location public.geometry(Point,4326), + lat numeric, + lon numeric, + gps_accuracy integer, + active boolean DEFAULT true, + planter_photo_url character varying, + planter_identifier character varying, + device_id integer, + sequence integer, + note character varying, + verified boolean DEFAULT false NOT NULL, + uuid character varying, + approved boolean DEFAULT false NOT NULL, + status character varying DEFAULT 'planted'::character varying NOT NULL, + cluster_regions_assigned boolean DEFAULT false NOT NULL, + species_id integer, + planting_organization_id integer, + payment_id integer, + contract_id integer, + token_issued boolean DEFAULT false NOT NULL, + morphology public.morphology_type, + age public.age_type, + species character varying, + capture_approval_tag public.capture_approval_type, + rejection_reason public.rejection_reason_type, + matching_hash character varying, + device_identifier character varying, + images jsonb, + domain_specific_data jsonb, + token_id uuid, + name character varying, + earnings_id uuid +); + + +ALTER TABLE public.trees OWNER TO doadmin; + +-- +-- Name: entity; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.entity ( + id integer NOT NULL, + type character varying, + name character varying, + first_name character varying, + last_name character varying, + email character varying, + phone character varying, + pwd_reset_required boolean DEFAULT false, + website character varying, + wallet character varying, + password character varying, + salt character varying, + active_contract_id integer, + offering_pay_to_plant boolean DEFAULT false NOT NULL, + tree_validation_contract_id integer, + logo_url character varying, + map_name character varying, + stakeholder_uuid uuid DEFAULT public.uuid_generate_v4() NOT NULL +); + + +ALTER TABLE public.entity OWNER TO doadmin; + +-- +-- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.users_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.users_id_seq OWNER TO doadmin; + +-- +-- Name: planter; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.planter ( + id integer DEFAULT nextval('public.users_id_seq'::regclass) NOT NULL, + first_name character varying(30) NOT NULL, + last_name character varying(30) NOT NULL, + email character varying, + organization character varying, + phone text, + pwd_reset_required boolean DEFAULT false, + image_url character varying, + person_id integer, + organization_id integer, + image_rotation integer +); + + +ALTER TABLE public.planter OWNER TO doadmin; + +-- +-- Name: token; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.token ( + id integer NOT NULL, + tree_id integer, + entity_id integer, + uuid character varying DEFAULT public.uuid_generate_v4(), + capture_id character varying +); + + +ALTER TABLE public.token OWNER TO doadmin; + +-- +-- Name: ab_permission; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.ab_permission ( + id integer NOT NULL, + name character varying(100) NOT NULL +); + + +ALTER TABLE public.ab_permission OWNER TO doadmin; + +-- +-- Name: ab_permission_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.ab_permission_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.ab_permission_id_seq OWNER TO doadmin; + +-- +-- Name: ab_permission_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.ab_permission_id_seq OWNED BY public.ab_permission.id; + + +-- +-- Name: ab_permission_view; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.ab_permission_view ( + id integer NOT NULL, + permission_id integer, + view_menu_id integer +); + + +ALTER TABLE public.ab_permission_view OWNER TO doadmin; + +-- +-- Name: ab_permission_view_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.ab_permission_view_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.ab_permission_view_id_seq OWNER TO doadmin; + +-- +-- Name: ab_permission_view_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.ab_permission_view_id_seq OWNED BY public.ab_permission_view.id; + + +-- +-- Name: ab_permission_view_role; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.ab_permission_view_role ( + id integer NOT NULL, + permission_view_id integer, + role_id integer +); + + +ALTER TABLE public.ab_permission_view_role OWNER TO doadmin; + +-- +-- Name: ab_permission_view_role_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.ab_permission_view_role_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.ab_permission_view_role_id_seq OWNER TO doadmin; + +-- +-- Name: ab_permission_view_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.ab_permission_view_role_id_seq OWNED BY public.ab_permission_view_role.id; + + +-- +-- Name: ab_register_user; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.ab_register_user ( + id integer NOT NULL, + first_name character varying(64) NOT NULL, + last_name character varying(64) NOT NULL, + username character varying(64) NOT NULL, + password character varying(256), + email character varying(64) NOT NULL, + registration_date timestamp without time zone, + registration_hash character varying(256) +); + + +ALTER TABLE public.ab_register_user OWNER TO doadmin; + +-- +-- Name: ab_register_user_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.ab_register_user_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.ab_register_user_id_seq OWNER TO doadmin; + +-- +-- Name: ab_register_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.ab_register_user_id_seq OWNED BY public.ab_register_user.id; + + +-- +-- Name: ab_role; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.ab_role ( + id integer NOT NULL, + name character varying(64) NOT NULL +); + + +ALTER TABLE public.ab_role OWNER TO doadmin; + +-- +-- Name: ab_role_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.ab_role_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.ab_role_id_seq OWNER TO doadmin; + +-- +-- Name: ab_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.ab_role_id_seq OWNED BY public.ab_role.id; + + +-- +-- Name: ab_user; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.ab_user ( + id integer NOT NULL, + first_name character varying(64) NOT NULL, + last_name character varying(64) NOT NULL, + username character varying(64) NOT NULL, + password character varying(256), + active boolean, + email character varying(64) NOT NULL, + last_login timestamp without time zone, + login_count integer, + fail_login_count integer, + created_on timestamp without time zone, + changed_on timestamp without time zone, + created_by_fk integer, + changed_by_fk integer +); + + +ALTER TABLE public.ab_user OWNER TO doadmin; + +-- +-- Name: ab_user_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.ab_user_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.ab_user_id_seq OWNER TO doadmin; + +-- +-- Name: ab_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.ab_user_id_seq OWNED BY public.ab_user.id; + + +-- +-- Name: ab_user_role; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.ab_user_role ( + id integer NOT NULL, + user_id integer, + role_id integer +); + + +ALTER TABLE public.ab_user_role OWNER TO doadmin; + +-- +-- Name: ab_user_role_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.ab_user_role_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.ab_user_role_id_seq OWNER TO doadmin; + +-- +-- Name: ab_user_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.ab_user_role_id_seq OWNED BY public.ab_user_role.id; + + +-- +-- Name: ab_view_menu; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.ab_view_menu ( + id integer NOT NULL, + name character varying(250) NOT NULL +); + + +ALTER TABLE public.ab_view_menu OWNER TO doadmin; + +-- +-- Name: ab_view_menu_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.ab_view_menu_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.ab_view_menu_id_seq OWNER TO doadmin; + +-- +-- Name: ab_view_menu_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.ab_view_menu_id_seq OWNED BY public.ab_view_menu.id; + + +-- +-- Name: region; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.region ( + id integer NOT NULL, + type_id integer, + name character varying, + metadata jsonb, + geom public.geometry(MultiPolygon,4326), + centroid public.geometry(Point,4326) +); + + +ALTER TABLE public.region OWNER TO doadmin; + +-- +-- Name: tree_region; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.tree_region ( + id integer NOT NULL, + tree_id integer, + zoom_level integer, + region_id integer +); + + +ALTER TABLE public.tree_region OWNER TO doadmin; + +-- +-- Name: active_tree_region; Type: MATERIALIZED VIEW; Schema: public; Owner: doadmin +-- + +CREATE MATERIALIZED VIEW public.active_tree_region AS + SELECT tree_region.id, + tree_region.tree_id, + region.id AS region_id, + region.centroid, + region.type_id, + tree_region.zoom_level + FROM ((public.tree_region + JOIN public.trees ON ((trees.id = tree_region.tree_id))) + JOIN public.region ON ((region.id = tree_region.region_id))) + WHERE (trees.active = true) + WITH NO DATA; + + +ALTER TABLE public.active_tree_region OWNER TO doadmin; + +-- +-- Name: admin_role; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.admin_role ( + id integer NOT NULL, + role_name character varying NOT NULL, + description character varying, + policy json, + active boolean DEFAULT true NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + identifier character varying DEFAULT public.uuid_generate_v4() +); + + +ALTER TABLE public.admin_role OWNER TO doadmin; + +-- +-- Name: admin_role_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.admin_role_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.admin_role_id_seq OWNER TO doadmin; + +-- +-- Name: admin_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.admin_role_id_seq OWNED BY public.admin_role.id; + + +-- +-- Name: admin_user; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.admin_user ( + id integer NOT NULL, + user_name character varying, + first_name character varying, + last_name character varying, + password_hash character varying, + salt character varying, + email character varying, + active boolean DEFAULT false NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + enabled boolean DEFAULT true NOT NULL +); + + +ALTER TABLE public.admin_user OWNER TO doadmin; + +-- +-- Name: admin_user_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.admin_user_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.admin_user_id_seq OWNER TO doadmin; + +-- +-- Name: admin_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.admin_user_id_seq OWNED BY public.admin_user.id; + + +-- +-- Name: admin_user_role; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.admin_user_role ( + id integer NOT NULL, + role_id integer NOT NULL, + admin_user_id integer NOT NULL, + active boolean DEFAULT true NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.admin_user_role OWNER TO doadmin; + +-- +-- Name: admin_user_role_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.admin_user_role_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.admin_user_role_id_seq OWNER TO doadmin; + +-- +-- Name: admin_user_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.admin_user_role_id_seq OWNED BY public.admin_user_role.id; + + +-- +-- Name: alembic_version; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.alembic_version ( + version_num character varying(32) NOT NULL +); + + +ALTER TABLE public.alembic_version OWNER TO doadmin; + +-- +-- Name: anonymous_entities; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.anonymous_entities ( + index bigint, + id bigint, + type text, + name text, + first_name text, + last_name text, + website text, + wallet text, + offering_pay_to_plant boolean, + logo_url text, + map_name text +); + + +ALTER TABLE public.anonymous_entities OWNER TO doadmin; + +-- +-- Name: anonymous_planters; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.anonymous_planters ( + index bigint, + id bigint, + first_name text, + last_name text, + email text, + organization text, + image_url text, + person_id double precision, + organization_id double precision +); + + +ALTER TABLE public.anonymous_planters OWNER TO doadmin; + +-- +-- Name: anonymous_trees; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.anonymous_trees ( + index bigint, + id bigint, + time_created timestamp without time zone, + time_updated timestamp without time zone, + missing boolean, + priority boolean, + cause_of_death_id double precision, + planter_id bigint, + primary_location_id double precision, + settings_id double precision, + image_url text, + certificate_id double precision, + lat double precision, + lon double precision, + planter_photo_url text, + planter_identifier text, + device_id double precision, + note text, + verified boolean, + uuid text, + approved boolean, + status text, + species_id double precision, + planting_organization_id double precision, + payment_id double precision, + contract_id text, + token_issued boolean, + morphology text, + age text, + species text, + capture_approval_tag text, + rejection_reason text, + device_identifier text +); + + +ALTER TABLE public.anonymous_trees OWNER TO doadmin; + +-- +-- Name: api_key; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.api_key ( + id integer NOT NULL, + key character varying, + tree_token_api_access boolean, + hash character varying, + salt character varying, + name character varying +); + + +ALTER TABLE public.api_key OWNER TO doadmin; + +-- +-- Name: api_key_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.api_key_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.api_key_id_seq OWNER TO doadmin; + +-- +-- Name: api_key_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.api_key_id_seq OWNED BY public.api_key.id; + + +-- +-- Name: audit; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.audit ( + id integer NOT NULL, + admin_user_id integer NOT NULL, + platform public.platform_type, + ip character varying, + browser character varying, + organization character varying, + operation json, + created_at timestamp without time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.audit OWNER TO doadmin; + +-- +-- Name: audit_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.audit_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.audit_id_seq OWNER TO doadmin; + +-- +-- Name: audit_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.audit_id_seq OWNED BY public.audit.id; + + +-- +-- Name: celery_taskmeta; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.celery_taskmeta ( + id integer NOT NULL, + task_id character varying(155), + status character varying(50), + result bytea, + date_done timestamp without time zone, + traceback text, + name character varying(155), + args bytea, + kwargs bytea, + worker character varying(155), + retries integer, + queue character varying(155) +); + + +ALTER TABLE public.celery_taskmeta OWNER TO doadmin; + +-- +-- Name: celery_tasksetmeta; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.celery_tasksetmeta ( + id integer NOT NULL, + taskset_id character varying(155), + result bytea, + date_done timestamp without time zone +); + + +ALTER TABLE public.celery_tasksetmeta OWNER TO doadmin; + +-- +-- Name: certificates; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.certificates ( + id integer NOT NULL, + donor_id integer, + token character varying +); + + +ALTER TABLE public.certificates OWNER TO doadmin; + +-- +-- Name: certificates_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.certificates_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.certificates_id_seq OWNER TO doadmin; + +-- +-- Name: certificates_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.certificates_id_seq OWNED BY public.certificates.id; + + +-- +-- Name: clusters; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.clusters ( + id integer NOT NULL, + count integer, + zoom_level integer, + location public.geometry(Point,4326) +); + + +ALTER TABLE public.clusters OWNER TO doadmin; + +-- +-- Name: clusters_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.clusters_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.clusters_id_seq OWNER TO doadmin; + +-- +-- Name: clusters_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.clusters_id_seq OWNED BY public.clusters.id; + + +-- +-- Name: connection; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.connection ( + id integer NOT NULL, + conn_id character varying(250) NOT NULL, + conn_type character varying(500) NOT NULL, + host character varying(500), + schema character varying(500), + login character varying(500), + password character varying(5000), + port integer, + extra text, + is_encrypted boolean, + is_extra_encrypted boolean, + description text +); + + +ALTER TABLE public.connection OWNER TO doadmin; + +-- +-- Name: connection_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.connection_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.connection_id_seq OWNER TO doadmin; + +-- +-- Name: connection_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.connection_id_seq OWNED BY public.connection.id; + + +-- +-- Name: contract; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.contract ( + id integer NOT NULL, + author_id integer NOT NULL, + name character varying NOT NULL, + enabled boolean DEFAULT false NOT NULL, + contract json NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.contract OWNER TO doadmin; + +-- +-- Name: contract_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.contract_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.contract_id_seq OWNER TO doadmin; + +-- +-- Name: contract_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.contract_id_seq OWNED BY public.contract.id; + + +-- +-- Name: dag; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.dag ( + dag_id character varying(250) NOT NULL, + is_paused boolean, + is_subdag boolean, + is_active boolean, + last_parsed_time timestamp with time zone, + last_pickled timestamp with time zone, + last_expired timestamp with time zone, + scheduler_lock boolean, + pickle_id integer, + fileloc character varying(2000), + owners character varying(2000), + description text, + default_view character varying(25), + schedule_interval text, + root_dag_id character varying(250), + next_dagrun timestamp with time zone, + next_dagrun_create_after timestamp with time zone, + concurrency integer NOT NULL, + has_task_concurrency_limits boolean NOT NULL +); + + +ALTER TABLE public.dag OWNER TO doadmin; + +-- +-- Name: dag_code; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.dag_code ( + fileloc_hash bigint NOT NULL, + fileloc character varying(2000) NOT NULL, + source_code text NOT NULL, + last_updated timestamp with time zone NOT NULL +); + + +ALTER TABLE public.dag_code OWNER TO doadmin; + +-- +-- Name: dag_pickle; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.dag_pickle ( + id integer NOT NULL, + pickle bytea, + created_dttm timestamp with time zone, + pickle_hash bigint +); + + +ALTER TABLE public.dag_pickle OWNER TO doadmin; + +-- +-- Name: dag_pickle_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.dag_pickle_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.dag_pickle_id_seq OWNER TO doadmin; + +-- +-- Name: dag_pickle_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.dag_pickle_id_seq OWNED BY public.dag_pickle.id; + + +-- +-- Name: dag_run; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.dag_run ( + id integer NOT NULL, + dag_id character varying(250), + execution_date timestamp with time zone, + state character varying(50), + run_id character varying(250), + external_trigger boolean, + conf bytea, + end_date timestamp with time zone, + start_date timestamp with time zone, + run_type character varying(50) NOT NULL, + last_scheduling_decision timestamp with time zone, + dag_hash character varying(32), + creating_job_id integer +); + + +ALTER TABLE public.dag_run OWNER TO doadmin; + +-- +-- Name: dag_run_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.dag_run_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.dag_run_id_seq OWNER TO doadmin; + +-- +-- Name: dag_run_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.dag_run_id_seq OWNED BY public.dag_run.id; + + +-- +-- Name: dag_tag; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.dag_tag ( + name character varying(100) NOT NULL, + dag_id character varying(250) NOT NULL +); + + +ALTER TABLE public.dag_tag OWNER TO doadmin; + +-- +-- Name: devices; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.devices ( + id integer NOT NULL, + android_id character varying, + app_version character varying, + app_build integer, + manufacturer character varying, + brand character varying, + model character varying, + hardware character varying, + device character varying, + serial character varying, + android_release character varying, + android_sdk integer, + sequence bigint, + created_at timestamp without time zone DEFAULT now() NOT NULL, + updated_at timestamp without time zone +); + + +ALTER TABLE public.devices OWNER TO doadmin; + +-- +-- Name: devices_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.devices_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.devices_id_seq OWNER TO doadmin; + +-- +-- Name: devices_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.devices_id_seq OWNED BY public.devices.id; + + +-- +-- Name: domain_event; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.domain_event ( + id uuid NOT NULL, + payload jsonb NOT NULL, + status character varying NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL +) +PARTITION BY LIST (status); + + +ALTER TABLE public.domain_event OWNER TO doadmin; + +-- +-- Name: domain_event_handled; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.domain_event_handled ( + id uuid NOT NULL, + payload jsonb NOT NULL, + status character varying NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL +) +PARTITION BY RANGE (created_at); +ALTER TABLE ONLY public.domain_event ATTACH PARTITION public.domain_event_handled FOR VALUES IN ('handled'); + + +ALTER TABLE public.domain_event_handled OWNER TO doadmin; + +-- +-- Name: domain_event_handled_2021; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.domain_event_handled_2021 ( + id uuid NOT NULL, + payload jsonb NOT NULL, + status character varying NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL +); +ALTER TABLE ONLY public.domain_event_handled ATTACH PARTITION public.domain_event_handled_2021 FOR VALUES FROM ('2021-01-01 00:00:00+00') TO ('2022-01-01 00:00:00+00'); + + +ALTER TABLE public.domain_event_handled_2021 OWNER TO doadmin; + +-- +-- Name: domain_event_handled_2022; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.domain_event_handled_2022 ( + id uuid NOT NULL, + payload jsonb NOT NULL, + status character varying NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL +); +ALTER TABLE ONLY public.domain_event_handled ATTACH PARTITION public.domain_event_handled_2022 FOR VALUES FROM ('2022-01-01 00:00:00+00') TO ('2023-01-01 00:00:00+00'); + + +ALTER TABLE public.domain_event_handled_2022 OWNER TO doadmin; + +-- +-- Name: domain_event_handled_2023; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.domain_event_handled_2023 ( + id uuid NOT NULL, + payload jsonb NOT NULL, + status character varying NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL +); +ALTER TABLE ONLY public.domain_event_handled ATTACH PARTITION public.domain_event_handled_2023 FOR VALUES FROM ('2023-01-01 00:00:00+00') TO ('2024-01-01 00:00:00+00'); + + +ALTER TABLE public.domain_event_handled_2023 OWNER TO doadmin; + +-- +-- Name: domain_event_raised; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.domain_event_raised ( + id uuid NOT NULL, + payload jsonb NOT NULL, + status character varying NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL +); +ALTER TABLE ONLY public.domain_event ATTACH PARTITION public.domain_event_raised FOR VALUES IN ('raised'); + + +ALTER TABLE public.domain_event_raised OWNER TO doadmin; + +-- +-- Name: domain_event_received; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.domain_event_received ( + id uuid NOT NULL, + payload jsonb NOT NULL, + status character varying NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL +); +ALTER TABLE ONLY public.domain_event ATTACH PARTITION public.domain_event_received FOR VALUES IN ('received'); + + +ALTER TABLE public.domain_event_received OWNER TO doadmin; + +-- +-- Name: domain_event_sent; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.domain_event_sent ( + id uuid NOT NULL, + payload jsonb NOT NULL, + status character varying NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL +) +PARTITION BY RANGE (created_at); +ALTER TABLE ONLY public.domain_event ATTACH PARTITION public.domain_event_sent FOR VALUES IN ('sent'); + + +ALTER TABLE public.domain_event_sent OWNER TO doadmin; + +-- +-- Name: domain_event_sent_2021; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.domain_event_sent_2021 ( + id uuid NOT NULL, + payload jsonb NOT NULL, + status character varying NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL +); +ALTER TABLE ONLY public.domain_event_sent ATTACH PARTITION public.domain_event_sent_2021 FOR VALUES FROM ('2021-01-01 00:00:00+00') TO ('2022-01-01 00:00:00+00'); + + +ALTER TABLE public.domain_event_sent_2021 OWNER TO doadmin; + +-- +-- Name: domain_event_sent_2022; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.domain_event_sent_2022 ( + id uuid NOT NULL, + payload jsonb NOT NULL, + status character varying NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL +); +ALTER TABLE ONLY public.domain_event_sent ATTACH PARTITION public.domain_event_sent_2022 FOR VALUES FROM ('2022-01-01 00:00:00+00') TO ('2023-01-01 00:00:00+00'); + + +ALTER TABLE public.domain_event_sent_2022 OWNER TO doadmin; + +-- +-- Name: domain_event_sent_2023; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.domain_event_sent_2023 ( + id uuid NOT NULL, + payload jsonb NOT NULL, + status character varying NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL +); +ALTER TABLE ONLY public.domain_event_sent ATTACH PARTITION public.domain_event_sent_2023 FOR VALUES FROM ('2023-01-01 00:00:00+00') TO ('2024-01-01 00:00:00+00'); + + +ALTER TABLE public.domain_event_sent_2023 OWNER TO doadmin; + +-- +-- Name: donors; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.donors ( + id integer NOT NULL, + organization_id integer, + first_name character varying, + last_name character varying, + email character varying +); + + +ALTER TABLE public.donors OWNER TO doadmin; + +-- +-- Name: donors_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.donors_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.donors_id_seq OWNER TO doadmin; + +-- +-- Name: donors_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.donors_id_seq OWNED BY public.donors.id; + + +-- +-- Name: entities; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.entities ( + index bigint, + id bigint, + type text, + name text, + first_name text, + last_name text, + website text, + wallet text, + offering_pay_to_plant boolean, + logo_url text, + map_name text +); + + +ALTER TABLE public.entities OWNER TO doadmin; + +-- +-- Name: entity_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.entity_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.entity_id_seq OWNER TO doadmin; + +-- +-- Name: entity_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.entity_id_seq OWNED BY public.entity.id; + + +-- +-- Name: entity_manager; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.entity_manager ( + id integer NOT NULL, + parent_entity_id integer, + child_entity_id integer, + active boolean DEFAULT false NOT NULL +); + + +ALTER TABLE public.entity_manager OWNER TO doadmin; + +-- +-- Name: entity_manager_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.entity_manager_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.entity_manager_id_seq OWNER TO doadmin; + +-- +-- Name: entity_manager_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.entity_manager_id_seq OWNED BY public.entity_manager.id; + + +-- +-- Name: entity_relationship; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.entity_relationship ( + id integer NOT NULL, + parent_id integer NOT NULL, + child_id integer NOT NULL, + type character varying NOT NULL, + role character varying NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.entity_relationship OWNER TO doadmin; + +-- +-- Name: entity_relationship_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.entity_relationship_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.entity_relationship_id_seq OWNER TO doadmin; + +-- +-- Name: entity_relationship_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.entity_relationship_id_seq OWNED BY public.entity_relationship.id; + + +-- +-- Name: entity_role; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.entity_role ( + id integer NOT NULL, + entity_id integer, + role_name character varying, + enabled boolean +); + + +ALTER TABLE public.entity_role OWNER TO doadmin; + +-- +-- Name: entity_role_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.entity_role_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.entity_role_id_seq OWNER TO doadmin; + +-- +-- Name: entity_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.entity_role_id_seq OWNED BY public.entity_role.id; + + +-- +-- Name: import_error; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.import_error ( + id integer NOT NULL, + "timestamp" timestamp with time zone, + filename character varying(1024), + stacktrace text +); + + +ALTER TABLE public.import_error OWNER TO doadmin; + +-- +-- Name: import_error_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.import_error_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.import_error_id_seq OWNER TO doadmin; + +-- +-- Name: import_error_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.import_error_id_seq OWNED BY public.import_error.id; + + +-- +-- Name: job; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.job ( + id integer NOT NULL, + dag_id character varying(250), + state character varying(20), + job_type character varying(30), + start_date timestamp with time zone, + end_date timestamp with time zone, + latest_heartbeat timestamp with time zone, + executor_class character varying(500), + hostname character varying(500), + unixname character varying(1000) +); + + +ALTER TABLE public.job OWNER TO doadmin; + +-- +-- Name: job_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.job_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.job_id_seq OWNER TO doadmin; + +-- +-- Name: job_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.job_id_seq OWNED BY public.job.id; + + +-- +-- Name: khushi_denormalized; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.khushi_denormalized ( + capture_uuid character varying NOT NULL, + planter_first_name character varying NOT NULL, + planter_last_name character varying NOT NULL, + planter_identifier character varying, + lat character varying NOT NULL, + lon character varying NOT NULL, + note character varying, + approved character varying NOT NULL, + planting_organization_uuid character varying, + planting_organization_name character varying, + species character varying, + date_paid timestamp with time zone, + paid_by character varying, + payment_local_amt numeric, + token_id character varying, + created_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.khushi_denormalized OWNER TO doadmin; + +-- +-- Name: knex_migrations; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.knex_migrations ( + id integer NOT NULL, + name character varying(255), + batch integer, + migration_time timestamp with time zone +); + + +ALTER TABLE public.knex_migrations OWNER TO doadmin; + +-- +-- Name: knex_migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.knex_migrations_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.knex_migrations_id_seq OWNER TO doadmin; + +-- +-- Name: knex_migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.knex_migrations_id_seq OWNED BY public.knex_migrations.id; + + +-- +-- Name: knex_migrations_lock; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.knex_migrations_lock ( + index integer NOT NULL, + is_locked integer +); + + +ALTER TABLE public.knex_migrations_lock OWNER TO doadmin; + +-- +-- Name: knex_migrations_lock_index_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.knex_migrations_lock_index_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.knex_migrations_lock_index_seq OWNER TO doadmin; + +-- +-- Name: knex_migrations_lock_index_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.knex_migrations_lock_index_seq OWNED BY public.knex_migrations_lock.index; + + +-- +-- Name: leaf; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.leaf ( + leaf_id integer NOT NULL, + leaf_name character varying NOT NULL, + leaf_type character varying NOT NULL, + owner character varying NOT NULL +); + + +ALTER TABLE public.leaf OWNER TO doadmin; + +-- +-- Name: leaf_khushi; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.leaf_khushi ( + leaf_id integer NOT NULL, + leaf_name character varying NOT NULL, + leaf_type character varying NOT NULL, + owner character varying NOT NULL +); + + +ALTER TABLE public.leaf_khushi OWNER TO doadmin; + +-- +-- Name: leaf_khushi_leaf_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.leaf_khushi_leaf_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.leaf_khushi_leaf_id_seq OWNER TO doadmin; + +-- +-- Name: leaf_khushi_leaf_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.leaf_khushi_leaf_id_seq OWNED BY public.leaf_khushi.leaf_id; + + +-- +-- Name: leaf_leaf_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.leaf_leaf_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.leaf_leaf_id_seq OWNER TO doadmin; + +-- +-- Name: leaf_leaf_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.leaf_leaf_id_seq OWNED BY public.leaf.leaf_id; + + +-- +-- Name: locations_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.locations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.locations_id_seq OWNER TO doadmin; + +-- +-- Name: locations; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.locations ( + id integer DEFAULT nextval('public.locations_id_seq'::regclass) NOT NULL, + lat character varying(10) NOT NULL, + lon character varying(10) NOT NULL, + gps_accuracy integer, + planter_id integer +); + + +ALTER TABLE public.locations OWNER TO doadmin; + +-- +-- Name: log; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.log ( + id integer NOT NULL, + dttm timestamp with time zone, + dag_id character varying(250), + task_id character varying(250), + event character varying(30), + execution_date timestamp with time zone, + owner character varying(500), + extra text +); + + +ALTER TABLE public.log OWNER TO doadmin; + +-- +-- Name: log_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.log_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.log_id_seq OWNER TO doadmin; + +-- +-- Name: log_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.log_id_seq OWNED BY public.log.id; + + +-- +-- Name: long_running; Type: VIEW; Schema: public; Owner: doadmin +-- + +CREATE VIEW public.long_running AS + SELECT pg_stat_activity.pid, + (now() - pg_stat_activity.query_start) AS duration, + pg_stat_activity.query, + pg_stat_activity.state + FROM pg_stat_activity + WHERE ((now() - pg_stat_activity.query_start) > '00:05:00'::interval); + + +ALTER TABLE public.long_running OWNER TO doadmin; + +-- +-- Name: migrations; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.migrations ( + id integer NOT NULL, + name character varying(255) NOT NULL, + run_on timestamp without time zone NOT NULL +); + + +ALTER TABLE public.migrations OWNER TO doadmin; + +-- +-- Name: migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.migrations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.migrations_id_seq OWNER TO doadmin; + +-- +-- Name: migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.migrations_id_seq OWNED BY public.migrations.id; + + +-- +-- Name: migrations_state; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.migrations_state ( + key character varying NOT NULL, + value text NOT NULL, + run_on timestamp without time zone NOT NULL +); + + +ALTER TABLE public.migrations_state OWNER TO doadmin; + +-- +-- Name: note_trees; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.note_trees ( + tree_id integer, + note_id integer +); + + +ALTER TABLE public.note_trees OWNER TO doadmin; + +-- +-- Name: notes_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.notes_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.notes_id_seq OWNER TO doadmin; + +-- +-- Name: notes; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.notes ( + id integer DEFAULT nextval('public.notes_id_seq'::regclass) NOT NULL, + content text, + time_created timestamp without time zone NOT NULL, + planter_id integer +); + + +ALTER TABLE public.notes OWNER TO doadmin; + +-- +-- Name: organization_children; Type: MATERIALIZED VIEW; Schema: public; Owner: doadmin +-- + +CREATE MATERIALIZED VIEW public.organization_children AS + SELECT entity.id, + ARRAY( SELECT getentityrelationshipchildren.entity_id + FROM public.getentityrelationshipchildren(entity.id) getentityrelationshipchildren(entity_id, parent_id, depth, type, relationship_role)) AS children, + entity.map_name + FROM public.entity + WHERE (entity.map_name IS NOT NULL) + WITH NO DATA; + + +ALTER TABLE public.organization_children OWNER TO doadmin; + +-- +-- Name: organizations; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.organizations ( + id integer NOT NULL, + name character varying +); + + +ALTER TABLE public.organizations OWNER TO doadmin; + +-- +-- Name: organizations_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.organizations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.organizations_id_seq OWNER TO doadmin; + +-- +-- Name: organizations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.organizations_id_seq OWNED BY public.organizations.id; + + +-- +-- Name: orgnization_children; Type: MATERIALIZED VIEW; Schema: public; Owner: doadmin +-- + +CREATE MATERIALIZED VIEW public.orgnization_children AS + SELECT entity.id, + ARRAY( SELECT getentityrelationshipchildren.entity_id + FROM public.getentityrelationshipchildren(entity.id) getentityrelationshipchildren(entity_id, parent_id, depth, type, relationship_role)) AS children, + entity.map_name + FROM public.entity + WHERE (entity.map_name IS NOT NULL) + WITH NO DATA; + + +ALTER TABLE public.orgnization_children OWNER TO doadmin; + +-- +-- Name: payment; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.payment ( + id integer NOT NULL, + sender_entity_id integer, + receiver_entity_id integer, + date_paid date, + tree_amt integer, + usd_amt integer, + local_amt integer, + paid_by character varying +); + + +ALTER TABLE public.payment OWNER TO doadmin; + +-- +-- Name: payment_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.payment_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.payment_id_seq OWNER TO doadmin; + +-- +-- Name: payment_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.payment_id_seq OWNED BY public.payment.id; + + +-- +-- Name: pending_update_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.pending_update_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.pending_update_id_seq OWNER TO doadmin; + +-- +-- Name: pending_update; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.pending_update ( + id integer DEFAULT nextval('public.pending_update_id_seq'::regclass) NOT NULL, + planter_id integer, + settings_id integer, + tree_id integer, + location_id integer +); + + +ALTER TABLE public.pending_update OWNER TO doadmin; + +-- +-- Name: photo_trees; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.photo_trees ( + tree_id integer, + photo_id integer +); + + +ALTER TABLE public.photo_trees OWNER TO doadmin; + +-- +-- Name: photos_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.photos_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.photos_id_seq OWNER TO doadmin; + +-- +-- Name: photos; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.photos ( + id integer DEFAULT nextval('public.photos_id_seq'::regclass) NOT NULL, + outdated boolean DEFAULT false, + time_taken timestamp without time zone NOT NULL, + location_id integer, + user_id integer, + base64_image bytea +); + + +ALTER TABLE public.photos OWNER TO doadmin; + +-- +-- Name: planter_registrations; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.planter_registrations ( + id integer NOT NULL, + planter_id integer, + device_id integer, + first_name character varying, + last_name character varying, + organization character varying, + phone character varying, + email character varying, + location_string character varying, + device_identifier character varying, + created_at timestamp without time zone DEFAULT now() NOT NULL, + lat numeric, + lon numeric, + gps_accuracy integer, + geom public.geometry(Point,4326) +); + + +ALTER TABLE public.planter_registrations OWNER TO doadmin; + +-- +-- Name: planter_registrations_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.planter_registrations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.planter_registrations_id_seq OWNER TO doadmin; + +-- +-- Name: planter_registrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.planter_registrations_id_seq OWNED BY public.planter_registrations.id; + + +-- +-- Name: planters; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.planters ( + index bigint, + id bigint, + first_name text, + last_name text, + email text, + organization text, + image_url text, + person_id double precision, + organization_id double precision +); + + +ALTER TABLE public.planters OWNER TO doadmin; + +-- +-- Name: region_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.region_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.region_id_seq OWNER TO doadmin; + +-- +-- Name: region_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.region_id_seq OWNED BY public.region.id; + + +-- +-- Name: region_type; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.region_type ( + id integer NOT NULL, + type character varying +); + + +ALTER TABLE public.region_type OWNER TO doadmin; + +-- +-- Name: region_type_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.region_type_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.region_type_id_seq OWNER TO doadmin; + +-- +-- Name: region_type_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.region_type_id_seq OWNED BY public.region_type.id; + + +-- +-- Name: region_zoom; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.region_zoom ( + id integer NOT NULL, + region_id integer, + zoom_level integer, + priority integer +); + + +ALTER TABLE public.region_zoom OWNER TO doadmin; + +-- +-- Name: region_zoom_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.region_zoom_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.region_zoom_id_seq OWNER TO doadmin; + +-- +-- Name: region_zoom_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.region_zoom_id_seq OWNED BY public.region_zoom.id; + + +-- +-- Name: rendered_task_instance_fields; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.rendered_task_instance_fields ( + dag_id character varying(250) NOT NULL, + task_id character varying(250) NOT NULL, + execution_date timestamp with time zone NOT NULL, + rendered_fields json NOT NULL, + k8s_pod_yaml json +); + + +ALTER TABLE public.rendered_task_instance_fields OWNER TO doadmin; + +-- +-- Name: sensor_instance; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.sensor_instance ( + id integer NOT NULL, + task_id character varying(250) NOT NULL, + dag_id character varying(250) NOT NULL, + execution_date timestamp with time zone NOT NULL, + state character varying(20), + try_number integer, + start_date timestamp with time zone, + operator character varying(1000) NOT NULL, + op_classpath character varying(1000) NOT NULL, + hashcode bigint NOT NULL, + shardcode integer NOT NULL, + poke_context text NOT NULL, + execution_context text, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL +); + + +ALTER TABLE public.sensor_instance OWNER TO doadmin; + +-- +-- Name: sensor_instance_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.sensor_instance_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.sensor_instance_id_seq OWNER TO doadmin; + +-- +-- Name: sensor_instance_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.sensor_instance_id_seq OWNED BY public.sensor_instance.id; + + +-- +-- Name: serialized_dag; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.serialized_dag ( + dag_id character varying(250) NOT NULL, + fileloc character varying(2000) NOT NULL, + fileloc_hash bigint NOT NULL, + data json NOT NULL, + last_updated timestamp with time zone NOT NULL, + dag_hash character varying(32) DEFAULT 'Hash not calculated yet'::character varying NOT NULL +); + + +ALTER TABLE public.serialized_dag OWNER TO doadmin; + +-- +-- Name: settings_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.settings_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.settings_id_seq OWNER TO doadmin; + +-- +-- Name: settings; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.settings ( + id integer DEFAULT nextval('public.settings_id_seq'::regclass) NOT NULL, + next_update integer DEFAULT 30, + min_gps_accuracy integer DEFAULT 30 +); + + +ALTER TABLE public.settings OWNER TO doadmin; + +-- +-- Name: sla_miss; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.sla_miss ( + task_id character varying(250) NOT NULL, + dag_id character varying(250) NOT NULL, + execution_date timestamp with time zone NOT NULL, + email_sent boolean, + "timestamp" timestamp with time zone, + description text, + notification_sent boolean +); + + +ALTER TABLE public.sla_miss OWNER TO doadmin; + +-- +-- Name: slot_pool; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.slot_pool ( + id integer NOT NULL, + pool character varying(256), + slots integer, + description text +); + + +ALTER TABLE public.slot_pool OWNER TO doadmin; + +-- +-- Name: slot_pool_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.slot_pool_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.slot_pool_id_seq OWNER TO doadmin; + +-- +-- Name: slot_pool_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.slot_pool_id_seq OWNED BY public.slot_pool.id; + + +-- +-- Name: survey; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.survey ( + id uuid NOT NULL, + title character varying NOT NULL, + created_at timestamp with time zone NOT NULL, + active boolean NOT NULL +); + + +ALTER TABLE public.survey OWNER TO doadmin; + +-- +-- Name: survey_question; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.survey_question ( + id uuid NOT NULL, + survey_id uuid NOT NULL, + prompt character varying NOT NULL, + rank integer NOT NULL, + choices character varying[] NOT NULL, + created_at timestamp with time zone NOT NULL +); + + +ALTER TABLE public.survey_question OWNER TO doadmin; + +-- +-- Name: tag; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.tag ( + id integer NOT NULL, + tag_name character varying, + active boolean DEFAULT true NOT NULL, + public boolean DEFAULT true NOT NULL +); + + +ALTER TABLE public.tag OWNER TO doadmin; + +-- +-- Name: tag_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.tag_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.tag_id_seq OWNER TO doadmin; + +-- +-- Name: tag_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.tag_id_seq OWNED BY public.tag.id; + + +-- +-- Name: task_fail; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.task_fail ( + id integer NOT NULL, + task_id character varying(250) NOT NULL, + dag_id character varying(250) NOT NULL, + execution_date timestamp with time zone NOT NULL, + start_date timestamp with time zone, + end_date timestamp with time zone, + duration integer +); + + +ALTER TABLE public.task_fail OWNER TO doadmin; + +-- +-- Name: task_fail_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.task_fail_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.task_fail_id_seq OWNER TO doadmin; + +-- +-- Name: task_fail_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.task_fail_id_seq OWNED BY public.task_fail.id; + + +-- +-- Name: task_id_sequence; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.task_id_sequence + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.task_id_sequence OWNER TO doadmin; + +-- +-- Name: task_instance; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.task_instance ( + task_id character varying(250) NOT NULL, + dag_id character varying(250) NOT NULL, + execution_date timestamp with time zone NOT NULL, + start_date timestamp with time zone, + end_date timestamp with time zone, + duration double precision, + state character varying(20), + try_number integer, + hostname character varying(1000), + unixname character varying(1000), + job_id integer, + pool character varying(256) NOT NULL, + queue character varying(256), + priority_weight integer, + operator character varying(1000), + queued_dttm timestamp with time zone, + pid integer, + max_tries integer DEFAULT '-1'::integer, + executor_config bytea, + pool_slots integer NOT NULL, + queued_by_job_id integer, + external_executor_id character varying(250) +); + + +ALTER TABLE public.task_instance OWNER TO doadmin; + +-- +-- Name: task_reschedule; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.task_reschedule ( + id integer NOT NULL, + task_id character varying(250) NOT NULL, + dag_id character varying(250) NOT NULL, + execution_date timestamp with time zone NOT NULL, + try_number integer NOT NULL, + start_date timestamp with time zone NOT NULL, + end_date timestamp with time zone NOT NULL, + duration integer NOT NULL, + reschedule_date timestamp with time zone NOT NULL +); + + +ALTER TABLE public.task_reschedule OWNER TO doadmin; + +-- +-- Name: task_reschedule_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.task_reschedule_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.task_reschedule_id_seq OWNER TO doadmin; + +-- +-- Name: task_reschedule_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.task_reschedule_id_seq OWNED BY public.task_reschedule.id; + + +-- +-- Name: taskset_id_sequence; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.taskset_id_sequence + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.taskset_id_sequence OWNER TO doadmin; + +-- +-- Name: test; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.test ( + column1 public.geometry +); + + +ALTER TABLE public.test OWNER TO doadmin; + +-- +-- Name: token_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.token_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.token_id_seq OWNER TO doadmin; + +-- +-- Name: token_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.token_id_seq OWNED BY public.token.id; + + +-- +-- Name: tokens_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.tokens_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.tokens_id_seq OWNER TO doadmin; + +-- +-- Name: trading.transaction; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public."trading.transaction" ( + id integer NOT NULL, + token_id integer NOT NULL, + transfer_id integer NOT NULL, + source_entity_id integer NOT NULL, + destination_entity_id integer NOT NULL, + processed_at timestamp without time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public."trading.transaction" OWNER TO doadmin; + +-- +-- Name: transaction; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.transaction ( + id integer NOT NULL, + token_id integer, + sender_entity_id integer, + receiver_entity_id integer, + processed_at timestamp without time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.transaction OWNER TO doadmin; + +-- +-- Name: transaction_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.transaction_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.transaction_id_seq OWNER TO doadmin; + +-- +-- Name: transaction_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.transaction_id_seq OWNED BY public.transaction.id; + + +-- +-- Name: transfer; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.transfer ( + id integer NOT NULL, + executing_entity_id integer, + created_at timestamp without time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.transfer OWNER TO doadmin; + +-- +-- Name: transfer_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.transfer_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.transfer_id_seq OWNER TO doadmin; + +-- +-- Name: transfer_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.transfer_id_seq OWNED BY public.transfer.id; + + +-- +-- Name: tree_attributes; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.tree_attributes ( + id integer NOT NULL, + tree_id integer, + key character varying, + value character varying +); + + +ALTER TABLE public.tree_attributes OWNER TO doadmin; + +-- +-- Name: tree_attributes_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.tree_attributes_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.tree_attributes_id_seq OWNER TO doadmin; + +-- +-- Name: tree_attributes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.tree_attributes_id_seq OWNED BY public.tree_attributes.id; + + +-- +-- Name: tree_name; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.tree_name ( + id integer NOT NULL, + name character varying, + used boolean DEFAULT false NOT NULL +); + + +ALTER TABLE public.tree_name OWNER TO doadmin; + +-- +-- Name: tree_name_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.tree_name_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.tree_name_id_seq OWNER TO doadmin; + +-- +-- Name: tree_name_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.tree_name_id_seq OWNED BY public.tree_name.id; + + +-- +-- Name: tree_region_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.tree_region_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.tree_region_id_seq OWNER TO doadmin; + +-- +-- Name: tree_region_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.tree_region_id_seq OWNED BY public.tree_region.id; + + +-- +-- Name: tree_species_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.tree_species_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.tree_species_id_seq OWNER TO doadmin; + +-- +-- Name: tree_species; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.tree_species ( + id integer DEFAULT nextval('public.tree_species_id_seq'::regclass) NOT NULL, + name character varying(45) NOT NULL, + "desc" text NOT NULL, + active boolean DEFAULT true NOT NULL, + value_factor integer +); + + +ALTER TABLE public.tree_species OWNER TO doadmin; + +-- +-- Name: tree_tag; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.tree_tag ( + id integer NOT NULL, + tree_id integer, + tag_id integer +); + + +ALTER TABLE public.tree_tag OWNER TO doadmin; + +-- +-- Name: tree_tag_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.tree_tag_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.tree_tag_id_seq OWNER TO doadmin; + +-- +-- Name: tree_tag_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.tree_tag_id_seq OWNED BY public.tree_tag.id; + + +-- +-- Name: trees_active; Type: MATERIALIZED VIEW; Schema: public; Owner: doadmin +-- + +CREATE MATERIALIZED VIEW public.trees_active AS + SELECT trees.id, + trees.time_created, + trees.time_updated, + trees.missing, + trees.priority, + trees.cause_of_death_id, + trees.planter_id AS user_id, + trees.primary_location_id, + trees.settings_id, + trees.override_settings_id, + trees.dead, + trees.photo_id, + trees.image_url, + trees.certificate_id, + trees.estimated_geometric_location, + trees.lat, + trees.lon, + trees.gps_accuracy, + trees.active, + trees.planter_photo_url, + trees.planter_identifier, + trees.device_id, + trees.sequence, + trees.note, + trees.verified, + trees.uuid, + trees.approved, + trees.status, + trees.cluster_regions_assigned + FROM public.trees + WHERE (trees.active = true) + WITH NO DATA; + + +ALTER TABLE public.trees_active OWNER TO doadmin; + +-- +-- Name: treetracker_capture_backup; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.treetracker_capture_backup ( + id uuid, + reference_id bigint, + tree_id uuid, + image_url character varying, + lat numeric, + lon numeric, + estimated_geometric_location public.geometry(Point,4326), + gps_accuracy smallint, + planter_id bigint, + planter_photo_url character varying, + planter_username character varying, + planting_organization_id integer, + device_identifier character varying, + species_id integer, + morphology character varying, + age smallint, + note character varying, + attributes jsonb, + domain_specific_data jsonb, + status character varying, + created_at timestamp with time zone, + updated_at timestamp with time zone, + estimated_geographic_location public.geography(Point,4326) +); + + +ALTER TABLE public.treetracker_capture_backup OWNER TO doadmin; + +-- +-- Name: treetracker_tree_backup; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.treetracker_tree_backup ( + id uuid, + latest_capture_id uuid, + image_url character varying, + lat numeric, + lon numeric, + estimated_geometric_location public.geometry(Point,4326), + gps_accuracy smallint, + species_id integer, + morphology character varying, + age smallint, + status character varying, + created_at timestamp with time zone, + updated_at timestamp with time zone, + estimated_geographic_location public.geography(Point,4326) +); + + +ALTER TABLE public.treetracker_tree_backup OWNER TO doadmin; + +-- +-- Name: variable; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.variable ( + id integer NOT NULL, + key character varying(250), + val text, + is_encrypted boolean, + description text +); + + +ALTER TABLE public.variable OWNER TO doadmin; + +-- +-- Name: variable_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin +-- + +CREATE SEQUENCE public.variable_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.variable_id_seq OWNER TO doadmin; + +-- +-- Name: variable_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin +-- + +ALTER SEQUENCE public.variable_id_seq OWNED BY public.variable.id; + + +-- +-- Name: xcom; Type: TABLE; Schema: public; Owner: doadmin +-- + +CREATE TABLE public.xcom ( + key character varying(512) NOT NULL, + value bytea, + "timestamp" timestamp with time zone NOT NULL, + execution_date timestamp with time zone NOT NULL, + task_id character varying(250) NOT NULL, + dag_id character varying(250) NOT NULL +); + + +ALTER TABLE public.xcom OWNER TO doadmin; + +-- +-- Name: ab_permission id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission ALTER COLUMN id SET DEFAULT nextval('public.ab_permission_id_seq'::regclass); + + +-- +-- Name: ab_permission_view id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission_view ALTER COLUMN id SET DEFAULT nextval('public.ab_permission_view_id_seq'::regclass); + + +-- +-- Name: ab_permission_view_role id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission_view_role ALTER COLUMN id SET DEFAULT nextval('public.ab_permission_view_role_id_seq'::regclass); + + +-- +-- Name: ab_register_user id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_register_user ALTER COLUMN id SET DEFAULT nextval('public.ab_register_user_id_seq'::regclass); + + +-- +-- Name: ab_role id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_role ALTER COLUMN id SET DEFAULT nextval('public.ab_role_id_seq'::regclass); + + +-- +-- Name: ab_user id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_user ALTER COLUMN id SET DEFAULT nextval('public.ab_user_id_seq'::regclass); + + +-- +-- Name: ab_user_role id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_user_role ALTER COLUMN id SET DEFAULT nextval('public.ab_user_role_id_seq'::regclass); + + +-- +-- Name: ab_view_menu id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_view_menu ALTER COLUMN id SET DEFAULT nextval('public.ab_view_menu_id_seq'::regclass); + + +-- +-- Name: admin_role id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.admin_role ALTER COLUMN id SET DEFAULT nextval('public.admin_role_id_seq'::regclass); + + +-- +-- Name: admin_user id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.admin_user ALTER COLUMN id SET DEFAULT nextval('public.admin_user_id_seq'::regclass); + + +-- +-- Name: admin_user_role id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.admin_user_role ALTER COLUMN id SET DEFAULT nextval('public.admin_user_role_id_seq'::regclass); + + +-- +-- Name: api_key id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.api_key ALTER COLUMN id SET DEFAULT nextval('public.api_key_id_seq'::regclass); + + +-- +-- Name: audit id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.audit ALTER COLUMN id SET DEFAULT nextval('public.audit_id_seq'::regclass); + + +-- +-- Name: certificates id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.certificates ALTER COLUMN id SET DEFAULT nextval('public.certificates_id_seq'::regclass); + + +-- +-- Name: clusters id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.clusters ALTER COLUMN id SET DEFAULT nextval('public.clusters_id_seq'::regclass); + + +-- +-- Name: connection id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.connection ALTER COLUMN id SET DEFAULT nextval('public.connection_id_seq'::regclass); + + +-- +-- Name: contract id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.contract ALTER COLUMN id SET DEFAULT nextval('public.contract_id_seq'::regclass); + + +-- +-- Name: dag_pickle id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.dag_pickle ALTER COLUMN id SET DEFAULT nextval('public.dag_pickle_id_seq'::regclass); + + +-- +-- Name: dag_run id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.dag_run ALTER COLUMN id SET DEFAULT nextval('public.dag_run_id_seq'::regclass); + + +-- +-- Name: devices id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.devices ALTER COLUMN id SET DEFAULT nextval('public.devices_id_seq'::regclass); + + +-- +-- Name: donors id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.donors ALTER COLUMN id SET DEFAULT nextval('public.donors_id_seq'::regclass); + + +-- +-- Name: entity id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.entity ALTER COLUMN id SET DEFAULT nextval('public.entity_id_seq'::regclass); + + +-- +-- Name: entity_manager id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.entity_manager ALTER COLUMN id SET DEFAULT nextval('public.entity_manager_id_seq'::regclass); + + +-- +-- Name: entity_relationship id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.entity_relationship ALTER COLUMN id SET DEFAULT nextval('public.entity_relationship_id_seq'::regclass); + + +-- +-- Name: entity_role id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.entity_role ALTER COLUMN id SET DEFAULT nextval('public.entity_role_id_seq'::regclass); + + +-- +-- Name: import_error id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.import_error ALTER COLUMN id SET DEFAULT nextval('public.import_error_id_seq'::regclass); + + +-- +-- Name: job id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.job ALTER COLUMN id SET DEFAULT nextval('public.job_id_seq'::regclass); + + +-- +-- Name: knex_migrations id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.knex_migrations ALTER COLUMN id SET DEFAULT nextval('public.knex_migrations_id_seq'::regclass); + + +-- +-- Name: knex_migrations_lock index; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.knex_migrations_lock ALTER COLUMN index SET DEFAULT nextval('public.knex_migrations_lock_index_seq'::regclass); + + +-- +-- Name: leaf leaf_id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.leaf ALTER COLUMN leaf_id SET DEFAULT nextval('public.leaf_leaf_id_seq'::regclass); + + +-- +-- Name: leaf_khushi leaf_id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.leaf_khushi ALTER COLUMN leaf_id SET DEFAULT nextval('public.leaf_khushi_leaf_id_seq'::regclass); + + +-- +-- Name: log id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.log ALTER COLUMN id SET DEFAULT nextval('public.log_id_seq'::regclass); + + +-- +-- Name: migrations id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.migrations ALTER COLUMN id SET DEFAULT nextval('public.migrations_id_seq'::regclass); + + +-- +-- Name: organizations id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.organizations ALTER COLUMN id SET DEFAULT nextval('public.organizations_id_seq'::regclass); + + +-- +-- Name: payment id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.payment ALTER COLUMN id SET DEFAULT nextval('public.payment_id_seq'::regclass); + + +-- +-- Name: planter_registrations id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.planter_registrations ALTER COLUMN id SET DEFAULT nextval('public.planter_registrations_id_seq'::regclass); + + +-- +-- Name: region id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.region ALTER COLUMN id SET DEFAULT nextval('public.region_id_seq'::regclass); + + +-- +-- Name: region_type id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.region_type ALTER COLUMN id SET DEFAULT nextval('public.region_type_id_seq'::regclass); + + +-- +-- Name: region_zoom id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.region_zoom ALTER COLUMN id SET DEFAULT nextval('public.region_zoom_id_seq'::regclass); + + +-- +-- Name: sensor_instance id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.sensor_instance ALTER COLUMN id SET DEFAULT nextval('public.sensor_instance_id_seq'::regclass); + + +-- +-- Name: slot_pool id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.slot_pool ALTER COLUMN id SET DEFAULT nextval('public.slot_pool_id_seq'::regclass); + + +-- +-- Name: tag id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.tag ALTER COLUMN id SET DEFAULT nextval('public.tag_id_seq'::regclass); + + +-- +-- Name: task_fail id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.task_fail ALTER COLUMN id SET DEFAULT nextval('public.task_fail_id_seq'::regclass); + + +-- +-- Name: task_reschedule id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.task_reschedule ALTER COLUMN id SET DEFAULT nextval('public.task_reschedule_id_seq'::regclass); + + +-- +-- Name: token id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.token ALTER COLUMN id SET DEFAULT nextval('public.token_id_seq'::regclass); + + +-- +-- Name: transaction id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.transaction ALTER COLUMN id SET DEFAULT nextval('public.transaction_id_seq'::regclass); + + +-- +-- Name: transfer id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.transfer ALTER COLUMN id SET DEFAULT nextval('public.transfer_id_seq'::regclass); + + +-- +-- Name: tree_attributes id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.tree_attributes ALTER COLUMN id SET DEFAULT nextval('public.tree_attributes_id_seq'::regclass); + + +-- +-- Name: tree_name id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.tree_name ALTER COLUMN id SET DEFAULT nextval('public.tree_name_id_seq'::regclass); + + +-- +-- Name: tree_region id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.tree_region ALTER COLUMN id SET DEFAULT nextval('public.tree_region_id_seq'::regclass); + + +-- +-- Name: tree_tag id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.tree_tag ALTER COLUMN id SET DEFAULT nextval('public.tree_tag_id_seq'::regclass); + + +-- +-- Name: variable id; Type: DEFAULT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.variable ALTER COLUMN id SET DEFAULT nextval('public.variable_id_seq'::regclass); + + +-- +-- Name: ab_permission ab_permission_name_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission + ADD CONSTRAINT ab_permission_name_key UNIQUE (name); + + +-- +-- Name: ab_permission ab_permission_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission + ADD CONSTRAINT ab_permission_pkey PRIMARY KEY (id); + + +-- +-- Name: ab_permission_view ab_permission_view_permission_id_view_menu_id_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission_view + ADD CONSTRAINT ab_permission_view_permission_id_view_menu_id_key UNIQUE (permission_id, view_menu_id); + + +-- +-- Name: ab_permission_view ab_permission_view_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission_view + ADD CONSTRAINT ab_permission_view_pkey PRIMARY KEY (id); + + +-- +-- Name: ab_permission_view_role ab_permission_view_role_permission_view_id_role_id_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission_view_role + ADD CONSTRAINT ab_permission_view_role_permission_view_id_role_id_key UNIQUE (permission_view_id, role_id); + + +-- +-- Name: ab_permission_view_role ab_permission_view_role_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission_view_role + ADD CONSTRAINT ab_permission_view_role_pkey PRIMARY KEY (id); + + +-- +-- Name: ab_register_user ab_register_user_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_register_user + ADD CONSTRAINT ab_register_user_pkey PRIMARY KEY (id); + + +-- +-- Name: ab_register_user ab_register_user_username_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_register_user + ADD CONSTRAINT ab_register_user_username_key UNIQUE (username); + + +-- +-- Name: ab_role ab_role_name_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_role + ADD CONSTRAINT ab_role_name_key UNIQUE (name); + + +-- +-- Name: ab_role ab_role_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_role + ADD CONSTRAINT ab_role_pkey PRIMARY KEY (id); + + +-- +-- Name: ab_user ab_user_email_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_user + ADD CONSTRAINT ab_user_email_key UNIQUE (email); + + +-- +-- Name: ab_user ab_user_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_user + ADD CONSTRAINT ab_user_pkey PRIMARY KEY (id); + + +-- +-- Name: ab_user_role ab_user_role_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_user_role + ADD CONSTRAINT ab_user_role_pkey PRIMARY KEY (id); + + +-- +-- Name: ab_user_role ab_user_role_user_id_role_id_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_user_role + ADD CONSTRAINT ab_user_role_user_id_role_id_key UNIQUE (user_id, role_id); + + +-- +-- Name: ab_user ab_user_username_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_user + ADD CONSTRAINT ab_user_username_key UNIQUE (username); + + +-- +-- Name: ab_view_menu ab_view_menu_name_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_view_menu + ADD CONSTRAINT ab_view_menu_name_key UNIQUE (name); + + +-- +-- Name: ab_view_menu ab_view_menu_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_view_menu + ADD CONSTRAINT ab_view_menu_pkey PRIMARY KEY (id); + + +-- +-- Name: admin_role admin_role_identifier_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.admin_role + ADD CONSTRAINT admin_role_identifier_key UNIQUE (identifier); + + +-- +-- Name: admin_role admin_role_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.admin_role + ADD CONSTRAINT admin_role_pkey PRIMARY KEY (id); + + +-- +-- Name: admin_user admin_user_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.admin_user + ADD CONSTRAINT admin_user_pkey PRIMARY KEY (id); + + +-- +-- Name: admin_user_role admin_user_role_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.admin_user_role + ADD CONSTRAINT admin_user_role_pkey PRIMARY KEY (id); + + +-- +-- Name: admin_user_role admin_user_role_un; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.admin_user_role + ADD CONSTRAINT admin_user_role_un UNIQUE (role_id, admin_user_id); + + +-- +-- Name: alembic_version alembic_version_pkc; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.alembic_version + ADD CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num); + + +-- +-- Name: api_key api_key_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.api_key + ADD CONSTRAINT api_key_pkey PRIMARY KEY (id); + + +-- +-- Name: audit audit_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.audit + ADD CONSTRAINT audit_pkey PRIMARY KEY (id); + + +-- +-- Name: celery_taskmeta celery_taskmeta_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.celery_taskmeta + ADD CONSTRAINT celery_taskmeta_pkey PRIMARY KEY (id); + + +-- +-- Name: celery_taskmeta celery_taskmeta_task_id_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.celery_taskmeta + ADD CONSTRAINT celery_taskmeta_task_id_key UNIQUE (task_id); + + +-- +-- Name: celery_tasksetmeta celery_tasksetmeta_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.celery_tasksetmeta + ADD CONSTRAINT celery_tasksetmeta_pkey PRIMARY KEY (id); + + +-- +-- Name: celery_tasksetmeta celery_tasksetmeta_taskset_id_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.celery_tasksetmeta + ADD CONSTRAINT celery_tasksetmeta_taskset_id_key UNIQUE (taskset_id); + + +-- +-- Name: certificates certificates_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.certificates + ADD CONSTRAINT certificates_pkey PRIMARY KEY (id); + + +-- +-- Name: clusters clusters_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.clusters + ADD CONSTRAINT clusters_pkey PRIMARY KEY (id); + + +-- +-- Name: connection connection_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.connection + ADD CONSTRAINT connection_pkey PRIMARY KEY (id); + + +-- +-- Name: contract contract_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.contract + ADD CONSTRAINT contract_pkey PRIMARY KEY (id); + + +-- +-- Name: dag_code dag_code_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.dag_code + ADD CONSTRAINT dag_code_pkey PRIMARY KEY (fileloc_hash); + + +-- +-- Name: dag_pickle dag_pickle_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.dag_pickle + ADD CONSTRAINT dag_pickle_pkey PRIMARY KEY (id); + + +-- +-- Name: dag dag_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.dag + ADD CONSTRAINT dag_pkey PRIMARY KEY (dag_id); + + +-- +-- Name: dag_run dag_run_dag_id_execution_date_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.dag_run + ADD CONSTRAINT dag_run_dag_id_execution_date_key UNIQUE (dag_id, execution_date); + + +-- +-- Name: dag_run dag_run_dag_id_run_id_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.dag_run + ADD CONSTRAINT dag_run_dag_id_run_id_key UNIQUE (dag_id, run_id); + + +-- +-- Name: dag_run dag_run_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.dag_run + ADD CONSTRAINT dag_run_pkey PRIMARY KEY (id); + + +-- +-- Name: dag_tag dag_tag_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.dag_tag + ADD CONSTRAINT dag_tag_pkey PRIMARY KEY (name, dag_id); + + +-- +-- Name: devices devices_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.devices + ADD CONSTRAINT devices_pkey PRIMARY KEY (id); + + +-- +-- Name: domain_event domain_event_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.domain_event + ADD CONSTRAINT domain_event_pkey PRIMARY KEY (id, status, created_at); + + +-- +-- Name: domain_event_handled domain_event_handled_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.domain_event_handled + ADD CONSTRAINT domain_event_handled_pkey PRIMARY KEY (id, status, created_at); + + +-- +-- Name: domain_event_handled_2021 domain_event_handled_2021_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.domain_event_handled_2021 + ADD CONSTRAINT domain_event_handled_2021_pkey PRIMARY KEY (id, status, created_at); + + +-- +-- Name: domain_event_handled_2022 domain_event_handled_2022_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.domain_event_handled_2022 + ADD CONSTRAINT domain_event_handled_2022_pkey PRIMARY KEY (id, status, created_at); + + +-- +-- Name: domain_event_handled_2023 domain_event_handled_2023_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.domain_event_handled_2023 + ADD CONSTRAINT domain_event_handled_2023_pkey PRIMARY KEY (id, status, created_at); + + +-- +-- Name: domain_event_raised domain_event_raised_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.domain_event_raised + ADD CONSTRAINT domain_event_raised_pkey PRIMARY KEY (id, status, created_at); + + +-- +-- Name: domain_event_received domain_event_received_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.domain_event_received + ADD CONSTRAINT domain_event_received_pkey PRIMARY KEY (id, status, created_at); + + +-- +-- Name: domain_event_sent domain_event_sent_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.domain_event_sent + ADD CONSTRAINT domain_event_sent_pkey PRIMARY KEY (id, status, created_at); + + +-- +-- Name: domain_event_sent_2021 domain_event_sent_2021_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.domain_event_sent_2021 + ADD CONSTRAINT domain_event_sent_2021_pkey PRIMARY KEY (id, status, created_at); + + +-- +-- Name: domain_event_sent_2022 domain_event_sent_2022_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.domain_event_sent_2022 + ADD CONSTRAINT domain_event_sent_2022_pkey PRIMARY KEY (id, status, created_at); + + +-- +-- Name: domain_event_sent_2023 domain_event_sent_2023_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.domain_event_sent_2023 + ADD CONSTRAINT domain_event_sent_2023_pkey PRIMARY KEY (id, status, created_at); + + +-- +-- Name: donors donors_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.donors + ADD CONSTRAINT donors_pkey PRIMARY KEY (id); + + +-- +-- Name: entity_manager entity_manager_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.entity_manager + ADD CONSTRAINT entity_manager_pkey PRIMARY KEY (id); + + +-- +-- Name: entity entity_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.entity + ADD CONSTRAINT entity_pkey PRIMARY KEY (id); + + +-- +-- Name: entity_relationship entity_relationship_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.entity_relationship + ADD CONSTRAINT entity_relationship_pkey PRIMARY KEY (id); + + +-- +-- Name: entity_role entity_role_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.entity_role + ADD CONSTRAINT entity_role_pkey PRIMARY KEY (id); + + +-- +-- Name: import_error import_error_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.import_error + ADD CONSTRAINT import_error_pkey PRIMARY KEY (id); + + +-- +-- Name: job job_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.job + ADD CONSTRAINT job_pkey PRIMARY KEY (id); + + +-- +-- Name: knex_migrations_lock knex_migrations_lock_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.knex_migrations_lock + ADD CONSTRAINT knex_migrations_lock_pkey PRIMARY KEY (index); + + +-- +-- Name: knex_migrations knex_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.knex_migrations + ADD CONSTRAINT knex_migrations_pkey PRIMARY KEY (id); + + +-- +-- Name: leaf_khushi leaf_khushi_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.leaf_khushi + ADD CONSTRAINT leaf_khushi_pkey PRIMARY KEY (leaf_id); + + +-- +-- Name: leaf leaf_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.leaf + ADD CONSTRAINT leaf_pkey PRIMARY KEY (leaf_id); + + +-- +-- Name: locations locations_id_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.locations + ADD CONSTRAINT locations_id_pkey PRIMARY KEY (id); + + +-- +-- Name: log log_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.log + ADD CONSTRAINT log_pkey PRIMARY KEY (id); + + +-- +-- Name: migrations migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.migrations + ADD CONSTRAINT migrations_pkey PRIMARY KEY (id); + + +-- +-- Name: migrations_state migrations_state_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.migrations_state + ADD CONSTRAINT migrations_state_pkey PRIMARY KEY (key); + + +-- +-- Name: notes notes_id_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.notes + ADD CONSTRAINT notes_id_pkey PRIMARY KEY (id); + + +-- +-- Name: organizations organizations_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.organizations + ADD CONSTRAINT organizations_pkey PRIMARY KEY (id); + + +-- +-- Name: payment payment_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.payment + ADD CONSTRAINT payment_pkey PRIMARY KEY (id); + + +-- +-- Name: pending_update pending_update_id_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.pending_update + ADD CONSTRAINT pending_update_id_pkey PRIMARY KEY (id); + + +-- +-- Name: photos photos_id_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.photos + ADD CONSTRAINT photos_id_pkey PRIMARY KEY (id); + + +-- +-- Name: xcom pk_xcom; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.xcom + ADD CONSTRAINT pk_xcom PRIMARY KEY (dag_id, task_id, key, execution_date); + + +-- +-- Name: planter planter_id_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.planter + ADD CONSTRAINT planter_id_key PRIMARY KEY (id); + + +-- +-- Name: planter_registrations planter_registrations_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.planter_registrations + ADD CONSTRAINT planter_registrations_pkey PRIMARY KEY (id); + + +-- +-- Name: region region_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.region + ADD CONSTRAINT region_pkey PRIMARY KEY (id); + + +-- +-- Name: region_type region_type_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.region_type + ADD CONSTRAINT region_type_pkey PRIMARY KEY (id); + + +-- +-- Name: rendered_task_instance_fields rendered_task_instance_fields_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.rendered_task_instance_fields + ADD CONSTRAINT rendered_task_instance_fields_pkey PRIMARY KEY (dag_id, task_id, execution_date); + + +-- +-- Name: sensor_instance sensor_instance_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.sensor_instance + ADD CONSTRAINT sensor_instance_pkey PRIMARY KEY (id); + + +-- +-- Name: serialized_dag serialized_dag_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.serialized_dag + ADD CONSTRAINT serialized_dag_pkey PRIMARY KEY (dag_id); + + +-- +-- Name: sla_miss sla_miss_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.sla_miss + ADD CONSTRAINT sla_miss_pkey PRIMARY KEY (task_id, dag_id, execution_date); + + +-- +-- Name: slot_pool slot_pool_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.slot_pool + ADD CONSTRAINT slot_pool_pkey PRIMARY KEY (id); + + +-- +-- Name: slot_pool slot_pool_pool_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.slot_pool + ADD CONSTRAINT slot_pool_pool_key UNIQUE (pool); + + +-- +-- Name: survey survey_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.survey + ADD CONSTRAINT survey_pkey PRIMARY KEY (id); + + +-- +-- Name: survey_question survey_question_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.survey_question + ADD CONSTRAINT survey_question_pkey PRIMARY KEY (id); + + +-- +-- Name: tag tag_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.tag + ADD CONSTRAINT tag_pkey PRIMARY KEY (id); + + +-- +-- Name: task_fail task_fail_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.task_fail + ADD CONSTRAINT task_fail_pkey PRIMARY KEY (id); + + +-- +-- Name: task_instance task_instance_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.task_instance + ADD CONSTRAINT task_instance_pkey PRIMARY KEY (task_id, dag_id, execution_date); + + +-- +-- Name: task_reschedule task_reschedule_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.task_reschedule + ADD CONSTRAINT task_reschedule_pkey PRIMARY KEY (id); + + +-- +-- Name: token token_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.token + ADD CONSTRAINT token_pkey PRIMARY KEY (id); + + +-- +-- Name: trading.transaction trading.transaction_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public."trading.transaction" + ADD CONSTRAINT "trading.transaction_pkey" PRIMARY KEY (id); + + +-- +-- Name: transaction transaction_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.transaction + ADD CONSTRAINT transaction_pkey PRIMARY KEY (id); + + +-- +-- Name: transfer transfer_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.transfer + ADD CONSTRAINT transfer_pkey PRIMARY KEY (id); + + +-- +-- Name: trees tree_id_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.trees + ADD CONSTRAINT tree_id_key PRIMARY KEY (id); + + +-- +-- Name: tree_name tree_name_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.tree_name + ADD CONSTRAINT tree_name_pkey PRIMARY KEY (id); + + +-- +-- Name: tree_species tree_species_pk; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.tree_species + ADD CONSTRAINT tree_species_pk PRIMARY KEY (id); + + +-- +-- Name: tree_tag tree_tag_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.tree_tag + ADD CONSTRAINT tree_tag_pkey PRIMARY KEY (id); + + +-- +-- Name: connection unique_conn_id; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.connection + ADD CONSTRAINT unique_conn_id UNIQUE (conn_id); + + +-- +-- Name: variable variable_key_key; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.variable + ADD CONSTRAINT variable_key_key UNIQUE (key); + + +-- +-- Name: variable variable_pkey; Type: CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.variable + ADD CONSTRAINT variable_pkey PRIMARY KEY (id); + + +-- +-- Name: active_tree_region_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE UNIQUE INDEX active_tree_region_id_idx ON public.active_tree_region USING btree (id); + + +-- +-- Name: active_tree_region_region_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX active_tree_region_region_id_idx ON public.active_tree_region USING btree (region_id); + + +-- +-- Name: active_tree_region_zoom_level_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX active_tree_region_zoom_level_idx ON public.active_tree_region USING btree (zoom_level); + + +-- +-- Name: admin_user_un; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE UNIQUE INDEX admin_user_un ON public.admin_user USING btree (user_name) WHERE (active = true); + + +-- +-- Name: dag_id_state; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX dag_id_state ON public.dag_run USING btree (dag_id, state); + + +-- +-- Name: devices_android_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE UNIQUE INDEX devices_android_id_idx ON public.devices USING btree (android_id); + + +-- +-- Name: event_pyld_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX event_pyld_idx ON ONLY public.domain_event USING gin (payload jsonb_path_ops); + + +-- +-- Name: domain_event_handled_payload_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_handled_payload_idx ON ONLY public.domain_event_handled USING gin (payload jsonb_path_ops); + + +-- +-- Name: domain_event_handled_2021_payload_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_handled_2021_payload_idx ON public.domain_event_handled_2021 USING gin (payload jsonb_path_ops); + + +-- +-- Name: event_status_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX event_status_idx ON ONLY public.domain_event USING btree (status); + + +-- +-- Name: domain_event_handled_status_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_handled_status_idx ON ONLY public.domain_event_handled USING btree (status); + + +-- +-- Name: domain_event_handled_2021_status_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_handled_2021_status_idx ON public.domain_event_handled_2021 USING btree (status); + + +-- +-- Name: domain_event_handled_2022_payload_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_handled_2022_payload_idx ON public.domain_event_handled_2022 USING gin (payload jsonb_path_ops); + + +-- +-- Name: domain_event_handled_2022_status_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_handled_2022_status_idx ON public.domain_event_handled_2022 USING btree (status); + + +-- +-- Name: domain_event_handled_2023_payload_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_handled_2023_payload_idx ON public.domain_event_handled_2023 USING gin (payload jsonb_path_ops); + + +-- +-- Name: domain_event_handled_2023_status_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_handled_2023_status_idx ON public.domain_event_handled_2023 USING btree (status); + + +-- +-- Name: domain_event_raised_payload_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_raised_payload_idx ON public.domain_event_raised USING gin (payload jsonb_path_ops); + + +-- +-- Name: domain_event_raised_status_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_raised_status_idx ON public.domain_event_raised USING btree (status); + + +-- +-- Name: domain_event_received_payload_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_received_payload_idx ON public.domain_event_received USING gin (payload jsonb_path_ops); + + +-- +-- Name: domain_event_received_status_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_received_status_idx ON public.domain_event_received USING btree (status); + + +-- +-- Name: domain_event_sent_payload_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_sent_payload_idx ON ONLY public.domain_event_sent USING gin (payload jsonb_path_ops); + + +-- +-- Name: domain_event_sent_2021_payload_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_sent_2021_payload_idx ON public.domain_event_sent_2021 USING gin (payload jsonb_path_ops); + + +-- +-- Name: domain_event_sent_status_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_sent_status_idx ON ONLY public.domain_event_sent USING btree (status); + + +-- +-- Name: domain_event_sent_2021_status_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_sent_2021_status_idx ON public.domain_event_sent_2021 USING btree (status); + + +-- +-- Name: domain_event_sent_2022_payload_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_sent_2022_payload_idx ON public.domain_event_sent_2022 USING gin (payload jsonb_path_ops); + + +-- +-- Name: domain_event_sent_2022_status_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_sent_2022_status_idx ON public.domain_event_sent_2022 USING btree (status); + + +-- +-- Name: domain_event_sent_2023_payload_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_sent_2023_payload_idx ON public.domain_event_sent_2023 USING gin (payload jsonb_path_ops); + + +-- +-- Name: domain_event_sent_2023_status_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX domain_event_sent_2023_status_idx ON public.domain_event_sent_2023 USING btree (status); + + +-- +-- Name: entity_wallet_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE UNIQUE INDEX entity_wallet_idx ON public.entity USING btree (wallet); + + +-- +-- Name: estimated_geometric_location_ind_gist; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX estimated_geometric_location_ind_gist ON public.trees USING gist (estimated_geometric_location); + + +-- +-- Name: idx_fileloc_hash; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX idx_fileloc_hash ON public.serialized_dag USING btree (fileloc_hash); + + +-- +-- Name: idx_job_state_heartbeat; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX idx_job_state_heartbeat ON public.job USING btree (state, latest_heartbeat); + + +-- +-- Name: idx_last_scheduling_decision; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX idx_last_scheduling_decision ON public.dag_run USING btree (last_scheduling_decision); + + +-- +-- Name: idx_log_dag; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX idx_log_dag ON public.log USING btree (dag_id); + + +-- +-- Name: idx_next_dagrun_create_after; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX idx_next_dagrun_create_after ON public.dag USING btree (next_dagrun_create_after); + + +-- +-- Name: idx_root_dag_id; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX idx_root_dag_id ON public.dag USING btree (root_dag_id); + + +-- +-- Name: idx_task_fail_dag_task_date; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX idx_task_fail_dag_task_date ON public.task_fail USING btree (dag_id, task_id, execution_date); + + +-- +-- Name: idx_task_reschedule_dag_task_date; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX idx_task_reschedule_dag_task_date ON public.task_reschedule USING btree (dag_id, task_id, execution_date); + + +-- +-- Name: ix_anonymous_entities_index; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX ix_anonymous_entities_index ON public.anonymous_entities USING btree (index); + + +-- +-- Name: ix_anonymous_planters_index; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX ix_anonymous_planters_index ON public.anonymous_planters USING btree (index); + + +-- +-- Name: ix_anonymous_trees_index; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX ix_anonymous_trees_index ON public.anonymous_trees USING btree (index); + + +-- +-- Name: ix_entities_index; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX ix_entities_index ON public.entities USING btree (index); + + +-- +-- Name: ix_planters_index; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX ix_planters_index ON public.planters USING btree (index); + + +-- +-- Name: job_type_heart; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX job_type_heart ON public.job USING btree (job_type, latest_heartbeat); + + +-- +-- Name: payment_receiver_entity_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX payment_receiver_entity_id_idx ON public.payment USING btree (receiver_entity_id); + + +-- +-- Name: payment_sender_entity_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX payment_sender_entity_id_idx ON public.payment USING btree (sender_entity_id); + + +-- +-- Name: region_gemo_index_gist; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX region_gemo_index_gist ON public.region USING gist (geom); + + +-- +-- Name: region_zoom_region_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX region_zoom_region_id_idx ON public.region_zoom USING btree (region_id); + + +-- +-- Name: si_hashcode; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX si_hashcode ON public.sensor_instance USING btree (hashcode); + + +-- +-- Name: si_shardcode; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX si_shardcode ON public.sensor_instance USING btree (shardcode); + + +-- +-- Name: si_state_shard; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX si_state_shard ON public.sensor_instance USING btree (state, shardcode); + + +-- +-- Name: si_updated_at; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX si_updated_at ON public.sensor_instance USING btree (updated_at); + + +-- +-- Name: sm_dag; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX sm_dag ON public.sla_miss USING btree (dag_id); + + +-- +-- Name: ti_dag_date; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX ti_dag_date ON public.task_instance USING btree (dag_id, execution_date); + + +-- +-- Name: ti_dag_state; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX ti_dag_state ON public.task_instance USING btree (dag_id, state); + + +-- +-- Name: ti_job_id; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX ti_job_id ON public.task_instance USING btree (job_id); + + +-- +-- Name: ti_pool; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX ti_pool ON public.task_instance USING btree (pool, state, priority_weight); + + +-- +-- Name: ti_primary_key; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE UNIQUE INDEX ti_primary_key ON public.sensor_instance USING btree (dag_id, task_id, execution_date); + + +-- +-- Name: ti_state; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX ti_state ON public.task_instance USING btree (state); + + +-- +-- Name: ti_state_lkp; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX ti_state_lkp ON public.task_instance USING btree (dag_id, task_id, execution_date, state); + + +-- +-- Name: token_entity_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX token_entity_id_idx ON public.token USING btree (entity_id); + + +-- +-- Name: token_trees_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX token_trees_id_idx ON public.token USING btree (tree_id); + + +-- +-- Name: transaction_receiver_entity_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX transaction_receiver_entity_id_idx ON public.transaction USING btree (receiver_entity_id); + + +-- +-- Name: transaction_sender_entity_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX transaction_sender_entity_id_idx ON public.transaction USING btree (sender_entity_id); + + +-- +-- Name: tree_name_name_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE UNIQUE INDEX tree_name_name_idx ON public.tree_name USING btree (name); + + +-- +-- Name: trees_approved_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX trees_approved_idx ON public.trees USING btree (approved); + + +-- +-- Name: trees_name_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE UNIQUE INDEX trees_name_idx ON public.trees USING btree (name); + + +-- +-- Name: trees_payment_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX trees_payment_id_idx ON public.trees USING btree (payment_id); + + +-- +-- Name: trees_planter_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX trees_planter_id_idx ON public.trees USING btree (planter_id); + + +-- +-- Name: trees_planting_organization_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX trees_planting_organization_id_idx ON public.trees USING btree (planting_organization_id); + + +-- +-- Name: trees_species_id_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE INDEX trees_species_id_idx ON public.trees USING btree (species_id); + + +-- +-- Name: trees_uuid_idx; Type: INDEX; Schema: public; Owner: doadmin +-- + +CREATE UNIQUE INDEX trees_uuid_idx ON public.trees USING btree (uuid); + + +-- +-- Name: domain_event_handled_2021_payload_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_handled_payload_idx ATTACH PARTITION public.domain_event_handled_2021_payload_idx; + + +-- +-- Name: domain_event_handled_2021_pkey; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_handled_pkey ATTACH PARTITION public.domain_event_handled_2021_pkey; + + +-- +-- Name: domain_event_handled_2021_status_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_handled_status_idx ATTACH PARTITION public.domain_event_handled_2021_status_idx; + + +-- +-- Name: domain_event_handled_2022_payload_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_handled_payload_idx ATTACH PARTITION public.domain_event_handled_2022_payload_idx; + + +-- +-- Name: domain_event_handled_2022_pkey; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_handled_pkey ATTACH PARTITION public.domain_event_handled_2022_pkey; + + +-- +-- Name: domain_event_handled_2022_status_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_handled_status_idx ATTACH PARTITION public.domain_event_handled_2022_status_idx; + + +-- +-- Name: domain_event_handled_2023_payload_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_handled_payload_idx ATTACH PARTITION public.domain_event_handled_2023_payload_idx; + + +-- +-- Name: domain_event_handled_2023_pkey; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_handled_pkey ATTACH PARTITION public.domain_event_handled_2023_pkey; + + +-- +-- Name: domain_event_handled_2023_status_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_handled_status_idx ATTACH PARTITION public.domain_event_handled_2023_status_idx; + + +-- +-- Name: domain_event_handled_payload_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.event_pyld_idx ATTACH PARTITION public.domain_event_handled_payload_idx; + + +-- +-- Name: domain_event_handled_pkey; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_pkey ATTACH PARTITION public.domain_event_handled_pkey; + + +-- +-- Name: domain_event_handled_status_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.event_status_idx ATTACH PARTITION public.domain_event_handled_status_idx; + + +-- +-- Name: domain_event_raised_payload_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.event_pyld_idx ATTACH PARTITION public.domain_event_raised_payload_idx; + + +-- +-- Name: domain_event_raised_pkey; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_pkey ATTACH PARTITION public.domain_event_raised_pkey; + + +-- +-- Name: domain_event_raised_status_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.event_status_idx ATTACH PARTITION public.domain_event_raised_status_idx; + + +-- +-- Name: domain_event_received_payload_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.event_pyld_idx ATTACH PARTITION public.domain_event_received_payload_idx; + + +-- +-- Name: domain_event_received_pkey; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_pkey ATTACH PARTITION public.domain_event_received_pkey; + + +-- +-- Name: domain_event_received_status_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.event_status_idx ATTACH PARTITION public.domain_event_received_status_idx; + + +-- +-- Name: domain_event_sent_2021_payload_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_sent_payload_idx ATTACH PARTITION public.domain_event_sent_2021_payload_idx; + + +-- +-- Name: domain_event_sent_2021_pkey; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_sent_pkey ATTACH PARTITION public.domain_event_sent_2021_pkey; + + +-- +-- Name: domain_event_sent_2021_status_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_sent_status_idx ATTACH PARTITION public.domain_event_sent_2021_status_idx; + + +-- +-- Name: domain_event_sent_2022_payload_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_sent_payload_idx ATTACH PARTITION public.domain_event_sent_2022_payload_idx; + + +-- +-- Name: domain_event_sent_2022_pkey; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_sent_pkey ATTACH PARTITION public.domain_event_sent_2022_pkey; + + +-- +-- Name: domain_event_sent_2022_status_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_sent_status_idx ATTACH PARTITION public.domain_event_sent_2022_status_idx; + + +-- +-- Name: domain_event_sent_2023_payload_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_sent_payload_idx ATTACH PARTITION public.domain_event_sent_2023_payload_idx; + + +-- +-- Name: domain_event_sent_2023_pkey; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_sent_pkey ATTACH PARTITION public.domain_event_sent_2023_pkey; + + +-- +-- Name: domain_event_sent_2023_status_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_sent_status_idx ATTACH PARTITION public.domain_event_sent_2023_status_idx; + + +-- +-- Name: domain_event_sent_payload_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.event_pyld_idx ATTACH PARTITION public.domain_event_sent_payload_idx; + + +-- +-- Name: domain_event_sent_pkey; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.domain_event_pkey ATTACH PARTITION public.domain_event_sent_pkey; + + +-- +-- Name: domain_event_sent_status_idx; Type: INDEX ATTACH; Schema: public; Owner: doadmin +-- + +ALTER INDEX public.event_status_idx ATTACH PARTITION public.domain_event_sent_status_idx; + + +-- +-- Name: token token_transaction_trigger; Type: TRIGGER; Schema: public; Owner: doadmin +-- + +CREATE TRIGGER token_transaction_trigger AFTER UPDATE ON public.token FOR EACH ROW EXECUTE PROCEDURE public.token_transaction_insert(); + + +-- +-- Name: ab_permission_view ab_permission_view_permission_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission_view + ADD CONSTRAINT ab_permission_view_permission_id_fkey FOREIGN KEY (permission_id) REFERENCES public.ab_permission(id); + + +-- +-- Name: ab_permission_view_role ab_permission_view_role_permission_view_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission_view_role + ADD CONSTRAINT ab_permission_view_role_permission_view_id_fkey FOREIGN KEY (permission_view_id) REFERENCES public.ab_permission_view(id); + + +-- +-- Name: ab_permission_view_role ab_permission_view_role_role_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission_view_role + ADD CONSTRAINT ab_permission_view_role_role_id_fkey FOREIGN KEY (role_id) REFERENCES public.ab_role(id); + + +-- +-- Name: ab_permission_view ab_permission_view_view_menu_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_permission_view + ADD CONSTRAINT ab_permission_view_view_menu_id_fkey FOREIGN KEY (view_menu_id) REFERENCES public.ab_view_menu(id); + + +-- +-- Name: ab_user ab_user_changed_by_fk_fkey; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_user + ADD CONSTRAINT ab_user_changed_by_fk_fkey FOREIGN KEY (changed_by_fk) REFERENCES public.ab_user(id); + + +-- +-- Name: ab_user ab_user_created_by_fk_fkey; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_user + ADD CONSTRAINT ab_user_created_by_fk_fkey FOREIGN KEY (created_by_fk) REFERENCES public.ab_user(id); + + +-- +-- Name: ab_user_role ab_user_role_role_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_user_role + ADD CONSTRAINT ab_user_role_role_id_fkey FOREIGN KEY (role_id) REFERENCES public.ab_role(id); + + +-- +-- Name: ab_user_role ab_user_role_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.ab_user_role + ADD CONSTRAINT ab_user_role_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.ab_user(id); + + +-- +-- Name: dag_tag dag_tag_dag_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.dag_tag + ADD CONSTRAINT dag_tag_dag_id_fkey FOREIGN KEY (dag_id) REFERENCES public.dag(dag_id); + + +-- +-- Name: entity_manager entity_manager_child_entity_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.entity_manager + ADD CONSTRAINT entity_manager_child_entity_id_fk FOREIGN KEY (child_entity_id) REFERENCES public.entity(id); + + +-- +-- Name: entity_manager entity_manager_parent_entity_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.entity_manager + ADD CONSTRAINT entity_manager_parent_entity_id_fk FOREIGN KEY (parent_entity_id) REFERENCES public.entity(id); + + +-- +-- Name: entity_role entity_role_entity_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.entity_role + ADD CONSTRAINT entity_role_entity_id_fk FOREIGN KEY (entity_id) REFERENCES public.entity(id); + + +-- +-- Name: locations locations_planter_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.locations + ADD CONSTRAINT locations_planter_id_fk FOREIGN KEY (planter_id) REFERENCES public.planter(id); + + +-- +-- Name: notes notes_planter_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.notes + ADD CONSTRAINT notes_planter_id_fk FOREIGN KEY (planter_id) REFERENCES public.planter(id); + + +-- +-- Name: payment payment_entity_receiver_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.payment + ADD CONSTRAINT payment_entity_receiver_id_fk FOREIGN KEY (receiver_entity_id) REFERENCES public.entity(id); + + +-- +-- Name: payment payment_entity_sender_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.payment + ADD CONSTRAINT payment_entity_sender_id_fk FOREIGN KEY (sender_entity_id) REFERENCES public.entity(id); + + +-- +-- Name: pending_update pending_update_planter_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.pending_update + ADD CONSTRAINT pending_update_planter_id_fk FOREIGN KEY (planter_id) REFERENCES public.planter(id); + + +-- +-- Name: planter planter_organization_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.planter + ADD CONSTRAINT planter_organization_id_fk FOREIGN KEY (organization_id) REFERENCES public.entity(id); + + +-- +-- Name: planter planter_person_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.planter + ADD CONSTRAINT planter_person_id_fk FOREIGN KEY (person_id) REFERENCES public.entity(id); + + +-- +-- Name: survey_question survey_question_survey_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.survey_question + ADD CONSTRAINT survey_question_survey_id_fkey FOREIGN KEY (survey_id) REFERENCES public.survey(id); + + +-- +-- Name: task_reschedule task_reschedule_dag_task_date_fkey; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.task_reschedule + ADD CONSTRAINT task_reschedule_dag_task_date_fkey FOREIGN KEY (task_id, dag_id, execution_date) REFERENCES public.task_instance(task_id, dag_id, execution_date) ON DELETE CASCADE; + + +-- +-- Name: token token_entity_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.token + ADD CONSTRAINT token_entity_id_fk FOREIGN KEY (entity_id) REFERENCES public.entity(id); + + +-- +-- Name: token token_tree_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.token + ADD CONSTRAINT token_tree_id_fk FOREIGN KEY (tree_id) REFERENCES public.trees(id); + + +-- +-- Name: transaction transaction_entity_receiver_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.transaction + ADD CONSTRAINT transaction_entity_receiver_id_fk FOREIGN KEY (receiver_entity_id) REFERENCES public.entity(id); + + +-- +-- Name: transaction transaction_entity_sender_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.transaction + ADD CONSTRAINT transaction_entity_sender_id_fk FOREIGN KEY (sender_entity_id) REFERENCES public.entity(id); + + +-- +-- Name: transaction transaction_token_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.transaction + ADD CONSTRAINT transaction_token_id_fk FOREIGN KEY (token_id) REFERENCES public.token(id); + + +-- +-- Name: trees trees_payment_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: doadmin +-- + +ALTER TABLE ONLY public.trees + ADD CONSTRAINT trees_payment_id_fk FOREIGN KEY (payment_id) REFERENCES public.payment(id); + + +-- +-- Name: TABLE trees; Type: ACL; Schema: public; Owner: doadmin +-- + +GRANT SELECT,INSERT,UPDATE ON TABLE public.trees TO treetracker; + + +-- +-- Name: TABLE tag; Type: ACL; Schema: public; Owner: doadmin +-- + +GRANT SELECT,INSERT,UPDATE ON TABLE public.tag TO treetracker; + + +-- +-- PostgreSQL database dump complete +-- + From 9777575c4e265db99f20431dc1143beea7784925 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Thu, 24 Feb 2022 17:54:50 -0800 Subject: [PATCH 02/44] ci(pr): add e2e tests to workflow --- .github/workflows/pull-request-ci.yml | 31 ++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index e0fea27b..f3413d81 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -9,12 +9,30 @@ on: - main env: project-directory: ./ - DATABASE_URL: ${{ secrets.DATABASE_URL }} + DATABASE_URL: postgresql://postgres:postgres@postgres/postgres jobs: test: name: Run all tests runs-on: ubuntu-latest + container: node:16.12.0 + + # Service containers to run with `container-job` + services: + # Label used to access the service container + postgres: + # Docker Hub image + image: postgis/postgis + # Provide the password for postgres + env: + POSTGRES_PASSWORD: postgres + # Set health checks to wait until postgres has started + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + steps: - uses: actions/checkout@v2 - name: Use Node.js 16.x @@ -31,5 +49,16 @@ jobs: - name: Eslint run: npm run lint + - name: install psql + run: | + apt-get update + apt-get install --yes --no-install-recommends postgresql-client + + - name: Prepare DB + run: psql postgresql://postgres:postgres@postgres/postgres < db.sql + - name: run tests run: npm test + + - name: run e2e tests + run: npm run test-e2e From 49e2fc399be80de8a6cbca2f2f94d2c4b3aa40ed Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Thu, 24 Feb 2022 17:59:51 -0800 Subject: [PATCH 03/44] ci(pr): set docker postgis image version --- .github/workflows/pull-request-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index f3413d81..4b0892e7 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -22,7 +22,7 @@ jobs: # Label used to access the service container postgres: # Docker Hub image - image: postgis/postgis + image: postgis/postgis:11-2.5-alpine # Provide the password for postgres env: POSTGRES_PASSWORD: postgres From 8b2dc2ef1816e1a50e5cfd15ce4c0fee8c26c0c7 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Thu, 24 Feb 2022 18:00:24 -0800 Subject: [PATCH 04/44] ci(pr): ignore npm install scripts --- .github/workflows/pull-request-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index 4b0892e7..f771e38c 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -41,7 +41,7 @@ jobs: node-version: '16.x' - name: npm clean install - run: npm ci + run: npm ci --ignore-scripts - name: Typescript compiles run: npm run build From 1e6a6856212dd38ed04dd987b543ae7878d29716 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Thu, 24 Feb 2022 18:12:11 -0800 Subject: [PATCH 05/44] chore: add user to db dump --- db.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/db.sql b/db.sql index 0498d3dd..1838da83 100644 --- a/db.sql +++ b/db.sql @@ -5,6 +5,7 @@ -- Dumped from database version 11.14 -- Dumped by pg_dump version 11.15 (Ubuntu 11.15-1.pgdg20.04+1) +CREATE USER doadmin WITH PASSWORD 'postgres'; SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; From c0acfd79863b8f47b1a97d953ac3752238976050 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Fri, 25 Feb 2022 14:21:51 -0800 Subject: [PATCH 06/44] build(test): create @mocks path alias --- jest.config.js | 1 + tsconfig.base.json | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/jest.config.js b/jest.config.js index 547adabe..3625d3d4 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,6 +6,7 @@ module.exports = { modulePaths: ['server/'], moduleNameMapper: { '@test/(.*)': ['/.jest/$1', '/__tests__/$1'], + '@mocks/(.*)': ['/docs/api/spec/examples/$1'], }, globalSetup: '/.jest/globalSetup.ts', setupFilesAfterEnv: ['/.jest/setupFile.ts'], diff --git a/tsconfig.base.json b/tsconfig.base.json index 97f5af22..a5f2c97f 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -49,7 +49,9 @@ /* Module Resolution Options */ // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ "baseUrl": "server" /* Base directory to resolve non-absolute module names. */, - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + "paths": { + "@mocks/*": ["../docs/api/spec/examples/*"] + } /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */, // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ // "types": [], /* Type declaration files to be included in compilation. */ From c5f19f9c970aff09d661ea408a042c48fc5f385c Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Fri, 25 Feb 2022 14:22:39 -0800 Subject: [PATCH 07/44] refactor: create TableNames enum --- server/infra/database/knex.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/infra/database/knex.ts b/server/infra/database/knex.ts index 04477179..47c75854 100644 --- a/server/infra/database/knex.ts +++ b/server/infra/database/knex.ts @@ -21,3 +21,7 @@ if (process.env.DATABASE_SCHEMA) { log.debug(knexConfig.searchPath); export default knex(knexConfig); + +export const enum TableNames { + Trees = 'trees', +} From 9d39e72ce8c9bb0bf0064f32b85137d216c3e085 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Fri, 25 Feb 2022 14:23:50 -0800 Subject: [PATCH 08/44] test(wip): trees.spec uses mock data test(mock): update mock tree data --- __tests__/e2e/trees.spec.ts | 100 +++++++++++------------ docs/api/spec/examples/trees/912681.json | 48 +++++++++++ 2 files changed, 95 insertions(+), 53 deletions(-) create mode 100644 docs/api/spec/examples/trees/912681.json diff --git a/__tests__/e2e/trees.spec.ts b/__tests__/e2e/trees.spec.ts index 49831fd8..b740fba1 100644 --- a/__tests__/e2e/trees.spec.ts +++ b/__tests__/e2e/trees.spec.ts @@ -1,67 +1,61 @@ +import exampleTree from '@mocks/trees/912681.json'; import supertest from 'supertest'; +import knex, { TableNames } from 'infra/database/knex'; import app from '../../server/app'; -describe('trees', () => { - it('trees/{id}', async () => { - const response = await supertest(app).get('/trees/912681'); - expect(response.status).toBe(200); - expect(response.body).toMatchObject({ - id: 912681, - lat: expect.anything(), - lon: expect.anything(), - }); +beforeAll(async () => { + await knex(TableNames.Trees).insert(exampleTree); +}); + +it('trees/{id}', async () => { + const response = await supertest(app).get(`/trees/${exampleTree.id}`); + expect(response.status).toBe(200); + expect(response.body).toMatchObject({ + id: exampleTree.id, + lat: expect.anything(), + lon: expect.anything(), }); +}); + +it('Unknown tree', async () => { + const response = await supertest(app).get('/trees/1'); + expect(response.status).toBe(404); +}); - it('Unknown tree', async () => { - const response = await supertest(app).get('/trees/1'); - expect(response.status).toBe(404); +it('trees?limit=1&offset=0', async () => { + const response = await supertest(app).get('/trees?limit=1&offset=0'); + expect(response.status).toBe(200); + expect(response.body).toMatchObject({ + trees: expect.anything(), }); +}); - it('trees?limit=1&offset=0', async () => { - const response = await supertest(app).get('/trees?limit=1&offset=0'); +it( + 'Get tree by organization id', + async () => { + const organization_id = exampleTree.planting_organization_id; + const response = await supertest(app).get( + `/trees?limit=1&organization_id=${organization_id}`, + ); expect(response.status).toBe(200); expect(response.body).toMatchObject({ trees: expect.anything(), }); - }); + expect(response.body.trees[0]).toMatchObject({ + organization_id, + }); + }, + 1000 * 60, +); - it('trees?limit=1&offset=0', async () => { - const response = await supertest(app).get('/trees?limit=1&offset=0'); +it( + 'trees/featured', + async () => { + const response = await supertest(app).get('/trees/featured'); expect(response.status).toBe(200); - expect(response.body).toMatchObject({ - trees: expect.anything(), + expect(response.body.trees[0]).toMatchObject({ + id: expect.any(Number), }); - }); - - it( - 'trees?limit=1&organization_id=11', - async () => { - const response = await supertest(app).get( - '/trees?limit=1&organization_id=11', - ); - expect(response.status).toBe(200); - expect(response.body).toMatchObject({ - trees: expect.anything(), - }); - expect(response.body.trees[0]).toMatchObject({ - organization_id: 11, - }); - }, - 1000 * 60, - ); - - it( - 'trees/featured', - async () => { - const response = await supertest(app).get('/trees/featured'); - expect(response.status).toBe(200); - // expect(response.body).toMatchObject({ - // trees: expect.anything(), - // }); - expect(response.body.trees[0]).toMatchObject({ - id: expect.any(Number), - }); - }, - 1000 * 10, - ); -}); + }, + 1000 * 10, +); diff --git a/docs/api/spec/examples/trees/912681.json b/docs/api/spec/examples/trees/912681.json new file mode 100644 index 00000000..289c540c --- /dev/null +++ b/docs/api/spec/examples/trees/912681.json @@ -0,0 +1,48 @@ +{ + "id": 912681, + "time_created": "2021-03-21T11:49:16.000Z", + "time_updated": "2021-03-21T11:49:16.000Z", + "missing": false, + "priority": false, + "cause_of_death_id": null, + "planter_id": 3581, + "primary_location_id": null, + "settings_id": null, + "override_settings_id": null, + "dead": 0, + "photo_id": null, + "image_url": "https://treetracker-production-images.s3.eu-central-1.amazonaws.com/2021.03.21.14.58.14_-9.329156333333334_34.57351466666667_7e341cc9-84cd-472f-9ae7-ac1a88c1788f_IMG_20210321_144909_8561950290380427437.jpg", + "certificate_id": null, + "estimated_geometric_location": "0101000020E61000000A8EB8ED684941403AE0CD2D87A822C0", + "lat": "-9.329156333333334", + "lon": "34.57351466666667", + "gps_accuracy": null, + "active": true, + "planter_photo_url": "https://treetracker-production-images.s3.eu-central-1.amazonaws.com/2021.03.20.16.51.06_-9.339128333333333_34.59247666666667_7c0527e6-4b6d-4b5f-9ba2-e931b03b372b_IMG_20210320_164149_3174069926682606719.jpg", + "planter_identifier": "example@gmail.com", + "device_id": null, + "sequence": null, + "note": "", + "verified": false, + "uuid": "9f148083-9a86-4d60-9547-5a0ec92b979c", + "approved": false, + "status": "planted", + "cluster_regions_assigned": true, + "species_id": null, + "planting_organization_id": 178, + "payment_id": null, + "contract_id": null, + "token_issued": false, + "morphology": null, + "age": null, + "species": null, + "capture_approval_tag": null, + "rejection_reason": null, + "matching_hash": null, + "device_identifier": "5d7dbb36e926d6c9", + "images": null, + "domain_specific_data": null, + "token_id": null, + "name": null, + "earnings_id": null +} From cef14992896099188cbed0f5e332b4b318436744 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Fri, 25 Feb 2022 19:52:01 -0800 Subject: [PATCH 09/44] ci(wip): only test trees.spec --- .github/workflows/pull-request-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index f771e38c..5df7e3e8 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -61,4 +61,4 @@ jobs: run: npm test - name: run e2e tests - run: npm run test-e2e + run: npx jest __tests__/e2e/trees.spec.ts From 0ab6273e4c30749afefa1be7abcdac8231a20e94 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Fri, 25 Feb 2022 20:37:09 -0800 Subject: [PATCH 10/44] test(wip): skip failing tests --- __tests__/e2e/trees.spec.ts | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/__tests__/e2e/trees.spec.ts b/__tests__/e2e/trees.spec.ts index b740fba1..8d20b7f5 100644 --- a/__tests__/e2e/trees.spec.ts +++ b/__tests__/e2e/trees.spec.ts @@ -1,11 +1,6 @@ import exampleTree from '@mocks/trees/912681.json'; import supertest from 'supertest'; -import knex, { TableNames } from 'infra/database/knex'; -import app from '../../server/app'; - -beforeAll(async () => { - await knex(TableNames.Trees).insert(exampleTree); -}); +import app from 'app'; it('trees/{id}', async () => { const response = await supertest(app).get(`/trees/${exampleTree.id}`); @@ -30,7 +25,7 @@ it('trees?limit=1&offset=0', async () => { }); }); -it( +it.skip( 'Get tree by organization id', async () => { const organization_id = exampleTree.planting_organization_id; @@ -48,7 +43,7 @@ it( 1000 * 60, ); -it( +it.skip( 'trees/featured', async () => { const response = await supertest(app).get('/trees/featured'); From 7bf9ace14787374f5ca1e43a6c33bf71191a469e Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Fri, 25 Feb 2022 20:40:07 -0800 Subject: [PATCH 11/44] ci(pr): seed db before tests --- .github/workflows/pull-request-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index 5df7e3e8..d96cc311 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -62,3 +62,5 @@ jobs: - name: run e2e tests run: npx jest __tests__/e2e/trees.spec.ts + env: + SEED: true From 8d95a5db30c1c881b3efdec2a15aea45b0240784 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Fri, 25 Feb 2022 20:40:51 -0800 Subject: [PATCH 12/44] test(setup): conditionally seed db before testing --- .jest/globalSetup.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.jest/globalSetup.ts b/.jest/globalSetup.ts index 4ec94e21..98f37c78 100644 --- a/.jest/globalSetup.ts +++ b/.jest/globalSetup.ts @@ -1,3 +1,12 @@ import * as dotenv from 'dotenv'; dotenv.config(); -export default function globalSetup() {} +import exampleTree from '../docs/api/spec/examples/trees/912681.json'; +// import exampleWallet from '@mocks/wallets/exampleWallet.json'; +import knex, { TableNames } from '../server/infra/database/knex'; + +export default async function globalSetup() { + if (process.env.SEED === 'true') { + await knex(TableNames.Trees).insert(exampleTree); + } + knex.destroy(); +} From c229ad001a035eda570e7715bf6f44deebfd627c Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Fri, 25 Feb 2022 21:13:00 -0800 Subject: [PATCH 13/44] test(wallet): use seed data test(seed): wallet data --- .jest/globalSetup.ts | 14 +++++++++- __tests__/e2e/wallets.spec.ts | 26 +++++++++---------- .../spec/examples/wallets/exampleWallet.json | 8 ++++++ server/infra/database/knex.ts | 1 + 4 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 docs/api/spec/examples/wallets/exampleWallet.json diff --git a/.jest/globalSetup.ts b/.jest/globalSetup.ts index 98f37c78..dd4aaa44 100644 --- a/.jest/globalSetup.ts +++ b/.jest/globalSetup.ts @@ -1,12 +1,24 @@ import * as dotenv from 'dotenv'; dotenv.config(); import exampleTree from '../docs/api/spec/examples/trees/912681.json'; -// import exampleWallet from '@mocks/wallets/exampleWallet.json'; +import exampleWallet from '../docs/api/spec/examples/wallets/exampleWallet.json'; import knex, { TableNames } from '../server/infra/database/knex'; export default async function globalSetup() { if (process.env.SEED === 'true') { await knex(TableNames.Trees).insert(exampleTree); + // seed wallet data + await knex.raw( + `insert into wallet.wallet ("created_at", "id", "logo_url", "name", "password", "salt") values (?, ?, ?, ?, ?, ?)`, + [ + exampleWallet.created_at, + exampleWallet.id, + exampleWallet.logo_url, + exampleWallet.name, + exampleWallet.password, + exampleWallet.salt, + ], + ); } knex.destroy(); } diff --git a/__tests__/e2e/wallets.spec.ts b/__tests__/e2e/wallets.spec.ts index e5d5cf83..cd9222c9 100644 --- a/__tests__/e2e/wallets.spec.ts +++ b/__tests__/e2e/wallets.spec.ts @@ -1,19 +1,17 @@ +import exampleWallet from '@mocks/wallets/exampleWallet.json'; import supertest from 'supertest'; import app from '../../server/app'; -describe('wallets', () => { - it('get wallet by id or name', async () => { - const response = await supertest(app).get( - '/wallets/88a33d5b-5c47-4a32-8572-0899817d3f38', - ); - expect(response.status).toBe(200); - expect(response.body).toMatchObject({ - id: '88a33d5b-5c47-4a32-8572-0899817d3f38', - name: 'NewWalletByAutoTool_49836', - password: null, - salt: null, - logo_url: null, - // created_at: '2021-10-08T02:33:20.732Z', - }); +it('get wallet by id or name', async () => { + const { id, name } = exampleWallet; + const response = await supertest(app).get(`/wallets/${id}`); + expect(response.status).toBe(200); + expect(response.body).toMatchObject({ + id: exampleWallet.id, + name, + password: null, + salt: null, + logo_url: null, + // created_at: '2021-10-08T02:33:20.732Z', }); }); diff --git a/docs/api/spec/examples/wallets/exampleWallet.json b/docs/api/spec/examples/wallets/exampleWallet.json new file mode 100644 index 00000000..3a09a822 --- /dev/null +++ b/docs/api/spec/examples/wallets/exampleWallet.json @@ -0,0 +1,8 @@ +{ + "id": "88a33d5b-5c47-4a32-8572-0899817d3f38", + "name": "NewWalletByAutoTool_49836", + "password": null, + "salt": null, + "logo_url": null, + "created_at": "2021-10-07T22:33:20.732Z" +} diff --git a/server/infra/database/knex.ts b/server/infra/database/knex.ts index 47c75854..0e3281e6 100644 --- a/server/infra/database/knex.ts +++ b/server/infra/database/knex.ts @@ -24,4 +24,5 @@ export default knex(knexConfig); export const enum TableNames { Trees = 'trees', + Wallets = 'wallet', } From 86e9283cc01eb245ffc2474b74e34d40487e0a70 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Mon, 28 Feb 2022 20:59:58 -0800 Subject: [PATCH 14/44] chore: dump wallet schema --- wallet.sql | 541 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 541 insertions(+) create mode 100644 wallet.sql diff --git a/wallet.sql b/wallet.sql new file mode 100644 index 00000000..1cb13f77 --- /dev/null +++ b/wallet.sql @@ -0,0 +1,541 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.15 +-- Dumped by pg_dump version 11.15 (Ubuntu 11.15-1.pgdg20.04+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: wallet; Type: SCHEMA; Schema: -; Owner: doadmin +-- + +CREATE SCHEMA wallet; + + +ALTER SCHEMA wallet OWNER TO postgres; + +-- +-- Name: entity_trust_request_type; Type: TYPE; Schema: wallet; Owner: doadmin +-- + +CREATE TYPE wallet.entity_trust_request_type AS ENUM ( + 'send', + 'receive', + 'manage', + 'yield', + 'deduct', + 'release' +); + + +ALTER TYPE wallet.entity_trust_request_type OWNER TO doadmin; + +-- +-- Name: entity_trust_state_type; Type: TYPE; Schema: wallet; Owner: doadmin +-- + +CREATE TYPE wallet.entity_trust_state_type AS ENUM ( + 'requested', + 'cancelled_by_originator', + 'cancelled_by_actor', + 'cancelled_by_target', + 'trusted' +); + + +ALTER TYPE wallet.entity_trust_state_type OWNER TO doadmin; + +-- +-- Name: entity_trust_type; Type: TYPE; Schema: wallet; Owner: doadmin +-- + +CREATE TYPE wallet.entity_trust_type AS ENUM ( + 'send', + 'manage', + 'deduct' +); + + +ALTER TYPE wallet.entity_trust_type OWNER TO doadmin; + +-- +-- Name: transfer_state; Type: TYPE; Schema: wallet; Owner: doadmin +-- + +CREATE TYPE wallet.transfer_state AS ENUM ( + 'requested', + 'pending', + 'completed', + 'cancelled', + 'failed' +); + + +ALTER TYPE wallet.transfer_state OWNER TO doadmin; + +-- +-- Name: transfer_state_change_approval_type; Type: TYPE; Schema: wallet; Owner: doadmin +-- + +CREATE TYPE wallet.transfer_state_change_approval_type AS ENUM ( + 'trusted', + 'manual', + 'machine' +); + + +ALTER TYPE wallet.transfer_state_change_approval_type OWNER TO doadmin; + +-- +-- Name: transfer_type; Type: TYPE; Schema: wallet; Owner: doadmin +-- + +CREATE TYPE wallet.transfer_type AS ENUM ( + 'send', + 'deduct', + 'managed' +); + + +ALTER TYPE wallet.transfer_type OWNER TO doadmin; + +-- +-- Name: wallet_event_type; Type: TYPE; Schema: wallet; Owner: doadmin +-- + +CREATE TYPE wallet.wallet_event_type AS ENUM ( + 'trust_request', + 'trust_request_granted', + 'trust_request_cancelled_by_originator', + 'trust_request_cancelled_by_actor', + 'trust_request_cancelled_by_target', + 'transfer_requested', + 'transfer_request_cancelled_by_source', + 'transfer_request_cancelled_by_destination', + 'transfer_request_cancelled_by_originator', + 'transfer_pending_cancelled_by_source', + 'transfer_pending_cancelled_by_destination', + 'transfer_pending_cancelled_by_requestor', + 'transfer_completed', + 'transfer_failed' +); + + +ALTER TYPE wallet.wallet_event_type OWNER TO doadmin; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: api_key; Type: TABLE; Schema: wallet; Owner: doadmin +-- + +CREATE TABLE wallet.api_key ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + key character varying, + tree_token_api_access boolean, + hash character varying, + salt character varying, + name character varying +); + + +ALTER TABLE wallet.api_key OWNER TO doadmin; + +-- +-- Name: migrations; Type: TABLE; Schema: wallet; Owner: doadmin +-- + +CREATE TABLE wallet.migrations ( + id integer NOT NULL, + name character varying(255) NOT NULL, + run_on timestamp without time zone NOT NULL +); + + +ALTER TABLE wallet.migrations OWNER TO doadmin; + +-- +-- Name: migrations_id_seq; Type: SEQUENCE; Schema: wallet; Owner: doadmin +-- + +CREATE SEQUENCE wallet.migrations_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE wallet.migrations_id_seq OWNER TO doadmin; + +-- +-- Name: migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: wallet; Owner: doadmin +-- + +ALTER SEQUENCE wallet.migrations_id_seq OWNED BY wallet.migrations.id; + + +-- +-- Name: token; Type: TABLE; Schema: wallet; Owner: doadmin +-- + +CREATE TABLE wallet.token ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + capture_id uuid NOT NULL, + wallet_id uuid NOT NULL, + transfer_pending boolean DEFAULT false NOT NULL, + transfer_pending_id uuid, + created_at timestamp without time zone DEFAULT now() NOT NULL, + updated_at timestamp without time zone DEFAULT now() NOT NULL, + claim boolean DEFAULT false NOT NULL +); + + +ALTER TABLE wallet.token OWNER TO doadmin; + +-- +-- Name: transaction; Type: TABLE; Schema: wallet; Owner: doadmin +-- + +CREATE TABLE wallet.transaction ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + token_id uuid NOT NULL, + transfer_id uuid NOT NULL, + source_wallet_id uuid NOT NULL, + destination_wallet_id uuid NOT NULL, + processed_at timestamp without time zone DEFAULT now() NOT NULL, + claim boolean DEFAULT false NOT NULL +); + + +ALTER TABLE wallet.transaction OWNER TO doadmin; + +-- +-- Name: transfer; Type: TABLE; Schema: wallet; Owner: doadmin +-- + +CREATE TABLE wallet.transfer ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + originator_wallet_id uuid NOT NULL, + source_wallet_id uuid NOT NULL, + destination_wallet_id uuid NOT NULL, + type wallet.transfer_type NOT NULL, + parameters json, + state wallet.transfer_state NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + closed_at timestamp without time zone DEFAULT now() NOT NULL, + active boolean DEFAULT true NOT NULL, + claim boolean DEFAULT false NOT NULL +); + + +ALTER TABLE wallet.transfer OWNER TO doadmin; + +-- +-- Name: transfer_audit; Type: TABLE; Schema: wallet; Owner: doadmin +-- + +CREATE TABLE wallet.transfer_audit ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + transfer_id integer NOT NULL, + new_state wallet.transfer_state NOT NULL, + processed_at timestamp without time zone DEFAULT now() NOT NULL, + approval_type wallet.transfer_state_change_approval_type NOT NULL, + entity_trust_id integer NOT NULL +); + + +ALTER TABLE wallet.transfer_audit OWNER TO doadmin; + +-- +-- Name: wallet; Type: TABLE; Schema: wallet; Owner: doadmin +-- + +CREATE TABLE wallet.wallet ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + name character varying NOT NULL, + password character varying, + salt character varying, + logo_url character varying, + created_at timestamp without time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE wallet.wallet OWNER TO doadmin; + +-- +-- Name: wallet_event; Type: TABLE; Schema: wallet; Owner: doadmin +-- + +CREATE TABLE wallet.wallet_event ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + wallet_id uuid NOT NULL, + type wallet.wallet_event_type NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE wallet.wallet_event OWNER TO doadmin; + +-- +-- Name: wallet_trust; Type: TABLE; Schema: wallet; Owner: doadmin +-- + +CREATE TABLE wallet.wallet_trust ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + actor_wallet_id uuid, + target_wallet_id uuid NOT NULL, + type wallet.entity_trust_type, + originator_wallet_id uuid, + request_type wallet.entity_trust_request_type NOT NULL, + state wallet.entity_trust_state_type, + created_at timestamp without time zone DEFAULT now() NOT NULL, + updated_at timestamp without time zone DEFAULT now() NOT NULL, + active boolean DEFAULT true NOT NULL +); + + +ALTER TABLE wallet.wallet_trust OWNER TO doadmin; + +-- +-- Name: wallet_trust_log; Type: TABLE; Schema: wallet; Owner: doadmin +-- + +CREATE TABLE wallet.wallet_trust_log ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + wallet_trust_id uuid NOT NULL, + actor_wallet_id uuid NOT NULL, + target_wallet_id uuid NOT NULL, + type wallet.entity_trust_type NOT NULL, + originator_wallet_id uuid NOT NULL, + request_type wallet.entity_trust_request_type NOT NULL, + state wallet.entity_trust_state_type NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + updated_at timestamp without time zone DEFAULT now() NOT NULL, + logged_at timestamp without time zone DEFAULT now() NOT NULL, + active boolean NOT NULL +); + + +ALTER TABLE wallet.wallet_trust_log OWNER TO doadmin; + +-- +-- Name: migrations id; Type: DEFAULT; Schema: wallet; Owner: doadmin +-- + +ALTER TABLE ONLY wallet.migrations ALTER COLUMN id SET DEFAULT nextval('wallet.migrations_id_seq'::regclass); + + +-- +-- Name: api_key api_key_pkey; Type: CONSTRAINT; Schema: wallet; Owner: doadmin +-- + +ALTER TABLE ONLY wallet.api_key + ADD CONSTRAINT api_key_pkey PRIMARY KEY (id); + + +-- +-- Name: wallet_trust_log entity_trust_log_pkey; Type: CONSTRAINT; Schema: wallet; Owner: doadmin +-- + +ALTER TABLE ONLY wallet.wallet_trust_log + ADD CONSTRAINT entity_trust_log_pkey PRIMARY KEY (id); + + +-- +-- Name: wallet_trust entity_trust_pkey; Type: CONSTRAINT; Schema: wallet; Owner: doadmin +-- + +ALTER TABLE ONLY wallet.wallet_trust + ADD CONSTRAINT entity_trust_pkey PRIMARY KEY (id); + + +-- +-- Name: migrations migrations_pkey; Type: CONSTRAINT; Schema: wallet; Owner: doadmin +-- + +ALTER TABLE ONLY wallet.migrations + ADD CONSTRAINT migrations_pkey PRIMARY KEY (id); + + +-- +-- Name: token token_pkey; Type: CONSTRAINT; Schema: wallet; Owner: doadmin +-- + +ALTER TABLE ONLY wallet.token + ADD CONSTRAINT token_pkey PRIMARY KEY (id); + + +-- +-- Name: transaction transaction_pkey; Type: CONSTRAINT; Schema: wallet; Owner: doadmin +-- + +ALTER TABLE ONLY wallet.transaction + ADD CONSTRAINT transaction_pkey PRIMARY KEY (id); + + +-- +-- Name: transfer_audit transfer_audit_pkey; Type: CONSTRAINT; Schema: wallet; Owner: doadmin +-- + +ALTER TABLE ONLY wallet.transfer_audit + ADD CONSTRAINT transfer_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: transfer transfer_pkey; Type: CONSTRAINT; Schema: wallet; Owner: doadmin +-- + +ALTER TABLE ONLY wallet.transfer + ADD CONSTRAINT transfer_pkey PRIMARY KEY (id); + + +-- +-- Name: wallet_event wallet_event_pkey; Type: CONSTRAINT; Schema: wallet; Owner: doadmin +-- + +ALTER TABLE ONLY wallet.wallet_event + ADD CONSTRAINT wallet_event_pkey PRIMARY KEY (id); + + +-- +-- Name: wallet wallet_pkey; Type: CONSTRAINT; Schema: wallet; Owner: doadmin +-- + +ALTER TABLE ONLY wallet.wallet + ADD CONSTRAINT wallet_pkey PRIMARY KEY (id); + + +-- +-- Name: capture_id_idx; Type: INDEX; Schema: wallet; Owner: doadmin +-- + +CREATE UNIQUE INDEX capture_id_idx ON wallet.token USING btree (capture_id); + + +-- +-- Name: token_transfer_pending_id_idx; Type: INDEX; Schema: wallet; Owner: doadmin +-- + +CREATE INDEX token_transfer_pending_id_idx ON wallet.token USING btree (transfer_pending_id); + + +-- +-- Name: token_wallet_id_idx; Type: INDEX; Schema: wallet; Owner: doadmin +-- + +CREATE INDEX token_wallet_id_idx ON wallet.token USING btree (wallet_id); + + +-- +-- Name: wallet_name_idx; Type: INDEX; Schema: wallet; Owner: doadmin +-- + +CREATE UNIQUE INDEX wallet_name_idx ON wallet.wallet USING btree (name); + + +-- +-- Name: SCHEMA wallet; Type: ACL; Schema: -; Owner: doadmin +-- + +GRANT USAGE ON SCHEMA wallet TO s_wallet; + + +-- +-- Name: TABLE api_key; Type: ACL; Schema: wallet; Owner: doadmin +-- + +GRANT INSERT ON TABLE wallet.api_key TO m_wallet; +GRANT SELECT,INSERT,UPDATE ON TABLE wallet.api_key TO s_wallet; + + +-- +-- Name: TABLE migrations; Type: ACL; Schema: wallet; Owner: doadmin +-- + +GRANT INSERT ON TABLE wallet.migrations TO m_wallet; +GRANT SELECT,INSERT,UPDATE ON TABLE wallet.migrations TO s_wallet; + + +-- +-- Name: TABLE token; Type: ACL; Schema: wallet; Owner: doadmin +-- + +GRANT INSERT ON TABLE wallet.token TO m_wallet; +GRANT SELECT,INSERT,UPDATE ON TABLE wallet.token TO s_wallet; + + +-- +-- Name: TABLE transaction; Type: ACL; Schema: wallet; Owner: doadmin +-- + +GRANT INSERT ON TABLE wallet.transaction TO m_wallet; +GRANT SELECT,INSERT,UPDATE ON TABLE wallet.transaction TO s_wallet; + + +-- +-- Name: TABLE transfer; Type: ACL; Schema: wallet; Owner: doadmin +-- + +GRANT INSERT ON TABLE wallet.transfer TO m_wallet; +GRANT SELECT,INSERT,UPDATE ON TABLE wallet.transfer TO s_wallet; + + +-- +-- Name: TABLE transfer_audit; Type: ACL; Schema: wallet; Owner: doadmin +-- + +GRANT INSERT ON TABLE wallet.transfer_audit TO m_wallet; +GRANT SELECT,INSERT,UPDATE ON TABLE wallet.transfer_audit TO s_wallet; + + +-- +-- Name: TABLE wallet; Type: ACL; Schema: wallet; Owner: doadmin +-- + +GRANT INSERT ON TABLE wallet.wallet TO m_wallet; +GRANT SELECT,INSERT,UPDATE ON TABLE wallet.wallet TO s_wallet; + + +-- +-- Name: TABLE wallet_event; Type: ACL; Schema: wallet; Owner: doadmin +-- + +GRANT INSERT ON TABLE wallet.wallet_event TO m_wallet; +GRANT SELECT,INSERT,UPDATE ON TABLE wallet.wallet_event TO s_wallet; + + +-- +-- Name: TABLE wallet_trust; Type: ACL; Schema: wallet; Owner: doadmin +-- + +GRANT INSERT ON TABLE wallet.wallet_trust TO m_wallet; +GRANT SELECT,INSERT,UPDATE ON TABLE wallet.wallet_trust TO s_wallet; + + +-- +-- Name: TABLE wallet_trust_log; Type: ACL; Schema: wallet; Owner: doadmin +-- + +GRANT INSERT ON TABLE wallet.wallet_trust_log TO m_wallet; +GRANT SELECT,INSERT,UPDATE ON TABLE wallet.wallet_trust_log TO s_wallet; + + +-- +-- PostgreSQL database dump complete +-- + From e6e295a2761f1233f2110c468e7c34b954880e46 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Mon, 28 Feb 2022 21:00:21 -0800 Subject: [PATCH 15/44] ci(pr): load wallet schema sql --- .github/workflows/pull-request-ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index d96cc311..84e3da13 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -55,7 +55,9 @@ jobs: apt-get install --yes --no-install-recommends postgresql-client - name: Prepare DB - run: psql postgresql://postgres:postgres@postgres/postgres < db.sql + run: | + psql postgresql://postgres:postgres@postgres/postgres < db.sql + psql postgresql://postgres:postgres@postgres/postgres < wallet.sql - name: run tests run: npm test From 44166ec2c6f660025a55a65608e11ae784a92459 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Mon, 28 Feb 2022 21:16:42 -0800 Subject: [PATCH 16/44] ci(pr): sql assigns tables to user 'postgres' --- db.sql | 352 ++++++++++++++++++++++++++--------------------------- wallet.sql | 36 +++--- 2 files changed, 194 insertions(+), 194 deletions(-) diff --git a/db.sql b/db.sql index 1838da83..711e7824 100644 --- a/db.sql +++ b/db.sql @@ -43,7 +43,7 @@ CREATE TYPE public.age_type AS ENUM ( ); -ALTER TYPE public.age_type OWNER TO doadmin; +ALTER TYPE public.age_type OWNER TO postgres; -- -- Name: capture_approval_type; Type: TYPE; Schema: public; Owner: doadmin @@ -61,7 +61,7 @@ CREATE TYPE public.capture_approval_type AS ENUM ( ); -ALTER TYPE public.capture_approval_type OWNER TO doadmin; +ALTER TYPE public.capture_approval_type OWNER TO postgres; -- -- Name: morphology_type; Type: TYPE; Schema: public; Owner: doadmin @@ -74,7 +74,7 @@ CREATE TYPE public.morphology_type AS ENUM ( ); -ALTER TYPE public.morphology_type OWNER TO doadmin; +ALTER TYPE public.morphology_type OWNER TO postgres; -- -- Name: platform_type; Type: TYPE; Schema: public; Owner: doadmin @@ -86,7 +86,7 @@ CREATE TYPE public.platform_type AS ENUM ( ); -ALTER TYPE public.platform_type OWNER TO doadmin; +ALTER TYPE public.platform_type OWNER TO postgres; -- -- Name: rejection_reason_type; Type: TYPE; Schema: public; Owner: doadmin @@ -103,7 +103,7 @@ CREATE TYPE public.rejection_reason_type AS ENUM ( ); -ALTER TYPE public.rejection_reason_type OWNER TO doadmin; +ALTER TYPE public.rejection_reason_type OWNER TO postgres; -- -- Name: getentityrelationshipchildren(integer); Type: FUNCTION; Schema: public; Owner: doadmin @@ -128,7 +128,7 @@ FROM children $_$; -ALTER FUNCTION public.getentityrelationshipchildren(integer) OWNER TO doadmin; +ALTER FUNCTION public.getentityrelationshipchildren(integer) OWNER TO postgres; -- -- Name: getentityrelationshipchildren(integer, text); Type: FUNCTION; Schema: public; Owner: doadmin @@ -153,7 +153,7 @@ FROM children $_$; -ALTER FUNCTION public.getentityrelationshipchildren(integer, text) OWNER TO doadmin; +ALTER FUNCTION public.getentityrelationshipchildren(integer, text) OWNER TO postgres; -- -- Name: getentityrelationshipparents(integer, text); Type: FUNCTION; Schema: public; Owner: doadmin @@ -178,7 +178,7 @@ FROM parents $_$; -ALTER FUNCTION public.getentityrelationshipparents(integer, text) OWNER TO doadmin; +ALTER FUNCTION public.getentityrelationshipparents(integer, text) OWNER TO postgres; -- -- Name: makegrid_2d(public.geometry, integer, integer); Type: FUNCTION; Schema: public; Owner: doadmin @@ -247,7 +247,7 @@ END; $_$; -ALTER FUNCTION public.makegrid_2d(bound_polygon public.geometry, width_step integer, height_step integer) OWNER TO doadmin; +ALTER FUNCTION public.makegrid_2d(bound_polygon public.geometry, width_step integer, height_step integer) OWNER TO postgres; -- -- Name: token_transaction_insert(); Type: FUNCTION; Schema: public; Owner: doadmin @@ -266,7 +266,7 @@ CREATE FUNCTION public.token_transaction_insert() RETURNS trigger $$; -ALTER FUNCTION public.token_transaction_insert() OWNER TO doadmin; +ALTER FUNCTION public.token_transaction_insert() OWNER TO postgres; -- -- Name: trigger_set_updated_at(); Type: FUNCTION; Schema: public; Owner: doadmin @@ -282,7 +282,7 @@ CREATE FUNCTION public.trigger_set_updated_at() RETURNS trigger $$; -ALTER FUNCTION public.trigger_set_updated_at() OWNER TO doadmin; +ALTER FUNCTION public.trigger_set_updated_at() OWNER TO postgres; -- -- Name: trees_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -296,7 +296,7 @@ CREATE SEQUENCE public.trees_id_seq CACHE 1; -ALTER TABLE public.trees_id_seq OWNER TO doadmin; +ALTER TABLE public.trees_id_seq OWNER TO postgres; SET default_tablespace = ''; @@ -356,7 +356,7 @@ CREATE TABLE public.trees ( ); -ALTER TABLE public.trees OWNER TO doadmin; +ALTER TABLE public.trees OWNER TO postgres; -- -- Name: entity; Type: TABLE; Schema: public; Owner: doadmin @@ -384,7 +384,7 @@ CREATE TABLE public.entity ( ); -ALTER TABLE public.entity OWNER TO doadmin; +ALTER TABLE public.entity OWNER TO postgres; -- -- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -398,7 +398,7 @@ CREATE SEQUENCE public.users_id_seq CACHE 1; -ALTER TABLE public.users_id_seq OWNER TO doadmin; +ALTER TABLE public.users_id_seq OWNER TO postgres; -- -- Name: planter; Type: TABLE; Schema: public; Owner: doadmin @@ -419,7 +419,7 @@ CREATE TABLE public.planter ( ); -ALTER TABLE public.planter OWNER TO doadmin; +ALTER TABLE public.planter OWNER TO postgres; -- -- Name: token; Type: TABLE; Schema: public; Owner: doadmin @@ -434,7 +434,7 @@ CREATE TABLE public.token ( ); -ALTER TABLE public.token OWNER TO doadmin; +ALTER TABLE public.token OWNER TO postgres; -- -- Name: ab_permission; Type: TABLE; Schema: public; Owner: doadmin @@ -446,7 +446,7 @@ CREATE TABLE public.ab_permission ( ); -ALTER TABLE public.ab_permission OWNER TO doadmin; +ALTER TABLE public.ab_permission OWNER TO postgres; -- -- Name: ab_permission_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -461,7 +461,7 @@ CREATE SEQUENCE public.ab_permission_id_seq CACHE 1; -ALTER TABLE public.ab_permission_id_seq OWNER TO doadmin; +ALTER TABLE public.ab_permission_id_seq OWNER TO postgres; -- -- Name: ab_permission_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -481,7 +481,7 @@ CREATE TABLE public.ab_permission_view ( ); -ALTER TABLE public.ab_permission_view OWNER TO doadmin; +ALTER TABLE public.ab_permission_view OWNER TO postgres; -- -- Name: ab_permission_view_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -496,7 +496,7 @@ CREATE SEQUENCE public.ab_permission_view_id_seq CACHE 1; -ALTER TABLE public.ab_permission_view_id_seq OWNER TO doadmin; +ALTER TABLE public.ab_permission_view_id_seq OWNER TO postgres; -- -- Name: ab_permission_view_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -516,7 +516,7 @@ CREATE TABLE public.ab_permission_view_role ( ); -ALTER TABLE public.ab_permission_view_role OWNER TO doadmin; +ALTER TABLE public.ab_permission_view_role OWNER TO postgres; -- -- Name: ab_permission_view_role_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -531,7 +531,7 @@ CREATE SEQUENCE public.ab_permission_view_role_id_seq CACHE 1; -ALTER TABLE public.ab_permission_view_role_id_seq OWNER TO doadmin; +ALTER TABLE public.ab_permission_view_role_id_seq OWNER TO postgres; -- -- Name: ab_permission_view_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -556,7 +556,7 @@ CREATE TABLE public.ab_register_user ( ); -ALTER TABLE public.ab_register_user OWNER TO doadmin; +ALTER TABLE public.ab_register_user OWNER TO postgres; -- -- Name: ab_register_user_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -571,7 +571,7 @@ CREATE SEQUENCE public.ab_register_user_id_seq CACHE 1; -ALTER TABLE public.ab_register_user_id_seq OWNER TO doadmin; +ALTER TABLE public.ab_register_user_id_seq OWNER TO postgres; -- -- Name: ab_register_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -590,7 +590,7 @@ CREATE TABLE public.ab_role ( ); -ALTER TABLE public.ab_role OWNER TO doadmin; +ALTER TABLE public.ab_role OWNER TO postgres; -- -- Name: ab_role_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -605,7 +605,7 @@ CREATE SEQUENCE public.ab_role_id_seq CACHE 1; -ALTER TABLE public.ab_role_id_seq OWNER TO doadmin; +ALTER TABLE public.ab_role_id_seq OWNER TO postgres; -- -- Name: ab_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -636,7 +636,7 @@ CREATE TABLE public.ab_user ( ); -ALTER TABLE public.ab_user OWNER TO doadmin; +ALTER TABLE public.ab_user OWNER TO postgres; -- -- Name: ab_user_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -651,7 +651,7 @@ CREATE SEQUENCE public.ab_user_id_seq CACHE 1; -ALTER TABLE public.ab_user_id_seq OWNER TO doadmin; +ALTER TABLE public.ab_user_id_seq OWNER TO postgres; -- -- Name: ab_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -671,7 +671,7 @@ CREATE TABLE public.ab_user_role ( ); -ALTER TABLE public.ab_user_role OWNER TO doadmin; +ALTER TABLE public.ab_user_role OWNER TO postgres; -- -- Name: ab_user_role_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -686,7 +686,7 @@ CREATE SEQUENCE public.ab_user_role_id_seq CACHE 1; -ALTER TABLE public.ab_user_role_id_seq OWNER TO doadmin; +ALTER TABLE public.ab_user_role_id_seq OWNER TO postgres; -- -- Name: ab_user_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -705,7 +705,7 @@ CREATE TABLE public.ab_view_menu ( ); -ALTER TABLE public.ab_view_menu OWNER TO doadmin; +ALTER TABLE public.ab_view_menu OWNER TO postgres; -- -- Name: ab_view_menu_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -720,7 +720,7 @@ CREATE SEQUENCE public.ab_view_menu_id_seq CACHE 1; -ALTER TABLE public.ab_view_menu_id_seq OWNER TO doadmin; +ALTER TABLE public.ab_view_menu_id_seq OWNER TO postgres; -- -- Name: ab_view_menu_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -743,7 +743,7 @@ CREATE TABLE public.region ( ); -ALTER TABLE public.region OWNER TO doadmin; +ALTER TABLE public.region OWNER TO postgres; -- -- Name: tree_region; Type: TABLE; Schema: public; Owner: doadmin @@ -757,7 +757,7 @@ CREATE TABLE public.tree_region ( ); -ALTER TABLE public.tree_region OWNER TO doadmin; +ALTER TABLE public.tree_region OWNER TO postgres; -- -- Name: active_tree_region; Type: MATERIALIZED VIEW; Schema: public; Owner: doadmin @@ -777,7 +777,7 @@ CREATE MATERIALIZED VIEW public.active_tree_region AS WITH NO DATA; -ALTER TABLE public.active_tree_region OWNER TO doadmin; +ALTER TABLE public.active_tree_region OWNER TO postgres; -- -- Name: admin_role; Type: TABLE; Schema: public; Owner: doadmin @@ -794,7 +794,7 @@ CREATE TABLE public.admin_role ( ); -ALTER TABLE public.admin_role OWNER TO doadmin; +ALTER TABLE public.admin_role OWNER TO postgres; -- -- Name: admin_role_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -809,7 +809,7 @@ CREATE SEQUENCE public.admin_role_id_seq CACHE 1; -ALTER TABLE public.admin_role_id_seq OWNER TO doadmin; +ALTER TABLE public.admin_role_id_seq OWNER TO postgres; -- -- Name: admin_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -836,7 +836,7 @@ CREATE TABLE public.admin_user ( ); -ALTER TABLE public.admin_user OWNER TO doadmin; +ALTER TABLE public.admin_user OWNER TO postgres; -- -- Name: admin_user_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -851,7 +851,7 @@ CREATE SEQUENCE public.admin_user_id_seq CACHE 1; -ALTER TABLE public.admin_user_id_seq OWNER TO doadmin; +ALTER TABLE public.admin_user_id_seq OWNER TO postgres; -- -- Name: admin_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -873,7 +873,7 @@ CREATE TABLE public.admin_user_role ( ); -ALTER TABLE public.admin_user_role OWNER TO doadmin; +ALTER TABLE public.admin_user_role OWNER TO postgres; -- -- Name: admin_user_role_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -888,7 +888,7 @@ CREATE SEQUENCE public.admin_user_role_id_seq CACHE 1; -ALTER TABLE public.admin_user_role_id_seq OWNER TO doadmin; +ALTER TABLE public.admin_user_role_id_seq OWNER TO postgres; -- -- Name: admin_user_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -906,7 +906,7 @@ CREATE TABLE public.alembic_version ( ); -ALTER TABLE public.alembic_version OWNER TO doadmin; +ALTER TABLE public.alembic_version OWNER TO postgres; -- -- Name: anonymous_entities; Type: TABLE; Schema: public; Owner: doadmin @@ -927,7 +927,7 @@ CREATE TABLE public.anonymous_entities ( ); -ALTER TABLE public.anonymous_entities OWNER TO doadmin; +ALTER TABLE public.anonymous_entities OWNER TO postgres; -- -- Name: anonymous_planters; Type: TABLE; Schema: public; Owner: doadmin @@ -946,7 +946,7 @@ CREATE TABLE public.anonymous_planters ( ); -ALTER TABLE public.anonymous_planters OWNER TO doadmin; +ALTER TABLE public.anonymous_planters OWNER TO postgres; -- -- Name: anonymous_trees; Type: TABLE; Schema: public; Owner: doadmin @@ -989,7 +989,7 @@ CREATE TABLE public.anonymous_trees ( ); -ALTER TABLE public.anonymous_trees OWNER TO doadmin; +ALTER TABLE public.anonymous_trees OWNER TO postgres; -- -- Name: api_key; Type: TABLE; Schema: public; Owner: doadmin @@ -1005,7 +1005,7 @@ CREATE TABLE public.api_key ( ); -ALTER TABLE public.api_key OWNER TO doadmin; +ALTER TABLE public.api_key OWNER TO postgres; -- -- Name: api_key_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1020,7 +1020,7 @@ CREATE SEQUENCE public.api_key_id_seq CACHE 1; -ALTER TABLE public.api_key_id_seq OWNER TO doadmin; +ALTER TABLE public.api_key_id_seq OWNER TO postgres; -- -- Name: api_key_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1045,7 +1045,7 @@ CREATE TABLE public.audit ( ); -ALTER TABLE public.audit OWNER TO doadmin; +ALTER TABLE public.audit OWNER TO postgres; -- -- Name: audit_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1060,7 +1060,7 @@ CREATE SEQUENCE public.audit_id_seq CACHE 1; -ALTER TABLE public.audit_id_seq OWNER TO doadmin; +ALTER TABLE public.audit_id_seq OWNER TO postgres; -- -- Name: audit_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1089,7 +1089,7 @@ CREATE TABLE public.celery_taskmeta ( ); -ALTER TABLE public.celery_taskmeta OWNER TO doadmin; +ALTER TABLE public.celery_taskmeta OWNER TO postgres; -- -- Name: celery_tasksetmeta; Type: TABLE; Schema: public; Owner: doadmin @@ -1103,7 +1103,7 @@ CREATE TABLE public.celery_tasksetmeta ( ); -ALTER TABLE public.celery_tasksetmeta OWNER TO doadmin; +ALTER TABLE public.celery_tasksetmeta OWNER TO postgres; -- -- Name: certificates; Type: TABLE; Schema: public; Owner: doadmin @@ -1116,7 +1116,7 @@ CREATE TABLE public.certificates ( ); -ALTER TABLE public.certificates OWNER TO doadmin; +ALTER TABLE public.certificates OWNER TO postgres; -- -- Name: certificates_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1130,7 +1130,7 @@ CREATE SEQUENCE public.certificates_id_seq CACHE 1; -ALTER TABLE public.certificates_id_seq OWNER TO doadmin; +ALTER TABLE public.certificates_id_seq OWNER TO postgres; -- -- Name: certificates_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1151,7 +1151,7 @@ CREATE TABLE public.clusters ( ); -ALTER TABLE public.clusters OWNER TO doadmin; +ALTER TABLE public.clusters OWNER TO postgres; -- -- Name: clusters_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1165,7 +1165,7 @@ CREATE SEQUENCE public.clusters_id_seq CACHE 1; -ALTER TABLE public.clusters_id_seq OWNER TO doadmin; +ALTER TABLE public.clusters_id_seq OWNER TO postgres; -- -- Name: clusters_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1194,7 +1194,7 @@ CREATE TABLE public.connection ( ); -ALTER TABLE public.connection OWNER TO doadmin; +ALTER TABLE public.connection OWNER TO postgres; -- -- Name: connection_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1209,7 +1209,7 @@ CREATE SEQUENCE public.connection_id_seq CACHE 1; -ALTER TABLE public.connection_id_seq OWNER TO doadmin; +ALTER TABLE public.connection_id_seq OWNER TO postgres; -- -- Name: connection_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1232,7 +1232,7 @@ CREATE TABLE public.contract ( ); -ALTER TABLE public.contract OWNER TO doadmin; +ALTER TABLE public.contract OWNER TO postgres; -- -- Name: contract_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1247,7 +1247,7 @@ CREATE SEQUENCE public.contract_id_seq CACHE 1; -ALTER TABLE public.contract_id_seq OWNER TO doadmin; +ALTER TABLE public.contract_id_seq OWNER TO postgres; -- -- Name: contract_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1283,7 +1283,7 @@ CREATE TABLE public.dag ( ); -ALTER TABLE public.dag OWNER TO doadmin; +ALTER TABLE public.dag OWNER TO postgres; -- -- Name: dag_code; Type: TABLE; Schema: public; Owner: doadmin @@ -1297,7 +1297,7 @@ CREATE TABLE public.dag_code ( ); -ALTER TABLE public.dag_code OWNER TO doadmin; +ALTER TABLE public.dag_code OWNER TO postgres; -- -- Name: dag_pickle; Type: TABLE; Schema: public; Owner: doadmin @@ -1311,7 +1311,7 @@ CREATE TABLE public.dag_pickle ( ); -ALTER TABLE public.dag_pickle OWNER TO doadmin; +ALTER TABLE public.dag_pickle OWNER TO postgres; -- -- Name: dag_pickle_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1326,7 +1326,7 @@ CREATE SEQUENCE public.dag_pickle_id_seq CACHE 1; -ALTER TABLE public.dag_pickle_id_seq OWNER TO doadmin; +ALTER TABLE public.dag_pickle_id_seq OWNER TO postgres; -- -- Name: dag_pickle_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1356,7 +1356,7 @@ CREATE TABLE public.dag_run ( ); -ALTER TABLE public.dag_run OWNER TO doadmin; +ALTER TABLE public.dag_run OWNER TO postgres; -- -- Name: dag_run_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1371,7 +1371,7 @@ CREATE SEQUENCE public.dag_run_id_seq CACHE 1; -ALTER TABLE public.dag_run_id_seq OWNER TO doadmin; +ALTER TABLE public.dag_run_id_seq OWNER TO postgres; -- -- Name: dag_run_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1390,7 +1390,7 @@ CREATE TABLE public.dag_tag ( ); -ALTER TABLE public.dag_tag OWNER TO doadmin; +ALTER TABLE public.dag_tag OWNER TO postgres; -- -- Name: devices; Type: TABLE; Schema: public; Owner: doadmin @@ -1415,7 +1415,7 @@ CREATE TABLE public.devices ( ); -ALTER TABLE public.devices OWNER TO doadmin; +ALTER TABLE public.devices OWNER TO postgres; -- -- Name: devices_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1429,7 +1429,7 @@ CREATE SEQUENCE public.devices_id_seq CACHE 1; -ALTER TABLE public.devices_id_seq OWNER TO doadmin; +ALTER TABLE public.devices_id_seq OWNER TO postgres; -- -- Name: devices_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1452,7 +1452,7 @@ CREATE TABLE public.domain_event ( PARTITION BY LIST (status); -ALTER TABLE public.domain_event OWNER TO doadmin; +ALTER TABLE public.domain_event OWNER TO postgres; -- -- Name: domain_event_handled; Type: TABLE; Schema: public; Owner: doadmin @@ -1469,7 +1469,7 @@ PARTITION BY RANGE (created_at); ALTER TABLE ONLY public.domain_event ATTACH PARTITION public.domain_event_handled FOR VALUES IN ('handled'); -ALTER TABLE public.domain_event_handled OWNER TO doadmin; +ALTER TABLE public.domain_event_handled OWNER TO postgres; -- -- Name: domain_event_handled_2021; Type: TABLE; Schema: public; Owner: doadmin @@ -1485,7 +1485,7 @@ CREATE TABLE public.domain_event_handled_2021 ( ALTER TABLE ONLY public.domain_event_handled ATTACH PARTITION public.domain_event_handled_2021 FOR VALUES FROM ('2021-01-01 00:00:00+00') TO ('2022-01-01 00:00:00+00'); -ALTER TABLE public.domain_event_handled_2021 OWNER TO doadmin; +ALTER TABLE public.domain_event_handled_2021 OWNER TO postgres; -- -- Name: domain_event_handled_2022; Type: TABLE; Schema: public; Owner: doadmin @@ -1501,7 +1501,7 @@ CREATE TABLE public.domain_event_handled_2022 ( ALTER TABLE ONLY public.domain_event_handled ATTACH PARTITION public.domain_event_handled_2022 FOR VALUES FROM ('2022-01-01 00:00:00+00') TO ('2023-01-01 00:00:00+00'); -ALTER TABLE public.domain_event_handled_2022 OWNER TO doadmin; +ALTER TABLE public.domain_event_handled_2022 OWNER TO postgres; -- -- Name: domain_event_handled_2023; Type: TABLE; Schema: public; Owner: doadmin @@ -1517,7 +1517,7 @@ CREATE TABLE public.domain_event_handled_2023 ( ALTER TABLE ONLY public.domain_event_handled ATTACH PARTITION public.domain_event_handled_2023 FOR VALUES FROM ('2023-01-01 00:00:00+00') TO ('2024-01-01 00:00:00+00'); -ALTER TABLE public.domain_event_handled_2023 OWNER TO doadmin; +ALTER TABLE public.domain_event_handled_2023 OWNER TO postgres; -- -- Name: domain_event_raised; Type: TABLE; Schema: public; Owner: doadmin @@ -1533,7 +1533,7 @@ CREATE TABLE public.domain_event_raised ( ALTER TABLE ONLY public.domain_event ATTACH PARTITION public.domain_event_raised FOR VALUES IN ('raised'); -ALTER TABLE public.domain_event_raised OWNER TO doadmin; +ALTER TABLE public.domain_event_raised OWNER TO postgres; -- -- Name: domain_event_received; Type: TABLE; Schema: public; Owner: doadmin @@ -1549,7 +1549,7 @@ CREATE TABLE public.domain_event_received ( ALTER TABLE ONLY public.domain_event ATTACH PARTITION public.domain_event_received FOR VALUES IN ('received'); -ALTER TABLE public.domain_event_received OWNER TO doadmin; +ALTER TABLE public.domain_event_received OWNER TO postgres; -- -- Name: domain_event_sent; Type: TABLE; Schema: public; Owner: doadmin @@ -1566,7 +1566,7 @@ PARTITION BY RANGE (created_at); ALTER TABLE ONLY public.domain_event ATTACH PARTITION public.domain_event_sent FOR VALUES IN ('sent'); -ALTER TABLE public.domain_event_sent OWNER TO doadmin; +ALTER TABLE public.domain_event_sent OWNER TO postgres; -- -- Name: domain_event_sent_2021; Type: TABLE; Schema: public; Owner: doadmin @@ -1582,7 +1582,7 @@ CREATE TABLE public.domain_event_sent_2021 ( ALTER TABLE ONLY public.domain_event_sent ATTACH PARTITION public.domain_event_sent_2021 FOR VALUES FROM ('2021-01-01 00:00:00+00') TO ('2022-01-01 00:00:00+00'); -ALTER TABLE public.domain_event_sent_2021 OWNER TO doadmin; +ALTER TABLE public.domain_event_sent_2021 OWNER TO postgres; -- -- Name: domain_event_sent_2022; Type: TABLE; Schema: public; Owner: doadmin @@ -1598,7 +1598,7 @@ CREATE TABLE public.domain_event_sent_2022 ( ALTER TABLE ONLY public.domain_event_sent ATTACH PARTITION public.domain_event_sent_2022 FOR VALUES FROM ('2022-01-01 00:00:00+00') TO ('2023-01-01 00:00:00+00'); -ALTER TABLE public.domain_event_sent_2022 OWNER TO doadmin; +ALTER TABLE public.domain_event_sent_2022 OWNER TO postgres; -- -- Name: domain_event_sent_2023; Type: TABLE; Schema: public; Owner: doadmin @@ -1614,7 +1614,7 @@ CREATE TABLE public.domain_event_sent_2023 ( ALTER TABLE ONLY public.domain_event_sent ATTACH PARTITION public.domain_event_sent_2023 FOR VALUES FROM ('2023-01-01 00:00:00+00') TO ('2024-01-01 00:00:00+00'); -ALTER TABLE public.domain_event_sent_2023 OWNER TO doadmin; +ALTER TABLE public.domain_event_sent_2023 OWNER TO postgres; -- -- Name: donors; Type: TABLE; Schema: public; Owner: doadmin @@ -1629,7 +1629,7 @@ CREATE TABLE public.donors ( ); -ALTER TABLE public.donors OWNER TO doadmin; +ALTER TABLE public.donors OWNER TO postgres; -- -- Name: donors_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1643,7 +1643,7 @@ CREATE SEQUENCE public.donors_id_seq CACHE 1; -ALTER TABLE public.donors_id_seq OWNER TO doadmin; +ALTER TABLE public.donors_id_seq OWNER TO postgres; -- -- Name: donors_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1671,7 +1671,7 @@ CREATE TABLE public.entities ( ); -ALTER TABLE public.entities OWNER TO doadmin; +ALTER TABLE public.entities OWNER TO postgres; -- -- Name: entity_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1686,7 +1686,7 @@ CREATE SEQUENCE public.entity_id_seq CACHE 1; -ALTER TABLE public.entity_id_seq OWNER TO doadmin; +ALTER TABLE public.entity_id_seq OWNER TO postgres; -- -- Name: entity_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1707,7 +1707,7 @@ CREATE TABLE public.entity_manager ( ); -ALTER TABLE public.entity_manager OWNER TO doadmin; +ALTER TABLE public.entity_manager OWNER TO postgres; -- -- Name: entity_manager_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1722,7 +1722,7 @@ CREATE SEQUENCE public.entity_manager_id_seq CACHE 1; -ALTER TABLE public.entity_manager_id_seq OWNER TO doadmin; +ALTER TABLE public.entity_manager_id_seq OWNER TO postgres; -- -- Name: entity_manager_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1745,7 +1745,7 @@ CREATE TABLE public.entity_relationship ( ); -ALTER TABLE public.entity_relationship OWNER TO doadmin; +ALTER TABLE public.entity_relationship OWNER TO postgres; -- -- Name: entity_relationship_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1760,7 +1760,7 @@ CREATE SEQUENCE public.entity_relationship_id_seq CACHE 1; -ALTER TABLE public.entity_relationship_id_seq OWNER TO doadmin; +ALTER TABLE public.entity_relationship_id_seq OWNER TO postgres; -- -- Name: entity_relationship_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1781,7 +1781,7 @@ CREATE TABLE public.entity_role ( ); -ALTER TABLE public.entity_role OWNER TO doadmin; +ALTER TABLE public.entity_role OWNER TO postgres; -- -- Name: entity_role_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1796,7 +1796,7 @@ CREATE SEQUENCE public.entity_role_id_seq CACHE 1; -ALTER TABLE public.entity_role_id_seq OWNER TO doadmin; +ALTER TABLE public.entity_role_id_seq OWNER TO postgres; -- -- Name: entity_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1817,7 +1817,7 @@ CREATE TABLE public.import_error ( ); -ALTER TABLE public.import_error OWNER TO doadmin; +ALTER TABLE public.import_error OWNER TO postgres; -- -- Name: import_error_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1832,7 +1832,7 @@ CREATE SEQUENCE public.import_error_id_seq CACHE 1; -ALTER TABLE public.import_error_id_seq OWNER TO doadmin; +ALTER TABLE public.import_error_id_seq OWNER TO postgres; -- -- Name: import_error_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1859,7 +1859,7 @@ CREATE TABLE public.job ( ); -ALTER TABLE public.job OWNER TO doadmin; +ALTER TABLE public.job OWNER TO postgres; -- -- Name: job_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1874,7 +1874,7 @@ CREATE SEQUENCE public.job_id_seq CACHE 1; -ALTER TABLE public.job_id_seq OWNER TO doadmin; +ALTER TABLE public.job_id_seq OWNER TO postgres; -- -- Name: job_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1907,7 +1907,7 @@ CREATE TABLE public.khushi_denormalized ( ); -ALTER TABLE public.khushi_denormalized OWNER TO doadmin; +ALTER TABLE public.khushi_denormalized OWNER TO postgres; -- -- Name: knex_migrations; Type: TABLE; Schema: public; Owner: doadmin @@ -1921,7 +1921,7 @@ CREATE TABLE public.knex_migrations ( ); -ALTER TABLE public.knex_migrations OWNER TO doadmin; +ALTER TABLE public.knex_migrations OWNER TO postgres; -- -- Name: knex_migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1936,7 +1936,7 @@ CREATE SEQUENCE public.knex_migrations_id_seq CACHE 1; -ALTER TABLE public.knex_migrations_id_seq OWNER TO doadmin; +ALTER TABLE public.knex_migrations_id_seq OWNER TO postgres; -- -- Name: knex_migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1955,7 +1955,7 @@ CREATE TABLE public.knex_migrations_lock ( ); -ALTER TABLE public.knex_migrations_lock OWNER TO doadmin; +ALTER TABLE public.knex_migrations_lock OWNER TO postgres; -- -- Name: knex_migrations_lock_index_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -1970,7 +1970,7 @@ CREATE SEQUENCE public.knex_migrations_lock_index_seq CACHE 1; -ALTER TABLE public.knex_migrations_lock_index_seq OWNER TO doadmin; +ALTER TABLE public.knex_migrations_lock_index_seq OWNER TO postgres; -- -- Name: knex_migrations_lock_index_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -1991,7 +1991,7 @@ CREATE TABLE public.leaf ( ); -ALTER TABLE public.leaf OWNER TO doadmin; +ALTER TABLE public.leaf OWNER TO postgres; -- -- Name: leaf_khushi; Type: TABLE; Schema: public; Owner: doadmin @@ -2005,7 +2005,7 @@ CREATE TABLE public.leaf_khushi ( ); -ALTER TABLE public.leaf_khushi OWNER TO doadmin; +ALTER TABLE public.leaf_khushi OWNER TO postgres; -- -- Name: leaf_khushi_leaf_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2020,7 +2020,7 @@ CREATE SEQUENCE public.leaf_khushi_leaf_id_seq CACHE 1; -ALTER TABLE public.leaf_khushi_leaf_id_seq OWNER TO doadmin; +ALTER TABLE public.leaf_khushi_leaf_id_seq OWNER TO postgres; -- -- Name: leaf_khushi_leaf_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2042,7 +2042,7 @@ CREATE SEQUENCE public.leaf_leaf_id_seq CACHE 1; -ALTER TABLE public.leaf_leaf_id_seq OWNER TO doadmin; +ALTER TABLE public.leaf_leaf_id_seq OWNER TO postgres; -- -- Name: leaf_leaf_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2063,7 +2063,7 @@ CREATE SEQUENCE public.locations_id_seq CACHE 1; -ALTER TABLE public.locations_id_seq OWNER TO doadmin; +ALTER TABLE public.locations_id_seq OWNER TO postgres; -- -- Name: locations; Type: TABLE; Schema: public; Owner: doadmin @@ -2078,7 +2078,7 @@ CREATE TABLE public.locations ( ); -ALTER TABLE public.locations OWNER TO doadmin; +ALTER TABLE public.locations OWNER TO postgres; -- -- Name: log; Type: TABLE; Schema: public; Owner: doadmin @@ -2096,7 +2096,7 @@ CREATE TABLE public.log ( ); -ALTER TABLE public.log OWNER TO doadmin; +ALTER TABLE public.log OWNER TO postgres; -- -- Name: log_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2111,7 +2111,7 @@ CREATE SEQUENCE public.log_id_seq CACHE 1; -ALTER TABLE public.log_id_seq OWNER TO doadmin; +ALTER TABLE public.log_id_seq OWNER TO postgres; -- -- Name: log_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2133,7 +2133,7 @@ CREATE VIEW public.long_running AS WHERE ((now() - pg_stat_activity.query_start) > '00:05:00'::interval); -ALTER TABLE public.long_running OWNER TO doadmin; +ALTER TABLE public.long_running OWNER TO postgres; -- -- Name: migrations; Type: TABLE; Schema: public; Owner: doadmin @@ -2146,7 +2146,7 @@ CREATE TABLE public.migrations ( ); -ALTER TABLE public.migrations OWNER TO doadmin; +ALTER TABLE public.migrations OWNER TO postgres; -- -- Name: migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2160,7 +2160,7 @@ CREATE SEQUENCE public.migrations_id_seq CACHE 1; -ALTER TABLE public.migrations_id_seq OWNER TO doadmin; +ALTER TABLE public.migrations_id_seq OWNER TO postgres; -- -- Name: migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2180,7 +2180,7 @@ CREATE TABLE public.migrations_state ( ); -ALTER TABLE public.migrations_state OWNER TO doadmin; +ALTER TABLE public.migrations_state OWNER TO postgres; -- -- Name: note_trees; Type: TABLE; Schema: public; Owner: doadmin @@ -2192,7 +2192,7 @@ CREATE TABLE public.note_trees ( ); -ALTER TABLE public.note_trees OWNER TO doadmin; +ALTER TABLE public.note_trees OWNER TO postgres; -- -- Name: notes_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2206,7 +2206,7 @@ CREATE SEQUENCE public.notes_id_seq CACHE 1; -ALTER TABLE public.notes_id_seq OWNER TO doadmin; +ALTER TABLE public.notes_id_seq OWNER TO postgres; -- -- Name: notes; Type: TABLE; Schema: public; Owner: doadmin @@ -2220,7 +2220,7 @@ CREATE TABLE public.notes ( ); -ALTER TABLE public.notes OWNER TO doadmin; +ALTER TABLE public.notes OWNER TO postgres; -- -- Name: organization_children; Type: MATERIALIZED VIEW; Schema: public; Owner: doadmin @@ -2236,7 +2236,7 @@ CREATE MATERIALIZED VIEW public.organization_children AS WITH NO DATA; -ALTER TABLE public.organization_children OWNER TO doadmin; +ALTER TABLE public.organization_children OWNER TO postgres; -- -- Name: organizations; Type: TABLE; Schema: public; Owner: doadmin @@ -2248,7 +2248,7 @@ CREATE TABLE public.organizations ( ); -ALTER TABLE public.organizations OWNER TO doadmin; +ALTER TABLE public.organizations OWNER TO postgres; -- -- Name: organizations_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2262,7 +2262,7 @@ CREATE SEQUENCE public.organizations_id_seq CACHE 1; -ALTER TABLE public.organizations_id_seq OWNER TO doadmin; +ALTER TABLE public.organizations_id_seq OWNER TO postgres; -- -- Name: organizations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2285,7 +2285,7 @@ CREATE MATERIALIZED VIEW public.orgnization_children AS WITH NO DATA; -ALTER TABLE public.orgnization_children OWNER TO doadmin; +ALTER TABLE public.orgnization_children OWNER TO postgres; -- -- Name: payment; Type: TABLE; Schema: public; Owner: doadmin @@ -2303,7 +2303,7 @@ CREATE TABLE public.payment ( ); -ALTER TABLE public.payment OWNER TO doadmin; +ALTER TABLE public.payment OWNER TO postgres; -- -- Name: payment_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2318,7 +2318,7 @@ CREATE SEQUENCE public.payment_id_seq CACHE 1; -ALTER TABLE public.payment_id_seq OWNER TO doadmin; +ALTER TABLE public.payment_id_seq OWNER TO postgres; -- -- Name: payment_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2339,7 +2339,7 @@ CREATE SEQUENCE public.pending_update_id_seq CACHE 1; -ALTER TABLE public.pending_update_id_seq OWNER TO doadmin; +ALTER TABLE public.pending_update_id_seq OWNER TO postgres; -- -- Name: pending_update; Type: TABLE; Schema: public; Owner: doadmin @@ -2354,7 +2354,7 @@ CREATE TABLE public.pending_update ( ); -ALTER TABLE public.pending_update OWNER TO doadmin; +ALTER TABLE public.pending_update OWNER TO postgres; -- -- Name: photo_trees; Type: TABLE; Schema: public; Owner: doadmin @@ -2366,7 +2366,7 @@ CREATE TABLE public.photo_trees ( ); -ALTER TABLE public.photo_trees OWNER TO doadmin; +ALTER TABLE public.photo_trees OWNER TO postgres; -- -- Name: photos_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2380,7 +2380,7 @@ CREATE SEQUENCE public.photos_id_seq CACHE 1; -ALTER TABLE public.photos_id_seq OWNER TO doadmin; +ALTER TABLE public.photos_id_seq OWNER TO postgres; -- -- Name: photos; Type: TABLE; Schema: public; Owner: doadmin @@ -2396,7 +2396,7 @@ CREATE TABLE public.photos ( ); -ALTER TABLE public.photos OWNER TO doadmin; +ALTER TABLE public.photos OWNER TO postgres; -- -- Name: planter_registrations; Type: TABLE; Schema: public; Owner: doadmin @@ -2421,7 +2421,7 @@ CREATE TABLE public.planter_registrations ( ); -ALTER TABLE public.planter_registrations OWNER TO doadmin; +ALTER TABLE public.planter_registrations OWNER TO postgres; -- -- Name: planter_registrations_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2435,7 +2435,7 @@ CREATE SEQUENCE public.planter_registrations_id_seq CACHE 1; -ALTER TABLE public.planter_registrations_id_seq OWNER TO doadmin; +ALTER TABLE public.planter_registrations_id_seq OWNER TO postgres; -- -- Name: planter_registrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2461,7 +2461,7 @@ CREATE TABLE public.planters ( ); -ALTER TABLE public.planters OWNER TO doadmin; +ALTER TABLE public.planters OWNER TO postgres; -- -- Name: region_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2475,7 +2475,7 @@ CREATE SEQUENCE public.region_id_seq CACHE 1; -ALTER TABLE public.region_id_seq OWNER TO doadmin; +ALTER TABLE public.region_id_seq OWNER TO postgres; -- -- Name: region_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2494,7 +2494,7 @@ CREATE TABLE public.region_type ( ); -ALTER TABLE public.region_type OWNER TO doadmin; +ALTER TABLE public.region_type OWNER TO postgres; -- -- Name: region_type_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2508,7 +2508,7 @@ CREATE SEQUENCE public.region_type_id_seq CACHE 1; -ALTER TABLE public.region_type_id_seq OWNER TO doadmin; +ALTER TABLE public.region_type_id_seq OWNER TO postgres; -- -- Name: region_type_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2529,7 +2529,7 @@ CREATE TABLE public.region_zoom ( ); -ALTER TABLE public.region_zoom OWNER TO doadmin; +ALTER TABLE public.region_zoom OWNER TO postgres; -- -- Name: region_zoom_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2543,7 +2543,7 @@ CREATE SEQUENCE public.region_zoom_id_seq CACHE 1; -ALTER TABLE public.region_zoom_id_seq OWNER TO doadmin; +ALTER TABLE public.region_zoom_id_seq OWNER TO postgres; -- -- Name: region_zoom_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2565,7 +2565,7 @@ CREATE TABLE public.rendered_task_instance_fields ( ); -ALTER TABLE public.rendered_task_instance_fields OWNER TO doadmin; +ALTER TABLE public.rendered_task_instance_fields OWNER TO postgres; -- -- Name: sensor_instance; Type: TABLE; Schema: public; Owner: doadmin @@ -2590,7 +2590,7 @@ CREATE TABLE public.sensor_instance ( ); -ALTER TABLE public.sensor_instance OWNER TO doadmin; +ALTER TABLE public.sensor_instance OWNER TO postgres; -- -- Name: sensor_instance_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2605,7 +2605,7 @@ CREATE SEQUENCE public.sensor_instance_id_seq CACHE 1; -ALTER TABLE public.sensor_instance_id_seq OWNER TO doadmin; +ALTER TABLE public.sensor_instance_id_seq OWNER TO postgres; -- -- Name: sensor_instance_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2628,7 +2628,7 @@ CREATE TABLE public.serialized_dag ( ); -ALTER TABLE public.serialized_dag OWNER TO doadmin; +ALTER TABLE public.serialized_dag OWNER TO postgres; -- -- Name: settings_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2642,7 +2642,7 @@ CREATE SEQUENCE public.settings_id_seq CACHE 1; -ALTER TABLE public.settings_id_seq OWNER TO doadmin; +ALTER TABLE public.settings_id_seq OWNER TO postgres; -- -- Name: settings; Type: TABLE; Schema: public; Owner: doadmin @@ -2655,7 +2655,7 @@ CREATE TABLE public.settings ( ); -ALTER TABLE public.settings OWNER TO doadmin; +ALTER TABLE public.settings OWNER TO postgres; -- -- Name: sla_miss; Type: TABLE; Schema: public; Owner: doadmin @@ -2672,7 +2672,7 @@ CREATE TABLE public.sla_miss ( ); -ALTER TABLE public.sla_miss OWNER TO doadmin; +ALTER TABLE public.sla_miss OWNER TO postgres; -- -- Name: slot_pool; Type: TABLE; Schema: public; Owner: doadmin @@ -2686,7 +2686,7 @@ CREATE TABLE public.slot_pool ( ); -ALTER TABLE public.slot_pool OWNER TO doadmin; +ALTER TABLE public.slot_pool OWNER TO postgres; -- -- Name: slot_pool_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2701,7 +2701,7 @@ CREATE SEQUENCE public.slot_pool_id_seq CACHE 1; -ALTER TABLE public.slot_pool_id_seq OWNER TO doadmin; +ALTER TABLE public.slot_pool_id_seq OWNER TO postgres; -- -- Name: slot_pool_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2722,7 +2722,7 @@ CREATE TABLE public.survey ( ); -ALTER TABLE public.survey OWNER TO doadmin; +ALTER TABLE public.survey OWNER TO postgres; -- -- Name: survey_question; Type: TABLE; Schema: public; Owner: doadmin @@ -2738,7 +2738,7 @@ CREATE TABLE public.survey_question ( ); -ALTER TABLE public.survey_question OWNER TO doadmin; +ALTER TABLE public.survey_question OWNER TO postgres; -- -- Name: tag; Type: TABLE; Schema: public; Owner: doadmin @@ -2752,7 +2752,7 @@ CREATE TABLE public.tag ( ); -ALTER TABLE public.tag OWNER TO doadmin; +ALTER TABLE public.tag OWNER TO postgres; -- -- Name: tag_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2767,7 +2767,7 @@ CREATE SEQUENCE public.tag_id_seq CACHE 1; -ALTER TABLE public.tag_id_seq OWNER TO doadmin; +ALTER TABLE public.tag_id_seq OWNER TO postgres; -- -- Name: tag_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2791,7 +2791,7 @@ CREATE TABLE public.task_fail ( ); -ALTER TABLE public.task_fail OWNER TO doadmin; +ALTER TABLE public.task_fail OWNER TO postgres; -- -- Name: task_fail_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2806,7 +2806,7 @@ CREATE SEQUENCE public.task_fail_id_seq CACHE 1; -ALTER TABLE public.task_fail_id_seq OWNER TO doadmin; +ALTER TABLE public.task_fail_id_seq OWNER TO postgres; -- -- Name: task_fail_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2827,7 +2827,7 @@ CREATE SEQUENCE public.task_id_sequence CACHE 1; -ALTER TABLE public.task_id_sequence OWNER TO doadmin; +ALTER TABLE public.task_id_sequence OWNER TO postgres; -- -- Name: task_instance; Type: TABLE; Schema: public; Owner: doadmin @@ -2859,7 +2859,7 @@ CREATE TABLE public.task_instance ( ); -ALTER TABLE public.task_instance OWNER TO doadmin; +ALTER TABLE public.task_instance OWNER TO postgres; -- -- Name: task_reschedule; Type: TABLE; Schema: public; Owner: doadmin @@ -2878,7 +2878,7 @@ CREATE TABLE public.task_reschedule ( ); -ALTER TABLE public.task_reschedule OWNER TO doadmin; +ALTER TABLE public.task_reschedule OWNER TO postgres; -- -- Name: task_reschedule_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2893,7 +2893,7 @@ CREATE SEQUENCE public.task_reschedule_id_seq CACHE 1; -ALTER TABLE public.task_reschedule_id_seq OWNER TO doadmin; +ALTER TABLE public.task_reschedule_id_seq OWNER TO postgres; -- -- Name: task_reschedule_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2914,7 +2914,7 @@ CREATE SEQUENCE public.taskset_id_sequence CACHE 1; -ALTER TABLE public.taskset_id_sequence OWNER TO doadmin; +ALTER TABLE public.taskset_id_sequence OWNER TO postgres; -- -- Name: test; Type: TABLE; Schema: public; Owner: doadmin @@ -2925,7 +2925,7 @@ CREATE TABLE public.test ( ); -ALTER TABLE public.test OWNER TO doadmin; +ALTER TABLE public.test OWNER TO postgres; -- -- Name: token_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -2940,7 +2940,7 @@ CREATE SEQUENCE public.token_id_seq CACHE 1; -ALTER TABLE public.token_id_seq OWNER TO doadmin; +ALTER TABLE public.token_id_seq OWNER TO postgres; -- -- Name: token_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -2961,7 +2961,7 @@ CREATE SEQUENCE public.tokens_id_seq CACHE 1; -ALTER TABLE public.tokens_id_seq OWNER TO doadmin; +ALTER TABLE public.tokens_id_seq OWNER TO postgres; -- -- Name: trading.transaction; Type: TABLE; Schema: public; Owner: doadmin @@ -2977,7 +2977,7 @@ CREATE TABLE public."trading.transaction" ( ); -ALTER TABLE public."trading.transaction" OWNER TO doadmin; +ALTER TABLE public."trading.transaction" OWNER TO postgres; -- -- Name: transaction; Type: TABLE; Schema: public; Owner: doadmin @@ -2992,7 +2992,7 @@ CREATE TABLE public.transaction ( ); -ALTER TABLE public.transaction OWNER TO doadmin; +ALTER TABLE public.transaction OWNER TO postgres; -- -- Name: transaction_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -3007,7 +3007,7 @@ CREATE SEQUENCE public.transaction_id_seq CACHE 1; -ALTER TABLE public.transaction_id_seq OWNER TO doadmin; +ALTER TABLE public.transaction_id_seq OWNER TO postgres; -- -- Name: transaction_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -3027,7 +3027,7 @@ CREATE TABLE public.transfer ( ); -ALTER TABLE public.transfer OWNER TO doadmin; +ALTER TABLE public.transfer OWNER TO postgres; -- -- Name: transfer_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -3042,7 +3042,7 @@ CREATE SEQUENCE public.transfer_id_seq CACHE 1; -ALTER TABLE public.transfer_id_seq OWNER TO doadmin; +ALTER TABLE public.transfer_id_seq OWNER TO postgres; -- -- Name: transfer_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -3063,7 +3063,7 @@ CREATE TABLE public.tree_attributes ( ); -ALTER TABLE public.tree_attributes OWNER TO doadmin; +ALTER TABLE public.tree_attributes OWNER TO postgres; -- -- Name: tree_attributes_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -3077,7 +3077,7 @@ CREATE SEQUENCE public.tree_attributes_id_seq CACHE 1; -ALTER TABLE public.tree_attributes_id_seq OWNER TO doadmin; +ALTER TABLE public.tree_attributes_id_seq OWNER TO postgres; -- -- Name: tree_attributes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -3097,7 +3097,7 @@ CREATE TABLE public.tree_name ( ); -ALTER TABLE public.tree_name OWNER TO doadmin; +ALTER TABLE public.tree_name OWNER TO postgres; -- -- Name: tree_name_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -3112,7 +3112,7 @@ CREATE SEQUENCE public.tree_name_id_seq CACHE 1; -ALTER TABLE public.tree_name_id_seq OWNER TO doadmin; +ALTER TABLE public.tree_name_id_seq OWNER TO postgres; -- -- Name: tree_name_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -3133,7 +3133,7 @@ CREATE SEQUENCE public.tree_region_id_seq CACHE 1; -ALTER TABLE public.tree_region_id_seq OWNER TO doadmin; +ALTER TABLE public.tree_region_id_seq OWNER TO postgres; -- -- Name: tree_region_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -3154,7 +3154,7 @@ CREATE SEQUENCE public.tree_species_id_seq CACHE 1; -ALTER TABLE public.tree_species_id_seq OWNER TO doadmin; +ALTER TABLE public.tree_species_id_seq OWNER TO postgres; -- -- Name: tree_species; Type: TABLE; Schema: public; Owner: doadmin @@ -3169,7 +3169,7 @@ CREATE TABLE public.tree_species ( ); -ALTER TABLE public.tree_species OWNER TO doadmin; +ALTER TABLE public.tree_species OWNER TO postgres; -- -- Name: tree_tag; Type: TABLE; Schema: public; Owner: doadmin @@ -3182,7 +3182,7 @@ CREATE TABLE public.tree_tag ( ); -ALTER TABLE public.tree_tag OWNER TO doadmin; +ALTER TABLE public.tree_tag OWNER TO postgres; -- -- Name: tree_tag_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -3197,7 +3197,7 @@ CREATE SEQUENCE public.tree_tag_id_seq CACHE 1; -ALTER TABLE public.tree_tag_id_seq OWNER TO doadmin; +ALTER TABLE public.tree_tag_id_seq OWNER TO postgres; -- -- Name: tree_tag_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -3245,7 +3245,7 @@ CREATE MATERIALIZED VIEW public.trees_active AS WITH NO DATA; -ALTER TABLE public.trees_active OWNER TO doadmin; +ALTER TABLE public.trees_active OWNER TO postgres; -- -- Name: treetracker_capture_backup; Type: TABLE; Schema: public; Owner: doadmin @@ -3278,7 +3278,7 @@ CREATE TABLE public.treetracker_capture_backup ( ); -ALTER TABLE public.treetracker_capture_backup OWNER TO doadmin; +ALTER TABLE public.treetracker_capture_backup OWNER TO postgres; -- -- Name: treetracker_tree_backup; Type: TABLE; Schema: public; Owner: doadmin @@ -3302,7 +3302,7 @@ CREATE TABLE public.treetracker_tree_backup ( ); -ALTER TABLE public.treetracker_tree_backup OWNER TO doadmin; +ALTER TABLE public.treetracker_tree_backup OWNER TO postgres; -- -- Name: variable; Type: TABLE; Schema: public; Owner: doadmin @@ -3317,7 +3317,7 @@ CREATE TABLE public.variable ( ); -ALTER TABLE public.variable OWNER TO doadmin; +ALTER TABLE public.variable OWNER TO postgres; -- -- Name: variable_id_seq; Type: SEQUENCE; Schema: public; Owner: doadmin @@ -3332,7 +3332,7 @@ CREATE SEQUENCE public.variable_id_seq CACHE 1; -ALTER TABLE public.variable_id_seq OWNER TO doadmin; +ALTER TABLE public.variable_id_seq OWNER TO postgres; -- -- Name: variable_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: doadmin @@ -3355,7 +3355,7 @@ CREATE TABLE public.xcom ( ); -ALTER TABLE public.xcom OWNER TO doadmin; +ALTER TABLE public.xcom OWNER TO postgres; -- -- Name: ab_permission id; Type: DEFAULT; Schema: public; Owner: doadmin diff --git a/wallet.sql b/wallet.sql index 1cb13f77..dbb06b6e 100644 --- a/wallet.sql +++ b/wallet.sql @@ -39,7 +39,7 @@ CREATE TYPE wallet.entity_trust_request_type AS ENUM ( ); -ALTER TYPE wallet.entity_trust_request_type OWNER TO doadmin; +ALTER TYPE wallet.entity_trust_request_type OWNER TO postgres; -- -- Name: entity_trust_state_type; Type: TYPE; Schema: wallet; Owner: doadmin @@ -54,7 +54,7 @@ CREATE TYPE wallet.entity_trust_state_type AS ENUM ( ); -ALTER TYPE wallet.entity_trust_state_type OWNER TO doadmin; +ALTER TYPE wallet.entity_trust_state_type OWNER TO postgres; -- -- Name: entity_trust_type; Type: TYPE; Schema: wallet; Owner: doadmin @@ -67,7 +67,7 @@ CREATE TYPE wallet.entity_trust_type AS ENUM ( ); -ALTER TYPE wallet.entity_trust_type OWNER TO doadmin; +ALTER TYPE wallet.entity_trust_type OWNER TO postgres; -- -- Name: transfer_state; Type: TYPE; Schema: wallet; Owner: doadmin @@ -82,7 +82,7 @@ CREATE TYPE wallet.transfer_state AS ENUM ( ); -ALTER TYPE wallet.transfer_state OWNER TO doadmin; +ALTER TYPE wallet.transfer_state OWNER TO postgres; -- -- Name: transfer_state_change_approval_type; Type: TYPE; Schema: wallet; Owner: doadmin @@ -95,7 +95,7 @@ CREATE TYPE wallet.transfer_state_change_approval_type AS ENUM ( ); -ALTER TYPE wallet.transfer_state_change_approval_type OWNER TO doadmin; +ALTER TYPE wallet.transfer_state_change_approval_type OWNER TO postgres; -- -- Name: transfer_type; Type: TYPE; Schema: wallet; Owner: doadmin @@ -108,7 +108,7 @@ CREATE TYPE wallet.transfer_type AS ENUM ( ); -ALTER TYPE wallet.transfer_type OWNER TO doadmin; +ALTER TYPE wallet.transfer_type OWNER TO postgres; -- -- Name: wallet_event_type; Type: TYPE; Schema: wallet; Owner: doadmin @@ -132,7 +132,7 @@ CREATE TYPE wallet.wallet_event_type AS ENUM ( ); -ALTER TYPE wallet.wallet_event_type OWNER TO doadmin; +ALTER TYPE wallet.wallet_event_type OWNER TO postgres; SET default_tablespace = ''; @@ -152,7 +152,7 @@ CREATE TABLE wallet.api_key ( ); -ALTER TABLE wallet.api_key OWNER TO doadmin; +ALTER TABLE wallet.api_key OWNER TO postgres; -- -- Name: migrations; Type: TABLE; Schema: wallet; Owner: doadmin @@ -165,7 +165,7 @@ CREATE TABLE wallet.migrations ( ); -ALTER TABLE wallet.migrations OWNER TO doadmin; +ALTER TABLE wallet.migrations OWNER TO postgres; -- -- Name: migrations_id_seq; Type: SEQUENCE; Schema: wallet; Owner: doadmin @@ -180,7 +180,7 @@ CREATE SEQUENCE wallet.migrations_id_seq CACHE 1; -ALTER TABLE wallet.migrations_id_seq OWNER TO doadmin; +ALTER TABLE wallet.migrations_id_seq OWNER TO postgres; -- -- Name: migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: wallet; Owner: doadmin @@ -205,7 +205,7 @@ CREATE TABLE wallet.token ( ); -ALTER TABLE wallet.token OWNER TO doadmin; +ALTER TABLE wallet.token OWNER TO postgres; -- -- Name: transaction; Type: TABLE; Schema: wallet; Owner: doadmin @@ -222,7 +222,7 @@ CREATE TABLE wallet.transaction ( ); -ALTER TABLE wallet.transaction OWNER TO doadmin; +ALTER TABLE wallet.transaction OWNER TO postgres; -- -- Name: transfer; Type: TABLE; Schema: wallet; Owner: doadmin @@ -243,7 +243,7 @@ CREATE TABLE wallet.transfer ( ); -ALTER TABLE wallet.transfer OWNER TO doadmin; +ALTER TABLE wallet.transfer OWNER TO postgres; -- -- Name: transfer_audit; Type: TABLE; Schema: wallet; Owner: doadmin @@ -259,7 +259,7 @@ CREATE TABLE wallet.transfer_audit ( ); -ALTER TABLE wallet.transfer_audit OWNER TO doadmin; +ALTER TABLE wallet.transfer_audit OWNER TO postgres; -- -- Name: wallet; Type: TABLE; Schema: wallet; Owner: doadmin @@ -275,7 +275,7 @@ CREATE TABLE wallet.wallet ( ); -ALTER TABLE wallet.wallet OWNER TO doadmin; +ALTER TABLE wallet.wallet OWNER TO postgres; -- -- Name: wallet_event; Type: TABLE; Schema: wallet; Owner: doadmin @@ -289,7 +289,7 @@ CREATE TABLE wallet.wallet_event ( ); -ALTER TABLE wallet.wallet_event OWNER TO doadmin; +ALTER TABLE wallet.wallet_event OWNER TO postgres; -- -- Name: wallet_trust; Type: TABLE; Schema: wallet; Owner: doadmin @@ -309,7 +309,7 @@ CREATE TABLE wallet.wallet_trust ( ); -ALTER TABLE wallet.wallet_trust OWNER TO doadmin; +ALTER TABLE wallet.wallet_trust OWNER TO postgres; -- -- Name: wallet_trust_log; Type: TABLE; Schema: wallet; Owner: doadmin @@ -331,7 +331,7 @@ CREATE TABLE wallet.wallet_trust_log ( ); -ALTER TABLE wallet.wallet_trust_log OWNER TO doadmin; +ALTER TABLE wallet.wallet_trust_log OWNER TO postgres; -- -- Name: migrations id; Type: DEFAULT; Schema: wallet; Owner: doadmin From b74454c23a0ae93f22ae1173c2b3aa51b2388f05 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Mon, 28 Feb 2022 21:24:12 -0800 Subject: [PATCH 17/44] chore: add uuid extension to db.sql --- db.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/db.sql b/db.sql index 711e7824..4e53922a 100644 --- a/db.sql +++ b/db.sql @@ -11,11 +11,13 @@ SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); +SELECT pg_catalog.set_config('search_path', 'public', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; + -- -- Name: public; Type: SCHEMA; Schema: -; Owner: postgres @@ -26,6 +28,7 @@ CREATE SCHEMA public; ALTER SCHEMA public OWNER TO postgres; + -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- From 92bc1e8c23adbf0f06549ab274c401284fdb38be Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Mon, 28 Feb 2022 23:38:02 -0800 Subject: [PATCH 18/44] refactor: add table names to enum --- server/infra/database/knex.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/infra/database/knex.ts b/server/infra/database/knex.ts index 0e3281e6..f1734c93 100644 --- a/server/infra/database/knex.ts +++ b/server/infra/database/knex.ts @@ -25,4 +25,8 @@ export default knex(knexConfig); export const enum TableNames { Trees = 'trees', Wallets = 'wallet', + Species = 'tree_species', + Planters = 'planter', + Organizations = 'entity', + Countries = 'region', } From 9cdeb4bfa55273c44ffdea1532bbdd9b234e523e Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Mon, 28 Feb 2022 23:38:16 -0800 Subject: [PATCH 19/44] chore: create example data --- .../examples/planters/examplePlanter.json | 19 +++++++++++++++++++ .../spec/examples/species/exampleSpecies.json | 7 +++++++ 2 files changed, 26 insertions(+) create mode 100644 docs/api/spec/examples/planters/examplePlanter.json create mode 100644 docs/api/spec/examples/species/exampleSpecies.json diff --git a/docs/api/spec/examples/planters/examplePlanter.json b/docs/api/spec/examples/planters/examplePlanter.json new file mode 100644 index 00000000..d465e680 --- /dev/null +++ b/docs/api/spec/examples/planters/examplePlanter.json @@ -0,0 +1,19 @@ +{ + "id": 3581, + "first_name": "Anonymous", + "last_name": "Planter", + "email": "anonymous@planter.org", + "organization": "", + "phone": "1234567890", + "pwd_reset_required": false, + "image_url": "https://treetracker-production-images.s3.eu-central-1.amazonaws.com/2021.03.25.12.32.45_-9.342288333333332_34.56734166666667_902b5202-fa3f-4e6b-a26d-d1bf9de5dbda_IMG_20210325_121612_4871689335808390215.jpg", + "person_id": null, + "organization_id": 1234, + "image_rotation": 0, + "grower_account_uuid": null, + "links": { + "featured_trees": "/trees?planter_id=3581&limit=20&offset=0", + "associated_organizations": "/organizations?planter_id=3581&limit=20&offset=0", + "species": "/species?planter_id=3581&limit=20&offset=0" + } +} diff --git a/docs/api/spec/examples/species/exampleSpecies.json b/docs/api/spec/examples/species/exampleSpecies.json new file mode 100644 index 00000000..bbf8a43b --- /dev/null +++ b/docs/api/spec/examples/species/exampleSpecies.json @@ -0,0 +1,7 @@ +{ + "id": 8, + "name": "strawberry", + "desc": "strawberries", + "active": false, + "value_factor": 0 +} From c91b394e9c9085cf250e3cf44b152e396aa6a99d Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Mon, 28 Feb 2022 23:38:42 -0800 Subject: [PATCH 20/44] test(setup): seed table data --- .jest/globalSetup.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.jest/globalSetup.ts b/.jest/globalSetup.ts index dd4aaa44..3f1ea941 100644 --- a/.jest/globalSetup.ts +++ b/.jest/globalSetup.ts @@ -2,6 +2,10 @@ import * as dotenv from 'dotenv'; dotenv.config(); import exampleTree from '../docs/api/spec/examples/trees/912681.json'; import exampleWallet from '../docs/api/spec/examples/wallets/exampleWallet.json'; +import exampleSpecies from '../docs/api/spec/examples/species/exampleSpecies.json'; +import examplePlanter from '../docs/api/spec/examples/planters/examplePlanter.json'; +import exampleCountry from '../docs/api/spec/examples/countries/6632357.json'; +import exampleOrganization from '../docs/api/spec/examples/organizations/1.json'; import knex, { TableNames } from '../server/infra/database/knex'; export default async function globalSetup() { @@ -19,6 +23,11 @@ export default async function globalSetup() { exampleWallet.salt, ], ); + + await knex(TableNames.Species).insert(exampleSpecies); + await knex(TableNames.Planters).insert(examplePlanter); + await knex(TableNames.Countries).insert(exampleCountry); + await knex(TableNames.Organizations).insert(exampleOrganization); } knex.destroy(); } From 3e1b302669dcdb4791891c116454751bbea7712e Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Mon, 28 Feb 2022 23:44:26 -0800 Subject: [PATCH 21/44] chore(fixup): create example data --- .../examples/planters/examplePlanter.json | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/api/spec/examples/planters/examplePlanter.json b/docs/api/spec/examples/planters/examplePlanter.json index d465e680..220f030c 100644 --- a/docs/api/spec/examples/planters/examplePlanter.json +++ b/docs/api/spec/examples/planters/examplePlanter.json @@ -1,19 +1,19 @@ { - "id": 3581, - "first_name": "Anonymous", - "last_name": "Planter", - "email": "anonymous@planter.org", + "id": 1, + "first_name": "Quaid", + "last_name": "Bartolomei", + "email": "example@gmail.com", "organization": "", - "phone": "1234567890", + "phone": "", "pwd_reset_required": false, - "image_url": "https://treetracker-production-images.s3.eu-central-1.amazonaws.com/2021.03.25.12.32.45_-9.342288333333332_34.56734166666667_902b5202-fa3f-4e6b-a26d-d1bf9de5dbda_IMG_20210325_121612_4871689335808390215.jpg", + "image_url": null, "person_id": null, - "organization_id": 1234, - "image_rotation": 0, - "grower_account_uuid": null, + "organization_id": 11, + "image_rotation": null, + "grower_account_uuid": "df42012e-513f-41dc-9599-41a7e0c722f2", "links": { - "featured_trees": "/trees?planter_id=3581&limit=20&offset=0", - "associated_organizations": "/organizations?planter_id=3581&limit=20&offset=0", - "species": "/species?planter_id=3581&limit=20&offset=0" + "featured_trees": "/trees?planter_id=1&limit=20&offset=0", + "associated_organizations": "/organizations?planter_id=1&limit=20&offset=0", + "species": "/species?planter_id=1&limit=20&offset=0" } } From 43d318dbd33db5e0e78e57a4df4e8d98c6b2a490 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Mon, 28 Feb 2022 23:51:57 -0800 Subject: [PATCH 22/44] fix: add grower_account_uuid to public.planter table --- db.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/db.sql b/db.sql index 4e53922a..e155d3ed 100644 --- a/db.sql +++ b/db.sql @@ -418,7 +418,8 @@ CREATE TABLE public.planter ( image_url character varying, person_id integer, organization_id integer, - image_rotation integer + image_rotation integer, + grower_account_uuid uuid DEFAULT public.uuid_generate_v4() NOT NULL ); From 649587ad34dfbfa522d7be774f807c7a4f03b391 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Mon, 28 Feb 2022 23:59:47 -0800 Subject: [PATCH 23/44] chore(fixup): create example data --- .../organizations/exampleOrganization.json | 20 +++++++++++++++++++ .../examples/planters/examplePlanter.json | 7 +------ 2 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 docs/api/spec/examples/organizations/exampleOrganization.json diff --git a/docs/api/spec/examples/organizations/exampleOrganization.json b/docs/api/spec/examples/organizations/exampleOrganization.json new file mode 100644 index 00000000..8fc4840e --- /dev/null +++ b/docs/api/spec/examples/organizations/exampleOrganization.json @@ -0,0 +1,20 @@ +{ + "id": 11, + "type": "O", + "name": "FCC", + "first_name": "", + "last_name": "", + "email": null, + "phone": null, + "pwd_reset_required": false, + "website": null, + "wallet": "freetown", + "password": null, + "salt": null, + "active_contract_id": null, + "offering_pay_to_plant": false, + "tree_validation_contract_id": null, + "logo_url": "https://pbs.twimg.com/profile_images/1064495791459450881/_7TkEeaO.jpg", + "map_name": "freetown", + "stakeholder_uuid": "ae7faf5d-46e2-4944-a6f9-5e65986b2e03" +} diff --git a/docs/api/spec/examples/planters/examplePlanter.json b/docs/api/spec/examples/planters/examplePlanter.json index 220f030c..2d5bbd3c 100644 --- a/docs/api/spec/examples/planters/examplePlanter.json +++ b/docs/api/spec/examples/planters/examplePlanter.json @@ -10,10 +10,5 @@ "person_id": null, "organization_id": 11, "image_rotation": null, - "grower_account_uuid": "df42012e-513f-41dc-9599-41a7e0c722f2", - "links": { - "featured_trees": "/trees?planter_id=1&limit=20&offset=0", - "associated_organizations": "/organizations?planter_id=1&limit=20&offset=0", - "species": "/species?planter_id=1&limit=20&offset=0" - } + "grower_account_uuid": "df42012e-513f-41dc-9599-41a7e0c722f2" } From 2d8c5268e9e56d958510d8a5e471a32b0c0ad18e Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Tue, 1 Mar 2022 00:08:46 -0800 Subject: [PATCH 24/44] test(seed): seed org before planter to fulfill fk restraint --- .jest/globalSetup.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.jest/globalSetup.ts b/.jest/globalSetup.ts index 3f1ea941..7312fe9d 100644 --- a/.jest/globalSetup.ts +++ b/.jest/globalSetup.ts @@ -5,7 +5,7 @@ import exampleWallet from '../docs/api/spec/examples/wallets/exampleWallet.json' import exampleSpecies from '../docs/api/spec/examples/species/exampleSpecies.json'; import examplePlanter from '../docs/api/spec/examples/planters/examplePlanter.json'; import exampleCountry from '../docs/api/spec/examples/countries/6632357.json'; -import exampleOrganization from '../docs/api/spec/examples/organizations/1.json'; +import exampleOrganization from '../docs/api/spec/examples/organizations/exampleOrganization.json'; import knex, { TableNames } from '../server/infra/database/knex'; export default async function globalSetup() { @@ -25,9 +25,9 @@ export default async function globalSetup() { ); await knex(TableNames.Species).insert(exampleSpecies); + await knex(TableNames.Organizations).insert(exampleOrganization); await knex(TableNames.Planters).insert(examplePlanter); await knex(TableNames.Countries).insert(exampleCountry); - await knex(TableNames.Organizations).insert(exampleOrganization); } knex.destroy(); } From 71c7d0ef4fa16c2241c38489051dc3c315c0544f Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Tue, 1 Mar 2022 00:14:05 -0800 Subject: [PATCH 25/44] chore(fixup): create example data --- .jest/globalSetup.ts | 2 +- .../examples/countries/exampleCountry.json | 104 ++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 docs/api/spec/examples/countries/exampleCountry.json diff --git a/.jest/globalSetup.ts b/.jest/globalSetup.ts index 7312fe9d..bc7f7acf 100644 --- a/.jest/globalSetup.ts +++ b/.jest/globalSetup.ts @@ -4,7 +4,7 @@ import exampleTree from '../docs/api/spec/examples/trees/912681.json'; import exampleWallet from '../docs/api/spec/examples/wallets/exampleWallet.json'; import exampleSpecies from '../docs/api/spec/examples/species/exampleSpecies.json'; import examplePlanter from '../docs/api/spec/examples/planters/examplePlanter.json'; -import exampleCountry from '../docs/api/spec/examples/countries/6632357.json'; +import exampleCountry from '../docs/api/spec/examples/countries/exampleCountry.json'; import exampleOrganization from '../docs/api/spec/examples/organizations/exampleOrganization.json'; import knex, { TableNames } from '../server/infra/database/knex'; diff --git a/docs/api/spec/examples/countries/exampleCountry.json b/docs/api/spec/examples/countries/exampleCountry.json new file mode 100644 index 00000000..b8263b61 --- /dev/null +++ b/docs/api/spec/examples/countries/exampleCountry.json @@ -0,0 +1,104 @@ +{ + "id": 6632544, + "type_id": 6, + "name": "China", + "metadata": { + "id": 196, + "name": "China", + "tiny": -99, + "type": "Country", + "admin": "China", + "gu_a3": "CHN", + "level": 2, + "ne_id": 1159320471, + "su_a3": "CHN", + "un_a3": "156", + "wb_a2": "CN", + "wb_a3": "CHN", + "abbrev": "China", + "brk_a3": "CHN", + "iso_a2": "CN", + "iso_a3": "CHN", + "iso_n3": "156", + "postal": "CN", + "sov_a3": "CH1", + "su_dif": 0, + "woe_id": 23424781, + "adm0_a3": "CHN", + "economy": "3. Emerging region: BRIC", + "geounit": "China", + "name_ar": "جمهورية الصين الشعبية", + "name_bn": "গণপ্রজাতন্ত্রী চীন", + "name_de": "Volksrepublik China", + "name_el": "Λαϊκή Δημοκρατία της Κίνας", + "name_en": "People's Republic of China", + "name_es": "República Popular China", + "name_fr": "République populaire de Chine", + "name_hi": "चीनी जनवादी गणराज्य", + "name_hu": "Kína", + "name_id": "Republik Rakyat Tiongkok", + "name_it": "Cina", + "name_ja": "中華人民共和国", + "name_ko": "중화인민공화국", + "name_nl": "Volksrepubliek China", + "name_pl": "Chińska Republika Ludowa", + "name_pt": "China", + "name_ru": "Китайская Народная Республика", + "name_sv": "Kina", + "name_tr": "Çin Halk Cumhuriyeti", + "name_vi": "Cộng hòa Nhân dân Trung Hoa", + "name_zh": "中华人民共和国", + "pop_est": 1379302771, + "subunit": "China", + "adm0_dif": 1, + "brk_diff": 0, + "brk_name": "China", + "fips_10_": "CH", + "gdp_year": 2016, + "geou_dif": 0, + "homepart": 1, + "long_len": 5, + "min_zoom": 0, + "name_alt": null, + "name_len": 5, + "note_brk": null, + "pop_rank": 18, + "pop_year": 2017, + "woe_note": "Exact WOE match as country", + "brk_group": null, + "continent": "Asia", + "formal_en": "People's Republic of China", + "formal_fr": null, + "iso_a3_eh": "CHN", + "labelrank": 2, + "mapcolor7": 4, + "mapcolor8": 4, + "mapcolor9": 4, + "max_label": 5.7, + "min_label": 1.7, + "name_long": "China", + "name_sort": "China", + "note_adm0": null, + "region_un": "Asia", + "region_wb": "East Asia & Pacific", + "scalerank": 3, + "subregion": "Eastern Asia", + "wikipedia": -99, + "woe_id_eh": 23424781, + "abbrev_len": 5, + "adm0_a3_is": "CHN", + "adm0_a3_un": -99, + "adm0_a3_us": "CHN", + "adm0_a3_wb": -99, + "featurecla": "Admin-0 country", + "gdp_md_est": 21140000, + "income_grp": "3. Upper middle income", + "lastcensus": 2010, + "mapcolor13": 3, + "name_ciawf": "China", + "sovereignt": "China", + "wikidataid": "Q148" + }, + "geom": "0106000020E61000000D0000000103000000010000000900000068666666B68B5D40CCCCCCCC0C7F38409C99999991895D4064666666A66F384034333333CB855D40646666663672384068666666AE855D4064666666267D38409C999999E9845D40CCCCCCCC5C80384034333333F3855D40CCCCCCCC8C8A3840CCCCCCCCA4865D4064666666668D3840CCCCCCCCEC8A5D40CCCCCCCCBC84384068666666B68B5D40CCCCCCCC0C7F38400103000000010000000E0000006866666636775E4066666666067E3F4034333333F3715E4098999999B9763F406866666646615E4032333333B38C3F400000000088555E40CCCCCCCCCCA43F40CCCCCCCC844E5E403233333313C23F4034333333834D5E40CCCCCCCC2CCE3F409C999999B1555E400000000020CC3F40CCCCCCCCB45D5E4066666666A6C13F409C999999795F5E403233333393B13F40CCCCCCCCB4625E406666666686AC3F4068666666E6645E406666666626A33F4034333333BB735E4098999999598D3F4068666666FE755E4000000000C0863F406866666636775E4066666666067E3F400103000000010000000A00000000000000F0925E4032333333A3F63D40CCCCCCCC04925E4000000000A0F13D409C999999198A5E403233333353003E409C99999989815E409899999969033E40CCCCCCCC947E5E406666666656103E40343333330B7E5E4032333333A3243E403433333313875E4066666666C6233E40CCCCCCCC34925E409899999969113E4000000000A0945E409899999909083E4000000000F0925E4032333333A3F63D4001030000000100000008000000343333330B8B5E4032333333D3AD3D409C999999D18A5E406666666606A93D40CCCCCCCC5C855E4000000000B0B93D4034333333BB825E406666666666BC3D40CCCCCCCCFC835E4032333333D3C53D4000000000A8875E400000000040C83D4000000000908A5E406666666666B33D40343333330B8B5E4032333333D3AD3D40010300000001000000070000009C999999D9995E403233333373E43D400000000038995E409899999999D83D406866666686975E409899999949DA3D40CCCCCCCC3C955E409899999959EF3D406866666676965E409899999989F43D4034333333B3995E403233333343F33D409C999999D9995E403233333373E43D400103000000010000000F0000009C99999989F45D40CCCCCCCCFC7439409C999999C9EF5D4034333333236939409C999999D1EC5D4064666666C66E394034333333C3EC5D4064666666A67E39406866666646EE5D4034333333F38C3940343333338BEC5D403433333343973940686666663EEE5D409899999989A339409C999999C9F15D406466666636A739409C99999909F35D40CCCCCCCC8C9F39409C99999909F55D40CCCCCCCC7C9B394000000000A8F55D400000000050973940CCCCCCCCACF55D4064666666468F394000000000C8F35D4000000000008239406866666646F55D4064666666C67A39409C99999989F45D40CCCCCCCCFC7439400103000000010000000C00000068666666A6985B4098999999D917354000000000089B5B4000000000000F35409C99999961A15B4064666666461535400000000088A25B40CCCCCCCCFC093540CCCCCCCC7CA25B4098999999B90435400000000040A05B40CCCCCCCCBCF7344000000000009B5B4034333333C30135409C999999C1955B40CCCCCCCC6CFF344034333333FB915B40CCCCCCCC4C00354000000000F0905B403433333373063540CCCCCCCCD4935B40343333332313354068666666A6985B4098999999D9173540010300000001000000080000006866666616505E400000000020163C4034333333834A5E400000000000103C40343333336B485E406666666606103C403433333393485E4000000000A0223C4068666666264D5E403233333353343C4000000000004F5E4098999999692E3C400000000010505E40CCCCCCCC2C253C406866666616505E400000000020163C40010300000001000000090000009C99999989635C4000000000E0CD36403433333313645C406466666606C23640CCCCCCCC145F5C40CCCCCCCC0CD4364000000000A85D5C406466666616D53640CCCCCCCC445B5C40CCCCCCCCCCDB36409C999999E1595C400000000020E736409C999999C15D5C400000000090E736400000000050615C400000000020DA36409C99999989635C4000000000E0CD36400103000000010000000C0000003433333393325C4034333333139A35409C99999959315C4034333333F3943540CCCCCCCC7C2F5C4098999999399E35409C999999F12E5C400000000080AB3540CCCCCCCC9C2D5C40CCCCCCCCACB23540CCCCCCCCAC305C4064666666B6BB3540CCCCCCCC0C325C4034333333B3C5354034333333B3355C4064666666B6C33540CCCCCCCC34375C40CCCCCCCCACC035409C99999901345C400000000050B63540686666663E335C4034333333E3B135403433333393325C4034333333139A3540010300000001000000060000003433333333295C4000000000C0A3354034333333EB225C4064666666569E35409C99999999215C4000000000809F354068666666C6235C40CCCCCCCCBCAC35403433333373295C4034333333D3B535403433333333295C4000000000C0A33540010300000001000000AE0900000000000040FE5A4098999999098235403433333323FA5A4064666666768F3540CCCCCCCC54F35A409899999929A535400000000098F05A4000000000B0A735406866666606E95A4098999999299D3540343333332BDE5A40CCCCCCCC2C99354068666666BEDB5A40CCCCCCCC6CA435409C99999979D65A4000000000E09B35409C99999969D15A40CCCCCCCCECB53540CCCCCCCC6CCB5A403433333393B735409C999999F1C35A400000000050CB3540CCCCCCCC44C15A4098999999B9D535409C99999969C05A4064666666B6E43540CCCCCCCC24BE5A406466666686EC35406866666636BB5A40CCCCCCCC8CEB354000000000F8B75A406466666686F3354034333333D3B25A403433333363FB354000000000B0AE5A40646666661600364068666666A6AC5A406466666676FC35400000000078AA5A409899999999FA35400000000018AA5A4098999999A9043640686666663EAA5A4000000000F022364068666666DEA95A4000000000D03D3640CCCCCCCCBCA85A4034333333E349364068666666F6A55A403433333313533640686666666EA35A4098999999795736403433333353A25A4098999999396536409C99999939A35A4098999999598036406866666646A55A4000000000C0923640CCCCCCCC84A85A40646666660696364068666666E6AC5A403433333343A336400000000020AF5A400000000000B6364000000000F0B15A406466666666C7364000000000F0A75A4000000000D0DF3640CCCCCCCCACA25A409899999989E8364034333333DB9C5A4064666666D6E4364034333333A3955A40CCCCCCCC0CDD364034333333DB915A403433333383DB364068666666F68F5A403433333393DE364068666666C68B5A403433333383F436400000000080895A406466666656F836409C99999961845A40CCCCCCCCBCF936400000000010805A409899999989F9364068666666967D5A40CCCCCCCCFCEF3640CCCCCCCCC4795A4098999999C9EC364034333333F3755A40CCCCCCCC3CEC36409C99999911725A406466666626F83640CCCCCCCC3C6C5A4098999999A9073740CCCCCCCC14635A4098999999991237409C999999F9615A4098999999391F374068666666A65F5A40CCCCCCCC4C2E3740343333332B5C5A4000000000403C3740686666666E565A4034333333C34E374000000000A0515A40000000006058374000000000484F5A4064666666765237409C999999194C5A4034333333F34737409C999999B93F5A4000000000C031374000000000403A5A4098999999192937400000000058375A4098999999E922374068666666E6345A4064666666A6193740CCCCCCCC24345A4034333333C3023740CCCCCCCCEC325A400000000040E93640CCCCCCCC5C2F5A409899999949DC3640CCCCCCCCFC2B5A40CCCCCCCC7CD23640686666666E285A406466666676D1364068666666F6245A40CCCCCCCCECD1364000000000B8215A4098999999D9CD364034333333CB175A40CCCCCCCC3CB436400000000018135A406466666646B6364000000000400F5A40CCCCCCCCBCC436409C999999990D5A406466666636CF36400000000028095A4064666666D6CC36403433333373035A406466666696C0364000000000D0005A406466666696AA36409C99999969FF5940CCCCCCCC0C963640343333332BFE5940CCCCCCCCEC8C36409C99999941FC594034333333438A36400000000090FA594098999999C98936409C999999C9E859400000000020C536409C999999B1E759403433333333C836406866666686E459403433333303BC364000000000A0E1594000000000909C3640CCCCCCCC8CDF59406466666686963640CCCCCCCC24DE594000000000F09836409C999999C9D659403433333333C1364000000000E8D459400000000010C53640CCCCCCCC3CD3594000000000B0C33640343333330BD1594098999999A9B636400000000060CC59406466666676A3364068666666CEC85940CCCCCCCCCC9736409C999999B9C8594000000000D08A364034333333DBC45940CCCCCCCC5C7F36400000000058C0594064666666F673364000000000D8BE594000000000C07236409C999999D9BB5940646666665677364034333333F3B7594000000000808636400000000020B559400000000050963640CCCCCCCC24AE59403433333303A63640686666664EA65940CCCCCCCC4CB336409C99999919A1594034333333B3BD364034333333239E5940CCCCCCCC3CC0364034333333639B59409899999999BB364034333333039A59400000000040B53640CCCCCCCC0C9859409899999989A53640000000005893594064666666C68B3640343333332B8F5940CCCCCCCC4C77364034333333438B594064666666266A36400000000028885940343333331361364034333333DB8559409899999989693640000000009081594000000000707036409C999999817C5940CCCCCCCC7C70364000000000E0755940343333337363364034333333A370594070666666867D364000000000486F594098999999C97E364000000000486D594000000000907C36409C999999F96A59409899999959763640343333335B69594098999999C9673640CCCCCCCCAC67594034333333D3533640000000005864594000000000C0463640989999999161594000000000F0403640343333336362594098999999B9353640CCCCCCCCF4635940403333339329364034333333DB63594050333333F31E36409C999999D964594064666666260E36406466666696665940D0CCCCCC5CFD354068666666C66C594098999999E9E1354034333333236F59406066666696D33540CCCCCCCC9C6F59409899999929C7354034333333D36F594034333333139B3540CCCCCCCC946F594098999999A98835409C999999596E59400000000020653540CCCCCCCC446E594000000000A050354068666666D67059406466666666473540CCCCCCCC5473594098999999693C3540CCCCCCCC3C735940CCCCCCCC6C363540CCCCCCCC2472594040333333433435409C999999996E59409899999909283540343333331B6D594000000000702635409C999999C96A5940CCCCCCCC6C2B35409C999999C967594064666666362F3540686666665E655940E0CCCCCC1C34354068666666B662594098999999F93B354034333333635C594064666666163B3540343333330352594034333333232F3540C8CCCCCCDC4F59404033333383323540CCCCCCCC5C4E59406466666646393540686666668E4D5940989999993947354034333333134E594098999999A957354000000000284D594000000000206235409C999999394B5940343333335368354068666666964C594064666666A685354034333333E34859406466666646913540CCCCCCCC6C49594064666666E694354034333333334859403433333383B435400000000060485940CCCCCCCC4CBC35409C999999B94759400000000000BF3540343333331B4559400000000080C13540CCCCCCCC3C4159403433333383BC3540343333337335594098999999B9A7354068666666562B594034333333438135409C999999B126594064666666C67835409C99999901225940646666664675354068666666861C5940CCCCCCCCEC7B35400000000070165940343333334380354068666666BE0D59406466666686763540343333337309594034333333037B35409C99999979075940CCCCCCCCDC82354068666666B605594034333333D38E3540CCCCCCCCC406594064666666F69D3540CCCCCCCC1C0659400000000020A9354034333333A302594098999999C9AE3540343333339BFE5840CCCCCCCC9CB33540CCCCCCCC34FC5840CCCCCCCC3CC23540CCCCCCCC3CFB58400000000020D235400000000030FC584000000000D0E635409C999999A9FC58403433333303FD354034333333BBFA5840CCCCCCCC2C07364034333333D3F4584098999999B90C364068666666EEE5584034333333D316364000000000E0D85840CCCCCCCC5C1C36406866666666D3584034333333C319364000000000F0CE584034333333331C36409C99999959CC584000000000402036409C99999919CB584000000000402736400000000008CB58406466666646313640CCCCCCCC24CD58406466666656483640686666668ECF584000000000D05E3640CCCCCCCC9CD5584000000000807F364068666666F6D55840646666662696364068666666A6D55840CCCCCCCC4CB0364068666666A6D858409899999939D3364000000000E0DD58403433333363ED3640CCCCCCCC74E058409899999989F5364034333333D3DF5840CCCCCCCC2C01374034333333BBDD584064666666D60B37409C999999C1DA584098999999B911374000000000D0D55840CCCCCCCC8C1837409C99999919CE584034333333731A37406866666686C35840CCCCCCCC6C2137400000000048B7584064666666F6303740CCCCCCCCACB8584064666666B64E3740CCCCCCCC7CB85840CCCCCCCC5C61374000000000F8B6584098999999A97037406866666676B4584064666666867B37400000000010B3584098999999398537403433333343B5584064666666D69F37409C99999969B2584034333333E3BC3740343333330BAF58409899999979C837403433333393AB58400000000080D737400000000050AB584034333333B3E7374068666666E6AC5840CCCCCCCCCCF637400000000060B5584000000000301738409C99999971B5584064666666061F38409C99999959B3584034333333631E384034333333EBB0584064666666B61D38406866666656A5584000000000E0113840343333331BA45840CCCCCCCC4C19384068666666F69F5840CCCCCCCC9C1D38409C9999998197584098999999791E38409C999999998D584034333333531C3840CCCCCCCC1481584000000000C0103840CCCCCCCC9C755840CCCCCCCC7CFC3740CCCCCCCC5C7058400000000090EE374000000000E86B584098999999E9E53740CCCCCCCC4C685840CCCCCCCC1CE337409C999999216458409899999939E93740686666665E645840CCCCCCCC0CFD374034333333336C5840CCCCCCCC7C21384034333333536D584000000000903A3840CCCCCCCCEC6A584000000000105038409C999999A96A584064666666466138409C999999E967584064666666466C3840CCCCCCCC0C64584000000000A0713840343333330362584000000000E07D38409C999999E16158406466666696A13840CCCCCCCC546558409899999959C63840CCCCCCCCEC6A584034333333F3D1384034333333536E5840CCCCCCCC8CD738409C999999396F584000000000B0DE3840CCCCCCCC7C6D58409899999969F838409C999999C16D584098999999C9083940CCCCCCCC1C71584064666666762839403433333373745840989999997940394000000000C07A584034333333733C39409C999999917D5840343333336342394000000000B080584034333333E34A39409C9999991984584064666666565939400000000060865840CCCCCCCC6C6A3940CCCCCCCC248958403433333333923940343333330B8B5840343333333398394034333333FB92584000000000A0913940CCCCCCCC5C9558406466666636963940CCCCCCCCB49958400000000090AD394034333333CB9D584034333333F3C93940CCCCCCCCBCA3584000000000C0D239406866666606A8584034333333A3D339400000000000AA58403433333313DD394068666666E6A9584034333333F3EA394034333333D3A5584032333333F3003A409C99999919A458409899999989123A40343333339BA4584032333333331D3A409C99999971AA584032333333B3233A4000000000E0AB58409899999979303A400000000000AB5840CCCCCCCC6C4C3A400000000068AD584000000000006E3A4068666666D6AE58409899999959953A409C99999951AF584098999999B9B23A403433333343AF58406666666626C93A4000000000B0AE5840CCCCCCCC9CE03A4034333333DBAD584000000000800B3B400000000030AB5840CCCCCCCCCC303B40CCCCCCCCACAB5840CCCCCCCCCC3E3B400000000050AB584032333333036C3B40CCCCCCCCACA95840CCCCCCCC8C923B403433333363A65840CCCCCCCC4C993B409C99999949A05840CCCCCCCCCCA53B4068666666F69C58400000000040A83B40343333332B9A584032333333B3A33B40CCCCCCCC1C9958409899999949963B40686666666E96584000000000C0893B40000000002093584032333333D38C3B40CCCCCCCC8C915840CCCCCCCC5C993B40CCCCCCCC6C8F584066666666C6A93B409C9999995988584032333333B3F73B40343333339387584032333333230E3C40CCCCCCCC54865840CCCCCCCC6C243C409C999999F183584066666666962F3C40CCCCCCCC6C8158406666666626363C4000000000C87B58406666666656503C4068666666CE78584032333333435B3C40343333335B77584032333333135D3C409C9999994174584098999999395B3C400000000038715840CCCCCCCC2C5B3C409C999999B96E58409899999939683C40CCCCCCCC746C58406666666626783C40343333332B6A58400000000000803C409C99999959665840CCCCCCCC5C843C40CCCCCCCC6C625840CCCCCCCC9C823C40343333332360584032333333D3743C4034333333935E584066666666F66C3C40CCCCCCCC9C5B584098999999995A3C4000000000D05658406666666626413C4034333333A3545840CCCCCCCCCC373C406466666686525840F0FFFFFF9F3C3C409C999999494958400000000020573C4034333333D344584032333333735E3C4068666666C63E58403233333373563C40000000005035584066666666C65C3C4068666666A631584066666666F65D3C40FCFFFFFFC72958403033333323733C409C99999991265840F0CCCCCCBC753C4000000000601B584000000000F0673C4068666666E618584010000000305E3C40343333337317584066666666065E3C40000000007814584032333333F3623C403033333303125840F0CCCCCC7C693C409C999999D9115840CCCCCCCC9C6D3C4000000000E014584032333333F3773C40CCCCCCCC1C15584000000000307F3C4034333333F31458400000000080863C409C9999995119584066666666469B3C40CCCCCCCC2C2558400000000080C33C4030333333332358402000000060D43C409C999999891E58406666666696F53C40C8CCCCCCE41D584050333333B3053D4034333333E31B584098999999F90C3D4030333333331658408066666606073D409C999999610A584032333333E3E83C4068666666C60858400000000030EC3C40CCCCCCCC0C09584066666666A6F63C40CCCCCCCCD40758403233333303153D4034333333930B584000000000201E3D4000000000501158406666666646293D4068666666BE15584066666666B6353D4068666666C616584020333333C33F3D40CCCCCCCC9415584000000000D0423D409C999999090F5840CCCCCCCCEC3E3D4068666666760C584000000000C0453D409C9999993908584032333333A3613D40000000001805584032333333936C3D4034333333430258409899999979723D40CCCCCCCCA4F857403233333313643D406866666676ED57406666666656503D403433333303E1574032333333D3343D406866666616E1574050333333B3263D409C99999999DF57403233333313233D40FCFFFFFF37DD574010000000301A3D40CCCCCCCCE4DA574066666666E60D3D409C999999E9D857403233333393093D409C99999999D657400000000030093D40CCCCCCCCDCD1574000000000B00C3D403433333343C9574032333333A31A3D40CCCCCCCCECBF57400000000030263D4030333333EBBD574010000000E0243D40686666663EB1574066666666062D3D4068666666D6B057406666666686333D4000000000F0AE57409899999969403D40CCCCCCCC54AB5740C0999999094C3D4000000000E0A7574098999999F94F3D40CCCCCCCCF49D57409899999959373D40CCCCCCCCC49257406666666606253D409C999999618C574066666666560F3D40343333332387574050333333D3F93C409C9999992181574032333333A3F53C409C999999D98057403233333353E83C4000000000507E5740E0CCCCCC5CDC3C4068666666BE79574000000000A0CD3C4000000000B070574040333333D3BA3C40686666668E6A574032333333B3B03C4034333333135757401000000070A73C4000000000205057406666666626A13C4000000000384D57400000000040973C409C999999194A574032333333237E3C409C999999A1475740CCCCCCCCFC663C40CCCCCCCC3C42574000000000E0533C40000000007038574060666666663A3C4034333333EB2C574098999999A9253C4034333333C329574066666666E6173C40686666662E29574000000000C00F3C409C999999992A574032333333C30C3C4000000000002C57406666666696063C40CCCCCCCC042C5740CCCCCCCC2CFD3B40CCCCCCCC842A5740CCCCCCCCECF23B40CCCCCCCCFC2257403233333313E13B4034333333C31E57400000000090D83B40CCCCCCCC8C1A57409899999919D33B4034333333D3155740CCCCCCCC1CD23B409C999999491157409899999989D43B40FCFFFFFF07105740E0CCCCCC6CD73B409C999999390E574032333333B3D33B4068666666160A574000000000F0CF3B40343333337B06574000000000C0CE3B409C99999991FE564098999999F9BA3B403433333333FA5640CCCCCCCCCCBA3B4000000000C8F456406666666616BF3B40343333339BED56403233333383C23B409C99999971E85640CCCCCCCC8CC23B400000000048E856406666666606CD3B40CCCCCCCC14E956409899999959EC3B409C999999C1E6564032333333A3F33B403433333393DF56406666666656FB3B406866666686D756409899999989053C4034333333A3D356403233333363103C409C99999979D156400000000010143C40CCCCCCCC74CE5640CCCCCCCC3C123C400000000098C9564098999999D9063C409C999999F9C456406666666676F93B40CCCCCCCC54C156406666666656F83B409C99999999BD5640CCCCCCCC9CFE3B406866666606BA564098999999C9063C4068666666CEAD5640CCCCCCCC5C123C403433333353A85640CCCCCCCC1C143C40CCCCCCCC8C9E56403233333323123C4034333333939656409899999989143C409C999999519556400000000010183C40CCCCCCCC5C95564000000000801E3C409C99999989965640CCCCCCCC0C2B3C40343333333B975640CCCCCCCC6C373C409C9999994996564032333333733E3C409C999999218E56409899999919473C4000000000B086564032333333534D3C409C999999C97E564098999999A94F3C406866666676795640CCCCCCCC4C4B3C400000000048745640CCCCCCCC9C413C40CCCCCCCCFC6F5640CCCCCCCC2C303C4068666666C66956406666666686283C40CCCCCCCC5C62564000000000801B3C4034333333C35E564098999999590F3C4068666666565956409899999949F53B4034333333735156409899999949D53B40CCCCCCCC444A56406666666616B63B40CCCCCCCC8C46564032333333B3973B409C999999A14156403233333393843B40CCCCCCCCA43C564098999999C9763B40CCCCCCCC0C39564098999999E9503B40FCFFFFFF4735564050333333E35C3B4034333333F3305640CCCCCCCC0C6E3B4000000000F02F5640C099999999853B40CCCCCCCC1C3556403233333373C43B4034333333533656400000000060DE3B4000000000083556403233333343E83B40FCFFFFFF6F33564070666666C6013C40686666666630564098999999290A3C4000000000C02756403233333383173C40CCCCCCCCFC24564070666666E6173C40686666660622564000000000B00E3C40CCCCCCCC1C1F564032333333D3083C4034333333431B5640CCCCCCCCFC023C40CCCCCCCC9C1156406666666606F83B400000000008095640CCCCCCCCECF23B4098999999F9065640B0999999D9EE3B40CCCCCCCC540656400000000090E73B406466666606075640F0FFFFFFDFDE3B40686666667E0156406666666626E23B40CCCCCCCCBCFB5540CCCCCCCC0CE43B406866666616F7554066666666D6E23B409C999999B1EB55406666666646D23B4000000000D8E7554000000000B0D03B409C99999989E355403233333363D23B40CCCCCCCCB4DD554066666666E6D23B40343333339BD255409899999969D23B40CCCCCCCC0CC95540CCCCCCCC9CD63B409C99999949C15540CCCCCCCCBCED3B4034333333C3BB5540CCCCCCCCECF73B409C999999E9B5554098999999C9FF3B406866666606B0554066666666A6053C40686666660EAE55406666666616123C409C99999931AC5540CCCCCCCC4C183C403433333353A7554000000000601A3C40CCCCCCCC7CA3554000000000D0153C40CCCCCCCC14A1554098999999A9F63B409C999999099F55406666666686F03B4000000000289A5540CCCCCCCCBCED3B40000000000895554032333333A3F53B4034333333F38D554066666666A6053C4068666666268B55409899999979173C40CCCCCCCCC488554066666666461D3C409C999999098555406666666666153C40CCCCCCCCD4845540CCCCCCCC9CFE3B40343333331B8455409899999949EF3B4068666666A67F55400000000010E93B4000000000107D554000000000A0ED3B40CCCCCCCCFC7A5540CCCCCCCC5CFD3B4068666666C675554066666666A6223C40343333339B705540CCCCCCCC7C383C409C999999696B55406666666606473C4000000000485A554098999999A9463C4034333333934D554098999999E94A3C4068666666D647554032333333E3503C4034333333AB455540CCCCCCCC4C5F3C4068666666C647554098999999F97B3C4000000000404A55406666666666923C40686666662E4A5540CCCCCCCC9C973C40686666661648554066666666469A3C40CCCCCCCC6C44554032333333139C3C409C999999B936554098999999B98D3C40000000000033554098999999698F3C409C999999993055409899999949943C4068666666B62D55406666666676983C4000000000502B5540CCCCCCCC1C9F3C4034333333A329554098999999D9A83C409C999999C91D554000000000C0C03C409C999999491A5540CCCCCCCCCCCD3C409C999999F9135540CCCCCCCC3CDE3C4034333333A30E55409899999969E93C40CCCCCCCC3C0B55400000000050093D40686666662E0855403233333303283D40CCCCCCCC7C0655400000000050383D400000000068015540CCCCCCCCFC403D4068666666E6FB5440CCCCCCCC8C473D406866666696F2544098999999393A3D4034333333F3EA54406666666606303D400000000058E5544000000000002F3D409C99999939DD5440CCCCCCCC6C4E3D4034333333BBD65440CCCCCCCC6C703D40CCCCCCCC0CCF544098999999F98D3D4034333333F3C9544066666666D69C3D40CCCCCCCCE4C0544098999999399E3D40CCCCCCCCACB6544032333333F3AE3D403433333303A9544098999999C9D43D4034333333239F54406666666606F13D4000000000208E54409899999959103E40CCCCCCCC2C8A5440CCCCCCCC7C1D3E409C999999A988544032333333B3283E40CCCCCCCC54865440CCCCCCCCBC3E3E4068666666C682544066666666A6533E4068666666B676544066666666C65C3E40CCCCCCCC146954403233333333633E4034333333B35A5440CCCCCCCC6C563E40343333335350544032333333E3173E4068666666564B544066666666360A3E400000000010475440CCCCCCCC6C093E40686666668E4354406666666656193E4000000000A8405440CCCCCCCC1C2A3E409C999999113F544032333333B33C3E40FCFFFFFFE737544040333333634A3E4034333333CB2F544032333333435C3E4000000000A82B544032333333336A3E4000000000F826544098999999E9723E4000000000A022544098999999A9763E4068666666361A5440CCCCCCCC6C823E4034333333B310544032333333B38F3E40CCCCCCCC3C0C54403233333383913E4034333333EB0B544066666666F69A3E409C999999410D54409899999909AF3E4000000000700C5440F0CCCCCC5CC23E4000000000900954403233333333CA3E406866666636055440CCCCCCCC2CC83E40343333332BFB53406666666686E33E40A0999999C9FA534020000000D0E33E409C999999A9FA534098999999E9E43E40CCCCCCCCCCF7534040333333B3EC3E4034333333DBF2534000000000E0F73E403433333383EA53409899999919F73E400000000030E4534066666666F6F23E400000000090DF53403233333363FE3E40CCCCCCCCDCD853400000000070103F4000000000A8D753408066666676143F4068666666AED5534000000000101B3F4030333333E3CE534040333333E33D3F4034333333DBC653403233333313673F40CCCCCCCCCCC25340CCCCCCCC1C6D3F4068666666B6C0534032333333036A3F40CCCCCCCC54BE53400000000020543F40343333338BBC53403233333353563F409C99999991B9534032333333D3543F40CCCCCCCC0CB6534000000000304D3F409C999999A9B25340F0CCCCCC2C4B3F400000000080B0534000000000704D3F406866666696AF534040333333E3523F40CCCCCCCC8CB0534032333333C36F3F403433333383AE534098999999C9783F403433333353B0534000000000E08C3F403433333363B3534098999999399E3F400000000040B05340B099999919AB3F409C99999961AC53409899999989BD3F4000000000F8AB53405066666636CE3F400000000010AE5340CCCCCCCC3CE33F409C99999911AF5340CCCCCCCC3CF53F400000000070AE534098999999D9FB3F400000000060AB534033333333F3024040CCCCCCCCBC9F5340666666669E1B4040C8CCCCCC1C9F5340E0CCCCCC3C1E404034333333239D53409999999971264040686666663E9C5340CCCCCCCCDC32404000000000B89A5340D0CCCCCCBC3B404000000000F0985340303333338B4240409C9999991199534099999999B945404068666666669A5340333333336347404000000000B0A153400800000010494040343333336BA85340333333331B4A404034333333DBAC5340333333336B4C40406866666626AF5340A0999999794740409C99999939B0534000000000E83F4040CCCCCCCC5CB1534099999999E93B404000000000A0B5534033333333BB34404000000000D0BA5340A8999999D92D40409C999999D9BF5340CCCCCCCCBC2E40409C99999949C4534000000000B03140406866666626C8534066666666E63C404000000000E0CA5340D0CCCCCCA43F40409C99999909CE53403333333323404040CCCCCCCC04CE534000000000F840404034333333DBCD5340999999993148404000000000F8CE534066666666FE5940406866666696CE534000000000206140400000000028CD5340786666668E6740409C99999969CD534033333333B36E40409C999999F1CC534010000000187940400000000050C95340080000003080404034333333F3C6534066666666E6824040CCCCCCCC94C6534098999999B98640409C999999C9C7534066666666D68D404068666666A6C8534098999999019640403433333333C7534068666666F69C40409C99999941C45340CCCCCCCC0CA0404068666666CEC05340666666664EA5404034333333B3BC5340383333335BAC404034333333ABBA53409999999981B14040CCCCCCCC5CB75340666666662EB740409C99999951B3534066666666F6BF4040686666668EB25340666666663ED340409C99999929B253406666666686E74040FCFFFFFFBFB05340D8CCCCCC9CF140409C99999981AE534066666666B6014140CCCCCCCCD4AE5340CCCCCCCC1C0741409C99999931B0534099999999390B41409C999999A1BB53400000000030184140686666661EBE534066666666361D41406866666686BE534099999999092141406866666616BE5340CCCCCCCCBC26414068666666EEBB5340D0CCCCCC0C2D41409C99999959B7534066666666F631414068666666D6B0534099999999F939414068666666EEAA534033333333534241409C99999901A15340333333336B474140CCCCCCCCEC945340666666669E4D4140CCCCCCCC0C92534033333333B3534140CCCCCCCC1C8F5340A099999989624140CCCCCCCC248A534068666666267941409C999999D9845340CCCCCCCC4491414000000000C88053409999999921A0414068666666968053409999999949A741409C999999098353406666666686B9414034333333BB825340A899999969BD4140343333339B80534010000000C0BE41409C999999897C5340706666665EBC414068666666467953409999999979B94140000000008076534033333333FBBA414068666666E6735340CCCCCCCC04BE4140CCCCCCCC5C7353403333333313BF41409C99999929735340A099999979BF414068666666566E53403333333383BD4140CCCCCCCCA4645340CCCCCCCC64BC414000000000486153409999999999BC414034333333935C534000000000E0BC414068666666DE525340333333330BC1414034333333C345534099999999A9C6414000000000403853400000000080CE4140CCCCCCCC1431534033333333B3D4414000000000902E534066666666DED641400000000070285340CCCCCCCC5CDD4140000000001024534099999999F1E241400000000048235340333333338BF141409C999999212053409999999969F0414000000000B01853400000000028EB4140343333331B105340CCCCCCCCCCE741409C999999610B534000000000C0E741406866666676095340CCCCCCCC1CEA4140CCCCCCCC9C0653400000000080F941409C9999998904534033333333D3FD414034333333AB0053400000000088FF4140CECCCCCC7CFC524000000000400242403433333363FA5240CCCCCCCC440642409A999999E9F9524033333333530B424000000000C8FB5240CCCCCCCC2411424068666666FEFD5240CCCCCCCC9C154240CECCCCCC5CFE524033333333F330424034333333EBFC524033333333A33A424068666666B6FB524033333333C342424034333333A3F85240CCCCCCCCE44C424068666666C6F552409999999929534240343333336BF1524033333333F358424034333333B3EA524099999999F95E424000000000B8E452409999999931614240CECCCCCC74DD524066666666CE5C42406866666626DB5240666666667E5E4240686666661ED85240CCCCCCCC1C7142400000000030D65240CCCCCCCCEC744240343333334BC9524033333333937C42403433333373C35240333333335B7E424068666666BEBC524033333333F37B42409A999999E9B8524099999999E979424068666666D6B5524033333333537D42406866666606B1524099999999A1814240CECCCCCC4CAC524033333333938442400000000070A6524099999999B184424068666666A6A2524066666666D68242409A999999B1A15240CCCCCCCCEC83424068666666DE9F524033333333538742403433333313985240CCCCCCCC949142409A999999D1975240000000003094424068666666C6A3524099999999499E424000000000D0AA52403333333323A242409A99999981AE52406666666636A54240343333334BAF52400000000090A44240CECCCCCC1CB15240CCCCCCCCE49F424068666666C6B5524066666666CE9C4240343333330BB9524066666666A69D424034333333C3BA52400000000000A042409A99999989C052403333333393A54240686666660EC552409999999909AC42409A99999999C75240666666665EB14240CECCCCCC3CC6524033333333C3B942409A99999921BF524033333333E3C34240CECCCCCC9CBA52409999999951C94240343333333BB9524033333333FBCC42403433333363BA524099999999F9D74240CECCCCCC0CBC524099999999E1E2424068666666F6BA52409999999909E74240686666669EB952406666666696EA42403433333303B952400000000080F6424034333333EBB5524000000000E00443409A99999989B2524033333333430D4340343333339BB1524000000000901843409A99999969B15240333333332B2343400000000080B5524000000000C0334340CECCCCCCFCB3524033333333EB3A434068666666AEAF5240000000004841434068666666E6A05240CCCCCCCCCC4C43409A999999C19152403333333373544340CECCCCCCFC8B52409999999929544340000000006888524099999999A1544340686666662E84524033333333E34D434034333333A38152409999999919454340CECCCCCC147E5240000000005044434000000000A0775240CCCCCCCC0C484340686666664E73524066666666AE4D43403433333343705240666666667659434000000000E06D5240333333339B684340CECCCCCC8C6C524099999999596D4340CECCCCCC3C6D5240000000007071434000000000B86E5240CCCCCCCC147543409A999999D9725240CCCCCCCC7C7843409A99999989735240CCCCCCCCFC7B434034333333EB72524066666666468043409A999999996F524033333333B385434000000000306C524099999999618D434068666666DE66524066666666569D43409A999999E16752400000000020A643409A999999B968524066666666C6B24340CECCCCCC6C685240CCCCCCCC74B9434068666666CE6D5240333333332BBB434034333333AB7452406666666696BE434034333333DB7752403333333343C44340686666660E7A5240CCCCCCCC0CCA43409A999999897A524099999999A1CD4340343333337B7852406666666676DB434068666666BE755240CCCCCCCCA4E143406866666676755240333333336BE64340CECCCCCCCC7652409999999911EA4340CECCCCCC9C7852400000000060F04340CECCCCCC147C52409999999949FD434068666666767F5240CCCCCCCC84054440000000005081524099999999990744403433333373855240333333338309444000000000888F524000000000C80B4440CECCCCCC5C9A52400000000090114440CECCCCCC3CA7524066666666D62244403433333383AB524099999999C12744403433333323B1524099999999392A44406866666626B55240CCCCCCCC0C2A444000000000E0B5524000000000282C44400000000048B3524099999999D93644409A999999E9B3524099999999B93A44403433333373B5524066666666C63D44406866666666B75240333333332B3F44409A99999949C0524099999999893944400000000020C7524000000000203A4440CECCCCCC6CCF524099999999793D4440CECCCCCC54E152403333333353504440686666668EE3524066666666065044400000000058E55240333333337B4D44403433333383E75240000000002042444034333333FBE95240CCCCCCCC242A44406866666656EB5240CCCCCCCC2427444068666666CEF7524000000000D02644406866666646005340333333338B2F4440CCCCCCCCFC035340333333339B31444068666666060A5340000000003030444000000000300D5340666666664634444000000000881053403333333323374440343333336314534066666666162D4440686666665E195340CCCCCCCCE431444034333333BB1E5340999999998939444068666666562153400000000070414440CCCCCCCCFC24534000000000F84944409C999999D127534000000000C854444034333333F328534099999999015F444000000000502A534033333333CB63444068666666562D534000000000B8684440CCCCCCCCBC345340CCCCCCCCBC7D444000000000183A53400000000018834440CCCCCCCC243F5340333333330385444068666666A64B53400000000060814440CCCCCCCC2C52534066666666D6814440343333333B65534033333333137F44409C999999096E5340CCCCCCCC1C834440CCCCCCCC2C745340666666661E87444068666666367D5340CCCCCCCC7C86444068666666E687534066666666AE8944409C999999299653406666666606A44440343333335396534000000000A0A944409C999999319753409999999991AF444000000000589C53409999999971B5444034333333C3A2534033333333D3BA44406866666686AF534000000000B0C744400000000080C95340CCCCCCCC0CDC44409C999999C9D253403333333333E4444068666666AED6534099999999F9E344400000000040E053406666666616E944400000000008F15340666666660EF344409C999999C9F55340CCCCCCCC74FF44400000000038FA534033333333EB01454068666666D60D54406666666626044540CCCCCCCC0C0F544000000000900545409C999999C10F544000000000A807454034333333AB0E5440666666669E10454068666666660D544033333333531845409C999999E90E544099999999991A4540CCCCCCCC9410544099999999211E454034333333531054400000000018234540343333332B0D544000000000203345409C999999790B54409999999959424540CCCCCCCC5C0A5440999999991150454000000000900A544000000000305545409C999999F10C544033333333035E4540CCCCCCCC04105440CCCCCCCC0C66454034333333231B544099999999896D4540686666667E22544066666666CE6F4540CCCCCCCCCC22544033333333B374454000000000D81C544000000000C07745409C99999989185440CCCCCCCCA47C454034333333C317544000000000707F454000000000F8175440CCCCCCCC9C8245409C999999F9185440CCCCCCCC84854540343333337320544033333333FB8A4540CCCCCCCC7C275440333333336B9045403433333313305440666666661E8D454068666666C631544099999999398F45409C9999994932544066666666AE944540343333337330544000000000289A4540CCCCCCCCB42E5440333333331BA34540CCCCCCCCBC2A544000000000B0A7454068666666962A5440666666662EAD4540343333330B2D544099999999A9B6454068666666A62954406666666636C8454034333333FB25544099999999B1D7454068666666BE1F54400000000030F24540686666669E1B544033333333D3F94540CCCCCCCC541954409999999909064640CCCCCCCCBC16544033333333730C46409C999999F9165440CCCCCCCCEC1546409C99999961175440CCCCCCCC941C464068666666B616544033333333CB2946406866666686155440CCCCCCCC1C3846409C999999B916544000000000A84646406866666606195440333333333B5046409C99999969185440CCCCCCCCE453464034333333A3195440CCCCCCCCA456464068666666261D544000000000905746409C999999D11E544099999999795B464068666666261D544000000000805F46400000000018175440999999999962464034333333531054400000000070674640686666662E08544099999999E16646409C999999D1FF5340333333330B66464000000000A8FB534000000000A0694640CCCCCCCC04F8534000000000306E4640CCCCCCCCCCF75340000000002071464000000000D0FC534000000000D87846409C999999C903544033333333D3804640343333339B0E54409999999959844640686666668E1A5440CCCCCCCC9C894640686666669620544000000000708D464000000000A02854409999999931904640CCCCCCCCEC3154409999999959914640CCCCCCCC9C365440CCCCCCCC8C904640CCCCCCCC9442544066666666A6954640CCCCCCCC6C55544033333333839F4640000000008866544099999999C9A746409C999999496C544000000000B8AC46409C9999999170544099999999C9A746409C9999998972544066666666EE9C4640CCCCCCCC84775440666666664E9746409C999999797C5440666666669694464000000000507F544000000000B894464034333333DB87544099999999F19846400000000010915440333333330B9C464034333333B394544099999999599A4640343333336399544033333333CB94464034333333A39E544099999999D18F46400000000060A15440000000001090464068666666C6A35440CCCCCCCCE4934640CCCCCCCC34A65440CCCCCCCCA49B464000000000C0A75440CCCCCCCC84A54640CCCCCCCC0CA85440CCCCCCCCECAF4640CCCCCCCC24A75440666666664EB646400000000048A5544066666666A6B8464000000000E89C54409999999969BC464000000000E8945440CCCCCCCC8CC2464034333333FB9354400000000028C84640CCCCCCCC2C9454406666666626CC46400000000048965440CCCCCCCCF4D5464000000000809B5440CCCCCCCCECE7464000000000C0A0544066666666BE0047406866666686A354400000000050144740CCCCCCCC4CAC5440666666667E3147403433333333B3544066666666EE4F4740CCCCCCCC64BE544066666666A67B47403433333343C0544099999999498447409C99999949C15440333333331B92474034333333E3C15440CCCCCCCCCC97474000000000C8C55440CCCCCCCCCC9A4740343333335BCC544099999999E19747403433333363DC544000000000E88D4740CCCCCCCC94E8544000000000888547409C999999B1ED544099999999B18247409C99999949F5544099999999B97F4740686666660601554099999999397C474000000000D007554033333333437D4740CCCCCCCCC40D554033333333537F474000000000B015554099999999817F4740343333331322554066666666E67C474000000000E825554033333333CB7C47409C999999A92A554066666666767C4740CCCCCCCC0C2E5540CCCCCCCC3C78474068666666BE2F554033333333A36E47400000000050325540CCCCCCCC546A4740CCCCCCCCEC365540CCCCCCCCEC6B474000000000C84055409999999961744740343333331347554099999999097B47409C999999F14E554000000000A884474068666666BE56554033333333FB85474068666666065F5540999999992188474068666666E661554066666666E68C47409C999999F1645540000000002098474068666666066A55400000000098A0474068666666DE6A55400000000050AB4740343333331369554066666666DEB24740343333338B6555400000000030BF474068666666A6655540CCCCCCCC7CC747409C999999F1635540CCCCCCCC8CDF47409C999999A96155403333333333F54740CCCCCCCCFC63554033333333A30648406866666616685540CCCCCCCC1C1A484034333333B36955409999999911204840CCCCCCCC4C6C554099999999E927484068666666F66F55409999999949314840CCCCCCCC1C755540333333333B3448400000000098835540CCCCCCCC3C3648400000000000915540666666662E3A484000000000D8975540CCCCCCCC3C3E484068666666EE9E554000000000B04048409C99999929A3554099999999A9434840343333337BAA5540999999995951484034333333F3AD5540CCCCCCCC3C5948400000000080B05540CCCCCCCC2C6E48409C999999A1AE5540CCCCCCCC3C7848403433333333B05540999999992181484034333333BBB35540CCCCCCCC5C86484034333333B3B8554000000000988B48400000000008BC5540CCCCCCCC7C8C4840343333331BC3554099999999118E484000000000B8CE5540CCCCCCCC8C8D48409C999999A9D4554033333333FB8A484034333333ABDA554066666666CE8948409C99999979DE5540CCCCCCCCB48B48403433333303E1554033333333AB8F484068666666E6E4554099999999F190484068666666C6EA554000000000D8924840CCCCCCCCCCF055409999999939954840CCCCCCCC1CF4554066666666C694484000000000D0F4554033333333E38E4840686666663EF4554066666666468A4840343333336BF5554066666666168448409C999999D1F75540CCCCCCCC048048400000000008F7554066666666967B484034333333A3F355406666666606794840CCCCCCCC4CF0554033333333937548400000000090EF554099999999D97048409C999999C9F3554099999999F96A4840CCCCCCCC3CF55540CCCCCCCC54654840CCCCCCCC4CFC5540CCCCCCCCF46148409C999999C901564000000000285E484000000000D8035640CCCCCCCC845A48406866666636035640000000006856484068666666AE00564099999999F95148409C99999939FE554099999999394D48409C999999E9FD554000000000604A484034333333B3FE5540666666660E4748409C9999990104564000000000D844484000000000200A5640999999992941484068666666D6135640CCCCCCCC6C3C4840686666667E1A564033333333A333484000000000182156406666666636314840686666664624564099999999A1284840CCCCCCCCDC245640666666662E1C484034333333A32B5640CCCCCCCCD415484068666666A6355640CCCCCCCC040D4840CCCCCCCCBC3A5640CCCCCCCC640B484068666666263E5640CCCCCCCC64064840CCCCCCCC0C43564033333333530048406866666666475640CCCCCCCC6CFE474000000000904C5640666666668EFD4740CCCCCCCC1C555640666666662E03484034333333AB5E564000000000B803484068666666E66356409999999981004840CCCCCCCCDC685640CCCCCCCC5CF44740CCCCCCCC5C6C56400000000088F0474000000000706E5640666666661EED4740CCCCCCCCCC71564033333333DBE94740CCCCCCCC347556409999999961E94740CCCCCCCC447A56403333333313EC4740343333335B7D56403333333373F147409C999999C98156400000000058F047403433333373835640CCCCCCCCDCEC4740343333334384564033333333DBE64740343333339B8656409999999969DF47409C999999398C564066666666DED94740CCCCCCCC0C945640CCCCCCCC8CD647409C99999929955640CCCCCCCCDCD34740CCCCCCCC3C9656409999999969CC4740CCCCCCCC5C9856400000000040C7474068666666369B56406666666686C0474034333333EB9D5640666666663EB44740686666667E9E56406666666616AA47409C999999C19F56400000000080A447403433333363A35640CCCCCCCC649B4740CCCCCCCC2CA9564066666666D68C474034333333CBAD5640666666667E8047403433333323B3564099999999197E4740CCCCCCCCACB75640CCCCCCCC2C7A47406866666646BA5640666666660E7147406866666616BF564000000000E05F4740CCCCCCCCDCBF5640666666669E5447406866666646C0564099999999414C47409C999999D9C15640CCCCCCCC74484740343333332BC2564066666666B6434740CCCCCCCC2CBE564099999999A9314740CCCCCCCCC4BA564099999999812947406866666656BA5640CCCCCCCCA4224740CCCCCCCCA4BC564099999999B116474034333333CBBF564000000000700D4740CCCCCCCC1CC05640CCCCCCCC94044740CCCCCCCC6CBD56406666666616FE464068666666C6B8564000000000F8F54640686666668EB65640CCCCCCCC54F1464000000000F0B256400000000040ED4640343333336BAD5640333333338BDD4640CCCCCCCCECAA5640666666662ECC4640343333335BAA5640333333333BC346409C99999971AC564099999999C1BC46409C999999F9AF564000000000A0B5464000000000D8B056409999999971AF4640343333339BB6564066666666A6A14640CCCCCCCC24B856409999999919994640686666667EBA564033333333D39846400000000008BD564033333333A39B46403433333333C35640CCCCCCCCD49B464000000000D0C8564033333333D39846409C99999931CE564000000000809246409C999999F9D35640666666661E8F46409C99999939DC564000000000F88F4640CCCCCCCCA4E0564033333333938C46406866666666E5564033333333CB8946400000000038EF564033333333D3884640CCCCCCCC94F6564000000000E088464000000000E8015740CCCCCCCCC4884640CCCCCCCC0C0B5740333333338384464000000000201B5740CCCCCCCC24814640CCCCCCCC0C2557400000000068814640CCCCCCCC6C325740333333339384464000000000A03A5740CCCCCCCC9482464068666666D652574000000000D87D46409C99999909615740CCCCCCCCE478464034333333036A574033333333537346406866666656705740CCCCCCCC7C6A4640000000009077574033333333B35C4640686666664E7D5740CCCCCCCC645646409C999999C18C5740CCCCCCCC945246400000000058975740666666667E42464034333333A39F5740333333337B3C46409C99999991AD574000000000E82C4640CCCCCCCC6CB7574033333333D32646400000000030C35740CCCCCCCC34214640343333336BD6574000000000982346409C99999979D75740999999997921464068666666FED55740333333330319464068666666D6D45740CCCCCCCC6C0D464068666666D6D45740999999990905464000000000D0D6574033333333C30046409C99999929DE5740333333333BFE454034333333A3E15740333333331BFA4540CCCCCCCC4CE45740CCCCCCCC34F2454068666666D6E557403333333343ED4540CCCCCCCCFCEB57400000000000D5454034333333E3F55740CCCCCCCC1CB145403433333303F757403333333353A345406866666666FA5740666666666E9A45403433333323055840666666664E8C454000000000C80A584033333333DB814540343333332B13584000000000E076454034333333EB15584066666666B66C4540CCCCCCCC8C16584066666666965F454034333333AB185840CCCCCCCC345C4540CCCCCCCC0428584066666666365F4540000000005035584000000000506145409C999999294D5840000000001865454034333333036E5840666666663E5E454034333333E38F5840666666669E57454000000000D8AD584099999999C15145409C99999999BC584000000000E04E45409C999999F1DD584033333333BB4845409C99999979F05840999999999150454068666666F6FE584033333333B3564540686666668605594033333333DB554540000000003821594033333333F34E45409C99999971315940CCCCCCCC3C4B454034333333E34559409999999991464540CCCCCCCC1454594099999999D944454034333333B35F594066666666F644454000000000106559403333333303434540CCCCCCCC3C6A5940999999990140454000000000B06D594000000000A03B45400000000050785940333333336B254540CCCCCCCC447E594099999999A11B454068666666068A5940CCCCCCCC3C14454000000000D0A4594099999999C90B454034333333A3B3594000000000A80645409C999999A9C4594033333333C3004540CCCCCCCCDCCF594099999999E1F7444000000000C8DC5940CCCCCCCC8CED44403433333383ED5940333333332BE0444034333333D3FF59403333333303E644400000000088135A40666666664EEC444034333333E31F5A409999999941F0444034333333E31F5A400000000050D444403433333383315A409999999911D244400000000010375A406666666666D244409C999999D93E5A409999999939CC4440CCCCCCCC3C435A4066666666D6CE44403433333363475A4066666666E6D44440CCCCCCCC9C4C5A400000000078DE4440686666661E545A40CCCCCCCCACE244400000000018615A400000000068ED44400000000040645A403333333303F044406866666686775A40333333333BFF4440CCCCCCCC4C945A4066666666FE1145403433333333A15A40CCCCCCCC141B45400000000010A55A4099999999191D4540CCCCCCCC5CAC5A40CCCCCCCCBC2145400000000048B15A40CCCCCCCCF4244540CCCCCCCCFCB95A40999999998927454068666666CEC55A40000000002829454068666666B6D25A40CCCCCCCCB42C454034333333EBEF5A403333333353334540CCCCCCCC94F35A4033333333F3334540CCCCCCCCFC035B4066666666AE364540CCCCCCCCF40A5B4099999999413945400000000060155B4000000000E83745409C999999F9225B4033333333F3364540CCCCCCCCFC2B5B40333333334335454000000000F8375B406666666696364540CCCCCCCC6C485B40CCCCCCCC6438454000000000C0555B40CCCCCCCC1C384540CCCCCCCC5C5C5B40CCCCCCCC5C3A4540CCCCCCCC1C665B409999999959414540CCCCCCCCAC6C5B4033333333E346454068666666F6765B4099999999994D454068666666B6835B40666666668E5445409C999999998C5B4099999999E15A4540CCCCCCCC7C925B4099999999115F454000000000A0995B400000000008634540686666667E9B5B403333333323684540CCCCCCCC8C9D5B40CCCCCCCC0C6C45406866666656A15B4000000000987245409C99999929A85B4099999999C97E45409C99999959AD5B40CCCCCCCC7489454000000000E8AF5B40666666662E8E454034333333BBB55B4000000000D89845403433333373BA5B4099999999E1A045406866666676C05B4033333333B3AB45409C99999989C55B403333333333AF4540CCCCCCCCF4CB5B40CCCCCCCC2CB2454068666666DEDC5B4099999999C9BC45409C99999939E05B403333333313BF45400000000008E35B406666666686BF45403433333303E95B406666666616C845400000000010EE5B409999999981CF45409C99999959F15B409999999911D545403433333333F85B400000000010D745409C999999B9FB5B400000000010DB45400000000058FC5B400000000050E045409C999999A1FB5B400000000050E845406866666656F85B400000000080F045400000000090F55B4033333333A3F7454034333333C3EB5B4033333333430546409C99999991E65B4066666666B60D46403433333343E15B400000000090184640686666661EDF5B40CCCCCCCCC4224640686666667EDB5B40333333334329464068666666BED95B4033333333032F4640CCCCCCCC4CDA5B4000000000A83546403433333353DF5B40333333337B4146409C999999F1E05B4000000000F04846409C99999909E35B40999999992156464034333333C3E75B4000000000E0694640CCCCCCCC9CEB5B4000000000187346409C99999911F05B4099999999197C46409C99999979F95B4033333333338846406866666616025C4033333333738A46409C99999939075C40666666660E8846409C999999B1125C40999999991188464034333333531A5C403333333373874640CCCCCCCCF41F5C4066666666668146409C99999931265C406666666676754640343333333B2D5C40CCCCCCCC147146409C99999929435C4099999999B9674640CCCCCCCC8C4C5C40CCCCCCCCBC6546403433333343535C40CCCCCCCC546546409C999999295D5C40333333333B6246409C99999981605C40CCCCCCCC946146409C99999991655C4033333333735F4640CCCCCCCCC4695C4099999999B96146403433333323705C4000000000B86946409C99999921785C4066666666B672464034333333937B5C4066666666C674464000000000F0815C4066666666A67846403433333323855C40666666664E7C464068666666B68A5C409999999961864640CCCCCCCCFC915C4099999999318E464034333333D39A5C4066666666EE99464000000000309F5C4000000000C8A24640CCCCCCCC24A05C40CCCCCCCC7CA846409C99999919A15C4033333333ABAE46409C999999D9A35C4033333333EBB14640CCCCCCCC3CA95C4066666666E6B446400000000048AF5C4066666666B6B54640CCCCCCCCD4BA5C40333333336BB046400000000068CA5C4033333333F3B1464034333333EBCD5C4066666666B6B246400000000020DC5C4099999999C1B546406866666686E25C409999999941B846406866666696EB5C4000000000A8BA46409C99999981F25C40CCCCCCCC74C446409C999999C9FB5C406666666626D046400000000088025D4066666666A6D646400000000008075D4066666666E6D7464068666666A60C5D4033333333A3DE464068666666660F5D4033333333E3E546409C999999A90E5D409999999941EC46409C999999A10D5D406666666686F1464068666666EE105D40CCCCCCCC44FB464034333333E3165D40CCCCCCCC5C0C474000000000781C5D4033333333531447409C99999911215D4033333333C31A47409C99999901245D40000000001825474034333333A3275D40333333331328474068666666162C5D406666666636294740686666665E325D40666666663630474034333333FB365D4000000000A8314740CCCCCCCCA43E5D40666666664E2E474034333333FB495D4033333333732D47400000000038515D4066666666162D47406866666656555D4066666666562E474000000000D8565D40666666661632474068666666CE565D40CCCCCCCCE43747409C99999919595D4000000000D0444740CCCCCCCCF4595D4033333333134947409C999999095C5D4099999999094B47400000000000635D40CCCCCCCC4C4B474068666666B6675D4000000000A846474034333333F36A5D4033333333D342474000000000706F5D4033333333534247400000000010745D4033333333D3444740CCCCCCCC447A5D4066666666464F47400000000090845D4033333333535547409C999999098A5D4033333333DB5647409C999999C1935D4000000000C85B47409C999999E1995D4099999999015A47406866666626A55D400000000090584740CCCCCCCC84A95D4000000000D0594740CCCCCCCC44AE5D400000000090584740CCCCCCCC94B25D4000000000A05F47403433333303B65D40666666664E6147409C99999941BD5D4000000000105E474034333333D3C15D4099999999995847400000000060CA5D4000000000C0514740CCCCCCCC3CD55D4099999999914E47406866666656DE5D4066666666365047409C999999B1E75D40666666664E4D47409C99999939ED5D4099999999914D474068666666D6EF5D4000000000485047400000000080F75D4099999999095647406866666656F95D4066666666CE5D47406866666696F85D40666666664E6547406866666676F95D40CCCCCCCCCC6D47406866666636F75D40333333330B7447406866666676F25D4099999999497D47409C999999A1F05D40CCCCCCCC748347406866666676F05D4066666666868B47403433333383ED5D4033333333339347409C99999969E65D4099999999799C47409C999999B9E15D4099999999C1A04740343333331BD85D4000000000C0B04740CCCCCCCCDCD45D400000000080B4474000000000C0D35D409999999921B74740CCCCCCCC9CD25D400000000080BC4740686666660ECF5D40CCCCCCCC0CBF4740CCCCCCCC64CA5D409999999939C3474068666666DEC75D40CCCCCCCC7CC747409C99999939C65D4099999999E1CE4740686666663EC55D4033333333BBD347400000000020C15D4099999999B9D747400000000000BD5D4099999999F9D947406866666656B85D4000000000D0DC474034333333A3B05D4099999999F9E047409C99999931AC5D400000000040E947406866666656A45D40CCCCCCCCBCF8474068666666E69F5D4033333333F3FD474068666666568F5D4000000000F0FF47409C99999969895D4033333333B303484068666666AE825D40CCCCCCCC6C02484034333333AB7E5D4033333333F3FF47409C999999C9755D4033333333FBFF4740CCCCCCCC2C715D403333333373FE4740686666664E6B5D403333333343F44740343333338B635D400000000000E7474000000000205D5D40CCCCCCCCE4DE47403433333393585D40666666667ED647403433333373565D40333333337BD34740CCCCCCCC4C525D40333333334BD54740CCCCCCCC9C4C5D4099999999C1DE47406866666676445D400000000038E7474000000000E83C5D40CCCCCCCC14EB4740CCCCCCCCAC395D409999999931ED4740CCCCCCCCAC305D40CCCCCCCC54EF47409C999999B9295D4000000000A8EE4740CCCCCCCCDC205D406666666676EB4740CCCCCCCC34185D409999999909EC4740CCCCCCCC4C145D400000000010EE474034333333CB0E5D4099999999D9ED47409C999999C9045D400000000010E54740343333339BFF5C40CCCCCCCC0CDB4740CCCCCCCC7CF95C40CCCCCCCCECD7474034333333F3F35C40666666667EDE4740CCCCCCCC8CED5C403333333343E647403433333373E75C4099999999F9EF474000000000B0E35C4066666666F6F84740343333339BE15C4000000000C0104840CCCCCCCCECE85C4066666666D61748406866666646F25C4066666666C61F484034333333FBF25C40CCCCCCCC542C484034333333ABF25C40CCCCCCCC543A48403433333383F45C4033333333E3494840343333330BFD5C40CCCCCCCC3C5848409C999999A1015D4099999999216448403433333333025D4066666666866B48409C99999949065D4033333333D377484000000000380A5D4033333333CB84484034333333930F5D4066666666CE954840CCCCCCCCBC195D4066666666FEB3484068666666BE255D4000000000A8D7484034333333BB2B5D409999999971E94840CCCCCCCCE4385D400000000070DE48403433333363415D4033333333B3D8484000000000B84F5D4033333333FBCF48409C999999895E5D409999999901CE484034333333B36C5D406666666696C448409C99999901745D4033333333BBC1484068666666E6775D4099999999B9C148409C999999F18B5D40CCCCCCCCACD8484068666666E69C5D400000000018EC48409C99999961B05D40666666663EFB484000000000B0BE5D40333333334BFD48400000000070C95D4066666666B60149409C999999A1D05D40000000008008494068666666DED45D40CCCCCCCCD41349409C99999929D65D40CCCCCCCCB4234940CCCCCCCC4CD35D40CCCCCCCC4C2D49400000000048CC5D40666666669E3049409C99999979CA5D4000000000F833494068666666DECD5D40CCCCCCCC5C3749400000000060D05D4099999999F93D494068666666F6D15D4066666666CE474940CCCCCCCC04D65D4033333333235149406866666686DC5D4066666666F6594940CCCCCCCC1CE05D4066666666BE6349409C999999C9E05D40333333337B6E494034333333B3E45D40000000003079494068666666D6EB5D4033333333DB83494068666666BEEF5D4099999999C98D4940CCCCCCCC6CF05D4099999999F9964940343333330BF45D40666666662EA2494034333333E3FD5D400000000008B649400000000048045E4033333333E3CC4940343333332B0F5E40333333338BDC4940CCCCCCCCAC205E40CDCCCCCC9CEC4940CCCCCCCC9C2B5E40CDCCCCCC8CFC4940CCCCCCCCFC2F5E40333333335B0C4A4068666666A62F5E40CDCCCCCC4C1A4A4068666666962A5E403333333363264A4000000000A0295E40CDCCCCCCAC324A4000000000C02C5E40666666662E3F4A4068666666FE295E400000000088484A409C99999959215E4099999999B94E4A40343333330B175E409999999941504A40686666660E0B5E40666666661E4D4A403433333353045E403333333303514A4068666666D6025E4066666666EE5B4A40CCCCCCCC0C065E4033333333C3644A4068666666F60D5E4099999999816B4A4068666666F61A5E4099999999E97B4A4000000000102D5E4066666666FE954A409C999999113F5E40CDCCCCCC6CA44A4034333333F3595E40CDCCCCCC94A84A40CCCCCCCC9C6F5E409999999919B14A4000000000B0855E4099999999C9B94A40686666669E955E40CDCCCCCC14BE4A40CCCCCCCC54985E403333333333BB4A403433333303A15E40666666667EBA4A409C999999A9AF5E4000000000F8BB4A409C99999949BD5E40CDCCCCCCB4BF4A40CCCCCCCCDCC95E40CDCCCCCCB4C54A4000000000D0D35E40666666661EC74A403433333323DB5E4000000000F0C34A403433333353DF5E40CDCCCCCCC4C34A409C99999939E25E403333333363C34A4034333333D3E35E409999999969C34A4068666666E6E65E40CDCCCCCCF4C54A40343333336BEF5E400000000068C14A409C999999A9FF5E4033333333EBB34A4000000000E0095F4099999999E9AD4A4034333333130E5F400000000060AF4A4068666666A6125F4099999999A1AB4A4000000000A0175F4066666666AEA24A409C999999D11D5F40CDCCCCCC649D4A4034333333F3285F4066666666F69A4A40CCCCCCCCFC335F409999999921914A40CCCCCCCC74385F40333333339B904A4068666666063A5F409999999919964A4034333333233E5F409999999941994A40CCCCCCCCCC445F4099999999119A4A4000000000704E5F409999999939954A409C999999095B5F4000000000B88A4A409C999999F1625F400000000018864A40CCCCCCCC24665F40333333335B874A409C99999989695F409999999969854A40CCCCCCCC446C5F409999999979804A4000000000806C5F4000000000687A4A409C999999916B5F40CDCCCCCC24774A409C999999996E5F403333333303724A409C99999919725F403333333303724A40CCCCCCCCCC775F40666666668E6F4A4034333333437C5F40CDCCCCCC7C664A406866666646805F409999999949624A40CCCCCCCC14835F4066666666A65E4A406866666696835F4099999999A15B4A409C999999D9835F403333333393584A403433333303835F40CDCCCCCC34564A40CCCCCCCC7C815F40666666664E524A406866666606815F40333333331B4E4A4000000000F0825F403333333363494A4068666666068A5F4000000000F8454A409C999999718C5F403333333373424A40CCCCCCCCFC8C5F4066666666EE3D4A40CCCCCCCC348F5F4000000000F0384A406866666606945F40333333332B334A4068666666DE955F4066666666562E4A4000000000C0945F4033333333732A4A409C99999929965F403333333333274A40343333338B985F40CDCCCCCCAC244A40686666660E995F40CDCCCCCC741B4A40CCCCCCCC44995F40CDCCCCCC24164A4000000000289D5F400000000030104A40CCCCCCCCF49D5F409999999901044A40CCCCCCCCACA05F409999999981F6494068666666D6A95F409999999901E449409C999999D9AC5F40CDCCCCCCFCD949403433333313AC5F409999999911CE49403433333363AD5F40CCCCCCCC7CC849409C99999991B15F40CCCCCCCCC4C54940CCCCCCCC8CB35F4099999999B9C049400000000050B35F409999999959B9494034333333F3B45F40CCCCCCCCC4B449409C99999941B65F40CCCCCCCCE4AF4940CCCCCCCC5CB55F40666666664EA8494068666666AEB65F40CCCCCCCC74A1494000000000D0B85F40CCCCCCCC749D49406866666656BA5F40666666660E9649400000000030BB5F4099999999D18C4940686666664EC15F4099999999317E494000000000B0CC5F40333333332B6A494068666666A6D35F40666666669E5A49403433333333D65F4000000000884F49400000000038D65F4099999999694649409C999999B9D35F4099999999413F49406866666696D35F40CCCCCCCC0C3A494000000000D0D55F4033333333CB3649409C99999979D65F409999999961324940D0CCCCCC94D55F4099999999D12C4940D0CCCCCC4CD95F40000000003826494068666666C6E55F4000000000C01A49409C999999C9E05F40CCCCCCCC2C0949409C99999979DF5F4066666666CEFC48400000000028E05F40CCCCCCCCCCEF48400000000040E35F4099999999A1E6484000000000C0E85F40666666664EE14840343333332BEC5F4066666666BEDB48403433333383ED5F40CCCCCCCCF4D54840D0CCCCCC1CF45F4099999999A1CF48409C999999F9FF5F4000000000C8C8484068666666960760406666666696C7484034333333DB1060400000000010CC4840343333338716604099999999D1CC4840000000009C18604099999999D9C948400000000050196040333333335BC5484068666666A61860403333333353BF484000000000381A6040CCCCCCCC5CBB484068666666061E60406666666676B9484068666666A620604099999999A9B548409A99999915226040CCCCCCCCF4AF484000000000D82360400000000058AE4840CECCCCCCEC25604099999999D1B0484034333333F32760400000000078B0484068666666EA296040333333334BAD484000000000342B60409999999961AE4840343333334F2C604099999999D9B14840686666661A2E604099999999D9B14840CECCCCCCF02F6040CCCCCCCCC4B1484000000000143160406666666666A94840CECCCCCCEC32604099999999B1A448409A9999997935604066666666A6A34840CECCCCCC5C396040CCCCCCCC74994840000000003041604033333333737C48409A999999454660409999999921724840686666665E4B6040CCCCCCCCE46E484034333333B3516040333333333B6E484000000000C053604000000000F86248409A99999919526040666666660E57484034333333AB516040666666661E4D4840CECCCCCC1C536040666666668E494840000000001855604000000000E03D484068666666E65760406666666616374840686666666E58604000000000B8314840CECCCCCCBC59604066666666B62B4840CECCCCCC3059604066666666962048409A999999C956604066666666561048409A99999971576040666666667602484000000000285B604000000000F8F64740343333334B5D6040CCCCCCCCE4EB47409A999999D95D60409999999941E1474000000000C85E604033333333CBDA474068666666166060409999999981D8474068666666E6636040CCCCCCCC4CD9474000000000386A60409999999929DD474034333333DB6E6040666666667EDC4740CECCCCCCD0716040CCCCCCCC4CD74740CECCCCCC20796040333333331BD7474034333333CB84604066666666E6DB4740686666662A8C60400000000060DD47409A9999993D8F6040CCCCCCCC84DB474034333333FB916040666666665EE247409A9999996194604066666666EEF147409A999999A19660400000000040F9474034333333BB986040CCCCCCCC54F847409A999999119C60403333333353FD4740CECCCCCCA4A06040666666663E084840000000009CA4604066666666860D484034333333A3A9604066666666FE0C4840CECCCCCCFCAE604000000000700C48400000000058B260406666666606114840343333337FB5604066666666961A484034333333F3BA604099999999092348406866666696C6604099999999112E48403433333363C96040CCCCCCCCCC2F484000000000B8CA604066666666362F4840CECCCCCC98CE6040333333337B2D4840CECCCCCC08D26040666666662E2948409A99999949D5604000000000802048409A999999C9D5604000000000F01A4840343333336BD5604000000000A013484068666666B6D4604099999999610F4840343333335FD36040CCCCCCCC9C0A4840CECCCCCC1CD2604099999999E102484000000000ECD2604033333333D3FC474034333333CFD4604000000000E8EF4740343333335BD66040CCCCCCCC94E647403433333313D860403333333393DB4740CECCCCCC4CD76040CCCCCCCC9CD747400000000044D6604033333333FBCF47400000000014D36040666666660EC347403433333357D160409999999919BE4740CECCCCCC78CF60403333333343B947409A9999993DCC60400000000018B84740CECCCCCCDCCA604099999999F9B64740686666664EC9604000000000F0B447406866666652C860409999999959B04740CECCCCCC34C760403333333323AD47409A9999995DC5604066666666AEA647403433333337C56040666666661EA14740686666660EC66040CCCCCCCCDC9847400000000078C66040CCCCCCCC649047409A99999961C46040CCCCCCCCD488474000000000C4C2604033333333337D4740CECCCCCC48C2604033333333B3794740CECCCCCC78C16040CCCCCCCCE4704740000000003CC1604000000000D86D47409A999999B9C0604099999999495B474000000000A4BE604000000000A04E474034333333BBBB604033333333E33F47400000000060BC6040CCCCCCCC1C37474034333333E3BC604000000000F82E4740343333332BBC604033333333032B474068666666FEBB604000000000902747400000000090BB604066666666B61F474068666666A6BA6040CCCCCCCCB41C47409A99999901B86040CCCCCCCCCC174740000000006CB6604033333333E31147409A999999C1B6604099999999E90847409A999999F1B56040CCCCCCCC2401474034333333BBB46040CCCCCCCC44FA4640CECCCCCC74B36040CCCCCCCCCCF5464034333333A3B1604033333333EBF24640343333336BB06040CCCCCCCC7CF046406866666682AF6040CCCCCCCCBCE746409A99999939AF604033333333FBE04640343333335FAE60400000000040DA464068666666E6AE6040333333335BD3464034333333F7AD60406666666666CD46400000000060AB6040666666663EC9464000000000E8A9604033333333CBC64640343333338BA8604033333333CBC5464000000000F4A560406666666656BF4640CECCCCCCA0A36040CCCCCCCC24A946409A99999919A3604000000000389C46409A999999A1A3604033333333BB9046400000000060A06040333333338B89464000000000F49D6040CCCCCCCCD4834640CECCCCCC709C6040CCCCCCCCE485464068666666D69A604033333333D3874640000000002497604000000000508A4640CECCCCCC4C95604066666666FE8B46409A9999999191604000000000B88F46409A9999999D8B604099999999799446409A999999CD856040CCCCCCCC049A46400000000028826040CCCCCCCCEC9C464000000000487F6040333333333B9F4640CECCCCCC187D60409999999909A3464068666666427B604066666666D6A9464000000000707960403333333313A7464034333333BF776040666666660E9F46409A999999ED74604099999999499A46409A999999A5736040333333337B914640CECCCCCC84726040CCCCCCCCB48A46409A999999996F604066666666AE814640CECCCCCC4C6E6040CCCCCCCCF47D46409A9999999568604033333333D3774640343333334B67604000000000C875464068666666A2626040333333337B744640686666660E61604066666666C67146409A999999695F604033333333136C464000000000F85E6040CCCCCCCC6466464000000000206060409999999969604640CECCCCCCF0616040000000007054464000000000C8626040666666663E4C46406866666606646040666666660E3C4640343333332B686040999999992909464034333333D366604000000000600046403433333393656040CCCCCCCC34DA454000000000E06560400000000050D3454034333333C36560406666666696C8454068666666D665604066666666B6C045409A999999B166604066666666C6BE454068666666CE6760409999999909BC4540CECCCCCC60686040666666666EB74540000000003C686040CCCCCCCC64B04540CECCCCCCA86760400000000038AB454000000000C866604066666666FEA04540686666669E65604033333333339245406866666656646040666666667E8C4540CECCCCCC7C63604066666666FE8745409A999999C162604000000000E084454000000000AC62604000000000687A45409A99999931626040CCCCCCCC7C7345409A9999992D6060409999999909714540000000002C5E604066666666066D454034333333CB5B604099999999816E4540CECCCCCCB4596040CCCCCCCCAC6D4540686666661E576040CCCCCCCCFC6A4540CECCCCCC7852604033333333E367454068666666C64F604099999999B9634540CECCCCCC7C4E604099999999B160454000000000984D604000000000105D454000000000704D6040CCCCCCCC94594540686666660E4E604000000000C0574540CECCCCCCA85060400000000050564540343333337352604066666666C64F454000000000B4526040666666669E484540CECCCCCCDC50604000000000884445409A999999F14F60406666666606494540CECCCCCC684E6040CCCCCCCC744A4540343333338B4B604000000000C05045409A99999975496040CCCCCCCCAC574540CECCCCCCE447604066666666565F454068666666F647604099999999B16F4540CECCCCCCB0476040666666662672454034333333D7446040000000008075454068666666FE436040666666665E7A4540CECCCCCCA442604099999999B17C454068666666B640604066666666367B454034333333433F604000000000C87C4540686666661E3E604099999999717F454068666666BE3C604033333333C37F45409A9999998D3B604000000000887B45409A999999ED3A6040666666667672454034333333EF386040666666666663454000000000C0386040CCCCCCCC4C5A454034333333E337604099999999494D45400000000008376040CCCCCCCCCC3C4540CECCCCCC54366040CCCCCCCC5C394540000000001834604066666666DE384540343333335333604033333333CB3745409A99999929326040000000003032454068666666C2306040CCCCCCCC3C31454000000000842F6040CCCCCCCC84344540686666668E2D604033333333CB374540CECCCCCCB42B604000000000383845409A999999092A604000000000F0344540CECCCCCC1428604066666666CE2D454000000000F82660406666666606284540686666669226604099999999A12245409A9999994126604066666666F61B454034333333472460409999999991154540CECCCCCC7822604099999999391245409A999999BD1E604066666666CE084540CECCCCCC8C1D6040CCCCCCCCE404454000000000E01A604000000000D804454000000000F8176040CCCCCCCC34054540686666660E14604033333333AB02454000000000AC0D604000000000600145409A999999D909604000000000480345400000000020056040CCCCCCCC7C01454068666666720160406666666666FE444034333333EB00604066666666CEF944409A9999990D0160409999999901F3444034333333CB0160400000000090EE44409A999999B10260400000000098EB4440CECCCCCC380460403333333373E24440CECCCCCCD0056040333333339BD94440000000004008604033333333E3D344409A9999994109604000000000C0CD4440343333334F0960409999999909C84440000000002808604066666666D6C04440CECCCCCC68066040CCCCCCCC6CB7444000000000C804604099999999A1B14440343333338F03604033333333D3B1444000000000B00160403333333333B54440343333336B006040666666666EB9444034333333CBFA5F406666666606BB44403433333303EC5F409999999951B84440686666669EE45F40CCCCCCCC34BA44406866666616E15F4099999999A9BD444068666666E6DA5F40CCCCCCCCECBD4440D0CCCCCC54D15F409999999989C244400000000080CB5F403333333303C4444000000000C0C85F4033333333FBC644400000000038C85F4000000000C0CD44406866666676C55F400000000068D24440CCCCCCCCECC35F4033333333FBD744409C99999971C05F4033333333FBDE4440343333331BBD5F40666666667EE2444034333333D3B95F4099999999F9E344409C99999939B65F4066666666BEDF44409C99999969B25F4066666666EEDB4440686666668EAF5F4000000000C8DC4440686666662EAE5F4000000000B8DB4440343333339BAC5F400000000090D84440343333337BA65F40333333330BD244403433333303A55F403333333313CC44409C99999991A25F40666666666EBF444068666666DEA05F40666666666EB2444034333333639F5F40CCCCCCCCD4AD4440CCCCCCCCE49C5F409999999909AD4440343333335B9A5F409999999921A944409C99999909955F4033333333E39C4440343333333B905F4033333333A39144400000000040895F40CCCCCCCC048A444068666666F6855F4000000000088344406866666646845F4066666666AE7C4440CCCCCCCC4C7F5F4033333333CB73444068666666FE775F40CCCCCCCC34724440CCCCCCCC2C725F40666666669E6F4440CCCCCCCC9C6E5F4000000000F06E4440CCCCCCCC0C6C5F4099999999596B444000000000306A5F4000000000E06544409C99999949695F40CCCCCCCCB46344409C99999901665F40CCCCCCCCB46344409C999999B9625F40CCCCCCCC0C5F444068666666AE5A5F4000000000785444400000000020545F40333333338352444068666666E64B5F4099999999714B444034333333AB445F4033333333134644409C999999A9415F40666666660E43444034333333DB405F4099999999B93F4440CCCCCCCCCC3F5F40CCCCCCCC7C3B4440686666664E3C5F40CCCCCCCCA43A444034333333EB385F4033333333DB3A44400000000068315F40666666661E31444000000000982D5F40CCCCCCCCDC2844409C999999C91E5F40000000004017444068666666BE185F4000000000580D4440CCCCCCCC2C175F40CCCCCCCC840044406866666666165F40333333337B014440686666661E115F40333333334BF64340CCCCCCCCC4065F4066666666A6EB434068666666A6F05E40CCCCCCCC44E9434000000000A8E95E4000000000D8F04340686666661EE75E4000000000A0EB43409C99999929E55E4000000000A0E44340CCCCCCCC5CDF5E409999999949E243400000000048D65E4000000000A8E143406866666636D15E40333333330BDD43400000000080CE5E4033333333E3D743400000000010C25E406666666636D643400000000080BD5E409999999959CF434034333333C3B55E4000000000E8CC4340686666666E955E40CCCCCCCCDCAE434068666666668E5E400000000038A24340CCCCCCCCBC875E409999999971934340CCCCCCCC0C835E4099999999018C434068666666DE7E5E4066666666CE864340CCCCCCCC0C7B5E40CCCCCCCCAC8443409C99999951775E40CCCCCCCC8C7F43400000000088735E4066666666E67E434034333333AB6F5E40CCCCCCCC3C81434000000000586B5E4000000000708043400000000080685E4000000000387A434000000000E86A5E4066666666267243400000000098695E4033333333BB6E43409C99999919615E4066666666566A4340CCCCCCCC7C545E40333333337367434000000000204F5E40333333332B62434068666666464D5E40333333332B5F434000000000784A5E4066666666A65D43409C999999C9475E409999999919684340CCCCCCCCD4465E40CCCCCCCCDC754340CCCCCCCC0C4C5E40CCCCCCCC2C7943409C999999D9505E4099999999E97A434034333333836B5E4099999999E98D4340343333332B685E40666666662E9C434000000000886A5E406666666666A243400000000080705E40CCCCCCCC7CAC43409C99999961745E409999999979B14340CCCCCCCC44725E40666666664EB34340CCCCCCCCCC605E4033333333FBAF434034333333C3565E40333333333BB043409C999999A1515E400000000040B143400000000030535E4099999999E1B943403433333353525E40CCCCCCCC7CC24340686666661E515E4000000000B8C5434034333333035A5E40CCCCCCCC84CF4340CCCCCCCC0C5E5E4000000000F0D143400000000020615E4099999999C9D143409C999999E9605E4066666666B6D743409C999999595E5E4000000000A0E04340CCCCCCCC1C615E403333333323EC43403433333343735E4033333333ABF94340CCCCCCCC9C775E4000000000F005444068666666E67E5E40333333336311444000000000388C5E4033333333DB2D444034333333038D5E4099999999B132444034333333E3905E4066666666064044409C99999999915E40333333335B45444000000000708B5E4066666666264D4440CCCCCCCCFC885E40666666661658444068666666F6765E4099999999C96B4440686666666E755E40CCCCCCCCB47C444000000000C0735E4000000000F87B44400000000000715E40CCCCCCCC1C704440CCCCCCCCAC6E5E40666666664E6C4440CCCCCCCC54665E40CCCCCCCCF46B44400000000060625E400000000070704440343333332B4B5E40CCCCCCCC5C7344400000000080455E4099999999B96B44400000000030405E4033333333E35F444068666666063B5E40000000007057444000000000D8355E4099999999195344403433333353315E4066666666664B44409C999999A91E5E4000000000901D4440CCCCCCCC9C175E4000000000181A4440CCCCCCCC6CF65D40CCCCCCCC64FE4340CCCCCCCCD4E55D409999999989F343400000000008D95D409999999951E043409C999999A1D45D4000000000B0D443409C999999B9D05D4033333333CBC743400000000060CE5D40333333333BB443409C99999991C25D4066666666769C43406866666686BE5D40666666665E9743403433333363BA5D40CCCCCCCC4C954340CCCCCCCCE4B45D4000000000089643400000000028B05D40333333338B9443406866666616A85D4033333333A3964340CCCCCCCC349E5D40333333331B8F43400000000010935D4066666666968843406866666676895D4000000000F8984340686666669E825D4066666666069D43400000000068775D40333333337B9843400000000038725D4066666666369143400000000078675D40333333332B6D43409C99999971635D40999999998158434034333333B3635D40CCCCCCCC04504340CCCCCCCCFC695D40CCCCCCCC4C3643409C99999911715D40CCCCCCCCE4274340CCCCCCCCF4805D409999999979174340CCCCCCCCC4A25D4066666666260C43409C999999B1AA5D40CCCCCCCC2C1043403433333333B35D4066666666361043409C99999929BC5D40999999997905434034333333C3C15D4066666666B6F342400000000048C25D403333333393E742406866666676C25D40CCCCCCCC64E342400000000080C45D4099999999D1DF4240CCCCCCCCB4C55D4099999999B1D94240CCCCCCCC24C25D40CCCCCCCC9CD442409C99999969BF5D400000000018D24240CCCCCCCC1CBD5D40666666663EBF424000000000F8BC5D403333333363AA42409C999999E1BF5D400000000078A342400000000028C75D4000000000C0994240CCCCCCCC64D25D4033333333B391424034333333CBDC5D4000000000F88F4240CCCCCCCCACF05D4099999999D9934240CCCCCCCCCCF85D40666666666EA042409C99999951F85D40CCCCCCCCDCA542409C99999981F85D4000000000E8AC42409C999999F9095E40CCCCCCCC5CBF424000000000F0135E40CCCCCCCCB4CF42400000000060125E400000000008D442406866666676105E4099999999E9D642400000000038125E406666666696D8424000000000B0175E4033333333BBD942400000000000305E4066666666BEEA42403433333323435E4033333333D3DC4240CCCCCCCC0C4E5E4099999999D1CC424068666666D6585E40333333331BCA42406866666656605E40CCCCCCCCECC142409C999999F9685E40CCCCCCCCECBA42400000000040745E403333333373BA424000000000C07D5E400000000000B9424068666666A6805E40CCCCCCCC74BF424000000000A0835E4033333333B3C342403433333303875E4033333333DBC2424034333333D38A5E403333333363BA4240CCCCCCCC9C955E4000000000E0B342409C999999919F5E400000000038B44240CCCCCCCC8CA65E40CCCCCCCC94B6424000000000B0AA5E400000000090B342409C999999B1A45E4099999999B1A842406866666696A55E40666666662E97424068666666FEA05E40CCCCCCCCA491424068666666969C5E4000000000B88842409C999999319F5E4099999999D98242400000000080A15E4066666666568042403433333343A15E40999999993179424000000000409D5E4033333333237542409C999999D1955E4066666666866A4240CCCCCCCC8C915E4033333333BB6A42409C999999818F5E4000000000C86C424000000000108E5E40CCCCCCCC947042409C999999018D5E4066666666AE764240CCCCCCCC648A5E40CCCCCCCCB47A4240343333332B835E4099999999417C42409C999999B17B5E4000000000D07A424034333333DB6A5E40666666660E6B424000000000705A5E4033333333835E42400000000038495E4099999999895442409C99999971435E4099999999414E4240343333335B3F5E4099999999894C42409C99999939385E40CCCCCCCC4C514240CCCCCCCCE4335E400000000000514240CCCCCCCCFC325E4099999999B94D4240CCCCCCCC7C385E4033333333FB44424034333333EB395E40666666661E3E4240CCCCCCCC54395E4099999999D93842406866666636365E409999999989364240CCCCCCCCAC315E4000000000683A42409C999999892D5E4066666666E63442409C999999A92B5E40CCCCCCCC9C2B4240CCCCCCCC942B5E40CCCCCCCC8C15424034333333D3285E4099999999A1104240CCCCCCCC3C215E4099999999E90D42400000000028195E40CCCCCCCCE40642409C99999949165E4033333333230A42403433333323155E4000000000180E424034333333FB155E4000000000401842409C999999F9145E40CCCCCCCC341D42409C99999949115E4033333333F31C424034333333BB0B5E4099999999E9194240CCCCCCCC7C075E40CCCCCCCC3C1342406866666606065E4000000000380F4240CCCCCCCC9C0B5E40CCCCCCCC3C0242409C999999F1105E40CCCCCCCCEC0042409C99999939125E409999999901FE4140CCCCCCCC040E5E4033333333ABF741400000000080035E409999999939EE41409C999999C1015E409999999951E6414034333333A3FE5D4000000000C0DE41409C99999959FA5D4033333333BBD841400000000070F75D403333333363D2414000000000E0F35D409999999911CF41400000000010EE5D40333333335BCB414000000000F0E65D40CCCCCCCC24BC41409C999999B1E15D4066666666E6AD41400000000080DB5D40CCCCCCCC94A64140CCCCCCCC94D65D4099999999918E414000000000D0CD5D409999999981814140CCCCCCCC94CA5D4066666666A66C4140CCCCCCCCDCCC5D40CCCCCCCCCC5F4140CCCCCCCC7CD65D40CCCCCCCCEC5F41400000000050DB5D4099999999695B4140686666664EE55D4066666666864A41403433333343F15D4033333333833F4140CCCCCCCCACFD5D409999999951394140CCCCCCCCE40C5E4000000000B02941409C99999911115E40333333331323414068666666A6145E4099999999A1154140686666663E1B5E4033333333E3EE4040CCCCCCCCFC1F5E40CCCCCCCCB4DB4040686666664E205E4000000000B0D140406866666666275E4099999999C9BE40409C999999012F5E4099999999499E404000000000C0375E40CCCCCCCC1C824040686666666E395E4066666666EE6B40400000000098365E4066666666CE614040343333339B365E4000000000A8544040343333335B3F5E40CCCCCCCC9448404068666666C6525E4099999999893A404068666666DE555E4000000000683640409C999999A9595E40333333339B2F40409C999999D9595E4066666666661A40409C999999D95C5E4000000000A0134040CCCCCCCC645F5E4000000000800F404068666666266B5E4000000000880640409C99999911705E40CCCCCCCC2CFE3F406866666646755E406666666656E63F4068666666CE765E403233333303D13F409C99999971775E40CCCCCCCC1CB43F4068666666DE705E403233333313B33F4034333333936B5E400000000050B63F406866666686565E4098999999D9DB3F40CCCCCCCC0C515E4098999999D9DC3F40CCCCCCCC54495E4032333333A3D73F40686666664E3E5E400000000090DE3F4034333333AB325E40000000001004404068666666462A5E4000000000600A40409C99999949215E40CCCCCCCC8C0D404000000000C80B5E406666666656F73F409C99999951065E4098999999D9F93F4034333333BB045E4032333333D3F53F40CCCCCCCC4C025E4000000000B0EF3F4034333333430C5E406666666606E83F40CCCCCCCC3C165E40CCCCCCCCBCF33F409C999999D11F5E40999999998902404034333333CB2D5E4066666666D6FB3F40CCCCCCCC24305E400000000040EC3F40343333336B325E40CCCCCCCCDCD13F4000000000003C5E40CCCCCCCC0CC03F40343333338B435E40CCCCCCCC2CB83F40CCCCCCCC1C4D5E4098999999C9A03F406866666676565E4000000000407C3F4000000000486A5E4098999999D9513F40CCCCCCCC4C725E4032333333B3293F400000000068755E4066666666C60F3F400000000030785E4000000000C0EA3E40686666663E715E4000000000D0DE3E4068666666366B5E400000000020DD3E4034333333C3615E409899999949D73E4000000000D05A5E400000000030CA3E4068666666D6535E400000000020B33E409C999999D93F5E4098999999E98E3E40CCCCCCCC0C3C5E400000000040783E400000000070395E403233333383643E403433333393345E4098999999C95A3E409C99999951285E400000000010643E409C999999C91C5E409899999949633E4068666666B60F5E406666666696483E40CCCCCCCC740C5E4066666666C63D3E4000000000A00E5E4032333333E33F3E40CCCCCCCCAC105E406666666656433E400000000090165E4066666666563F3E4068666666A61F5E4066666666964D3E409C99999989285E406666666616223E4034333333E3395E400000000020293E4034333333334A5E4000000000404D3E403433333383505E4098999999D94D3E40CCCCCCCCCC555E409899999949483E409C999999B15B5E4066666666063A3E4034333333636B5E4066666666A6FA3D40CCCCCCCCFC735E4000000000C0F33D4000000000707C5E4032333333E3E43D40343333331B815E400000000040E33D40686666664E855E4000000000D0DE3D4000000000F8795E409899999999C73D40CCCCCCCC4C6B5E403233333373953D4068666666C6645E409899999979893D406866666666605E40CCCCCCCC0C7C3D4000000000306C5E4000000000D0823D409C99999999745E4098999999C99A3D40CCCCCCCCD4785E4066666666B6A03D40CCCCCCCC3C7C5E40CCCCCCCC1C9B3D409C999999F97D5E4098999999997D3D40CCCCCCCCBC7A5E400000000090223D4000000000A0765E400000000000213D40CCCCCCCC9C725E4066666666C6393D4034333333EB6D5E4000000000A0413D4034333333FB695E4032333333733C3D400000000028625E4098999999993C3D40CCCCCCCC2C5F5E403233333373313D4068666666A65C5E4000000000A0213D406866666656615E4032333333531E3D40686666668E6A5E4066666666B6023D4000000000806B5E400000000000F43C406866666606695E409899999979EA3C400000000090625E400000000090EE3C4068666666666A5E4066666666F6D93C403433333353685E406666666696C43C4000000000C8655E40CCCCCCCC1CBC3C409C99999939615E4032333333B3B63C409C999999695E5E403233333333A43C400000000070625E406666666666853C400000000088665E4098999999D95D3C409C99999909675E4098999999C94A3C4034333333A3605E403233333303533C409C999999B1565E4098999999D93A3C40CCCCCCCC6C515E40CCCCCCCCDC383C4000000000E04D5E4000000000A0583C403433333353495E4000000000A0533C40CCCCCCCC4C465E4000000000604A3C40CCCCCCCC44425E403233333343283C409C999999593D5E409899999979093C40686666661E395E400000000000013C400000000008345E40CCCCCCCC6C033C409C999999D92F5E40CCCCCCCC8C023C40CCCCCCCCDC305E409899999939FA3B400000000050355E403233333313F03B400000000050355E406666666636E43B409C999999D92B5E40CCCCCCCC9CBE3B4034333333532A5E409899999919B03B40CCCCCCCC8C2A5E4032333333B3A33B409C99999999255E40CCCCCCCCAC943B403433333343285E40CCCCCCCC6C7B3B409C999999E1265E403233333393693B40CCCCCCCC8C225E400000000080513B4068666666FE1D5E409899999999413B40CCCCCCCC9C185E4000000000D0273B4068666666D6115E4098999999D9183B4068666666DE085E4098999999D9E23A40CCCCCCCC3C065E4098999999D9C73A40CCCCCCCC8C055E40CCCCCCCCECAB3A4000000000C0025E403233333343A23A4000000000F0FD5D40CCCCCCCC1C963A406866666676F85D4066666666469C3A409C99999949F85D4098999999D9AE3A409C999999E9F55D406666666676B03A400000000090F45D4066666666A6BC3A40343333332BF45D400000000030CC3A4000000000C0F45D40CCCCCCCCACD83A409C99999979F25D40CCCCCCCCDCD43A409C99999911F15D403233333353C63A400000000078ED5D409899999989BA3A4034333333B3E95D40CCCCCCCC4CBF3A40CCCCCCCCA4E55D4032333333F3C83A409C999999C1E55D400000000000BB3A409C999999E9E75D406666666606AD3A4000000000D8E85D4066666666069F3A406866666676EE5D4032333333039C3A409C99999939F25D4000000000F08B3A409C99999931F55D400000000040733A4000000000C8F55D4066666666066A3A400000000018F85D4066666666F65E3A403433333363F85D40CCCCCCCC8C553A406866666606F35D4066666666D64C3A40CCCCCCCC54EC5D4066666666863C3A40343333334BE45D409899999999203A4034333333A3DD5D4000000000000E3A409C999999A9D75D4066666666D60D3A409C99999909D45D403233333303103A4034333333DBCE5D4098999999B91A3A40CCCCCCCCECC85D40CCCCCCCC2C1F3A409C999999E1D05D40CCCCCCCC8CF939400000000040D55D4000000000E0F23940CCCCCCCCBCDA5D400000000050F43940686666660EE05D409899999959023A409C99999999E75D4098999999E9003A40CCCCCCCC7CE95D400000000030EB3940343333337BE75D4098999999A9D239409C99999961E35D40CCCCCCCCDCB239406866666686E25D40CCCCCCCC5C97394000000000A0E75D40CCCCCCCCFC6F394068666666D6E75D40343333332364394000000000F0E55D4064666666365E394034333333F3DF5D40CCCCCCCC9C68394068666666FEDA5D4098999999A97539400000000000D65D40000000004072394068666666D6D05D4000000000D07739406866666686CB5D406466666626733940CCCCCCCC5CC95D4000000000106A394068666666D6CA5D4000000000105B39406866666696CF5D4098999999994E39406866666646D25D4034333333733B39403433333313CF5D4098999999B93439403433333393C15D4034333333333939400000000090BE5D4034333333933539406866666686BA5D4064666666762039409C99999929BD5D409899999939013940686666662EBA5D40CCCCCCCCCCED3840CCCCCCCC9CB45D400000000040E938400000000048AD5D40CCCCCCCC8CD9384034333333C3A85D4064666666E6D538409C999999F9A85D400000000020CF38406866666646AC5D406466666646C838406866666606AE5D403433333303BF3840CCCCCCCC0CAA5D4064666666169F3840CCCCCCCCDCA35D403433333393943840686666665E9A5D4098999999C999384068666666E6925D4000000000A092384034333333738C5D406466666636A038403433333393855D403433333383A0384034333333E3805D4064666666568F38409C99999961805D4034333333637B384000000000D87B5D4064666666667938406866666666795D4064666666D67A384068666666EE755D40CCCCCCCC6C7938409C99999949765D4064666666B66E38409C99999941785D409899999959653840CCCCCCCC8C815D400000000030613840CCCCCCCC3C835D4000000000C05338406866666696835D4000000000003F3840CCCCCCCCDC795D4000000000401B38409C999999B9755D40646666662603384000000000786F5D4098999999C903384068666666BE6A5D403433333373F03740CCCCCCCC34685D403433333333D637409C99999911655D403433333363DB37409C999999D95D5D400000000030D7374000000000B85B5D40CCCCCCCCACCA37409C999999695D5D400000000080C53740CCCCCCCC945D5D409899999979BC374000000000B05A5D4098999999F99E37400000000088575D4000000000B09637400000000030565D4000000000C0A23740343333332B555D403433333373B53740CCCCCCCC9C525D4000000000E0B6374068666666664E5D4034333333A3A53740343333337B495D4098999999499937400000000048455D4098999999299437409C99999919425D4098999999999F374000000000483A5D40CCCCCCCC8CA537409C99999919375D40CCCCCCCCFC733740CCCCCCCC9C305D40CCCCCCCCEC61374034333333932D5D4098999999495C37400000000048285D4064666666965A374034333333AB2B5D4000000000D05337409C999999B92C5D40CCCCCCCC1C47374034333333D32A5D4098999999693A37400000000088255D4000000000E03737403433333373225D4000000000002E3740CCCCCCCC44215D4000000000B001374000000000201E5D406466666626F23640CCCCCCCC1C165D4098999999E9F03640686666661E105D409899999939FB364068666666360E5D406466666616F33640CCCCCCCC340D5D40CCCCCCCC2CEB364034333333130A5D400000000030E336409C99999901045D40CCCCCCCC0CE136409C99999989F65C403433333333CD36400000000060F05C40CCCCCCCCECD23640CCCCCCCCFCE85C409899999979DA36409C999999E9E35C400000000020D336400000000038E25C4034333333E3C33640CCCCCCCCE4DF5C406466666606B83640343333337BD85C406466666606B83640686666668ED25C4064666666A6C636400000000088CC5C409899999939D1364034333333DBC55C40CCCCCCCC1CC8364068666666C6C05C40CCCCCCCC7CB536406866666686BA5C403433333343AF3640686666665EB95C4064666666B6A33640CCCCCCCCA4B65C4064666666E69D36406866666606B05C406466666656A036403433333383AD5C40CCCCCCCC1CBD3640CCCCCCCCB4A95C409899999959C1364000000000F0A55C40CCCCCCCCCCB23640343333339BA45C400000000070A7364000000000D8A25C4000000000E09E36400000000078A35C4064666666668736409C999999C19F5C40CCCCCCCCEC86364034333333E39A5C400000000050953640CCCCCCCCCC955C40CCCCCCCCDC9736406866666606915C40CCCCCCCC7C8A3640343333339B8E5C4000000000D08D3640343333330B8C5C4034333333A3903640CCCCCCCCDC875C4034333333A39036403433333343865C4000000000208D36409C99999939835C4000000000008B3640343333332B815C4034333333B3833640CCCCCCCCFC805C40CCCCCCCC0C83364000000000987B5C4034333333F38736403433333303755C4034333333739B36409C99999949705C4000000000D0BB364000000000506A5C409899999939CD364000000000A8675C406466666686DC3640686666669E665C409899999909F836406866666686655C40000000002005374068666666E6655C4034333333B313374068666666B6675C4034333333A32037403433333343615C4034333333231A374000000000805C5C4098999999190E374068666666765D5C4064666666E6FE364000000000485C5C4098999999C9F036400000000030555C409899999979E93640686666669E555C409899999989E336409C99999911565C406466666656DD364068666666A65B5C406466666616CA36409C999999C95C5C4034333333E3B9364068666666065F5C400000000040B13640CCCCCCCC64635C403433333313983640343333334B635C40646666667667364000000000B0655C4098999999B9593640CCCCCCCCE4645C4098999999194C3640CCCCCCCC24635C4064666666A639364068666666FE625C40000000006039364034333333BB615C4064666666F63E364000000000A05F5C4064666666D63D36409C999999C95E5C40CCCCCCCCAC37364068666666A65E5C400000000010323640CCCCCCCC4C5E5C4064666666C6313640343333339B5A5C4098999999A92D36403433333383575C4034333333332A36409C999999F9545C409899999939253640CCCCCCCC0C515C4098999999B91636409C99999989495C40343333333313364068666666AE455C40CCCCCCCC3C3536406866666686405C40CCCCCCCC8C1E364068666666F63E5C400000000030F03540CCCCCCCC0C3D5C406466666646E8354000000000D8395C4064666666A6E1354000000000C0335C4034333333D3F13540CCCCCCCC6C2E5C400000000000E735409C999999492A5C406466666606DC3540CCCCCCCC94285C4034333333E3D135406866666686255C4000000000E0C635409C999999A91F5C40CCCCCCCC7CD1354068666666F61A5C400000000070E1354000000000201C5C406466666666ED35409C999999791B5C406466666646F535409C99999959195C409899999939FB3540CCCCCCCC04175C400000000060FA35400000000028185C4000000000E0EA35409C999999F1185C40CCCCCCCC1CCD354000000000D0165C400000000080C43540CCCCCCCC84135C4000000000E0BD354000000000600C5C40CCCCCCCC5CC335400000000080075C406466666676CE3540CCCCCCCC9C015C4000000000D0D735409C99999969FC5B403433333383D93540343333334BFB5B4098999999B9C6354068666666E6F75B406466666696B7354068666666C6F45B4034333333B3B535409C999999A9F15B400000000020B835400000000090ED5B40CCCCCCCCBCA7354000000000A0EB5B4064666666C69B35403433333393E65B4000000000208F3540CCCCCCCC1CD95B40CCCCCCCCFC883540CCCCCCCC6CD45B4034333333737C3540686666661ECE5B4000000000707E3540343333333BC95B4034333333737B35400000000070C65B4064666666167C35409C999999E9C35B4000000000D0823540CCCCCCCC14C15B40000000000083354034333333CBBF5B4064666666266E35409C99999931B85B40CCCCCCCC5C6535409C99999959B15B4034333333F3623540CCCCCCCCBCA95B403433333373473540CCCCCCCC4CA45B40CCCCCCCCCC3635406866666646A05B40989999991935354000000000509D5B4064666666063B354000000000D09B5B4000000000B0533540CCCCCCCC4C9A5B4000000000905635400000000070995B4098999999693F35409C999999F9975B4000000000202C35409C99999931955B4000000000A021354034333333638C5B4034333333A309354034333333DB895B4034333333D3F13440343333338B8B5B40CCCCCCCCCCDB34403433333363975B40CCCCCCCC6CD63440CCCCCCCCDC985B400000000060CA344068666666B6975B406466666686C0344000000000E0945B40CCCCCCCC4CB834409C99999909945B4034333333F3AB3440CCCCCCCCBCA05B40CCCCCCCCAC8434400000000020A15B4034333333C37534409C999999299F5B4064666666466D3440CCCCCCCCC49C5B40CCCCCCCCFC5A34400000000010965B4098999999794B34409C999999E1875B40343333338343344000000000107C5B40CCCCCCCC8C4B3440343333337B785B4034333333335D34409C999999B1785B4034333333C369344000000000A07B5B40CCCCCCCC1C66344000000000F87E5B40CCCCCCCC3C6734409C999999F97D5B4098999999B97234409C999999917C5B400000000070793440343333331B775B4098999999A983344000000000B0725B4034333333339F34409C99999989735B403433333323B63440CCCCCCCC1C715B40CCCCCCCCDCC73440343333337B6E5B4098999999B9D6344034333333D36B5B4064666666A6DF344000000000686A5B4098999999B9EA344068666666166D5B4000000000800D35409C999999996B5B4034333333B321354068666666A6705B4064666666763A3540CCCCCCCCE4715B40343333336356354034333333F37A5B4000000000606035409C999999917B5B4064666666067B35400000000018755B40CCCCCCCCCC7B35409C99999999705B4000000000608F354034333333936F5B40989999992987354068666666F66B5B40CCCCCCCC4C8635409C99999909665B406466666606AC35400000000040645B4098999999C9B035400000000060615B403433333383B135409C999999D1625B4064666666B689354000000000E05B5B4000000000C07A35400000000030565B406466666636743540343333331B4E5B4034333333837135403433333383495B4000000000F06C35400000000038455B4064666666B67035400000000048465B4034333333C37C3540343333338B485B4098999999298B35403433333383465B409899999929973540CCCCCCCCF4415B403433333363A0354068666666FE3A5B4098999999D99F3540343333332B365B40CCCCCCCC6CA235403433333363315B406466666666A13540CCCCCCCC9C2F5B4098999999B9A63540343333332B2B5B403433333383B935409C99999969275B40CCCCCCCC3CC5354000000000B8255B4034333333E3D035409C99999969275B400000000070DE35400000000000265B4098999999A9E6354068666666B61E5B406466666696E7354068666666C61E5B40CCCCCCCC2CD4354068666666861F5B409899999949BD3540CCCCCCCCA4215B4000000000E0AB35403433333323205B409899999929A2354000000000701C5B4098999999799B35400000000080185B4000000000E0AD35409C999999B1165B409899999969B235409C999999C9145B409899999989B135406866666656135B4064666666369F354034333333C30F5B4034333333F38E35409C99999951095B4000000000B09035400000000050045B4064666666A68635400000000040FE5A4098999999098235400103000000010000004A0000009C999999E1B85B4000000000F0FD3340CCCCCCCC0CBC5B403433333393F233400000000020BE5B400000000020E233409C999999D9BF5B4034333333C3C3334000000000E0C05B40CCCCCCCCCCA733409C99999969BA5B40989999990996334000000000A0B45B4034333333D38E3340CCCCCCCC04A95B40CCCCCCCC8C4A33409C99999999A65B400000000000353340686666669EA45B4000000000002C33400000000000A45B4098999999992233409C99999939A45B409899999939193340CCCCCCCC3CA15B400000000060F832409C999999919E5B406466666606D032409C999999E19C5B409899999979BF32409C99999991995B4064666666C6B23240343333335B955B40CCCCCCCC5CAC3240CCCCCCCC9C925B406466666666AB3240CCCCCCCC1C905B4000000000E0A7324000000000008A5B4000000000E0913240343333331B835B4064666666568132400000000040845B4034333333C37932400000000050845B403433333393723240343333334B815B4000000000906A324068666666EE7D5B40CCCCCCCC0C6C32403433333333745B40CCCCCCCC8C65324000000000A0705B4098999999295932409C999999F96C5B40646666665642324068666666966B5B4034333333433F324034333333BB655B4000000000F0393240CCCCCCCC3C615B4000000000E0373240343333339B595B4064666666F64732409C999999D1555B4034333333B34C32409C999999B94B5B40CCCCCCCC3C5332409C999999E9415B4064666666265E324068666666063B5B4064666666866A324068666666E62C5B406466666606893240CCCCCCCC442B5B400000000010C0324068666666D6285B4064666666C6DD324068666666AE285B400000000060E832409C99999999295B4098999999D943334000000000982A5B4098999999D94D334034333333632C5B40989999999956334000000000A0325B40CCCCCCCC0C6B334000000000C8395B4098999999397B33406866666606445B4034333333139D334068666666764B5B403433333393AC3340CCCCCCCCB4515B4098999999D9C23340CCCCCCCC0C4E5B4098999999E9C13340343333335B4B5B4098999999B9C4334034333333034E5B4034333333C3D73340CCCCCCCCDC505B4064666666F6E133406866666626545B406466666686E7334034333333C35A5B409899999989E3334000000000E0605B40CCCCCCCC7CE73340CCCCCCCC64655B406466666666F8334000000000B0695B400000000000FC334000000000007A5B406466666676F633400000000050855B400000000030FE334034333333FB8A5B4000000000C00D344000000000A88D5B4098999999590E34403433333303965B4000000000F0093440343333331B995B4000000000C0F93340CCCCCCCCD4985B40CCCCCCCC9C0434400000000030995B4098999999290F34409C999999B99A5B4034333333030E3440CCCCCCCCA4A55B4034333333F3F9334068666666AEA55B40CCCCCCCC8C123440343333334BA65B40CCCCCCCCFC18344068666666B6A95B403433333343233440CCCCCCCC6CAB5B40646666661623344068666666A6AF5B4098999999390F344000000000C8B35B4000000000B00334409C999999E1B85B4000000000F0FD3340", + "centroid": "0101000020E61000002A96C5B16BF4594028F58DEDE7474240" +} From e73b3f28faec0d69b80ca250d2cd1d49e34eff07 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Tue, 1 Mar 2022 00:40:03 -0800 Subject: [PATCH 26/44] ci: run e2e tests --- .github/workflows/pull-request-ci.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index 84e3da13..7f57102c 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -66,3 +66,18 @@ jobs: run: npx jest __tests__/e2e/trees.spec.ts env: SEED: true + + - name: wallet tests + run: npx jest __tests__/e2e/wallets.spec.ts + + - name: species tests + run: npx jest __tests__/e2e/species.spec.ts + + - name: country tests + run: npx jest __tests__/e2e/countries.spec.ts + + - name: planter tests + run: npx jest __tests__/e2e/planters.spec.ts + + - name: organizations tests + run: npx jest __tests__/e2e/organizations.spec.ts From e0d3a24044774523334a8bef85467d5b8e07f0ac Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Tue, 1 Mar 2022 00:45:51 -0800 Subject: [PATCH 27/44] test(species): use seed data --- __tests__/e2e/species.spec.ts | 83 ++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/__tests__/e2e/species.spec.ts b/__tests__/e2e/species.spec.ts index feffa872..942af770 100644 --- a/__tests__/e2e/species.spec.ts +++ b/__tests__/e2e/species.spec.ts @@ -1,47 +1,48 @@ +import exampleOrganizations from '@mocks/organizations/exampleOrganization.json'; +import examplePlanter from '@mocks/planters/examplePlanter.json'; +import exampleSpecies from '@mocks/species/exampleSpecies.json'; import supertest from 'supertest'; -import app from '../../server/app'; +import app from 'app'; -describe('species', () => { - it('species/{id}', async () => { - const response = await supertest(app).get('/species/8'); +it('species/{id}', async () => { + const response = await supertest(app).get(`/species/${exampleSpecies.id}`); + expect(response.status).toBe(200); + expect(response.body).toMatchObject({ + id: 8, + name: expect.any(String), + }); +}); + +it( + 'species?organization_id=1&limit=1', + async () => { + const response = await supertest(app).get( + `/species?organization_id=${exampleOrganizations.id}&limit=1`, + ); expect(response.status).toBe(200); - expect(response.body).toMatchObject({ - id: 8, + expect(response.body.species).toBeInstanceOf(Array); + expect(response.body.species[0]).toMatchObject({ + total: expect.stringMatching(/\d+/), name: expect.any(String), + id: expect.any(Number), }); - }); - - it( - 'species?organization_id=1&limit=1', - async () => { - const response = await supertest(app).get( - '/species?organization_id=1&limit=1', - ); - expect(response.status).toBe(200); - expect(response.body.species).toBeInstanceOf(Array); - expect(response.body.species[0]).toMatchObject({ - total: expect.stringMatching(/\d+/), - name: expect.any(String), - id: expect.any(Number), - }); - }, - 1000 * 30, - ); + }, + 1000 * 30, +); - it( - 'species?planter_id=1&limit=1', - async () => { - const response = await supertest(app).get( - '/species?planter_id=1&limit=1', - ); - expect(response.status).toBe(200); - expect(response.body.species).toBeInstanceOf(Array); - expect(response.body.species[0]).toMatchObject({ - total: expect.stringMatching(/\d+/), - name: expect.any(String), - id: expect.any(Number), - }); - }, - 1000 * 30, - ); -}); +it( + 'species?planter_id=1&limit=1', + async () => { + const response = await supertest(app).get( + `/species?planter_id=${examplePlanter.id}&limit=1`, + ); + expect(response.status).toBe(200); + expect(response.body.species).toBeInstanceOf(Array); + expect(response.body.species[0]).toMatchObject({ + total: expect.stringMatching(/\d+/), + name: expect.any(String), + id: expect.any(Number), + }); + }, + 1000 * 30, +); From 19836e0ca3cc0d5a298ae0a674d039649fe65c51 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Tue, 1 Mar 2022 00:48:11 -0800 Subject: [PATCH 28/44] ci: always run tests --- .github/workflows/pull-request-ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index 7f57102c..474f6d57 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -69,15 +69,20 @@ jobs: - name: wallet tests run: npx jest __tests__/e2e/wallets.spec.ts + if: always() - name: species tests run: npx jest __tests__/e2e/species.spec.ts + if: always() - name: country tests run: npx jest __tests__/e2e/countries.spec.ts + if: always() - name: planter tests run: npx jest __tests__/e2e/planters.spec.ts + if: always() - name: organizations tests run: npx jest __tests__/e2e/organizations.spec.ts + if: always() From aecd3600ad03c76b81632c5caf19c3d3c332766f Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Tue, 1 Mar 2022 01:01:13 -0800 Subject: [PATCH 29/44] test(seed): update seed data --- .jest/globalSetup.ts | 2 +- __tests__/e2e/trees.spec.ts | 2 +- docs/api/spec/examples/trees/exampleTree.json | 48 +++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 docs/api/spec/examples/trees/exampleTree.json diff --git a/.jest/globalSetup.ts b/.jest/globalSetup.ts index bc7f7acf..d2649766 100644 --- a/.jest/globalSetup.ts +++ b/.jest/globalSetup.ts @@ -1,6 +1,6 @@ import * as dotenv from 'dotenv'; dotenv.config(); -import exampleTree from '../docs/api/spec/examples/trees/912681.json'; +import exampleTree from '../docs/api/spec/examples/trees/exampleTree.json'; import exampleWallet from '../docs/api/spec/examples/wallets/exampleWallet.json'; import exampleSpecies from '../docs/api/spec/examples/species/exampleSpecies.json'; import examplePlanter from '../docs/api/spec/examples/planters/examplePlanter.json'; diff --git a/__tests__/e2e/trees.spec.ts b/__tests__/e2e/trees.spec.ts index 8d20b7f5..97368076 100644 --- a/__tests__/e2e/trees.spec.ts +++ b/__tests__/e2e/trees.spec.ts @@ -1,4 +1,4 @@ -import exampleTree from '@mocks/trees/912681.json'; +import exampleTree from '@mocks/trees/exampleTree.json'; import supertest from 'supertest'; import app from 'app'; diff --git a/docs/api/spec/examples/trees/exampleTree.json b/docs/api/spec/examples/trees/exampleTree.json new file mode 100644 index 00000000..116da037 --- /dev/null +++ b/docs/api/spec/examples/trees/exampleTree.json @@ -0,0 +1,48 @@ +{ + "id": 912681, + "time_created": "2021-03-21T11:49:16.000Z", + "time_updated": "2021-03-21T11:49:16.000Z", + "missing": false, + "priority": false, + "cause_of_death_id": null, + "planter_id": 1, + "primary_location_id": null, + "settings_id": null, + "override_settings_id": null, + "dead": 0, + "photo_id": null, + "image_url": "https://treetracker-production-images.s3.eu-central-1.amazonaws.com/2021.03.21.14.58.14_-9.329156333333334_34.57351466666667_7e341cc9-84cd-472f-9ae7-ac1a88c1788f_IMG_20210321_144909_8561950290380427437.jpg", + "certificate_id": null, + "estimated_geometric_location": "0101000020E61000000A8EB8ED684941403AE0CD2D87A822C0", + "lat": "-9.329156333333334", + "lon": "34.57351466666667", + "gps_accuracy": null, + "active": true, + "planter_photo_url": "https://treetracker-production-images.s3.eu-central-1.amazonaws.com/2021.03.20.16.51.06_-9.339128333333333_34.59247666666667_7c0527e6-4b6d-4b5f-9ba2-e931b03b372b_IMG_20210320_164149_3174069926682606719.jpg", + "planter_identifier": "example@gmail.com", + "device_id": null, + "sequence": null, + "note": "", + "verified": false, + "uuid": "9f148083-9a86-4d60-9547-5a0ec92b979c", + "approved": false, + "status": "planted", + "cluster_regions_assigned": true, + "species_id": 8, + "planting_organization_id": 178, + "payment_id": null, + "contract_id": null, + "token_issued": false, + "morphology": null, + "age": null, + "species": null, + "capture_approval_tag": null, + "rejection_reason": null, + "matching_hash": null, + "device_identifier": "5d7dbb36e926d6c9", + "images": null, + "domain_specific_data": null, + "token_id": null, + "name": null, + "earnings_id": null +} From 5119e058be91342669b0a66718f0ea5b47797885 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Tue, 1 Mar 2022 01:09:51 -0800 Subject: [PATCH 30/44] test: use seed data --- __tests__/e2e/countries.spec.ts | 65 ++++++++++++------------ __tests__/e2e/organizations.spec.ts | 58 +++++++++++----------- __tests__/e2e/planters.spec.ts | 76 ++++++++++++++--------------- 3 files changed, 100 insertions(+), 99 deletions(-) diff --git a/__tests__/e2e/countries.spec.ts b/__tests__/e2e/countries.spec.ts index e757540b..97bc8341 100644 --- a/__tests__/e2e/countries.spec.ts +++ b/__tests__/e2e/countries.spec.ts @@ -1,40 +1,39 @@ +import exampleCountry from '@mocks/countries/exampleCountry.json'; import supertest from 'supertest'; -import app from '../../server/app'; +import app from 'app'; -describe('', () => { - it('countries/6632544', async () => { - const response = await supertest(app).get('/countries/6632544'); - expect(response.status).toBe(200); - expect(response.body).toMatchObject({ - id: 6632544, - name: 'China', - }); +it('countries/6632544', async () => { + const response = await supertest(app).get(`/countries/${exampleCountry.id}`); + expect(response.status).toBe(200); + expect(response.body).toMatchObject({ + id: 6632544, + name: 'China', }); +}); - // 103.819073145824,36.5617653792527 - it('countries?lat=36.5617653792527&lon=103.819073145824', async () => { - const response = await supertest(app).get( - '/countries?lat=36.5617653792527&lon=103.819073145824', - ); +// 103.819073145824,36.5617653792527 +it('countries?lat=36.5617653792527&lon=103.819073145824', async () => { + const response = await supertest(app).get( + '/countries?lat=36.5617653792527&lon=103.819073145824', + ); + expect(response.status).toBe(200); + expect(response.body.countries[0]).toMatchObject({ + id: 6632544, + name: 'China', + }); +}); + +it.skip( + 'countries/leaderboard', + async () => { + const response = await supertest(app).get('/countries/leaderboard'); expect(response.status).toBe(200); expect(response.body.countries[0]).toMatchObject({ - id: 6632544, - name: 'China', + id: expect.any(Number), + name: expect.any(String), + planted: expect.any(String), + centroid: expect.stringMatching(/coordinates/), }); - }); - - it( - 'countries/leaderboard', - async () => { - const response = await supertest(app).get('/countries/leaderboard'); - expect(response.status).toBe(200); - expect(response.body.countries[0]).toMatchObject({ - id: expect.any(Number), - name: expect.any(String), - planted: expect.any(String), - centroid: expect.stringMatching(/coordinates/), - }); - }, - 1000 * 60, - ); -}); + }, + 1000 * 60, +); diff --git a/__tests__/e2e/organizations.spec.ts b/__tests__/e2e/organizations.spec.ts index 5362d5f9..1889a61a 100644 --- a/__tests__/e2e/organizations.spec.ts +++ b/__tests__/e2e/organizations.spec.ts @@ -1,37 +1,39 @@ +import exampleOrganizations from '@mocks/organizations/exampleOrganization.json'; +import examplePlanter from '@mocks/planters/examplePlanter.json'; import supertest from 'supertest'; -import app from '../../server/app'; +import app from 'app'; -describe('organizations', () => { - it('organizations/{id}', async () => { - const response = await supertest(app).get('/organizations/1'); +it('organizations/{id}', async () => { + const response = await supertest(app).get( + `/organizations/${exampleOrganizations.id}`, + ); + expect(response.status).toBe(200); + expect(response.body).toMatchObject({ + id: 1, + links: { + featured_trees: expect.stringMatching(/trees/), + associated_planters: expect.stringMatching(/planters/), + species: expect.stringMatching(/species/), + }, + }); +}); + +it( + 'organizations?planter_id=1&limit=1', + async () => { + const response = await supertest(app).get( + `/organizations?planter_id=${examplePlanter.id}&limit=1`, + ); expect(response.status).toBe(200); - expect(response.body).toMatchObject({ - id: 1, + expect(response.body.organizations).toBeInstanceOf(Array); + expect(response.body.organizations[0]).toMatchObject({ + id: expect.any(Number), links: { featured_trees: expect.stringMatching(/trees/), associated_planters: expect.stringMatching(/planters/), species: expect.stringMatching(/species/), }, }); - }); - - it( - 'organizations?planter_id=1&limit=1', - async () => { - const response = await supertest(app).get( - '/organizations?planter_id=1&limit=1', - ); - expect(response.status).toBe(200); - expect(response.body.organizations).toBeInstanceOf(Array); - expect(response.body.organizations[0]).toMatchObject({ - id: expect.any(Number), - links: { - featured_trees: expect.stringMatching(/trees/), - associated_planters: expect.stringMatching(/planters/), - species: expect.stringMatching(/species/), - }, - }); - }, - 1000 * 30, - ); -}); + }, + 1000 * 30, +); diff --git a/__tests__/e2e/planters.spec.ts b/__tests__/e2e/planters.spec.ts index 23b78309..cc7e1082 100644 --- a/__tests__/e2e/planters.spec.ts +++ b/__tests__/e2e/planters.spec.ts @@ -1,49 +1,49 @@ +import exampleOrganizations from '@mocks/organizations/exampleOrganization.json'; +import examplePlanter from '@mocks/planters/examplePlanter.json'; import supertest from 'supertest'; -import app from '../../server/app'; +import app from 'app'; -describe('planters', () => { - it('planters/{id}', async () => { - const response = await supertest(app).get('/planters/1'); +it('planters/{id}', async () => { + const response = await supertest(app).get(`/planters/${examplePlanter.id}`); + expect(response.status).toBe(200); + expect(response.body).toMatchObject({ + id: examplePlanter.id, + links: { + featured_trees: expect.stringMatching(/trees/), + associated_organizations: expect.stringMatching(/organizations/), + species: expect.stringMatching(/species/), + }, + }); +}); + +it( + 'planters?organization_id=1&limit=1', + async () => { + const response = await supertest(app).get( + `/planters?organization_id=${exampleOrganizations.id}&limit=1`, + ); expect(response.status).toBe(200); - expect(response.body).toMatchObject({ - id: 1, + expect(response.body.planters).toBeInstanceOf(Array); + expect(response.body.planters[0]).toMatchObject({ + id: examplePlanter.id, + organization_id: exampleOrganizations.id, links: { featured_trees: expect.stringMatching(/trees/), associated_organizations: expect.stringMatching(/organizations/), species: expect.stringMatching(/species/), }, }); - }); + }, + 1000 * 30, +); - it( - 'planters?organization_id=1&limit=1', - async () => { - const response = await supertest(app).get( - '/planters?organization_id=1&limit=1', - ); - expect(response.status).toBe(200); - expect(response.body.planters).toBeInstanceOf(Array); - expect(response.body.planters[0]).toMatchObject({ - id: 1, - organization_id: 1, - links: { - featured_trees: expect.stringMatching(/trees/), - associated_organizations: expect.stringMatching(/organizations/), - species: expect.stringMatching(/species/), - }, - }); - }, - 1000 * 30, - ); - - it('planters?keyword=da&limit=1', async () => { - const response = await supertest(app).get('/planters?keyword=da&limit=1'); - expect(response.status).toBe(200); - expect(response.body.planters).toBeInstanceOf(Array); - expect(response.body.planters.length <= 1).toBe(true); - expect( - /^da/.test(response.body.planters[0].first_name) || - /^da/.test(response.body.planters[0].last_name), - ).toBe(true); - }); +it('planters?keyword=da&limit=1', async () => { + const response = await supertest(app).get('/planters?keyword=da&limit=1'); + expect(response.status).toBe(200); + expect(response.body.planters).toBeInstanceOf(Array); + expect(response.body.planters.length <= 1).toBe(true); + expect( + /^da/.test(response.body.planters[0].first_name) || + /^da/.test(response.body.planters[0].last_name), + ).toBe(true); }); From ac001dfc8f01059eb50b72d967de3794882d641e Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Thu, 3 Mar 2022 00:14:44 -0800 Subject: [PATCH 31/44] test(organization): assert seed data --- __tests__/e2e/organizations.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/e2e/organizations.spec.ts b/__tests__/e2e/organizations.spec.ts index 1889a61a..4a7878b4 100644 --- a/__tests__/e2e/organizations.spec.ts +++ b/__tests__/e2e/organizations.spec.ts @@ -9,7 +9,7 @@ it('organizations/{id}', async () => { ); expect(response.status).toBe(200); expect(response.body).toMatchObject({ - id: 1, + id: exampleOrganizations.id, links: { featured_trees: expect.stringMatching(/trees/), associated_planters: expect.stringMatching(/planters/), From 1e2169b0bd64e8eee81618c446f8e46a8ab8df43 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Thu, 3 Mar 2022 00:27:37 -0800 Subject: [PATCH 32/44] test(planter): use seed data test(planter): skip test of bugged route --- __tests__/e2e/planters.spec.ts | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/__tests__/e2e/planters.spec.ts b/__tests__/e2e/planters.spec.ts index cc7e1082..f3201258 100644 --- a/__tests__/e2e/planters.spec.ts +++ b/__tests__/e2e/planters.spec.ts @@ -1,4 +1,4 @@ -import exampleOrganizations from '@mocks/organizations/exampleOrganization.json'; +import exampleOrganization from '@mocks/organizations/exampleOrganization.json'; import examplePlanter from '@mocks/planters/examplePlanter.json'; import supertest from 'supertest'; import app from 'app'; @@ -16,17 +16,19 @@ it('planters/{id}', async () => { }); }); -it( +// route is bugged: https://github.com/Greenstand/treetracker-query-api/issues/93 +it.skip( 'planters?organization_id=1&limit=1', async () => { const response = await supertest(app).get( - `/planters?organization_id=${exampleOrganizations.id}&limit=1`, + `/planters?organization_id=${exampleOrganization.id}&limit=1`, ); expect(response.status).toBe(200); expect(response.body.planters).toBeInstanceOf(Array); + console.log(response.body.planters[0]); expect(response.body.planters[0]).toMatchObject({ id: examplePlanter.id, - organization_id: exampleOrganizations.id, + organization_id: exampleOrganization.id, links: { featured_trees: expect.stringMatching(/trees/), associated_organizations: expect.stringMatching(/organizations/), @@ -38,12 +40,16 @@ it( ); it('planters?keyword=da&limit=1', async () => { - const response = await supertest(app).get('/planters?keyword=da&limit=1'); + const keyword = examplePlanter.first_name.slice(0, 2); + const response = await supertest(app).get( + `/planters?keyword=${keyword}&limit=1`, + ); expect(response.status).toBe(200); expect(response.body.planters).toBeInstanceOf(Array); expect(response.body.planters.length <= 1).toBe(true); + const regexp = RegExp(`^${keyword}`); expect( - /^da/.test(response.body.planters[0].first_name) || - /^da/.test(response.body.planters[0].last_name), + regexp.test(response.body.planters[0].first_name) || + regexp.test(response.body.planters[0].last_name), ).toBe(true); }); From 596d25ad41f9728574998158ce0f6951da5610f8 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Thu, 3 Mar 2022 01:52:48 -0800 Subject: [PATCH 33/44] test(tree): get tree by org id uses seed data --- __tests__/e2e/trees.spec.ts | 5 +++-- docs/api/spec/examples/trees/exampleTree.json | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/__tests__/e2e/trees.spec.ts b/__tests__/e2e/trees.spec.ts index 97368076..4d124e10 100644 --- a/__tests__/e2e/trees.spec.ts +++ b/__tests__/e2e/trees.spec.ts @@ -1,3 +1,4 @@ +import exampleOrganization from '@mocks/organizations/exampleOrganization.json'; import exampleTree from '@mocks/trees/exampleTree.json'; import supertest from 'supertest'; import app from 'app'; @@ -25,10 +26,10 @@ it('trees?limit=1&offset=0', async () => { }); }); -it.skip( +it( 'Get tree by organization id', async () => { - const organization_id = exampleTree.planting_organization_id; + const organization_id = exampleOrganization.id; const response = await supertest(app).get( `/trees?limit=1&organization_id=${organization_id}`, ); diff --git a/docs/api/spec/examples/trees/exampleTree.json b/docs/api/spec/examples/trees/exampleTree.json index 116da037..8a009baf 100644 --- a/docs/api/spec/examples/trees/exampleTree.json +++ b/docs/api/spec/examples/trees/exampleTree.json @@ -29,7 +29,7 @@ "status": "planted", "cluster_regions_assigned": true, "species_id": 8, - "planting_organization_id": 178, + "planting_organization_id": 11, "payment_id": null, "contract_id": null, "token_issued": false, From ace6f4113dbbb3b56a41472c263fa22420577d89 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Sat, 5 Mar 2022 12:21:42 -0800 Subject: [PATCH 34/44] test(token): use seed data --- .jest/globalSetup.ts | 2 ++ __tests__/e2e/tokens.spec.ts | 31 +++++++++---------- .../spec/examples/tokens/exampleToken.json | 10 ++++++ 3 files changed, 26 insertions(+), 17 deletions(-) create mode 100644 docs/api/spec/examples/tokens/exampleToken.json diff --git a/.jest/globalSetup.ts b/.jest/globalSetup.ts index d2649766..df24ce59 100644 --- a/.jest/globalSetup.ts +++ b/.jest/globalSetup.ts @@ -6,6 +6,7 @@ import exampleSpecies from '../docs/api/spec/examples/species/exampleSpecies.jso import examplePlanter from '../docs/api/spec/examples/planters/examplePlanter.json'; import exampleCountry from '../docs/api/spec/examples/countries/exampleCountry.json'; import exampleOrganization from '../docs/api/spec/examples/organizations/exampleOrganization.json'; +import exampleToken from '../docs/api/spec/examples/tokens/exampleToken.json'; import knex, { TableNames } from '../server/infra/database/knex'; export default async function globalSetup() { @@ -24,6 +25,7 @@ export default async function globalSetup() { ], ); + await knex('token').withSchema('wallet').insert(exampleToken); await knex(TableNames.Species).insert(exampleSpecies); await knex(TableNames.Organizations).insert(exampleOrganization); await knex(TableNames.Planters).insert(examplePlanter); diff --git a/__tests__/e2e/tokens.spec.ts b/__tests__/e2e/tokens.spec.ts index 37d260e6..873ae608 100644 --- a/__tests__/e2e/tokens.spec.ts +++ b/__tests__/e2e/tokens.spec.ts @@ -1,22 +1,19 @@ +import exampleToken from '@mocks/tokens/exampleToken.json'; import supertest from 'supertest'; -import app from '../../server/app'; +import app from 'app'; -describe('Tokens', () => { - it('/tokens/{tokenId}', async () => { - const response = await supertest(app).get( - '/tokens/24f4f5f7-c29e-4707-961a-3515be5a2f3e', - ); +it('/tokens/{tokenId}', async () => { + const response = await supertest(app).get(`/tokens/${exampleToken.id}`); - expect(response.status).toBe(200); - expect(response.body).toMatchObject({ - id: '24f4f5f7-c29e-4707-961a-3515be5a2f3e', - capture_id: 'f6c0e710-d80a-4e93-a9d2-d4edb52856af', - wallet_id: 'eecdf253-05b6-419a-8425-416a3e5fc9a0', - transfer_pending: false, - transfer_pending_id: null, - // created_at: '2021-02-18T23:53:29.172Z', - // updated_at: '2021-02-18T23:53:29.172Z', - claim: false, - }); + expect(response.status).toBe(200); + expect(response.body).toMatchObject({ + id: '24f4f5f7-c29e-4707-961a-3515be5a2f3e', + capture_id: 'f6c0e710-d80a-4e93-a9d2-d4edb52856af', + wallet_id: 'eecdf253-05b6-419a-8425-416a3e5fc9a0', + transfer_pending: false, + transfer_pending_id: null, + // created_at: '2021-02-18T23:53:29.172Z', + // updated_at: '2021-02-18T23:53:29.172Z', + claim: false, }); }); diff --git a/docs/api/spec/examples/tokens/exampleToken.json b/docs/api/spec/examples/tokens/exampleToken.json new file mode 100644 index 00000000..582f6496 --- /dev/null +++ b/docs/api/spec/examples/tokens/exampleToken.json @@ -0,0 +1,10 @@ +{ + "id": "24f4f5f7-c29e-4707-961a-3515be5a2f3e", + "capture_id": "f6c0e710-d80a-4e93-a9d2-d4edb52856af", + "wallet_id": "eecdf253-05b6-419a-8425-416a3e5fc9a0", + "transfer_pending": false, + "transfer_pending_id": null, + "created_at": "2021-02-18T19:53:29.172Z", + "updated_at": "2021-02-18T19:53:29.172Z", + "claim": false +} From e63d6e629b1df8a530e78835649d35a8fd2311e7 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Sat, 5 Mar 2022 12:22:16 -0800 Subject: [PATCH 35/44] ci(pr): run token e2e tests --- .github/workflows/pull-request-ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index 474f6d57..e28a0715 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -62,7 +62,7 @@ jobs: - name: run tests run: npm test - - name: run e2e tests + - name: tree tests run: npx jest __tests__/e2e/trees.spec.ts env: SEED: true @@ -86,3 +86,7 @@ jobs: - name: organizations tests run: npx jest __tests__/e2e/organizations.spec.ts if: always() + + - name: token tests + run: npx jest __tests__/e2e/tokens.spec.ts + if: always() From 8d2ae1c643d2d575c79f1e88d3e30a9f277b47e7 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Sat, 5 Mar 2022 12:23:00 -0800 Subject: [PATCH 36/44] refactor(organizations.spec): rename var --- __tests__/e2e/organizations.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/__tests__/e2e/organizations.spec.ts b/__tests__/e2e/organizations.spec.ts index 4a7878b4..7e1204fd 100644 --- a/__tests__/e2e/organizations.spec.ts +++ b/__tests__/e2e/organizations.spec.ts @@ -1,15 +1,15 @@ -import exampleOrganizations from '@mocks/organizations/exampleOrganization.json'; +import exampleOrganization from '@mocks/organizations/exampleOrganization.json'; import examplePlanter from '@mocks/planters/examplePlanter.json'; import supertest from 'supertest'; import app from 'app'; it('organizations/{id}', async () => { const response = await supertest(app).get( - `/organizations/${exampleOrganizations.id}`, + `/organizations/${exampleOrganization.id}`, ); expect(response.status).toBe(200); expect(response.body).toMatchObject({ - id: exampleOrganizations.id, + id: exampleOrganization.id, links: { featured_trees: expect.stringMatching(/trees/), associated_planters: expect.stringMatching(/planters/), From aafcd83c6610bd1d21c95b93cf6cb25f9357aa2b Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Sat, 5 Mar 2022 12:39:56 -0800 Subject: [PATCH 37/44] test(seed): add country to region_type --- .jest/globalSetup.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.jest/globalSetup.ts b/.jest/globalSetup.ts index df24ce59..31509520 100644 --- a/.jest/globalSetup.ts +++ b/.jest/globalSetup.ts @@ -29,6 +29,10 @@ export default async function globalSetup() { await knex(TableNames.Species).insert(exampleSpecies); await knex(TableNames.Organizations).insert(exampleOrganization); await knex(TableNames.Planters).insert(examplePlanter); + await knex('region_type').insert({ + id: 6, + type: 'country', + }); await knex(TableNames.Countries).insert(exampleCountry); } knex.destroy(); From 7b72b92be53da25320d39f8a698d255c132a0281 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Sat, 5 Mar 2022 13:15:29 -0800 Subject: [PATCH 38/44] chore: move schema sql to database/schemas --- .github/workflows/pull-request-ci.yml | 4 ++-- db.sql => database/schemas/public.sql | 0 wallet.sql => database/schemas/wallet.sql | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename db.sql => database/schemas/public.sql (100%) rename wallet.sql => database/schemas/wallet.sql (100%) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index e28a0715..94956cb0 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -56,8 +56,8 @@ jobs: - name: Prepare DB run: | - psql postgresql://postgres:postgres@postgres/postgres < db.sql - psql postgresql://postgres:postgres@postgres/postgres < wallet.sql + psql postgresql://postgres:postgres@postgres/postgres < database/schemas/public.sql + psql postgresql://postgres:postgres@postgres/postgres < database/schemas/wallet.sql - name: run tests run: npm test diff --git a/db.sql b/database/schemas/public.sql similarity index 100% rename from db.sql rename to database/schemas/public.sql diff --git a/wallet.sql b/database/schemas/wallet.sql similarity index 100% rename from wallet.sql rename to database/schemas/wallet.sql From 2bd7c9e9a7b8e0b6d3d86ead1b15d99c31fe0c5c Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Sat, 5 Mar 2022 13:24:56 -0800 Subject: [PATCH 39/44] refactor: seed wallet data with .insert --- .jest/globalSetup.ts | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/.jest/globalSetup.ts b/.jest/globalSetup.ts index 31509520..01db7732 100644 --- a/.jest/globalSetup.ts +++ b/.jest/globalSetup.ts @@ -12,19 +12,7 @@ import knex, { TableNames } from '../server/infra/database/knex'; export default async function globalSetup() { if (process.env.SEED === 'true') { await knex(TableNames.Trees).insert(exampleTree); - // seed wallet data - await knex.raw( - `insert into wallet.wallet ("created_at", "id", "logo_url", "name", "password", "salt") values (?, ?, ?, ?, ?, ?)`, - [ - exampleWallet.created_at, - exampleWallet.id, - exampleWallet.logo_url, - exampleWallet.name, - exampleWallet.password, - exampleWallet.salt, - ], - ); - + await knex('wallet').withSchema('wallet').insert(exampleWallet); await knex('token').withSchema('wallet').insert(exampleToken); await knex(TableNames.Species).insert(exampleSpecies); await knex(TableNames.Organizations).insert(exampleOrganization); @@ -34,6 +22,7 @@ export default async function globalSetup() { type: 'country', }); await knex(TableNames.Countries).insert(exampleCountry); + } knex.destroy(); } From e2cfde34e8d3d47fc91a61efc3394f2d1f68d1ed Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Sat, 5 Mar 2022 16:25:38 -0800 Subject: [PATCH 40/44] build(package): add tsconfig-paths dev dep --- package-lock.json | 17 +++++++++-------- package.json | 1 + 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c11041e..1000cb06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "treetracker-query-api", - "version": "1.7.0", + "version": "1.9.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "treetracker-query-api", - "version": "1.7.0", + "version": "1.9.0", "license": "GPL-3.0-or-later", "dependencies": { "@sentry/node": "^5.1.0", @@ -56,6 +56,7 @@ "prettier-plugin-packagejson": "^2.2.15", "supertest": "^4.0.2", "ts-node": "^10.4.0", + "tsconfig-paths": "^3.13.0", "typescript": "^4.4.4" }, "engines": { @@ -10088,9 +10089,9 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.13.0.tgz", + "integrity": "sha512-nWuffZppoaYK0vQ1SQmkSsQzJoHA4s6uzdb2waRpD806x9yfq153AdVsWz4je2qZcW+pENrMQXbGQ3sMCkXuhw==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -18508,9 +18509,9 @@ } }, "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.13.0.tgz", + "integrity": "sha512-nWuffZppoaYK0vQ1SQmkSsQzJoHA4s6uzdb2waRpD806x9yfq153AdVsWz4je2qZcW+pENrMQXbGQ3sMCkXuhw==", "dev": true, "requires": { "@types/json5": "^0.0.29", diff --git a/package.json b/package.json index e075b72d..2deaf7e5 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "prettier-plugin-packagejson": "^2.2.15", "supertest": "^4.0.2", "ts-node": "^10.4.0", + "tsconfig-paths": "^3.13.0", "typescript": "^4.4.4" }, "engines": { From 1689a128e7571cd6e67ac75e8744e99fad6932bc Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Sat, 5 Mar 2022 16:28:40 -0800 Subject: [PATCH 41/44] refactor: move seed data to database/seeds/data --- .jest/globalSetup.ts | 32 +++++++++---------- __tests__/e2e/countries.spec.ts | 2 +- __tests__/e2e/organizations.spec.ts | 4 +-- __tests__/e2e/planters.spec.ts | 4 +-- __tests__/e2e/species.spec.ts | 8 ++--- __tests__/e2e/tokens.spec.ts | 2 +- __tests__/e2e/trees.spec.ts | 4 +-- __tests__/e2e/wallets.spec.ts | 4 +-- .../seeds/data/country.json | 0 .../seeds/data/organization.json | 0 .../seeds/data/planter.json | 0 database/seeds/data/region_type.json | 4 +++ .../seeds/data/species.json | 0 .../seeds/data/token.json | 0 .../seeds/data/tree.json | 0 .../seeds/data/wallet.json | 0 jest.config.js | 1 + tsconfig.base.json | 2 +- 18 files changed, 36 insertions(+), 31 deletions(-) rename docs/api/spec/examples/countries/exampleCountry.json => database/seeds/data/country.json (100%) rename docs/api/spec/examples/organizations/exampleOrganization.json => database/seeds/data/organization.json (100%) rename docs/api/spec/examples/planters/examplePlanter.json => database/seeds/data/planter.json (100%) create mode 100644 database/seeds/data/region_type.json rename docs/api/spec/examples/species/exampleSpecies.json => database/seeds/data/species.json (100%) rename docs/api/spec/examples/tokens/exampleToken.json => database/seeds/data/token.json (100%) rename docs/api/spec/examples/trees/exampleTree.json => database/seeds/data/tree.json (100%) rename docs/api/spec/examples/wallets/exampleWallet.json => database/seeds/data/wallet.json (100%) diff --git a/.jest/globalSetup.ts b/.jest/globalSetup.ts index 01db7732..235b85a6 100644 --- a/.jest/globalSetup.ts +++ b/.jest/globalSetup.ts @@ -1,28 +1,28 @@ import * as dotenv from 'dotenv'; dotenv.config(); -import exampleTree from '../docs/api/spec/examples/trees/exampleTree.json'; -import exampleWallet from '../docs/api/spec/examples/wallets/exampleWallet.json'; -import exampleSpecies from '../docs/api/spec/examples/species/exampleSpecies.json'; -import examplePlanter from '../docs/api/spec/examples/planters/examplePlanter.json'; -import exampleCountry from '../docs/api/spec/examples/countries/exampleCountry.json'; -import exampleOrganization from '../docs/api/spec/examples/organizations/exampleOrganization.json'; -import exampleToken from '../docs/api/spec/examples/tokens/exampleToken.json'; -import knex, { TableNames } from '../server/infra/database/knex'; +import 'tsconfig-paths/register'; +import tree from '@seeds/data/tree.json'; +import wallet from '@seeds/data/wallet.json'; +import species from '@seeds/data/species.json'; +import planter from '@seeds/data/planter.json'; +import country from '@seeds/data/country.json'; +import organization from '@seeds/data/organization.json'; +import token from '@seeds/data/token.json'; +import knex, { TableNames } from 'infra/database/knex'; export default async function globalSetup() { if (process.env.SEED === 'true') { - await knex(TableNames.Trees).insert(exampleTree); - await knex('wallet').withSchema('wallet').insert(exampleWallet); - await knex('token').withSchema('wallet').insert(exampleToken); - await knex(TableNames.Species).insert(exampleSpecies); - await knex(TableNames.Organizations).insert(exampleOrganization); - await knex(TableNames.Planters).insert(examplePlanter); + await knex(TableNames.Trees).insert(tree); + await knex('wallet').withSchema('wallet').insert(wallet); + await knex('token').withSchema('wallet').insert(token); + await knex(TableNames.Species).insert(species); + await knex(TableNames.Organizations).insert(organization); + await knex(TableNames.Planters).insert(planter); await knex('region_type').insert({ id: 6, type: 'country', }); - await knex(TableNames.Countries).insert(exampleCountry); - + await knex(TableNames.Countries).insert(country); } knex.destroy(); } diff --git a/__tests__/e2e/countries.spec.ts b/__tests__/e2e/countries.spec.ts index 97bc8341..7c51c758 100644 --- a/__tests__/e2e/countries.spec.ts +++ b/__tests__/e2e/countries.spec.ts @@ -1,4 +1,4 @@ -import exampleCountry from '@mocks/countries/exampleCountry.json'; +import exampleCountry from '@seeds/data/country.json'; import supertest from 'supertest'; import app from 'app'; diff --git a/__tests__/e2e/organizations.spec.ts b/__tests__/e2e/organizations.spec.ts index 7e1204fd..7f39a723 100644 --- a/__tests__/e2e/organizations.spec.ts +++ b/__tests__/e2e/organizations.spec.ts @@ -1,5 +1,5 @@ -import exampleOrganization from '@mocks/organizations/exampleOrganization.json'; -import examplePlanter from '@mocks/planters/examplePlanter.json'; +import exampleOrganization from '@seeds/data/organization.json'; +import examplePlanter from '@seeds/data/planter.json'; import supertest from 'supertest'; import app from 'app'; diff --git a/__tests__/e2e/planters.spec.ts b/__tests__/e2e/planters.spec.ts index f3201258..e9d3459b 100644 --- a/__tests__/e2e/planters.spec.ts +++ b/__tests__/e2e/planters.spec.ts @@ -1,5 +1,5 @@ -import exampleOrganization from '@mocks/organizations/exampleOrganization.json'; -import examplePlanter from '@mocks/planters/examplePlanter.json'; +import exampleOrganization from '@seeds/data/organization.json'; +import examplePlanter from '@seeds/data/planter.json'; import supertest from 'supertest'; import app from 'app'; diff --git a/__tests__/e2e/species.spec.ts b/__tests__/e2e/species.spec.ts index 942af770..91e112e6 100644 --- a/__tests__/e2e/species.spec.ts +++ b/__tests__/e2e/species.spec.ts @@ -1,6 +1,6 @@ -import exampleOrganizations from '@mocks/organizations/exampleOrganization.json'; -import examplePlanter from '@mocks/planters/examplePlanter.json'; -import exampleSpecies from '@mocks/species/exampleSpecies.json'; +import exampleOrganization from '@seeds/data/organization.json'; +import examplePlanter from '@seeds/data/planter.json'; +import exampleSpecies from '@seeds/data/species.json'; import supertest from 'supertest'; import app from 'app'; @@ -17,7 +17,7 @@ it( 'species?organization_id=1&limit=1', async () => { const response = await supertest(app).get( - `/species?organization_id=${exampleOrganizations.id}&limit=1`, + `/species?organization_id=${exampleOrganization.id}&limit=1`, ); expect(response.status).toBe(200); expect(response.body.species).toBeInstanceOf(Array); diff --git a/__tests__/e2e/tokens.spec.ts b/__tests__/e2e/tokens.spec.ts index 873ae608..a4b70bc6 100644 --- a/__tests__/e2e/tokens.spec.ts +++ b/__tests__/e2e/tokens.spec.ts @@ -1,4 +1,4 @@ -import exampleToken from '@mocks/tokens/exampleToken.json'; +import exampleToken from '@seeds/data/token.json'; import supertest from 'supertest'; import app from 'app'; diff --git a/__tests__/e2e/trees.spec.ts b/__tests__/e2e/trees.spec.ts index 4d124e10..7bd60bfd 100644 --- a/__tests__/e2e/trees.spec.ts +++ b/__tests__/e2e/trees.spec.ts @@ -1,5 +1,5 @@ -import exampleOrganization from '@mocks/organizations/exampleOrganization.json'; -import exampleTree from '@mocks/trees/exampleTree.json'; +import exampleOrganization from '@seeds/data/organization.json'; +import exampleTree from '@seeds/data/tree.json'; import supertest from 'supertest'; import app from 'app'; diff --git a/__tests__/e2e/wallets.spec.ts b/__tests__/e2e/wallets.spec.ts index cd9222c9..38bdcae3 100644 --- a/__tests__/e2e/wallets.spec.ts +++ b/__tests__/e2e/wallets.spec.ts @@ -1,6 +1,6 @@ -import exampleWallet from '@mocks/wallets/exampleWallet.json'; +import exampleWallet from '@seeds/data/wallet.json'; import supertest from 'supertest'; -import app from '../../server/app'; +import app from 'app'; it('get wallet by id or name', async () => { const { id, name } = exampleWallet; diff --git a/docs/api/spec/examples/countries/exampleCountry.json b/database/seeds/data/country.json similarity index 100% rename from docs/api/spec/examples/countries/exampleCountry.json rename to database/seeds/data/country.json diff --git a/docs/api/spec/examples/organizations/exampleOrganization.json b/database/seeds/data/organization.json similarity index 100% rename from docs/api/spec/examples/organizations/exampleOrganization.json rename to database/seeds/data/organization.json diff --git a/docs/api/spec/examples/planters/examplePlanter.json b/database/seeds/data/planter.json similarity index 100% rename from docs/api/spec/examples/planters/examplePlanter.json rename to database/seeds/data/planter.json diff --git a/database/seeds/data/region_type.json b/database/seeds/data/region_type.json new file mode 100644 index 00000000..908faa22 --- /dev/null +++ b/database/seeds/data/region_type.json @@ -0,0 +1,4 @@ +{ + "id": 6, + "type": "country" +} diff --git a/docs/api/spec/examples/species/exampleSpecies.json b/database/seeds/data/species.json similarity index 100% rename from docs/api/spec/examples/species/exampleSpecies.json rename to database/seeds/data/species.json diff --git a/docs/api/spec/examples/tokens/exampleToken.json b/database/seeds/data/token.json similarity index 100% rename from docs/api/spec/examples/tokens/exampleToken.json rename to database/seeds/data/token.json diff --git a/docs/api/spec/examples/trees/exampleTree.json b/database/seeds/data/tree.json similarity index 100% rename from docs/api/spec/examples/trees/exampleTree.json rename to database/seeds/data/tree.json diff --git a/docs/api/spec/examples/wallets/exampleWallet.json b/database/seeds/data/wallet.json similarity index 100% rename from docs/api/spec/examples/wallets/exampleWallet.json rename to database/seeds/data/wallet.json diff --git a/jest.config.js b/jest.config.js index 3625d3d4..8ed1edf9 100644 --- a/jest.config.js +++ b/jest.config.js @@ -7,6 +7,7 @@ module.exports = { moduleNameMapper: { '@test/(.*)': ['/.jest/$1', '/__tests__/$1'], '@mocks/(.*)': ['/docs/api/spec/examples/$1'], + '@seeds/(.*)': ['/database/seeds/$1'], }, globalSetup: '/.jest/globalSetup.ts', setupFilesAfterEnv: ['/.jest/setupFile.ts'], diff --git a/tsconfig.base.json b/tsconfig.base.json index a5f2c97f..d5e0ff7f 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -50,7 +50,7 @@ // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ "baseUrl": "server" /* Base directory to resolve non-absolute module names. */, "paths": { - "@mocks/*": ["../docs/api/spec/examples/*"] + "@seeds/*": ["../database/seeds/*"] } /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */, // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ From ed97810b24cff4c7f06a091726b176b647308cd8 Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Sat, 5 Mar 2022 16:48:03 -0800 Subject: [PATCH 42/44] ci(pr): consolidate integration tests --- .github/workflows/pull-request-ci.yml | 30 +++------------------------ 1 file changed, 3 insertions(+), 27 deletions(-) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index 94956cb0..b88a84f0 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -59,34 +59,10 @@ jobs: psql postgresql://postgres:postgres@postgres/postgres < database/schemas/public.sql psql postgresql://postgres:postgres@postgres/postgres < database/schemas/wallet.sql - - name: run tests + - name: Unit Tests run: npm test - - name: tree tests - run: npx jest __tests__/e2e/trees.spec.ts + - name: Integration Tests + run: npm run test-e2e env: SEED: true - - - name: wallet tests - run: npx jest __tests__/e2e/wallets.spec.ts - if: always() - - - name: species tests - run: npx jest __tests__/e2e/species.spec.ts - if: always() - - - name: country tests - run: npx jest __tests__/e2e/countries.spec.ts - if: always() - - - name: planter tests - run: npx jest __tests__/e2e/planters.spec.ts - if: always() - - - name: organizations tests - run: npx jest __tests__/e2e/organizations.spec.ts - if: always() - - - name: token tests - run: npx jest __tests__/e2e/tokens.spec.ts - if: always() From e98cada5840902e4dcbd29bb21638eb13eade76a Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Sat, 5 Mar 2022 16:56:49 -0800 Subject: [PATCH 43/44] refactor: test setup uses region_type.json --- .jest/globalSetup.ts | 6 ++---- server/infra/database/knex.ts | 1 + 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.jest/globalSetup.ts b/.jest/globalSetup.ts index 235b85a6..46a15d76 100644 --- a/.jest/globalSetup.ts +++ b/.jest/globalSetup.ts @@ -8,6 +8,7 @@ import planter from '@seeds/data/planter.json'; import country from '@seeds/data/country.json'; import organization from '@seeds/data/organization.json'; import token from '@seeds/data/token.json'; +import regionType from '@seeds/data/region_type.json'; import knex, { TableNames } from 'infra/database/knex'; export default async function globalSetup() { @@ -18,10 +19,7 @@ export default async function globalSetup() { await knex(TableNames.Species).insert(species); await knex(TableNames.Organizations).insert(organization); await knex(TableNames.Planters).insert(planter); - await knex('region_type').insert({ - id: 6, - type: 'country', - }); + await knex(TableNames.RegionType).insert(regionType); await knex(TableNames.Countries).insert(country); } knex.destroy(); diff --git a/server/infra/database/knex.ts b/server/infra/database/knex.ts index f1734c93..8f2c73e7 100644 --- a/server/infra/database/knex.ts +++ b/server/infra/database/knex.ts @@ -29,4 +29,5 @@ export const enum TableNames { Planters = 'planter', Organizations = 'entity', Countries = 'region', + RegionType = 'region_type', } From 479a15d7f223c0bb67518afe55af103126892e3a Mon Sep 17 00:00:00 2001 From: Quaid Bartolomei Date: Sat, 5 Mar 2022 16:59:09 -0800 Subject: [PATCH 44/44] refactor: table name and schema name enums --- .jest/globalSetup.ts | 24 +++++++++++++++--------- server/infra/database/knex.ts | 12 +++++++++++- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/.jest/globalSetup.ts b/.jest/globalSetup.ts index 46a15d76..3fbfda79 100644 --- a/.jest/globalSetup.ts +++ b/.jest/globalSetup.ts @@ -9,18 +9,24 @@ import country from '@seeds/data/country.json'; import organization from '@seeds/data/organization.json'; import token from '@seeds/data/token.json'; import regionType from '@seeds/data/region_type.json'; -import knex, { TableNames } from 'infra/database/knex'; +import knex, { + PublicTables, + SchemaNames, + WalletTables, +} from 'infra/database/knex'; export default async function globalSetup() { if (process.env.SEED === 'true') { - await knex(TableNames.Trees).insert(tree); - await knex('wallet').withSchema('wallet').insert(wallet); - await knex('token').withSchema('wallet').insert(token); - await knex(TableNames.Species).insert(species); - await knex(TableNames.Organizations).insert(organization); - await knex(TableNames.Planters).insert(planter); - await knex(TableNames.RegionType).insert(regionType); - await knex(TableNames.Countries).insert(country); + await knex(PublicTables.Trees).insert(tree); + await knex(WalletTables.Wallet) + .withSchema(SchemaNames.Wallet) + .insert(wallet); + await knex(WalletTables.Token).withSchema(SchemaNames.Wallet).insert(token); + await knex(PublicTables.Species).insert(species); + await knex(PublicTables.Organizations).insert(organization); + await knex(PublicTables.Planters).insert(planter); + await knex(PublicTables.RegionType).insert(regionType); + await knex(PublicTables.Countries).insert(country); } knex.destroy(); } diff --git a/server/infra/database/knex.ts b/server/infra/database/knex.ts index 8f2c73e7..6b1a1d0a 100644 --- a/server/infra/database/knex.ts +++ b/server/infra/database/knex.ts @@ -22,7 +22,12 @@ log.debug(knexConfig.searchPath); export default knex(knexConfig); -export const enum TableNames { +export const enum SchemaNames { + Public = 'public', + Wallet = 'wallet', +} + +export const enum PublicTables { Trees = 'trees', Wallets = 'wallet', Species = 'tree_species', @@ -31,3 +36,8 @@ export const enum TableNames { Countries = 'region', RegionType = 'region_type', } + +export const enum WalletTables { + Wallet = 'wallet', + Token = 'token', +}