Add models dir
This commit is contained in:
parent
60ff20834b
commit
17a58fec21
0
atst/models/__init__.py
Normal file
0
atst/models/__init__.py
Normal file
32
atst/models/request.py
Normal file
32
atst/models/request.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
from sqlalchemy import Column, func
|
||||||
|
from sqlalchemy.types import DateTime
|
||||||
|
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
||||||
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
|
from requests_queue.models import Base
|
||||||
|
from requests_queue.models.types import Id
|
||||||
|
|
||||||
|
|
||||||
|
class Request(Base):
|
||||||
|
__tablename__ = 'requests'
|
||||||
|
|
||||||
|
id = Id()
|
||||||
|
creator = Column(UUID(as_uuid=True))
|
||||||
|
time_created = Column(DateTime(timezone=True), server_default=func.now())
|
||||||
|
body = Column(JSONB)
|
||||||
|
status_events = relationship('StatusEvent',
|
||||||
|
backref='request',
|
||||||
|
order_by='StatusEvent.sequence')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def status(self):
|
||||||
|
return self.status_events[-1].new_status
|
||||||
|
|
||||||
|
@property
|
||||||
|
def action_required_by(self):
|
||||||
|
return {
|
||||||
|
"incomplete": "mission_owner",
|
||||||
|
"pending_submission": "mission_owner",
|
||||||
|
"submitted": "ccpo",
|
||||||
|
"approved": "mission_owner",
|
||||||
|
}.get(self.status)
|
17
atst/models/status_event.py
Normal file
17
atst/models/status_event.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
from sqlalchemy import Column, func, ForeignKey
|
||||||
|
from sqlalchemy.types import DateTime, String, BigInteger
|
||||||
|
from sqlalchemy.schema import Sequence
|
||||||
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
|
|
||||||
|
from requests_queue.models import Base
|
||||||
|
from requests_queue.models.types import Id
|
||||||
|
|
||||||
|
|
||||||
|
class StatusEvent(Base):
|
||||||
|
__tablename__ = 'status_events'
|
||||||
|
|
||||||
|
id = Id()
|
||||||
|
new_status = Column(String())
|
||||||
|
time_created = Column(DateTime(timezone=True), server_default=func.now())
|
||||||
|
request_id = Column(UUID(as_uuid=True), ForeignKey('requests.id', ondelete='CASCADE'))
|
||||||
|
sequence = Column(BigInteger, Sequence('status_events_sequence_seq'), nullable=False)
|
10
atst/models/types.py
Normal file
10
atst/models/types.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import sqlalchemy
|
||||||
|
from sqlalchemy import Column
|
||||||
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
|
|
||||||
|
|
||||||
|
def Id():
|
||||||
|
return Column(
|
||||||
|
UUID(as_uuid=True),
|
||||||
|
primary_key=True,
|
||||||
|
server_default=sqlalchemy.text("uuid_generate_v4()"))
|
Loading…
x
Reference in New Issue
Block a user