Entire Backend API with Postgres
- Prevent duplicate titles when processing hymn references (e.g., #671 - Title - Title) - Add logic to detect existing titles before adding new ones - Check for " - " pattern after hymn numbers to skip already-titled hymns - Update all three hymn processing functions to use consistent logic - Add comprehensive test suite with 5 test cases covering various scenarios This resolves the issue where uploading cover images through the admin panel would trigger hymn processing and create duplicate titles like: "#671 - As We Come to You in Prayer - As We Come to You in Prayer" Tests verify: - Bare hymn numbers get titles added - Existing titles are preserved unchanged - Mixed content (bare + titled) is handled correctly - Various hymn patterns (Hymn, No., Number) work properly - Only bare hymn numbers are extracted for processing |
||
|---|---|---|
| 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 | ||
| import_quarterlies.py | ||
| import_to_db.py | ||
| LICENSE | ||
| migrate_hymnal_data.py | ||
| quarterly_import_data.json | ||
| 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
.envwith 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