micron 0.1.0

Build web apps fast. Repeat.
Documentation
use chrono::{DateTime, Utc};
use uuid::Uuid;

use crate::{
    db::{Collectable, Identifiable},
    ImageId, UserId,
};

#[derive(Clone, Debug, Default, Serialize, Deserialize, strum::Display)]
pub enum Status {
    Public,
    Private,
    #[default]
    Draft,
}

#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(default)]
pub struct Post {
    #[serde(default = "Uuid::new_v4")]
    pub id: Uuid,
    pub owner: UserId,

    pub date: DateTime<Utc>,

    pub title: String,
    pub lead: String,
    pub slug: String,
    pub category: String,

    pub markdown: String,

    pub image: ImageId,

    pub featured: Option<u8>,

    pub likes: Vec<UserId>,

    pub status: Status,
}

impl Default for Post {
    fn default() -> Self {
        Self {
            id: Uuid::new_v4(),
            owner: Uuid::nil(),
            date: Utc::now(),
            title: "title".to_string(),
            lead: "lead".to_string(),
            slug: "slug".to_string(),
            category: "category".to_string(),
            markdown: "content".to_string(),
            image: Uuid::nil(),
            featured: None,
            likes: Vec::new(),
            status: Status::Draft,
        }
    }
}

impl Collectable for Post {
    fn get_collection_name() -> &'static str {
        "posts"
    }
}

impl Identifiable for Post {
    fn get_id(&self) -> Uuid {
        self.id
    }
}