use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::resource::common::AuthorResource;
#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct QuestionResource {
pub id: Uuid,
pub number: i32,
pub author_id: Uuid,
pub repository_id: Uuid,
pub title: String,
pub body: String,
pub upvote: i32,
pub impression: i32,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub user_vote: Option<i16>,
pub author: Option<AuthorResource>,
pub comments: Vec<CommentResource>,
pub answers: Vec<AnswerResource>,
}
#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct AnswerResource {
pub id: Uuid,
pub question_id: Uuid,
pub author_id: Uuid,
pub body: String,
pub upvote: i32,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub user_vote: Option<i16>,
pub author: Option<AuthorResource>,
pub comments: Vec<CommentResource>,
}
#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CommentResource {
pub id: Uuid,
pub parent_id: Uuid,
pub author_id: Uuid,
pub body: String,
pub upvote: i32,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub user_vote: Option<i16>,
pub author: Option<AuthorResource>,
}
#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct VoteResource {
pub target_id: Uuid,
pub score: i32,
pub user_vote: Option<i16>,
}