church-api/src/services/members.rs
Benjamin Slingo 2a5a34a9ed Phase 1 complete: standardize handler layer DRY/KISS patterns
- Eliminate manual ApiResponse construction in 5 handlers
- Add MemberService + sql::members following established pattern
- Create success_message_only() utility for empty responses
- Fix members handler: db::members direct calls → service layer
- Add SanitizeOutput for LoginResponse trait consistency
- All examined handlers now follow Handler → Service → SQL pattern
2025-08-29 09:38:06 -04:00

28 lines
841 B
Rust

use sqlx::PgPool;
use uuid::Uuid;
use crate::{error::Result, models::{Member, CreateMemberRequest}, sql};
pub struct MemberService;
impl MemberService {
/// List all members
pub async fn list_all(pool: &PgPool) -> Result<Vec<Member>> {
sql::members::list_all(pool).await
}
/// List only active members
pub async fn list_active(pool: &PgPool) -> Result<Vec<Member>> {
sql::members::list_active(pool).await
}
/// Create new member with validation
pub async fn create(pool: &PgPool, req: CreateMemberRequest) -> Result<Member> {
// Add any business logic/validation here if needed
sql::members::create(pool, req).await
}
/// Delete member by ID
pub async fn delete(pool: &PgPool, id: &Uuid) -> Result<bool> {
sql::members::delete(pool, id).await
}
}