Move database logic into separate subdirectory

I'm trying to see if this speeds up builds a bit. May not without a
module boundary, but for now it's nice organization to have as the
program grows.
This commit is contained in:
Eli Ribble 2025-11-24 18:08:24 +00:00
parent 338f90708e
commit 41587c3694
No known key found for this signature in database
333 changed files with 206 additions and 200 deletions

View file

@ -0,0 +1,39 @@
-- +goose Up
CREATE TYPE ArcgisLicenseType AS ENUM (
'advancedUT',
'basicUT',
'creatorUT',
'editorUT',
'fieldWorkerUT',
'GISProfessionalAdvUT',
'GISProfessionalBasicUT',
'GISProfessionalStdUT',
'IndoorsUserUT',
'insightsAnalystUT',
'liteUT',
'standardUT',
'storytellerUT',
'viewerUT');
CREATE TABLE organization (
id SERIAL PRIMARY KEY,
name TEXT
);
CREATE TABLE user_ (
id SERIAL PRIMARY KEY,
arcgis_access_token TEXT,
arcgis_license ArcgisLicenseType,
arcgis_refresh_token TEXT,
arcgis_refresh_token_expires TIMESTAMP,
arcgis_role TEXT,
display_name VARCHAR(200) NOT NULL,
email TEXT,
organization_id INTEGER REFERENCES organization (id),
username TEXT NOT NULL
);
-- +goose Down
DROP TABLE user_;
DROP TABLE organization;
DROP TYPE arcgis_license_type;

View file

@ -0,0 +1,10 @@
-- +goose Up
CREATE TYPE HashType AS ENUM (
'bcrypt-14');
ALTER TABLE user_ ADD COLUMN password_hash_type HashType NOT NULL;
ALTER TABLE user_ ADD COLUMN password_hash TEXT NOT NULL;
-- +goose Down
ALTER TABLE user_ DROP COLUMN password_hash;
ALTER TABLE user_ DROP COLUMN password_hash_type;
DROP TYPE HashType;

View file

@ -0,0 +1,12 @@
-- +goose Up
CREATE TABLE sessions (
token TEXT PRIMARY KEY,
data BYTEA NOT NULL,
expiry TIMESTAMPTZ NOT NULL
);
CREATE INDEX sessions_expiry_idx ON sessions (expiry);
-- +goose Down
DROP TABLE sessions;

View file

@ -0,0 +1,12 @@
-- +goose Up
CREATE TABLE oauth_token (
id SERIAL PRIMARY KEY,
access_token TEXT NOT NULL,
expires TIMESTAMP NOT NULL,
refresh_token TEXT NOT NULL,
username TEXT NOT NULL,
user_id INTEGER REFERENCES user_ (id) NOT NULL
);
-- +goose Down
DROP TABLE oauth_token;

View file

@ -0,0 +1,10 @@
-- +goose Up
ALTER TABLE organization ADD COLUMN arcgis_id TEXT;
ALTER TABLE organization ADD COLUMN arcgis_name TEXT;
ALTER TABLE oauth_token ADD COLUMN arcgis_id TEXT;
ALTER TABLE oauth_token ADD COLUMN arcgis_license_type_id TEXT;
-- +goose Down
ALTER TABLE organization DROP COLUMN arcgis_id;
ALTER TABLE organization DROP COLUMN arcgis_name;
ALTER TABLE oauth_token DROP COLUMN arcgis_id;
ALTER TABLE oauth_token DROP COLUMN arcgis_license_type_id;

View file

@ -0,0 +1,7 @@
-- +goose Up
ALTER TABLE oauth_token RENAME COLUMN expires TO access_token_expires;
ALTER TABLE oauth_token ADD COLUMN refresh_token_expires TIMESTAMP NOT NULL DEFAULT current_timestamp;
-- +goose Down
ALTER TABLE oauth_token DROP COLUMN refresh_token_expires;
ALTER TABLE oauth_token RENAME COLUMN access_token_expires TO expires;

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,12 @@
-- +goose Up
CREATE TABLE fieldseeker_sync (
id SERIAL PRIMARY KEY,
created TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL,
records_created INTEGER NOT NULL,
records_updated INTEGER NOT NULL,
records_unchanged INTEGER NOT NULL,
organization_id INTEGER REFERENCES organization(id) NOT NULL
);
-- +goose Down
DROP TABLE fieldseeker_sync;

