dev_server_project.rs

 1use super::project;
 2use crate::db::{DevServerId, DevServerProjectId};
 3use rpc::proto;
 4use sea_orm::{entity::prelude::*, FromJsonQueryResult};
 5use serde::{Deserialize, Serialize};
 6
 7#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
 8#[sea_orm(table_name = "dev_server_projects")]
 9pub struct Model {
10    #[sea_orm(primary_key)]
11    pub id: DevServerProjectId,
12    pub dev_server_id: DevServerId,
13    pub paths: JSONPaths,
14}
15
16#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, FromJsonQueryResult)]
17pub struct JSONPaths(pub Vec<String>);
18
19impl ActiveModelBehavior for ActiveModel {}
20
21#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
22pub enum Relation {
23    #[sea_orm(has_one = "super::project::Entity")]
24    Project,
25    #[sea_orm(
26        belongs_to = "super::dev_server::Entity",
27        from = "Column::DevServerId",
28        to = "super::dev_server::Column::Id"
29    )]
30    DevServer,
31}
32
33impl Related<super::project::Entity> for Entity {
34    fn to() -> RelationDef {
35        Relation::Project.def()
36    }
37}
38
39impl Related<super::dev_server::Entity> for Entity {
40    fn to() -> RelationDef {
41        Relation::DevServer.def()
42    }
43}
44
45impl Model {
46    pub fn to_proto(&self, project: Option<project::Model>) -> proto::DevServerProject {
47        proto::DevServerProject {
48            id: self.id.to_proto(),
49            project_id: project.map(|p| p.id.to_proto()),
50            dev_server_id: self.dev_server_id.to_proto(),
51            path: self.paths().get(0).cloned().unwrap_or_default(),
52            paths: self.paths().clone(),
53        }
54    }
55
56    pub fn paths(&self) -> &Vec<String> {
57        &self.paths.0
58    }
59}