# Silmataivas (Rust Version) Silmataivas is a weather monitoring service that sends personalized alerts based on user-defined thresholds and notification preferences. This is the Rust version, providing a RESTful API for managing users, locations, weather thresholds, and notification settings. ## Features - Weather monitoring using OpenWeatherMap API - Custom weather thresholds per user - Flexible notifications: NTFY (push) and SMTP (email) - User-specific configuration - RESTful API for all resources ## Project Structure - **src/main.rs**: All application logic and API endpoints (no lib.rs, not a library) - **src/**: Modules for users, locations, notifications, weather thresholds, etc. - **migrations/**: SQL migrations for SQLite - **Dockerfile**: For containerized deployment ## Quick Start ### Prerequisites - Rust (see [rustup.rs](https://rustup.rs/)) - SQLite (default, or set `DATABASE_URL` for PostgreSQL) ### Running Locally ```bash # Clone the repository git clone https://codeberg.org/silmataivas/silmataivas.git cd silmataivas # Build and run cargo build --release ./target/release/silmataivas ``` The server will listen on port 4000 by default. You can set the `DATABASE_URL` environment variable to change the database location. ### Using Docker ```bash docker build -t silmataivas . docker run -p 4000:4000 -e DATABASE_URL=sqlite:///data/silmataivas.db silmataivas ``` ## API Usage All API endpoints (except `/health`) require authentication using a Bearer token: ``` Authorization: Bearer ``` See the source code for endpoint details. (OpenAPI docs are not yet auto-generated in this Rust version.) ## Migration Note This project was previously implemented in Elixir/Phoenix. All Elixir/Phoenix code, references, and setup instructions have been removed. The project is now a Rust binary only (no library, no Elixir code). ## Development - Format: `cargo fmt` - Lint: `cargo clippy` - Test: `cargo test` ## Contributing - Use conventional commits for PRs - See the code for module structure and API details --- For any issues or questions, please open an issue on Codeberg.