View file

@ -0,0 +1,5 @@
-- +goose Up
ALTER TABLE oauth_token ADD COLUMN invalidated_at timestamp without time zone;
-- +goose Down
ALTER TABLE oauth_token DROP COLUMN invalidated_at;

View file

@ -0,0 +1,17 @@
-- +goose Up
CREATE TYPE NotificationType AS ENUM (
'oauth_token_invalidated');
CREATE TABLE notification (
id SERIAL PRIMARY KEY,
created TIMESTAMP WITHOUT TIME ZONE NOT NULL,
link TEXT NOT NULL,
message TEXT NOT NULL,
type NotificationType NOT NULL,
user_id INTEGER REFERENCES user_(id) NOT NULL);
-- +goose Down
DROP TABLE notification;
DROP TYPE NotificationType;

View file

@ -0,0 +1,9 @@
-- +goose Up
ALTER TABLE history_treatment ADD COLUMN created TIMESTAMP;
ALTER TABLE history_proposedtreatmentarea ADD COLUMN created TIMESTAMP;
ALTER TABLE history_polygonlocation ADD COLUMN created TIMESTAMP;
-- +goose Down
ALTER TABLE history_treatment DROP COLUMN created;
ALTER TABLE history_proposedtreatmentarea DROP COLUMN created;
ALTER TABLE history_polygonlocation DROP COLUMN created;

View file

@ -0,0 +1,9 @@
-- +goose Up
ALTER TABLE notification ADD COLUMN resolved_at TIMESTAMP WITHOUT TIME ZONE;
CREATE UNIQUE INDEX unique_user_link_not_resolved
ON notification (user_id, link)
WHERE resolved_at IS NULL;
-- +goose Down
DROP INDEX unique_user_link_not_resolved;
ALTER TABLE notification DROP COLUMN resolved_at;

View file

@ -0,0 +1,73 @@
-- +goose Up
ALTER TABLE fs_containerrelate ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_fieldscoutinglog ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_habitatrelate ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_habitatrelate ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_inspectionsample ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_inspectionsample ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_inspectionsampledetail ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_linelocation ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_locationtracking ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_mosquitoinspection ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_mosquitoinspection ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_pointlocation ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_pointlocation ALTER COLUMN geometry_x SET NOT NULL;
ALTER TABLE fs_pointlocation ALTER COLUMN geometry_y SET NOT NULL;
ALTER TABLE fs_polygonlocation ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_polygonlocation ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_pool ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_pooldetail ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_proposedtreatmentarea ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_qamosquitoinspection ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_rodentlocation ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_samplecollection ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_samplelocation ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_servicerequest ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_servicerequest ALTER COLUMN geometry_x SET NOT NULL;
ALTER TABLE fs_servicerequest ALTER COLUMN geometry_y SET NOT NULL;
ALTER TABLE fs_speciesabundance ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_stormdrain ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_timecard ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_trapdata ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_traplocation ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_treatment ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_treatmentarea ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_zones ALTER COLUMN globalid SET NOT NULL;
ALTER TABLE fs_zones2 ALTER COLUMN globalid SET NOT NULL;
-- +goose Down
ALTER TABLE fs_containerrelate ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_fieldscoutinglog ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_habitatrelate ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_habitatrelate ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_inspectionsample ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_inspectionsample ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_inspectionsampledetail ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_linelocation ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_locationtracking ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_mosquitoinspection ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_mosquitoinspection ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_pointlocation ALTER COLUMN geometry_y DROP NOT NULL;
ALTER TABLE fs_pointlocation ALTER COLUMN geometry_x DROP NOT NULL;
ALTER TABLE fs_pointlocation ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_polygonlocation ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_polygonlocation ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_pool ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_pooldetail ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_proposedtreatmentarea ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_qamosquitoinspection ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_rodentlocation ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_samplecollection ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_samplelocation ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_servicerequest ALTER COLUMN geometry_y DROP NOT NULL;
ALTER TABLE fs_servicerequest ALTER COLUMN geometry_x DROP NOT NULL;
ALTER TABLE fs_servicerequest ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_speciesabundance ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_stormdrain ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_timecard ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_trapdata ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_traplocation ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_treatment ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_treatmentarea ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_zones ALTER COLUMN globalid DROP NOT NULL;
ALTER TABLE fs_zones2 ALTER COLUMN globalid DROP NOT NULL;

