![]() BREAKING: Removed CreateEventRequest - unused for direct creation ADDED: UpdateEventRequest - clean editing with image support IMPROVED: EventService now contains business logic, not wrapper calls Architecture Changes: - Before: Handler → Service → db::events → SQL (wasteful) - After: Handler → Service → Direct SQL + Business Logic (clean) Key Improvements: ✅ All EventService methods use direct SQL with real business logic ✅ Eliminated pointless db::events wrapper functions ✅ Added missing V2 service methods for consistency ✅ Fixed handler pattern violations (no more direct db calls) ✅ Preserved email notifications and HTTP response formats ✅ Applied sanitization, validation, error handling in services Changes: - Remove CreateEventRequest/V2 (unused create paths) - Add UpdateEventRequest with image field (no redundant thumbnail) - Migrate all EventService methods to direct SQL + business logic - Fix v2/events.rs to use proper service methods consistently - Remove create/update routes and handlers (unused) - Maintain backward compatibility for all APIs Next: Apply same DRY/KISS cleanup to BulletinService and others |
||
---|---|---|
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