92 lines
2 KiB
Rust
92 lines
2 KiB
Rust
|
|
use anyhow::{Result, Context};
|
||
|
|
use sqlx::PgPool;
|
||
|
|
use uuid::Uuid;
|
||
|
|
|
||
|
|
/// {{SERVICE_NAME}}Service provides business logic for {{DOMAIN}}
|
||
|
|
pub struct {{SERVICE_NAME}}Service {
|
||
|
|
pool: PgPool,
|
||
|
|
}
|
||
|
|
|
||
|
|
impl {{SERVICE_NAME}}Service {
|
||
|
|
/// Creates a new {{SERVICE_NAME}}Service instance
|
||
|
|
pub fn new(pool: PgPool) -> Self {
|
||
|
|
Self { pool }
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Creates a new {{ENTITY}}
|
||
|
|
pub async fn create_{{ENTITY_LOWER}}(
|
||
|
|
&self,
|
||
|
|
request: Create{{ENTITY}}Request,
|
||
|
|
) -> Result<{{ENTITY}}> {
|
||
|
|
// Validation
|
||
|
|
request.validate()?;
|
||
|
|
|
||
|
|
// Business logic
|
||
|
|
let {{ENTITY_LOWER}} = sqlx::query_as!(
|
||
|
|
{{ENTITY}},
|
||
|
|
r#"
|
||
|
|
INSERT INTO {{TABLE_NAME}} (id, /* TODO: add fields */)
|
||
|
|
VALUES ($1, /* TODO: add values */)
|
||
|
|
RETURNING id, /* TODO: add fields */
|
||
|
|
"#,
|
||
|
|
Uuid::new_v4(),
|
||
|
|
// TODO: add request fields
|
||
|
|
)
|
||
|
|
.fetch_one(&self.pool)
|
||
|
|
.await
|
||
|
|
.context("Failed to create {{ENTITY_LOWER}}")?;
|
||
|
|
|
||
|
|
Ok({{ENTITY_LOWER}})
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Gets a {{ENTITY}} by ID
|
||
|
|
pub async fn get_{{ENTITY_LOWER}}_by_id(
|
||
|
|
&self,
|
||
|
|
id: Uuid,
|
||
|
|
) -> Result<{{ENTITY}}> {
|
||
|
|
let {{ENTITY_LOWER}} = sqlx::query_as!(
|
||
|
|
{{ENTITY}},
|
||
|
|
r#"
|
||
|
|
SELECT id, /* TODO: add fields */
|
||
|
|
FROM {{TABLE_NAME}}
|
||
|
|
WHERE id = $1
|
||
|
|
"#,
|
||
|
|
id
|
||
|
|
)
|
||
|
|
.fetch_optional(&self.pool)
|
||
|
|
.await
|
||
|
|
.context("Failed to fetch {{ENTITY_LOWER}}")?
|
||
|
|
.ok_or_else(|| anyhow::anyhow!("{{ENTITY}} not found"))?;
|
||
|
|
|
||
|
|
Ok({{ENTITY_LOWER}})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Request to create a {{ENTITY}}
|
||
|
|
#[derive(Debug)]
|
||
|
|
pub struct Create{{ENTITY}}Request {
|
||
|
|
// TODO: Add request fields
|
||
|
|
}
|
||
|
|
|
||
|
|
impl Create{{ENTITY}}Request {
|
||
|
|
/// Validates the request
|
||
|
|
pub fn validate(&self) -> Result<()> {
|
||
|
|
// TODO: Add validation logic
|
||
|
|
Ok(())
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/// {{ENTITY}} model
|
||
|
|
#[derive(Debug)]
|
||
|
|
pub struct {{ENTITY}} {
|
||
|
|
pub id: Uuid,
|
||
|
|
// TODO: Add entity fields
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|