View file

@ -0,0 +1,21 @@
-- +goose Up
-- CREATE EXTENSION h3;
-- CREATE EXTENSION h3_postgis CASCADE;
CREATE TYPE H3AggregationType AS ENUM (
'MosquitoSource',
'ServiceRequest');
CREATE TABLE h3_aggregation (
id SERIAL PRIMARY KEY,
cell h3index NOT NULL,
count_ INTEGER NOT NULL,
geometry public.geometry(Polygon,4326),
organization_id INTEGER REFERENCES organization (id) NOT NULL,
resolution INT NOT NULL,
type_ H3AggregationType NOT NULL,
UNIQUE(cell, organization_id, type_));
-- +goose Down
DROP TABLE h3_aggregation;
DROP TYPE H3AggregationType;
-- DROP EXTENSION h3;

View file

@ -0,0 +1,31 @@
-- +goose Up
ALTER TABLE fs_mosquitoinspection ADD COLUMN geom geometry(Point, 3857); -- as specified by the ArcGIS API
UPDATE fs_mosquitoinspection SET geom = ST_SetSRID(ST_MakePoint(geometry_x, geometry_y), 3857);
CREATE INDEX idx_fs_mosquitoinspection_geom ON fs_mosquitoinspection USING GIST(geom);
ALTER TABLE fs_pointlocation ADD COLUMN geom geometry(Point, 3857); -- as specified by the ArcGIS API
UPDATE fs_pointlocation SET geom = ST_SetSRID(ST_MakePoint(geometry_x, geometry_y), 3857);
CREATE INDEX idx_fs_pointlocation_geom ON fs_pointlocation USING GIST(geom);
--ALTER TABLE fs_trapdata ADD COLUMN geom geometry(Point, 3857); -- as specified by the ArcGIS API
--UPDATE fs_trapdata SET geom = ST_SetSRID(ST_MakePoint(geometry_x, geometry_y), 3857);
ALTER TABLE fs_traplocation ADD COLUMN geom geometry(Point, 3857); -- as specified by the ArcGIS API
UPDATE fs_traplocation SET geom = ST_SetSRID(ST_MakePoint(geometry_x, geometry_y), 3857);
CREATE INDEX idx_fs_traplocation_geom ON fs_traplocation USING GIST(geom);
ALTER TABLE fs_treatment ADD COLUMN geom geometry(Point, 3857); -- as specified by the ArcGIS API
UPDATE fs_treatment SET geom = ST_SetSRID(ST_MakePoint(geometry_x, geometry_y), 3857);
CREATE INDEX idx_fs_treatment_geom ON fs_treatment USING GIST(geom);
-- +goose Down
DROP INDEX idx_fs_mosquitoinspection_geom;
ALTER TABLE fs_mosquitoinspection DROP COLUMN geom;
DROP INDEX idx_fs_pointlocation_geom;
ALTER TABLE fs_pointlocation DROP COLUMN geom;
--ALTER TABLE fs_trapdata DROP COLUMN geom;
DROP INDEX idx_fs_traplocation_geom;
ALTER TABLE fs_traplocation DROP COLUMN geom;
DROP INDEX idx_fs_treatment_geom;
ALTER TABLE fs_treatment DROP COLUMN geom;