Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

DisasterVerse Backend API

Spring Boot backend for DisasterVerse β€” a real-time disaster management platform with JWT authentication, PostgreSQL (Supabase) database, SOS alerts, and live WebSocket broadcasting.

πŸš€ Tech Stack

  • Java 17
  • Spring Boot 3.5.0
  • PostgreSQL (Supabase)
  • JWT Authentication
  • WebSocket (STOMP)
  • Swagger / OpenAPI
  • Docker
  • Maven

πŸ“‹ Prerequisites

  • Java 17 or higher
  • Maven 3.6+
  • Docker (optional)
  • Supabase account (free tier works)

πŸ› οΈ Setup Instructions

1. Clone Repository

git clone https://github.com/your-username/disasterverse-backend.git
cd disasterverse-backend

2. Configure Environment Variables

Windows PowerShell

$env:SPRING_DATASOURCE_URL="jdbc:postgresql://aws-1-ap-south-1.pooler.supabase.com:6543/postgres?sslmode=require"
$env:SPRING_DATASOURCE_USERNAME="postgres.your_project_ref"
$env:SPRING_DATASOURCE_PASSWORD="your_database_password"
$env:JWT_SECRET="your_generated_secret"

Linux / Mac

export SPRING_DATASOURCE_URL="jdbc:postgresql://aws-1-ap-south-1.pooler.supabase.com:6543/postgres?sslmode=require"
export SPRING_DATASOURCE_USERNAME="postgres.your_project_ref"
export SPRING_DATASOURCE_PASSWORD="your_database_password"
export JWT_SECRET="your_generated_secret"

3. Run Locally

Option A: Maven

mvn spring-boot:run -DskipTests

Option B: Docker

docker build -t disasterverse-backend .
docker run -p 8080:8080 \
  -e SPRING_DATASOURCE_URL="your_url" \
  -e SPRING_DATASOURCE_USERNAME="your_username" \
  -e SPRING_DATASOURCE_PASSWORD="your_password" \
  -e JWT_SECRET="your_secret" \
  disasterverse-backend

πŸ”— API Endpoints

πŸ”“ Public (No Token Required)

Method Endpoint Description
POST /api/v1/auth/signup Register a new user
POST /api/v1/auth/login Login and get JWT token
GET /api/v1/alerts Get all disaster alerts
GET /api/v1/alerts/active Get all active alerts

πŸ”’ Protected (Requires Bearer Token)

Method Endpoint Description
POST /api/v1/alerts Create a disaster alert
POST /api/v1/sos Submit an SOS report
GET /api/v1/sos Get all SOS reports
PATCH /api/v1/sos/status/{id} Update SOS report status
GET /api/v1/dashboard/stats Get dashboard statistics

πŸ”Œ WebSocket

Endpoint Description
/ws WebSocket connection (SockJS)
/topic/alerts Subscribe to live alert broadcasts
/topic/sos Subscribe to live SOS broadcasts

πŸ§ͺ Quick Test (cURL)

Signup

curl -X POST http://localhost:8080/api/v1/auth/signup \
  -H "Content-Type: application/json" \
  -d '{
    "fullName": "John Doe",
    "email": "john@example.com",
    "password": "password123"
  }'

Login

curl -X POST http://localhost:8080/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "john@example.com",
    "password": "password123"
  }'

Create Alert (Protected)

curl -X POST http://localhost:8080/api/v1/alerts \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE" \
  -d '{
    "title": "Major Earthquake Detected",
    "description": "7.2 magnitude near coastal region",
    "disasterType": "EARTHQUAKE",
    "severity": "CRITICAL",
    "latitude": 22.5726,
    "longitude": 88.3639
  }'

Submit SOS (Protected)

curl -X POST http://localhost:8080/api/v1/sos \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE" \
  -d '{
    "message": "Trapped under rubble, need help!",
    "latitude": 22.5726,
    "longitude": 88.3639
  }'

πŸ“Š Valid Enum Values

disasterType : EARTHQUAKE | FLOOD | FIRE | HURRICANE | TORNADO | TSUNAMI | LANDSLIDE | OTHER
severity     : LOW | MEDIUM | HIGH | CRITICAL
sosStatus    : PENDING | ACTIVE | RESOLVED
role         : USER | ADMIN

🐳 Docker Commands

# Build image
docker build -t disasterverse-backend .

# Run container
docker run -p 8080:8080 \
  -e SPRING_DATASOURCE_URL="your_url" \
  -e SPRING_DATASOURCE_USERNAME="your_username" \
  -e SPRING_DATASOURCE_PASSWORD="your_password" \
  -e JWT_SECRET="your_secret" \
  disasterverse-backend

🌐 Deploy to Render

  1. Push your code to GitHub
  2. Go to render.com and create an account
  3. Click New + β†’ Web Service
  4. Connect your GitHub repository
  5. Set Runtime to Docker
  6. Add the environment variables listed below
  7. Click Create Web Service

Live API: https://disasterverse-backend-nnez.onrender.com


πŸ“ Environment Variables

Variable Description Required
SPRING_DATASOURCE_URL PostgreSQL connection string from Supabase βœ… Yes
SPRING_DATASOURCE_USERNAME Database username (postgres.your_project_ref) βœ… Yes
SPRING_DATASOURCE_PASSWORD Database password βœ… Yes
JWT_SECRET Base64-encoded secret key for JWT signing βœ… Yes
PORT Server port No (default: 8080)

Generating a JWT Secret

# Linux / Mac
openssl rand -base64 64

# Windows PowerShell
[Convert]::ToBase64String((1..64 | ForEach-Object { Get-Random -Maximum 256 }) -as [byte[]])

πŸ“ Project Structure

disasterverse/
β”œβ”€β”€ src/main/java/com/disasterverse/
β”‚   β”œβ”€β”€ DisasterVerseApplication.java
β”‚   β”œβ”€β”€ config/
β”‚   β”‚   β”œβ”€β”€ CorsConfig.java
β”‚   β”‚   β”œβ”€β”€ SecurityConfig.java
β”‚   β”‚   └── SwaggerConfig.java
β”‚   β”œβ”€β”€ controller/
β”‚   β”‚   β”œβ”€β”€ AuthController.java
β”‚   β”‚   β”œβ”€β”€ DashboardController.java
β”‚   β”‚   β”œβ”€β”€ DisasterAlertController.java
β”‚   β”‚   └── SosReportController.java
β”‚   β”œβ”€β”€ dto/
β”‚   β”‚   β”œβ”€β”€ request/
β”‚   β”‚   β”‚   β”œβ”€β”€ CreateAlertRequest.java
β”‚   β”‚   β”‚   β”œβ”€β”€ LoginRequest.java
β”‚   β”‚   β”‚   β”œβ”€β”€ SignupRequest.java
β”‚   β”‚   β”‚   β”œβ”€β”€ SosRequest.java
β”‚   β”‚   β”‚   └── UpdateSosStatusRequest.java
β”‚   β”‚   └── response/
β”‚   β”‚       β”œβ”€β”€ AlertResponse.java
β”‚   β”‚       β”œβ”€β”€ ApiResponse.java
β”‚   β”‚       β”œβ”€β”€ AuthResponse.java
β”‚   β”‚       β”œβ”€β”€ DashboardStatsResponse.java
β”‚   β”‚       └── SosResponse.java
β”‚   β”œβ”€β”€ entity/
β”‚   β”‚   β”œβ”€β”€ BaseEntity.java
β”‚   β”‚   β”œβ”€β”€ DisasterAlert.java
β”‚   β”‚   β”œβ”€β”€ SosReport.java
β”‚   β”‚   └── User.java
β”‚   β”œβ”€β”€ enums/
β”‚   β”‚   β”œβ”€β”€ AlertSeverity.java
β”‚   β”‚   β”œβ”€β”€ DisasterType.java
β”‚   β”‚   β”œβ”€β”€ SosStatus.java
β”‚   β”‚   └── UserRole.java
β”‚   β”œβ”€β”€ exception/
β”‚   β”‚   β”œβ”€β”€ BusinessException.java
β”‚   β”‚   β”œβ”€β”€ GlobalExceptionHandler.java
β”‚   β”‚   └── ResourceNotFoundException.java
β”‚   β”œβ”€β”€ repository/
β”‚   β”‚   β”œβ”€β”€ DisasterAlertRepository.java
β”‚   β”‚   β”œβ”€β”€ SosReportRepository.java
β”‚   β”‚   └── UserRepository.java
β”‚   β”œβ”€β”€ security/
β”‚   β”‚   β”œβ”€β”€ JwtAuthenticationFilter.java
β”‚   β”‚   β”œβ”€β”€ JwtService.java
β”‚   β”‚   └── UserDetailsServiceImpl.java
β”‚   β”œβ”€β”€ service/
β”‚   β”‚   β”œβ”€β”€ AuthService.java
β”‚   β”‚   β”œβ”€β”€ DashboardService.java
β”‚   β”‚   β”œβ”€β”€ DisasterAlertService.java
β”‚   β”‚   β”œβ”€β”€ SosReportService.java
β”‚   β”‚   └── impl/
β”‚   β”‚       β”œβ”€β”€ AuthServiceImpl.java
β”‚   β”‚       β”œβ”€β”€ DashboardServiceImpl.java
β”‚   β”‚       β”œβ”€β”€ DisasterAlertServiceImpl.java
β”‚   β”‚       └── SosReportServiceImpl.java
β”‚   └── websocket/
β”‚       β”œβ”€β”€ AlertPublisher.java
β”‚       β”œβ”€β”€ SosPublisher.java
β”‚       └── WebSocketConfig.java
β”œβ”€β”€ src/main/resources/
β”‚   └── application.yml
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ render.yaml
└── pom.xml

πŸ‘₯ Contributors

Ankur Banik GitHub: @AnkurBanik124


For issues or questions, please open an issue on GitHub.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages