Skip to main content

args_api/resource/
question.rs

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 QuestionResource {
9    pub id: Uuid,
10    pub number: i32,
11    pub author_id: Uuid,
12    pub repository_id: Uuid,
13    pub title: String,
14    pub body: String,
15    pub upvote: i32,
16    pub impression: i32,
17    pub created_at: DateTime<Utc>,
18    pub updated_at: DateTime<Utc>,
19    pub user_vote: Option<i16>,
20    pub author: Option<AuthorResource>,
21    pub comments: Vec<CommentResource>,
22    pub answers: Vec<AnswerResource>,
23}
24
25#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
26pub struct AnswerResource {
27    pub id: Uuid,
28    pub question_id: Uuid,
29    pub author_id: Uuid,
30    pub body: String,
31    pub upvote: i32,
32    pub created_at: DateTime<Utc>,
33    pub updated_at: DateTime<Utc>,
34    pub user_vote: Option<i16>,
35    pub author: Option<AuthorResource>,
36    pub comments: Vec<CommentResource>,
37}
38
39#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40pub struct CommentResource {
41    pub id: Uuid,
42    pub parent_id: Uuid,
43    pub author_id: Uuid,
44    pub body: String,
45    pub upvote: i32,
46    pub created_at: DateTime<Utc>,
47    pub updated_at: DateTime<Utc>,
48    pub user_vote: Option<i16>,
49    pub author: Option<AuthorResource>,
50}
51
52#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
53pub struct VoteResource {
54    pub target_id: Uuid,
55    pub score: i32,
56    pub user_vote: Option<i16>,
57}