use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
use uuid::Uuid;{% for import in imports %}
use {{ import }};{% endfor %}
use business::domain::{{ snake }}::{
errors::{{ pascal }}Error,
model::{{ "{" }}{{ pascal }}, {{ pascal }}Id},
};
#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
pub struct {{ pascal }}Db {
pub id: Uuid,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub deleted: bool,
pub deleted_at: Option<DateTime<Utc>>,
{% for f in fields %} pub {{ f.name }}: {% if f.is_map %}Json<{{ f.field_type }}>{% else %}{{ f.field_type }}{% endif %},
{% endfor %}}
impl TryFrom<{{ pascal }}Db> for {{ pascal }} {
type Error = {{ pascal }}Error;
fn try_from(row: {{ pascal }}Db) -> Result<Self, Self::Error> {
Ok(Self::from_repository({{ pascal }} {
id: {{ pascal }}Id::from_uuid(row.id),
created_at: row.created_at,
updated_at: row.updated_at,
deleted: row.deleted,
deleted_at: row.deleted_at,
{% for f in fields %} {{ f.name }}: {{ f.from_row }},
{% endfor %} }))
}
}
impl From<&{{ pascal }}> for {{ pascal }}Db {
fn from(entity: &{{ pascal }}) -> Self {
Self {
id: entity.id.value(),
created_at: entity.created_at,
updated_at: entity.updated_at,
deleted: entity.deleted,
deleted_at: entity.deleted_at,
{% for f in fields %} {{ f.name }}: {% if f.is_map %}Json({{ f.accessor }}){% else %}{{ f.accessor }}{% endif %},
{% endfor %} }
}
}