args-api 0.1.0

Shared API contract types and endpoint definitions for args.
Documentation
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 ReviewResource {
    pub id: Uuid,
    pub number: i32,
    pub author_id: Uuid,
    pub repository_id: Uuid,
    pub title: String,
    pub description: String,
    pub target_branch: String,
    pub status: String,
    pub created_at: DateTime<Utc>,
    pub updated_at: DateTime<Utc>,
    pub author: Option<AuthorResource>,
    pub diffs: Vec<DiffResource>,
    pub reviewers: Vec<ReviewerResource>,
    pub comments: Vec<ReviewCommentResource>,
}

#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DiffResource {
    pub id: Uuid,
    pub review_id: Uuid,
    pub position: i32,
    pub message: String,
    pub status: String,
    pub created_at: DateTime<Utc>,
    pub updated_at: DateTime<Utc>,
    pub revisions: Vec<RevisionResource>,
}

#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RevisionResource {
    pub id: Uuid,
    pub diff_id: Uuid,
    pub number: i32,
    pub commit_hash: String,
    pub parent_hash: String,
    pub created_at: DateTime<Utc>,
    pub verdicts: Vec<ReviewVerdictResource>,
}

#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ReviewVerdictResource {
    pub id: Uuid,
    pub diff_id: Uuid,
    pub revision_id: Uuid,
    pub reviewer_id: Uuid,
    pub verdict: String,
    pub created_at: DateTime<Utc>,
}

#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ReviewerResource {
    pub id: Uuid,
    pub review_id: Uuid,
    pub reviewer_id: Uuid,
    pub created_at: DateTime<Utc>,
    pub user: Option<AuthorResource>,
}

#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ReviewCommentResource {
    pub id: Uuid,
    pub review_id: Uuid,
    pub diff_id: Uuid,
    pub revision_id: Uuid,
    pub author_id: Uuid,
    pub parent_id: Option<Uuid>,
    pub body: String,
    pub file_path: Option<String>,
    pub line_number_start: Option<i32>,
    pub line_number_end: Option<i32>,
    pub start_character: Option<i32>,
    pub end_character: Option<i32>,
    pub side: Option<String>,
    pub resolved: bool,
    pub created_at: DateTime<Utc>,
    pub updated_at: DateTime<Utc>,
    pub author: Option<AuthorResource>,
}