flix_db/entity/info/
episodes.rs

1//! Episode entity
2
3use flix_model::id::ShowId;
4
5use chrono::NaiveDate;
6use flix_model::numbers::{EpisodeNumber, SeasonNumber};
7use sea_orm::{
8	ActiveModelBehavior, DeriveEntityModel, DerivePrimaryKey, DeriveRelation, EntityTrait,
9	EnumIter, PrimaryKeyTrait, Related, RelationDef, RelationTrait,
10};
11
12/// The database representation of a flix episode
13#[derive(Debug, Clone, DeriveEntityModel)]
14#[sea_orm(table_name = "flix_info_episodes")]
15pub struct Model {
16	/// The episode's show's ID
17	#[sea_orm(primary_key, auto_increment = false)]
18	pub show: ShowId,
19	/// The episode's season's number
20	#[sea_orm(primary_key, auto_increment = false)]
21	pub season: SeasonNumber,
22	/// The episode's number
23	#[sea_orm(primary_key, auto_increment = false)]
24	pub episode: EpisodeNumber,
25	/// The episode's title
26	pub title: String,
27	/// The episode's overview
28	pub overview: String,
29	/// The episode's air date
30	pub date: NaiveDate,
31}
32
33impl ActiveModelBehavior for ActiveModel {}
34
35/// Relation
36#[derive(Debug, EnumIter, DeriveRelation)]
37pub enum Relation {
38	/// The show this season belongs to
39	#[sea_orm(
40		belongs_to = "super::shows::Entity",
41		from = "Column::Show",
42		to = "super::shows::Column::Id",
43		on_update = "Cascade",
44		on_delete = "Cascade"
45	)]
46	Show,
47}
48
49impl Related<super::shows::Entity> for Entity {
50	fn to() -> RelationDef {
51		Relation::Show.def()
52	}
53}