Skip to content
Snippets Groups Projects
Commit c75139ba authored by Martin Mareš's avatar Martin Mareš
Browse files

DB: Tabulka pro asynchronní úlohy

parent ff468bb5
No related branches found
No related tags found
2 merge requests!14Asynchronní joby,!9WIP: Zárodek uživatelské části webu a submitování
...@@ -225,4 +225,32 @@ CREATE TABLE log ( ...@@ -225,4 +225,32 @@ CREATE TABLE log (
details jsonb NOT NULL -- detaily (závislé na typu) details jsonb NOT NULL -- detaily (závislé na typu)
); );
-- FIXME: Indexy -- Asynchronní úlohy
CREATE TYPE job_type AS ENUM (
'download_submits',
'upload_feedback'
);
CREATE TYPE job_state AS ENUM (
'ready',
'running',
'done', -- Hotovo, out_json a out_file jsou platné
'failed' -- Interní chyba při zpracování, viz log
);
CREATE TABLE jobs (
job_id serial PRIMARY KEY,
type job_type NOT NULL,
state job_state NOT NULL,
user_id int NOT NULL REFERENCES users(user_id), -- komu patří
created_at timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, -- kdy byl založen
finished_at timestamp with time zone DEFAULT NULL, -- kdy doběhl
expires_at timestamp with time zone DEFAULT NULL, -- kdy bude automaticky smazán
description text NOT NULL DEFAULT '',
in_json jsonb DEFAULT NULL,
out_json jsonb DEFAULT NULL,
-- Soubory jsou součástí úlohy a po jejím ukončení budou smazány
in_file varchar(255) DEFAULT NULL,
out_file varchar(255) DEFAULT NULL
);
...@@ -459,6 +459,37 @@ class Solution(Base): ...@@ -459,6 +459,37 @@ class Solution(Base):
user = relationship('User') user = relationship('User')
class JobType(MOEnum):
download_submits = auto()
upload_feedback = auto()
class JobState(MOEnum):
ready = auto()
running = auto()
done = auto()
failed = auto()
class Job(Base):
__tablename__ = 'jobs'
job_id = Column(Integer, primary_key=True, server_default=text("nextval('jobs_job_id_seq'::regclass)"))
type = Column(Enum(JobType, name='job_type'), nullable=False)
state = Column(Enum(JobState, name='job_state'), nullable=False)
user_id = Column(Integer, ForeignKey('users.user_id'), nullable=False)
description = Column(Text, nullable=False, server_default=text("''::text"))
created_at = Column(DateTime(True), nullable=False, server_default=text("CURRENT_TIMESTAMP"))
finished_at = Column(DateTime(True))
expires_at = Column(DateTime(True))
in_json = Column(JSONB)
in_file = Column(String(255), server_default=text("NULL::character varying"))
out_json = Column(JSONB)
out_file = Column(String(255), server_default=text("NULL::character varying"))
user = relationship('User')
_engine: Optional[Engine] = None _engine: Optional[Engine] = None
_session: Optional[Session] = None _session: Optional[Session] = None
flask_db: Any = None flask_db: Any = None
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment