{"id":19882677,"url":"https://github.com/altafjava/jisr","last_synced_at":"2025-11-25T06:02:18.182Z","repository":{"id":261454733,"uuid":"882712345","full_name":"altafjava/jisr","owner":"altafjava","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-23T17:58:24.000Z","size":172,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-11T18:24:15.902Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/altafjava.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-03T15:07:31.000Z","updated_at":"2024-12-23T17:58:29.000Z","dependencies_parsed_at":null,"dependency_job_id":"a5ecebe3-81ff-4fc9-a0cb-53b848766bde","html_url":"https://github.com/altafjava/jisr","commit_stats":null,"previous_names":["altafjava/jisr"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altafjava%2Fjisr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altafjava%2Fjisr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altafjava%2Fjisr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altafjava%2Fjisr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/altafjava","download_url":"https://codeload.github.com/altafjava/jisr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241311181,"owners_count":19942106,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T17:18:09.311Z","updated_at":"2025-11-25T06:02:13.133Z","avatar_url":"https://github.com/altafjava.png","language":"Java","readme":"# Jisr Healthcare Platform\n\n## Overview\n\nJisr (جسر) is a healthcare platform designed to connect newly diagnosed cancer patients with healthcare professionals. It offers a comprehensive ecosystem to support patients' medical and emotional needs through a streamlined, multilingual (English and Arabic) platform.\n\n## Features\n\n- User roles: Patient, Caregiver, Healthcare Provider, Admin.\n- JWT-based authentication and role-based access control.\n- Multilingual support (English and Arabic).\n- OTP-based user verification for secure registration and login.\n- Appointment scheduling with healthcare providers.\n- Admin-controlled settings for registration and file uploads.\n- Patient and healthcare provider profile management.\n\n## Tech Stack\n\n- **Backend**: Spring Boot 3.3.5\n- **Frontend**: (Planned) NextJs\n- **Database**: PostgreSQL\n- **Authentication**: JWT-based authentication \u0026 authorization\n- **Messaging**: Email notifications (via SMTP) and SMS OTP for verification\n- **Orchestration**: Docker, Kubernetes (future plan)\n- **Cloud**: Any public cloud AWS, GCP, Azure (future plan)\n\n## Prerequisites\n\n- **Java**: JDK 21 or higher\n- **Maven**: 3.8.5 or higher\n- **Database**: PostgreSQL 17 or higher\n- **Cache**: Redis\n- **Postman**: For API testing\n- **Git**: Version control\n\n## Key Configuration Files\n\n- `application.properties`: General application configuration.\n- `application-secret.properties`: Contains sensitive credentials (excluded from version control).\n\n## Security\n\n- Authentication: Secure login via email/phone and password.\n- Encryption: Passwords hashed with BCrypt.\n- Validation: Strong input validation to prevent injection attacks.\n\n## Project Setup\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/altafjava/jisr.git\n   cd jisr\n   ```\n2. Configure the Database and Environment\n   - Install and start a PostgreSQL server.\n   - Create a database named `jisr`:\n     ```\n     CREATE DATABASE jisr;\n     ```\n3. Redis Setup:\n\n   - Redis is required for caching and session management. Follow the instructions below based on your operating system:\n\n     1. Install Redis:\n\n        **For Ubuntu:**\n\n        ```bash\n        sudo apt update\n        sudo apt install redis\n        ```\n\n        **For MacOS:**\n\n        ```\n        brew install redis\n        ```\n\n     2. Start the Redis server:\n        ```\n        sudo service redis-server start\n        ```\n     3. Verify that Redis is running:\n        ```\n        redis-cli ping\n        ```\n        Expected response: `PONG`\n\n     ### For Windows:\n\n     - Redis is not natively supported on Windows, but you can use Windows Subsystem for Linux (WSL) to run Redis. Follow these steps:\n\n     1. Install WSL:\n        - Open PowerShell as Administrator and run:\n          ```\n          wsl --install\n          ```\n        - Restart your machine if prompted.\n     2. Install Redis on WSL:\n        - Launch the WSL terminal (Ubuntu is recommended as the default distribution).\n        - Run the commands for Ubuntu mentioned above to install and start Redis.\n     3. Connect to Redis:\n\n        - Once Redis is running in WSL, it will be accessible to your application as localhost on the default port `6379`.\n\n     4. Check Redis status:\n\n        ```\n        redis-cli ping\n        ```\n\n        Expected response: `PONG`\n\n     5. Optional: Customize Redis configuration by editing the `redis.conf` file (e.g., change the default port or enable persistence).\n\n4. Install Apache Kafka with the default port `9092` for event-driven messaging.\n\n5. Update Configuration:\n\n   - Create `application-secret.properties` file inside `src/main/resources` directory and update the following settings:\n\n     ```\n     # Email configuration\n     spring.mail.username=xxx@gmail.com\n     spring.mail.password=\u003cGoogle App Password\u003e\n\n     # JWT configuration\n     jwt.secret=\u003cBase64 encoded\u003e\n\n     # Admin default password (encrypted)\n     ADMIN_PASSWORD_HASH=\u003cBcrypt encrypted password\u003e\n     ```\n\n6. Install dependencies and build the project:\n   ```\n   mvn clean install\n   ```\n7. Run the application:\n   ```\n   mvn spring-boot:run\n   ```\n8. Access the application:\n   - API documentation: http://localhost:8080/swagger-ui.html (if Swagger is configured).\n   - Base URL: http://localhost:8080\n\n## Notes:\n\n- Ensure `PostgreSQL` and `Redis` servers are running before starting the application.\n- Use strong values for `jwt.secret`\n- Generate `ADMIN_PASSWORD_HASH` using a `bcrypt` password generator.\n\n## Future Enhancements\n\n- Integrate frontend using React or Angular.\n- Add support for file uploads (e.g., lab reports, medical records).\n- Expand appointment functionality with calendar integration.\n- Introduce AI-driven recommendations for diet and treatment plans.\n\n## Contributing\n\n1.  Fork the repository.\n2.  Create a feature branch:\n\n    ```\n    git checkout -b feature-name\n    ```\n\n3.  Commit your changes:\n\n    ```\n    git commit -m \"Add feature description\"\n    ```\n\n4.  Push the branch:\n\n    ```\n    git push origin feature-name\n    ```\n\n5.  Create a pull request.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faltafjava%2Fjisr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faltafjava%2Fjisr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faltafjava%2Fjisr/lists"}