![]() - SQL Layer Separation: Remove all SQL queries from service layers, achieving perfect Handler→Service→SQL architecture - Response Standardization: Replace manual ApiResponse construction with helper functions (success_response, success_with_message, success_message_only) - Sanitization Centralization: Create SanitizeDescription trait to eliminate HTML sanitization duplication across services - Code Reduction: Delete 1,340 lines of duplicated code while adding 405 lines of clean infrastructure - Zero Breaking Changes: All API contracts preserved, only internal architecture improved - Enhanced Security: Automatic response sanitization via SanitizeOutput trait Created SQL modules: - src/sql/config.rs: Church configuration operations - src/sql/media.rs: Media scanning and metadata operations Refactored services: - EventsV1Service: Use sql::events module, centralized sanitization - PendingEventsService: Use sql::events module, centralized sanitization - ConfigService: Use sql::config module - MediaScannerService: Use sql::media module - HymnalService: Simplified complex search query from 200+ to 20 lines Standardized handlers: - All handlers now use response helper functions - Consistent error handling patterns - Preserved exact JSON response format for frontend compatibility Result: Perfect DRY/KISS compliance with zero API surface changes |
||
---|---|---|
migrations | ||
src | ||
tests | ||
.env.example | ||
.gitignore | ||
build.rs | ||
Cargo.toml | ||
cleanup_manual_hymn_titles.sql | ||
CLEANUP_PROGRESS.md | ||
find_manual_hymn_titles.sql | ||
fix_timezone_double_conversion.sql | ||
HYMNARIUM_API_DOCUMENTATION.md | ||
LICENSE | ||
migrate_hymnal_data.py | ||
README.md | ||
simple_hymn_cleanup.sql |
Church API
A comprehensive church management system built with Rust and Axum, providing REST APIs for bulletin management, event scheduling, media processing, and live streaming integration.
Features
- Bulletin Management: Upload, process, and serve church bulletins with automatic format conversion
- Event Scheduling: Create and manage church events with recurring event support
- Media Processing: Handle video uploads with transcoding and thumbnail generation
- Live Streaming: Integration with Owncast for live stream management
- User Authentication: JWT-based authentication with role-based access control
- Email Notifications: SMTP integration for automated notifications
- Database Management: PostgreSQL with automated migrations
Tech Stack
- Backend: Rust with Axum web framework
- Database: PostgreSQL with SQLx
- Media Processing: GStreamer for video transcoding
- Authentication: JWT with bcrypt password hashing
- Email: lettre for SMTP integration
Quick Start
-
Prerequisites
- Rust 1.70+
- PostgreSQL 13+
- GStreamer development libraries
-
Setup
# Clone the repository git clone ssh://rockvilleav@git.rockvilletollandsda.church:10443/RTSDA/church-api.git cd church-api # Copy environment template cp .env.example .env # Edit .env with your configuration # Run database migrations sqlx migrate run # Build and run cargo run
-
Configuration
Edit
.env
with your settings:- Database URL
- JWT secret
- SMTP configuration
- Upload directories
API Endpoints
POST /api/auth/login
- User authenticationGET /api/bulletins
- List bulletinsPOST /api/bulletins
- Upload bulletinGET /api/events
- List eventsPOST /api/events
- Create eventPOST /api/media/upload
- Upload media filesGET /api/stream/status
- Live stream status
Development
# Run tests
cargo test
# Check code
cargo check
# Format code
cargo fmt
License
MIT License - see LICENSE file for details.
Author
Benjamin Slingo