args_api/resource/
question.rs1use 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}