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().first().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}