1616 BOOLEAN ,
1717 ENUM ,
1818 INTEGER ,
19+ JSON ,
1920 JSONB ,
2021 TEXT ,
2122 VARCHAR ,
@@ -27,56 +28,89 @@ class Base(DeclarativeBase):
2728 pass
2829
2930
30- # maps.sources
3131class Sources (Base ):
3232 __tablename__ = "sources"
3333 __table_args__ = {"schema" : "maps" }
34-
3534 source_id : Mapped [int ] = mapped_column (primary_key = True )
36- name : Mapped [str | None ] = mapped_column (VARCHAR (255 ))
37- primary_table : Mapped [str | None ] = mapped_column (VARCHAR (255 ))
38- url : Mapped [str | None ] = mapped_column (VARCHAR (255 ))
39-
40- ref_title : Mapped [str | None ] = mapped_column (TEXT )
41- authors : Mapped [str | None ] = mapped_column (VARCHAR (255 ))
42- ref_year : Mapped [str | None ] = mapped_column (TEXT )
43- ref_source : Mapped [str | None ] = mapped_column (VARCHAR (255 ))
44- isbn_doi : Mapped [str | None ] = mapped_column (VARCHAR (100 ))
35+ name : Mapped [str ] = mapped_column (VARCHAR (255 ))
36+ primary_table : Mapped [str ] = mapped_column (VARCHAR (255 ))
37+ url : Mapped [str ] = mapped_column (VARCHAR (255 ))
38+ raster_url : Mapped [str ] = mapped_column (VARCHAR (255 ))
39+ ref_title : Mapped [str ] = mapped_column (TEXT )
40+ authors : Mapped [str ] = mapped_column (VARCHAR (255 ))
41+ ref_year : Mapped [str ] = mapped_column (TEXT )
42+ ref_source : Mapped [str ] = mapped_column (VARCHAR (255 ))
43+ isbn_doi : Mapped [str ] = mapped_column (VARCHAR (100 ))
44+ scale : Mapped [str ] = mapped_column (VARCHAR (20 ))
45+ primary_line_table : Mapped [str ] = mapped_column (VARCHAR (50 ))
46+ license : Mapped [str ] = mapped_column (VARCHAR (100 ))
47+ features : Mapped [int ] = mapped_column (INTEGER )
48+ area : Mapped [int ] = mapped_column (INTEGER )
49+ priority : Mapped [bool ] = mapped_column (BOOLEAN )
50+ rgeom : Mapped [str ] = mapped_column (Geometry ("POLYGON" ))
51+ display_scales : Mapped [list [str ]] = mapped_column (ARRAY (TEXT ))
52+ web_geom : Mapped [str ] = mapped_column (Geometry ("POLYGON" ))
53+ new_priority : Mapped [int ] = mapped_column (INTEGER )
54+ status_code : Mapped [str ] = mapped_column (TEXT )
55+ slug : Mapped [str ] = mapped_column (VARCHAR (255 ))
56+
57+ # Relationship
58+ ingest_process : Mapped ["IngestProcess" ] = relationship (back_populates = "source" )
4559
46- scale : Mapped [str | None ] = mapped_column (VARCHAR (20 ))
47- primary_line_table : Mapped [str | None ] = mapped_column (VARCHAR (50 ))
48- license : Mapped [str | None ] = mapped_column (VARCHAR (100 ))
4960
50- features : Mapped [int | None ] = mapped_column (INTEGER )
51- area : Mapped [int | None ] = mapped_column (INTEGER )
52- priority : Mapped [bool ] = mapped_column (BOOLEAN , default = False )
61+ class GroupMembers (Base ):
62+ __tablename__ = "group_members"
63+ __table_args__ = {"schema" : "macrostrat_auth" }
64+ id : Mapped [int ] = mapped_column (primary_key = True , autoincrement = True )
65+ group_id : Mapped [int ] = mapped_column (ForeignKey ("macrostrat_auth.group.id" ))
66+ user_id : Mapped [int ] = mapped_column (ForeignKey ("macrostrat_auth.user.id" ))
5367
54- rgeom : Mapped [str | None ] = mapped_column (Geometry )
55- display_scales : Mapped [list [str ] | None ] = mapped_column (ARRAY (TEXT ))
56- web_geom : Mapped [str | None ] = mapped_column (Geometry )
5768
58- new_priority : Mapped [int ] = mapped_column (INTEGER , default = 0 )
59- status_code : Mapped [str ] = mapped_column (TEXT , default = "active" )
69+ class Group (Base ):
70+ __tablename__ = "group"
71+ __table_args__ = {"schema" : "macrostrat_auth" }
72+ id : Mapped [int ] = mapped_column (primary_key = True , autoincrement = True )
73+ name : Mapped [str ] = mapped_column (VARCHAR (255 ))
74+ users : Mapped [List ["User" ]] = relationship (
75+ secondary = "macrostrat_auth.group_members" ,
76+ lazy = "joined" ,
77+ back_populates = "groups" ,
78+ )
6079
61- slug : Mapped [str ] = mapped_column (TEXT , unique = True )
6280
63- raster_url : Mapped [str | None ] = mapped_column (TEXT )
64- scale_denominator : Mapped [int | None ] = mapped_column (INTEGER )
65- is_finalized : Mapped [bool ] = mapped_column (BOOLEAN , default = False )
66- lines_oriented : Mapped [bool | None ] = mapped_column (BOOLEAN )
67- date_finalized : Mapped [datetime .datetime | None ] = mapped_column (
68- DateTime (timezone = True )
81+ class User (Base ):
82+ __tablename__ = "user"
83+ __table_args__ = {"schema" : "macrostrat_auth" }
84+ id : Mapped [int ] = mapped_column (primary_key = True , autoincrement = True )
85+ sub : Mapped [str ] = mapped_column (VARCHAR (255 ))
86+ name : Mapped [str ] = mapped_column (VARCHAR (255 ))
87+ email : Mapped [str ] = mapped_column (VARCHAR (255 ))
88+ groups : Mapped [List [Group ]] = relationship (
89+ secondary = "macrostrat_auth.group_members" , lazy = "joined" , back_populates = "users"
90+ )
91+ created_on : Mapped [datetime .datetime ] = mapped_column (
92+ DateTime (timezone = True ), server_default = func .now ()
93+ )
94+ updated_on : Mapped [datetime .datetime ] = mapped_column (
95+ DateTime (timezone = True ), server_default = func .now (), onupdate = func .now ()
6996 )
7097
71- ingested_by : Mapped [str | None ] = mapped_column (TEXT )
72- keywords : Mapped [list [str ] | None ] = mapped_column (ARRAY (TEXT ))
73- language : Mapped [str | None ] = mapped_column (TEXT )
74- description : Mapped [str | None ] = mapped_column (VARCHAR )
7598
76- ingest_process : Mapped ["IngestProcess" ] = relationship (back_populates = "source" )
99+ class Token (Base ):
100+ __tablename__ = "token"
101+ __table_args__ = {"schema" : "macrostrat_auth" }
102+ id : Mapped [int ] = mapped_column (primary_key = True , autoincrement = True )
103+ token : Mapped [str ] = mapped_column (VARCHAR (255 ), unique = True )
104+ group : Mapped [Group ] = mapped_column (ForeignKey ("macrostrat_auth.group.id" ))
105+ used_on : Mapped [datetime .datetime ] = mapped_column (
106+ DateTime (timezone = True ), nullable = True
107+ )
108+ expires_on : Mapped [datetime .datetime ] = mapped_column (DateTime (timezone = True ))
109+ created_on : Mapped [datetime .datetime ] = mapped_column (
110+ DateTime (timezone = True ), server_default = func .now ()
111+ )
77112
78113
79- # storage.object
80114class SchemeEnum (enum .Enum ):
81115 http = "http"
82116 s3 = "s3"
@@ -88,47 +122,44 @@ class Object(Base):
88122 UniqueConstraint ("scheme" , "host" , "bucket" , "key" , name = "unique_file" ),
89123 {"schema" : "storage" },
90124 )
91-
92125 id : Mapped [int ] = mapped_column (primary_key = True , autoincrement = True )
93- scheme : Mapped [SchemeEnum ] = mapped_column (Enum (SchemeEnum ), nullable = False )
126+ # delete object_group_id
127+ object_group_id : Mapped [int ] = mapped_column (
128+ ForeignKey ("storage.object_group.id" ), nullable = True
129+ )
130+ scheme : Mapped [str ] = mapped_column (Enum (SchemeEnum ))
94131 host : Mapped [str ] = mapped_column (VARCHAR (255 ), nullable = False )
95132 bucket : Mapped [str ] = mapped_column (VARCHAR (255 ), nullable = False )
96133 key : Mapped [str ] = mapped_column (VARCHAR (255 ), nullable = False )
97-
98- source : Mapped [dict | None ] = mapped_column (JSONB )
99- mime_type : Mapped [str | None ] = mapped_column (VARCHAR (255 ))
100- sha256_hash : Mapped [str | None ] = mapped_column (VARCHAR (255 ))
101-
134+ source : Mapped [dict ] = mapped_column (JSONB , nullable = True )
135+ mime_type : Mapped [str ] = mapped_column (VARCHAR (255 ), nullable = True )
136+ sha256_hash : Mapped [str ] = mapped_column (VARCHAR (255 ), nullable = True )
102137 created_on : Mapped [datetime .datetime ] = mapped_column (
103138 DateTime (timezone = True ), server_default = func .now ()
104139 )
105140 updated_on : Mapped [datetime .datetime ] = mapped_column (
106141 DateTime (timezone = True ), server_default = func .now (), onupdate = func .now ()
107142 )
108- deleted_on : Mapped [datetime .datetime | None ] = mapped_column (
109- DateTime (timezone = True )
143+ deleted_on : Mapped [datetime .datetime ] = mapped_column (
144+ DateTime (timezone = True ), nullable = True
110145 )
111146
147+ # Relationships
148+ object_group : Mapped ["ObjectGroup" ] = relationship (back_populates = "objects" )
112149
113- # storage.map_files (NEW! intersection table)
114- class MapFiles (Base ):
115- __tablename__ = "map_files"
116- __table_args__ = {"schema" : "storage" }
117150
151+ class ObjectGroup (Base ):
152+ __tablename__ = "object_group"
153+ __table_args__ = {"schema" : "storage" }
118154 id : Mapped [int ] = mapped_column (primary_key = True , autoincrement = True )
119155
120- ingest_process_id : Mapped [int ] = mapped_column (
121- ForeignKey ("maps_metadata.ingest_process.id" , ondelete = "CASCADE" ),
122- nullable = False ,
123- )
124-
125- object_id : Mapped [int ] = mapped_column (
126- ForeignKey ("storage.object.id" , ondelete = "CASCADE" ),
127- nullable = False ,
156+ # Relationships
157+ objects : Mapped [List ["Object" ]] = relationship (back_populates = "object_group" )
158+ ingest_process : Mapped ["IngestProcess" ] = relationship (
159+ back_populates = "object_group"
128160 )
129161
130162
131- # ingest enums
132163class IngestState (enum .Enum ):
133164 pending = "pending"
134165 ingested = "ingested"
@@ -139,55 +170,68 @@ class IngestState(enum.Enum):
139170
140171
141172class IngestType (enum .Enum ):
142- raster = "raster"
143- vector = "vector"
173+ raster = "vector"
144174 ta1_output = "ta1_output"
145175
146176
147- # maps_metadata.ingest_process
148177class IngestProcess (Base ):
149178 __tablename__ = "ingest_process"
150179 __table_args__ = {"schema" : "maps_metadata" }
151180
152181 id : Mapped [int ] = mapped_column (primary_key = True , autoincrement = True )
153182
154- state : Mapped [IngestState | None ] = mapped_column (
183+ state : Mapped [IngestState ] = mapped_column (
155184 ENUM (IngestState , name = "ingest_state" , schema = "maps" , native_enum = True ),
156185 nullable = True ,
157186 )
158187
159- comments : Mapped [str | None ] = mapped_column (TEXT )
160- source_id : Mapped [int | None ] = mapped_column (ForeignKey ("maps.sources.source_id" ))
188+ type : Mapped [str ] = mapped_column (
189+ Enum (IngestType , name = "ingest_type" ), nullable = True
190+ )
161191
192+ comments : Mapped [str ] = mapped_column (TEXT , nullable = True )
193+ map_id : Mapped [str ] = mapped_column (TEXT , nullable = True )
194+ source_id : Mapped [int ] = mapped_column (
195+ ForeignKey ("maps.sources.source_id" ), nullable = True
196+ )
197+ access_group_id : Mapped [int ] = mapped_column (
198+ ForeignKey ("macrostrat_auth.group.id" ), nullable = True
199+ )
200+ object_group_id : Mapped [ObjectGroup ] = mapped_column (
201+ ForeignKey ("storage.object_group.id" )
202+ )
162203 created_on : Mapped [datetime .datetime ] = mapped_column (
163204 DateTime (timezone = True ), server_default = func .now ()
164205 )
165- completed_on : Mapped [datetime .datetime | None ] = mapped_column (
166- DateTime (timezone = True )
206+ completed_on : Mapped [datetime .datetime ] = mapped_column (
207+ DateTime (timezone = True ), nullable = True
167208 )
168209
169- map_id : Mapped [str | None ] = mapped_column (TEXT )
170- type : Mapped [IngestType | None ] = mapped_column (
171- Enum (IngestType , name = "ingest_type" )
210+ # Relationships
211+ object_group : Mapped [ObjectGroup ] = relationship (
212+ back_populates = "ingest_process" , lazy = "joined"
213+ )
214+ source : Mapped [Sources ] = relationship (back_populates = "ingest_process" )
215+ tags : Mapped [List ["IngestProcessTag" ]] = relationship (
216+ back_populates = "ingest_process" , lazy = "joined"
172217 )
173218
174- polygon_state : Mapped [dict | None ] = mapped_column (JSONB )
175- line_state : Mapped [dict | None ] = mapped_column (JSONB )
176- point_state : Mapped [dict | None ] = mapped_column (JSONB )
177-
178- ingest_pipeline : Mapped [str | None ] = mapped_column (TEXT )
179- map_url : Mapped [str | None ] = mapped_column (TEXT )
180- ingested_by : Mapped [str | None ] = mapped_column (TEXT )
181- slug : Mapped [str | None ] = mapped_column (TEXT )
219+ class MapFiles (Base ):
220+ __tablename__ = "map_files"
221+ __table_args__ = {"schema" : "storage" }
182222
183- source : Mapped [Sources ] = relationship ( back_populates = "ingest_process" )
223+ id : Mapped [int ] = mapped_column ( primary_key = True , autoincrement = True )
184224
185- tags : Mapped [List ["IngestProcessTag" ]] = relationship (
186- back_populates = "ingest_process"
225+ ingest_process_id : Mapped [int ] = mapped_column (
226+ ForeignKey ("maps_metadata.ingest_process.id" , ondelete = "CASCADE" ),
227+ nullable = False ,
187228 )
188229
230+ object_id : Mapped [int ] = mapped_column (
231+ ForeignKey ("storage.object.id" , ondelete = "CASCADE" ),
232+ nullable = False ,
233+ )
189234
190- # maps_metadata.ingest_process_tag
191235class IngestProcessTag (Base ):
192236 __tablename__ = "ingest_process_tag"
193237 __table_args__ = (
@@ -196,8 +240,9 @@ class IngestProcessTag(Base):
196240 )
197241
198242 ingest_process_id : Mapped [int ] = mapped_column (
199- ForeignKey ("maps_metadata.ingest_process.id" , ondelete = "CASCADE" )
243+ ForeignKey ("maps_metadata.ingest_process.id" )
200244 )
201245 tag : Mapped [str ] = mapped_column (VARCHAR (255 ))
202246
203- ingest_process : Mapped [IngestProcess ] = relationship (back_populates = "tags" )
247+ # Relationships
248+ ingest_process : Mapped [IngestProcess ] = relationship (back_populates = "tags" )
0 commit comments