leetcode_api/entities/
qs_tag.rs

1use sea_orm::{IntoActiveModel, entity::prelude::*, sea_query::OnConflict};
2use serde::{Deserialize, Serialize};
3use tracing::error;
4
5use crate::dao::glob_db;
6
7#[derive(Clone)]
8#[derive(Debug)]
9#[derive(Default)]
10#[derive(PartialEq, Eq)]
11#[derive(DeriveEntityModel)]
12#[derive(Serialize, Deserialize)]
13#[sea_orm(table_name = "qs_tag")]
14pub struct Model {
15    #[sea_orm(primary_key, auto_increment = false)]
16    pub title_slug: String,
17    #[sea_orm(primary_key, auto_increment = false)]
18    pub topic_slug: String,
19}
20
21#[derive(Clone, Copy)]
22#[derive(Debug)]
23#[derive(Default)]
24#[derive(PartialEq, Eq)]
25#[derive(EnumIter)]
26pub enum Relation {
27    #[default]
28    TitleSlug,
29    TagRelation,
30}
31
32impl RelationTrait for Relation {
33    fn def(&self) -> RelationDef {
34        match self {
35            Self::TitleSlug => Entity::belongs_to(super::new_index::Entity)
36                .from(Column::TitleSlug)
37                .to(super::new_index::Column::TitleSlug)
38                .into(),
39            Self::TagRelation => Entity::belongs_to(super::topic_tags::Entity)
40                .from(Column::TopicSlug)
41                .to(super::topic_tags::Column::TopicSlug)
42                .into(),
43        }
44    }
45}
46
47impl ActiveModelBehavior for ActiveModel {}
48
49impl Model {
50    pub async fn inert_to_db(self) {
51        let temp = self.into_active_model();
52
53        if let Err(err) = Entity::insert(temp)
54            .on_conflict(
55                OnConflict::columns([Column::TitleSlug, Column::TopicSlug])
56                    .update_columns([Column::TitleSlug, Column::TopicSlug])
57                    .to_owned(),
58            )
59            .exec(glob_db().await)
60            .await
61        {
62            error!("{}", err);
63        }
64    }
65}