Skip to main content

args_api/resource/
repository.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use uuid::Uuid;
4
5use crate::resource::{bug::BugResource, common::RepositoryRole, user::UserResource};
6
7#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8pub struct RepositoryResource {
9    pub id: Uuid,
10    pub name: String,
11    pub owner: String,
12
13    pub readonly: bool,
14    pub visibility: String,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub description: Option<String>,
17    pub stars: u32,
18
19    pub created_at: DateTime<Utc>,
20
21    // projections
22    pub user_role: RepositoryRole,
23    pub user_starred: bool,
24}
25
26#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
27pub struct RepositoryPathsResource {
28    pub ref_name: String,
29    pub commit_sha: String,
30    pub entries: Vec<RepositoryPathResource>,
31}
32
33#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
34pub struct RepositoryPathResource {
35    pub path: String,
36    pub name: String,
37    pub path_type: PathType,
38    pub sha: String,
39}
40
41#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
42#[serde(rename_all = "snake_case")]
43pub enum PathType {
44    Blob,
45    Tree,
46    Commit,
47    Unknown,
48}
49
50#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
51pub struct RepositoryBlobResource {
52    pub commit_sha: String,
53    pub path: String,
54    pub sha: String,
55    pub content: String,
56    pub encoding: String,
57}
58
59#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
60pub struct RepositoryBlobsResource {
61    pub blobs: Vec<RepositoryBlobResource>,
62}
63
64#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
65pub struct RepositoryCommitsResource {
66    pub commits: Vec<RepositoryCommitResource>,
67}
68
69#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
70pub struct RepositoryCommitResource {
71    pub owner_name: String,
72    pub repo_name: String,
73    pub sha: String,
74    pub parent_sha: String,
75    pub message: String,
76    pub date: DateTime<Utc>,
77    pub author: CommitAuthorResource,
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub bug_number: Option<i32>,
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub review_number: Option<i32>,
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub diff_position: Option<i32>,
84    pub diffs: Vec<CommitDiffResource>,
85}
86
87#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
88pub struct CommitAuthorResource {
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub id: Option<Uuid>,
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub name: Option<String>,
93    pub git_name: String,
94    #[serde(default, skip_serializing_if = "Option::is_none")]
95    pub image_updated_at: Option<DateTime<Utc>>,
96}
97
98#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
99pub struct CommitDiffResource {
100    pub path: String,
101    pub lines_added: u32,
102    pub lines_removed: u32,
103}
104
105#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
106pub struct RepositoryBlobPairResource {
107    pub path: String,
108    #[serde(skip_serializing_if = "Option::is_none")]
109    pub old: Option<RepositoryBlobResource>,
110    #[serde(skip_serializing_if = "Option::is_none")]
111    pub new: Option<RepositoryBlobResource>,
112}
113
114#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
115pub struct RepositoryBugsResource {
116    pub bugs: Vec<BugResource>,
117}
118
119#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
120pub struct RepositoryResourcesResource {
121    pub last_commit: String,
122    pub last_updated: Option<DateTime<Utc>>,
123    #[serde(skip_serializing_if = "Option::is_none", default)]
124    pub paths: Option<RepositoryPathsResource>,
125    #[serde(skip_serializing_if = "Option::is_none", default)]
126    pub commits: Option<RepositoryCommitsResource>,
127    #[serde(skip_serializing_if = "Option::is_none", default)]
128    pub blobs: Option<RepositoryBlobsResource>,
129    #[serde(skip_serializing_if = "Option::is_none", default)]
130    pub bugs: Option<RepositoryBugsResource>,
131}
132
133#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
134#[serde(tag = "type", rename_all = "snake_case")]
135pub enum RepositoryActivityEventResource {
136    Starred {
137        user: UserResource,
138        at: DateTime<Utc>,
139    },
140}
141
142#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
143pub struct RepositoryCommitFilterResource {
144    pub id: Uuid,
145    pub repository_id: Uuid,
146    pub name: String,
147    #[serde(skip_serializing_if = "Option::is_none")]
148    pub authors: Option<Vec<String>>,
149    #[serde(skip_serializing_if = "Option::is_none")]
150    pub tags: Option<Vec<String>>,
151    #[serde(skip_serializing_if = "Option::is_none")]
152    pub paths: Option<Vec<String>>,
153    pub created_at: DateTime<Utc>,
154    pub updated_at: DateTime<Utc>,
155}