From 46a9374571954ed22b3123333fbc0b9c153cbbec Mon Sep 17 00:00:00 2001 From: "D. Scott Boggs" Date: Mon, 26 Jun 2023 11:58:05 -0400 Subject: [PATCH] Add entity and relations for user-tracks relationship --- docker-compose_dev.yml | 1 + server/src/entities/mod.rs | 1 + server/src/entities/prelude.rs | 1 + server/src/entities/tracks.rs | 17 +++++++++++ server/src/entities/user.rs | 20 ++++++++++++- server/src/entities/user_tracks.rs | 46 ++++++++++++++++++++++++++++++ 6 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 server/src/entities/user_tracks.rs diff --git a/docker-compose_dev.yml b/docker-compose_dev.yml index eee5b29..ac3c228 100644 --- a/docker-compose_dev.yml +++ b/docker-compose_dev.yml @@ -25,6 +25,7 @@ services: labels: traefik.enable: true traefik.http.routers.kalkutago_server.rule: 'Host(`kalkutago`) && PathPrefix(`/api`)' + database: image: postgres environment: diff --git a/server/src/entities/mod.rs b/server/src/entities/mod.rs index e9e8598..2facb82 100644 --- a/server/src/entities/mod.rs +++ b/server/src/entities/mod.rs @@ -7,3 +7,4 @@ pub mod ticks; pub mod track2_groups; pub mod tracks; pub mod user; +pub mod user_tracks; diff --git a/server/src/entities/prelude.rs b/server/src/entities/prelude.rs index 419d754..ee9de0e 100644 --- a/server/src/entities/prelude.rs +++ b/server/src/entities/prelude.rs @@ -5,3 +5,4 @@ pub use super::ticks::Entity as Ticks; pub use super::track2_groups::Entity as Track2Groups; pub use super::tracks::Entity as Tracks; pub use super::user::Entity as User; +pub use super::user_tracks::Entity as UserTracks; diff --git a/server/src/entities/tracks.rs b/server/src/entities/tracks.rs index de4cef4..4b1b7f3 100644 --- a/server/src/entities/tracks.rs +++ b/server/src/entities/tracks.rs @@ -24,6 +24,8 @@ pub enum Relation { Ticks, #[sea_orm(has_many = "super::track2_groups::Entity")] Track2Groups, + #[sea_orm(has_many = "super::user_tracks::Entity")] + UserTracks, } impl Related for Entity { @@ -38,4 +40,19 @@ impl Related for Entity { } } +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserTracks.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + super::user_tracks::Relation::User.def() + } + fn via() -> Option { + Some(super::user_tracks::Relation::Tracks.def().rev()) + } +} + impl ActiveModelBehavior for ActiveModel {} diff --git a/server/src/entities/user.rs b/server/src/entities/user.rs index 0ddc95a..7ba561a 100644 --- a/server/src/entities/user.rs +++ b/server/src/entities/user.rs @@ -25,7 +25,25 @@ pub struct Model { } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] -pub enum Relation {} +pub enum Relation { + #[sea_orm(has_many = "super::user_tracks::Entity")] + UserTracks, +} +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserTracks.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + super::user_tracks::Relation::Tracks.def() + } + + fn via() -> Option { + Some(super::user_tracks::Relation::User.def().rev()) + } +} impl ActiveModelBehavior for ActiveModel {} diff --git a/server/src/entities/user_tracks.rs b/server/src/entities/user_tracks.rs new file mode 100644 index 0000000..45214d7 --- /dev/null +++ b/server/src/entities/user_tracks.rs @@ -0,0 +1,46 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 + +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] +#[sea_orm(table_name = "user_tracks")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i32, + pub user_id: i32, + pub track_id: i32, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::tracks::Entity", + from = "Column::TrackId", + to = "super::tracks::Column::Id", + on_update = "NoAction", + on_delete = "NoAction" + )] + Tracks, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "NoAction" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Tracks.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {}