Smart Personal Task Manager - Backend API
- Java 17 or higher
- Maven 3.6+
- Docker & Docker Compose (for PostgreSQL and Keycloak)
# Start PostgreSQL and Keycloak
docker-compose up -d
# Verify containers are running
docker psCreate a .env file or set environment variables:
# Database Configuration
DB_HOST=localhost
DB_PORT=5432
DB_NAME=sptmdb
DB_USER=sptmuser
DB_PASSWORD=sptmpassword
# JWT Configuration
JWT_SECRET=YourSecureJWTSecretKeyHere
JWT_EXPIRATION_MS=86400000
# Google Calendar (Optional)
GOOGLE_CLIENT_ID=your-client-id
GOOGLE_CLIENT_SECRET=your-client-secret# Build the project
mvn clean install
# Run the application
mvn spring-boot:runThe API will be available at http://localhost:8080
The docker-compose.yaml includes:
- PostgreSQL (port 5432) - Main database
- Keycloak (port 8180) - Authentication server
- URL:
http://localhost:8180 - Admin Username:
admin - Admin Password:
admin
backend/
├── src/
│ ├── main/
│ │ ├── java/com/sptm/backend/
│ │ │ ├── config/ # Security, CORS, etc.
│ │ │ ├── controller/ # REST endpoints
│ │ │ ├── dto/ # Data Transfer Objects
│ │ │ ├── model/ # JPA entities
│ │ │ ├── repository/ # Database repositories
│ │ │ ├── service/ # Business logic
│ │ │ └── util/ # Utilities
│ │ └── resources/
│ │ └── application.properties
│ └── test/ # Unit tests
├── docker-compose.yaml
├── pom.xml
└── README.md
The default configuration uses environment variables for flexibility:
# Server
server.port=${SERVER_PORT:8080}
# Database
spring.datasource.url=jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:sptmdb}
spring.datasource.username=${DB_USER:sptmuser}
spring.datasource.password=${DB_PASSWORD:sptmpassword}
# JWT
sptm.app.jwtSecret=${JWT_SECRET:default-secret-change-in-production}
sptm.app.jwtExpirationMs=${JWT_EXPIRATION_MS:86400000}POST /api/auth/register- Register new userPOST /api/auth/login- Login
GET /api/tasks/user/{userId}- Get user tasksPOST /api/tasks- Create taskPUT /api/tasks/{taskId}- Update taskDELETE /api/tasks/{taskId}- Delete task
GET /api/missions/user/{userId}- Get user missionsPOST /api/missions- Create missionPUT /api/missions/{missionId}- Update missionDELETE /api/missions/{missionId}- Delete missionPOST /api/missions/{missionId}/submissions- Add sub-missionDELETE /api/missions/submissions/{subMissionId}- Delete sub-mission
GET /api/analytics/weekly/{userId}- Get weekly statistics
# Run all tests
mvn test
# Run with coverage
mvn test jacoco:report# Connect to PostgreSQL
docker exec -it sptm-postgres psql -U sptmuser -d sptmdb
# List tables
\dt
# View table structure
\d tasksUse Spring Boot DevTools for automatic restart during development.
# Create production JAR
mvn clean package -DskipTests
# Run the JAR
java -jar target/backend-0.0.1-SNAPSHOT.jar# Find process using port 8080
lsof -i :8080
# Kill the process
kill -9 <PID># Check if PostgreSQL is running
docker ps | grep postgres
# Restart PostgreSQL
docker-compose restart postgresThis project is part of the SPTM (Smart Personal Task Manager) system.
- Backend Team
For frontend integration, see the Frontend README