From 8b342f6aaccfeaee1fde390a5701cf166bd5ba4a Mon Sep 17 00:00:00 2001 From: trivernis Date: Fri, 25 Feb 2022 20:04:16 +0100 Subject: [PATCH] Add tables to store job information Signed-off-by: trivernis --- .../20220225183244_add-jobs-tables.sql | 14 +++++++ .../mediarepo-database/src/entities/job.rs | 42 +++++++++++++++++++ .../src/entities/job_state.rs | 29 +++++++++++++ .../mediarepo-database/src/entities/mod.rs | 2 + 4 files changed, 87 insertions(+) create mode 100644 mediarepo-daemon/mediarepo-database/migrations/20220225183244_add-jobs-tables.sql create mode 100644 mediarepo-daemon/mediarepo-database/src/entities/job.rs create mode 100644 mediarepo-daemon/mediarepo-database/src/entities/job_state.rs diff --git a/mediarepo-daemon/mediarepo-database/migrations/20220225183244_add-jobs-tables.sql b/mediarepo-daemon/mediarepo-database/migrations/20220225183244_add-jobs-tables.sql new file mode 100644 index 0000000..fa24024 --- /dev/null +++ b/mediarepo-daemon/mediarepo-database/migrations/20220225183244_add-jobs-tables.sql @@ -0,0 +1,14 @@ +CREATE TABLE jobs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + job_type INTEGER NOT NULL, + name VARCHAR(255), + next_run DATETIME, + interval INTEGER +); + +CREATE TABLE job_states ( + job_id INTEGER FOREIGN KEY REFERENCES jobs (id), + key VARCHAR(128) NOT NULL DEFAULT 'default', + value BLOB, + PRIMARY KEY (job_id, key) +); \ No newline at end of file diff --git a/mediarepo-daemon/mediarepo-database/src/entities/job.rs b/mediarepo-daemon/mediarepo-database/src/entities/job.rs new file mode 100644 index 0000000..f87f5ba --- /dev/null +++ b/mediarepo-daemon/mediarepo-database/src/entities/job.rs @@ -0,0 +1,42 @@ +use chrono::NaiveDateTime; +use sea_orm::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "namespaces")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i64, + pub job_type: JobType, + pub name: Option, + pub next_run: Option, + pub interval: Option, +} + +#[derive(Clone, Debug, PartialEq, EnumIter, DeriveActiveEnum)] +#[sea_orm(rs_type = "u32", db_type = "Integer")] +pub enum JobType { + #[sea_orm(num_value = 10)] + MigrateCDs, + #[sea_orm(num_value = 20)] + CalculateSizes, + #[sea_orm(num_value = 30)] + GenerateThumbs, + #[sea_orm(num_value = 40)] + CheckIntegrity, + #[sea_orm(num_value = 50)] + Vacuum, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::job_state::Entity")] + JobState, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::JobState.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/mediarepo-daemon/mediarepo-database/src/entities/job_state.rs b/mediarepo-daemon/mediarepo-database/src/entities/job_state.rs new file mode 100644 index 0000000..8180a6c --- /dev/null +++ b/mediarepo-daemon/mediarepo-database/src/entities/job_state.rs @@ -0,0 +1,29 @@ +use sea_orm::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "namespaces")] +pub struct Model { + #[sea_orm(primary_key)] + pub job_id: i64, + #[sea_orm(primary_key)] + pub key: String, + pub value: Vec, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::job::Entity", + from = "Column::JobId", + to = "super::job::Column::Id" + )] + Job, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Job.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/mediarepo-daemon/mediarepo-database/src/entities/mod.rs b/mediarepo-daemon/mediarepo-database/src/entities/mod.rs index 3eee5ae..a29c7b5 100644 --- a/mediarepo-daemon/mediarepo-database/src/entities/mod.rs +++ b/mediarepo-daemon/mediarepo-database/src/entities/mod.rs @@ -3,6 +3,8 @@ pub mod content_descriptor_source; pub mod content_descriptor_tag; pub mod file; pub mod file_metadata; +pub mod job; +pub mod job_state; pub mod namespace; pub mod sort_key; pub mod sorting_preset;