leetcode_api/entities/
qs_tag.rs1use 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}