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::OrganizationRole;

#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct OrganizationResource {
    pub id: Uuid,
    pub name: String,

    pub display_name: Option<String>,
    pub location: Option<String>,
    pub readme: Option<String>,
    pub links: Vec<String>,

    pub created_at: DateTime<Utc>,
    pub image_updated_at: DateTime<Utc>,

    // projections
    pub user_role: OrganizationRole,
    pub members: Option<Vec<OrganizationMemberResource>>,
}

#[derive(ApiResource, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct OrganizationMemberResource {
    pub id: Uuid,
    pub user_id: Uuid,
    pub user_name: String,

    pub role: OrganizationRole,
    pub role_description: Option<String>,

    pub created_at: DateTime<Utc>,
    pub image_updated_at: DateTime<Utc>,
}