1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use uuid::Uuid;
4
5use crate::resource::repository::{CommitAuthorResource, CommitDiffResource};
6
7#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8pub struct UserResource {
9 pub id: Uuid,
10 pub name: String,
11
12 pub location: Option<String>,
13 pub readme: Option<String>,
14 pub links: Vec<String>,
15 pub display_name: Option<String>,
16
17 pub created_at: DateTime<Utc>,
18 pub image_updated_at: DateTime<Utc>,
19}
20
21#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
22pub struct UserEmailResource {
23 pub email: String,
24 pub is_primary: bool,
25 pub is_verified: bool,
26 pub created_at: DateTime<Utc>,
27}
28
29#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
30pub struct CurrentUserResource {
31 pub id: Uuid,
32 pub name: String,
33 pub emails: Vec<UserEmailResource>,
34 pub memberships: Vec<UserMembershipResource>,
35
36 pub location: Option<String>,
37 pub readme: Option<String>,
38 pub links: Vec<String>,
39 pub display_name: Option<String>,
40
41 pub created_at: DateTime<Utc>,
42 pub image_updated_at: DateTime<Utc>,
43}
44
45#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
48pub struct UserMembershipResource {
49 pub id: Uuid,
50 pub name: String,
51 pub display_name: Option<String>,
52
53 pub role: String,
54 pub role_description: Option<String>,
55 pub joined_at: DateTime<Utc>,
56 pub image_updated_at: DateTime<Utc>,
57}
58
59#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
62pub struct UserRepositoryResource {
63 pub owner: String,
64 pub name: String,
65 #[serde(default, skip_serializing_if = "Option::is_none")]
66 pub description: Option<String>,
67 pub stars: u32,
68 pub visibility: String,
69
70 #[serde(default, skip_serializing_if = "Option::is_none")]
71 pub commit_count: Option<u32>,
72 #[serde(default, skip_serializing_if = "Option::is_none")]
73 pub last_commit_at: Option<DateTime<Utc>>,
74}
75
76#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
80pub struct UserCommitResource {
81 pub id: Uuid,
82 pub date: DateTime<Utc>,
83 pub redacted: bool,
84
85 #[serde(default, skip_serializing_if = "Option::is_none")]
86 pub owner_name: Option<String>,
87 #[serde(default, skip_serializing_if = "Option::is_none")]
88 pub repo_name: Option<String>,
89 #[serde(default, skip_serializing_if = "Option::is_none")]
90 pub sha: Option<String>,
91 #[serde(default, skip_serializing_if = "Option::is_none")]
92 pub parent_sha: Option<String>,
93 #[serde(default, skip_serializing_if = "Option::is_none")]
94 pub message: Option<String>,
95 #[serde(default, skip_serializing_if = "Option::is_none")]
96 pub author: Option<CommitAuthorResource>,
97 #[serde(default, skip_serializing_if = "Option::is_none")]
98 pub bug_number: Option<i32>,
99 #[serde(default, skip_serializing_if = "Option::is_none")]
100 pub review_number: Option<i32>,
101 #[serde(default, skip_serializing_if = "Option::is_none")]
102 pub diff_position: Option<i32>,
103 #[serde(default, skip_serializing_if = "Vec::is_empty")]
104 pub diffs: Vec<CommitDiffResource>,
105}