@@ -115,7 +115,7 @@ class Annotation(BaseMixin, db.Model):
115115 )
116116
117117
118- class AnnotationAnalysis (BaseMixin , db .Model ):
118+ class AnnotationAnalysis (db .Model ):
119119 __tablename__ = "annotation_analyses"
120120 __table_args__ = (
121121 ForeignKeyConstraint (
@@ -126,17 +126,24 @@ class AnnotationAnalysis(BaseMixin, db.Model):
126126 )
127127 __mapper_args__ = {"confirm_deleted_rows" : False }
128128
129+ created_at = db .Column (
130+ db .DateTime (timezone = True ), index = True , server_default = func .now ()
131+ )
132+ updated_at = db .Column (db .DateTime (timezone = True ), index = True , onupdate = func .now ())
133+
129134 user_id = db .Column (db .Text , db .ForeignKey ("users.external_id" ), index = True )
130135 study_id = db .Column (db .Text , nullable = False )
131136 studyset_id = db .Column (db .Text , nullable = False )
132137 annotation_id = db .Column (
133138 db .Text ,
134139 db .ForeignKey ("annotations.id" , ondelete = "CASCADE" ),
140+ primary_key = True ,
135141 index = True ,
136142 )
137143 analysis_id = db .Column (
138144 db .Text ,
139145 db .ForeignKey ("analyses.id" , ondelete = "CASCADE" ),
146+ primary_key = True ,
140147 index = True ,
141148 )
142149 note = db .Column (MutableDict .as_mutable (JSONB ))
@@ -145,6 +152,14 @@ class AnnotationAnalysis(BaseMixin, db.Model):
145152 "User" , backref = backref ("annotation_analyses" , passive_deletes = True )
146153 )
147154
155+ @hybrid_property
156+ def id (self ):
157+ return f"{ self .annotation_id } _{ self .analysis_id } "
158+
159+ @id .expression
160+ def id (cls ):
161+ return cls .annotation_id + "_" + cls .analysis_id
162+
148163
149164class BaseStudy (BaseMixin , db .Model ):
150165 __tablename__ = "base_studies"
0 commit comments