annot-server/models.py
changeset 42 926f0426ce78
parent 22 986ee928a866
child 43 e27c3c1c57f1
--- a/annot-server/models.py	Fri Oct 17 17:54:06 2014 +0200
+++ b/annot-server/models.py	Sun Oct 19 12:52:38 2014 +0200
@@ -8,38 +8,28 @@
 import json
 import uuid
 
-from sqlalchemy import Column, Integer, String, DateTime, Table, Index, text
+from sqlalchemy import Column, Integer, String, DateTime, Text, Table, Index, text, ForeignKey
+from sqlalchemy.orm import relationship, backref
 from sqlalchemy.sql import func
 from sqlalchemy.dialects.postgresql import UUID, JSON
 
 from database import Base, engine
 
-#def get_table_create_stmt():
-#    return (
-#        "CREATE TABLE IF NOT EXISTS annotations ( "
-#        "id serial PRIMARY KEY, "
-#        "uuid uuid UNIQUE, "
-#        "created timestamp default (now() at time zone 'utc') NOT NULL, "
-#        "ts timestamptz NOT NULL, "
-#        "event varchar(255) NOT NULL, "
-#        "channel varchar(255) NOT NULL, "
-#        "content json);"
-#    )
 
 class Annotation(Base):
-    __tablename__ = 'annotations'
+    __tablename__ = 'annotation'
 
     id = Column(Integer, primary_key=True, nullable=False)
     uuid = Column(UUID, unique=True, nullable=False)
     created = Column(DateTime, nullable=False, server_default=text("(now() at time zone 'utc')") )
     ts = Column(DateTime(timezone=True), nullable=False)
-    event = Column(String(255), nullable=False)
+    event_code = Column(String(255), ForeignKey('event.code'), nullable=False)
     channel = Column(String(255), nullable=False)
     content = Column(JSON)
 
-Index('idx_event', Annotation.event)
-Index('idx_channel', Annotation.channel)
-Index('idx_ts', Annotation.ts)
+Index('idx_annotation_event', Annotation.event_code)
+Index('idx_annotation_channel', Annotation.channel)
+Index('idx_annotation_ts', Annotation.ts)
 
 
 def insert_annot_async(params, conn):
@@ -59,3 +49,31 @@
     defer.addCallback(lambda _: stmt.params)
 
     return defer
+
+
+class Event(Base):
+    __tablename__ = 'event'
+
+    id = Column(Integer, primary_key=True, nullable=False)
+    code = Column(String(255), unique=True, nullable=False)
+    label = Column(String(2048), nullable=False)
+    description = Column(Text(), nullable=True)
+
+    sessions = relationship("EventSession", order_by="EventSession.order", backref="event")
+
+    def __unicode__(self):
+        return self.code
+
+Index('idx_event_code', Event.code)
+
+class EventSession(Base):
+    __tablename__ = 'event_session'
+
+    id = Column(Integer, primary_key=True, nullable=False)
+    event_id = Column(Integer, ForeignKey(Event.id), nullable=False)
+    project_id = Column(String(2048), nullable=True)
+    order = Column(Integer, nullable=False, default=0)
+    categories_json = Column(JSON, nullable=True)
+
+
+Index('idx_event_session_order', EventSession.order)