1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use uuid::Uuid;
4
5use crate::resource::common::AuthorResource;
6
7#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8pub struct ReviewResource {
9 pub id: Uuid,
10 pub number: i32,
11 pub author_id: Uuid,
12 pub repository_id: Uuid,
13 pub title: String,
14 pub description: String,
15 pub target_branch: String,
16 pub status: String,
17 pub created_at: DateTime<Utc>,
18 pub updated_at: DateTime<Utc>,
19 pub author: Option<AuthorResource>,
20 pub diffs: Vec<DiffResource>,
21 pub reviewers: Vec<ReviewerResource>,
22 pub comments: Vec<ReviewCommentResource>,
23}
24
25#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
26pub struct DiffResource {
27 pub id: Uuid,
28 pub review_id: Uuid,
29 pub position: i32,
30 pub message: String,
31 pub status: String,
32 pub created_at: DateTime<Utc>,
33 pub updated_at: DateTime<Utc>,
34 pub revisions: Vec<RevisionResource>,
35}
36
37#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
38pub struct RevisionResource {
39 pub id: Uuid,
40 pub diff_id: Uuid,
41 pub number: i32,
42 pub commit_hash: String,
43 pub parent_hash: String,
44 pub created_at: DateTime<Utc>,
45 pub verdicts: Vec<ReviewVerdictResource>,
46}
47
48#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
49pub struct ReviewVerdictResource {
50 pub id: Uuid,
51 pub diff_id: Uuid,
52 pub revision_id: Uuid,
53 pub reviewer_id: Uuid,
54 pub verdict: String,
55 pub created_at: DateTime<Utc>,
56}
57
58#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
59pub struct ReviewerResource {
60 pub id: Uuid,
61 pub review_id: Uuid,
62 pub reviewer_id: Uuid,
63 pub created_at: DateTime<Utc>,
64 pub user: Option<AuthorResource>,
65}
66
67#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
68pub struct ReviewCommentResource {
69 pub id: Uuid,
70 pub review_id: Uuid,
71 pub diff_id: Uuid,
72 pub revision_id: Uuid,
73 pub author_id: Uuid,
74 pub parent_id: Option<Uuid>,
75 pub body: String,
76 pub file_path: Option<String>,
77 pub line_number_start: Option<i32>,
78 pub line_number_end: Option<i32>,
79 pub start_character: Option<i32>,
80 pub end_character: Option<i32>,
81 pub side: Option<String>,
82 pub resolved: bool,
83 pub created_at: DateTime<Utc>,
84 pub updated_at: DateTime<Utc>,
85 pub author: Option<AuthorResource>,
86}