church-api/.serena/memories/code_style_conventions.md
Benjamin Slingo 0c06e159bb Initial commit: Church API Rust implementation
Complete church management system with bulletin management, media processing, live streaming integration, and web interface. Includes authentication, email notifications, database migrations, and comprehensive test suite.
2025-08-19 20:56:41 -04:00

82 lines
2.8 KiB
Markdown

# Church API Code Style & Conventions
## Rust Code Style
### Naming Conventions
- **Functions**: `snake_case` (e.g., `get_video_duration_direct`, `transcode_hls_segment_ffmpeg`)
- **Types/Structs**: `PascalCase` (e.g., `StreamingTranscodingService`, `ChunkStreamingService`)
- **Constants**: `SCREAMING_SNAKE_CASE` (e.g., `TS_PACKET_SIZE`, `NUM_PACKETS`)
- **Variables**: `snake_case` (e.g., `source_path`, `media_item_id`)
- **Modules**: `snake_case` (e.g., `streaming_transcoding`, `chunk_streaming`)
### File Organization
- **Handlers**: `src/handlers/*.rs` - HTTP request handling
- **Services**: `src/services/*.rs` - Business logic layer
- **Models**: `src/models/*.rs` - Data models and database entities
- **Utils**: `src/utils/*.rs` - Shared utility functions
- **DB**: `src/db/*.rs` - Database access layer
### Error Handling
- Uses custom `ApiError` type with `Result<T>` return type
- Comprehensive error mapping with `.map_err()` for external errors
- Structured error messages with context
### Logging Style
```rust
// Informational with emoji indicators
tracing::info!("🚀 Using CLI ffmpeg with Intel QSV AV1 hardware decoding");
tracing::info!("✅ Segment {} transcoded successfully", segment_index);
// Warnings
tracing::warn!("⚠️ Creating placeholder segment {}", segment_index);
// Errors
tracing::error!("❌ Failed to transcode segment {}: {:?}", segment_index, e);
// Debug information
tracing::debug!("🎬 FFmpeg command: {:?}", cmd);
```
### Async/Await Patterns
- Extensive use of `async`/`await` with Tokio runtime
- Proper error propagation with `?` operator
- Background task spawning with `tokio::spawn()`
### Documentation
- Function-level documentation for public APIs
- Inline comments for complex logic
- TODO comments for known improvements needed
## Architecture Patterns
### Service Layer Pattern
- Services handle business logic
- Handlers are thin and focus on HTTP concerns only
- Clear separation between web layer and business logic
### Error Handling Strategy
```rust
// Convert external errors to ApiError
.map_err(|e| ApiError::Internal(format!("Failed to run ffmpeg: {}", e)))?
```
### Resource Management
- Use of `Arc<RwLock<>>` for shared mutable state
- Semaphores for limiting concurrent operations
- Proper cleanup in GStreamer pipelines
### Configuration
- Environment variables used extensively (`std::env::var`)
- Sensible defaults provided
- Hardware acceleration detection and fallbacks
## Performance Considerations
- Hardware acceleration preferred (VA-API, Intel QSV)
- Chunked/streaming processing for large media files
- Caching of transcoded segments
- Concurrent processing limits to prevent resource exhaustion
## Dependencies Management
- Clear separation of concerns in Cargo.toml
- Comments explaining dependency purposes
- Both FFmpeg and GStreamer maintained during transition period