A powerful project management backend built with Spring Boot
Features β’ Architecture β’ Getting Started β’ API Documentation β’ Configuration
ProJam Backend is a comprehensive project management system that enables teams to collaborate efficiently. It provides workspace management, project tracking, task organization, real-time chat, and GitHub integration for seamless development workflows.
- Create and manage multiple workspaces
- Public and private workspace support
- Invite system with join codes and links
- Member role management
- Organization-level control
- Create, update, and archive projects
- Project status tracking (Active, Completed, On-Hold)
- Task columns with drag-and-drop support
- Tag-based organization
- Project-level member permissions
- Custom task columns
- Task assignment and tracking
- Priority and status management
- Activity logging
- Progress monitoring
- WebSocket-based chat
- Project-level messaging
- Chat history retrieval
- User presence tracking
- Multiple authentication methods:
- Email/Password with OTP verification
- Google OAuth 2.0
- GitHub OAuth
- JWT-based authentication
- Refresh token support
- Secure password handling
- GitHub App integration
- Repository linking
- Automated workflows
- Installation management
- Dashboard with project insights
- Weekly progress tracking
- Activity monitoring
- Member contribution metrics
| Component | Technology |
|---|---|
| Framework | Spring Boot 3.4.5 |
| Language | Java 21 |
| Database | MySQL 8.0 |
| Security | Spring Security + JWT |
| Real-Time | WebSocket (STOMP) |
| Message Queue | RabbitMQ |
| Spring Mail (SMTP) | |
| Build Tool | Maven |
com.projam.projambackend
βββ controllers/ # REST API endpoints
βββ services/ # Business logic layer
βββ repositories/ # Data access layer
βββ models/ # JPA entities
βββ dto/ # Data transfer objects
βββ jwt/ # JWT authentication utilities
βββ exceptions/ # Custom exception handlers
βββ enums/ # Application enumerations
erDiagram
User ||--o{ Workspace : "belongs to"
Workspace ||--o{ Project : "contains"
Workspace ||--o{ Member : "has"
Project ||--o{ Task : "contains"
Project ||--o{ TaskColumn : "has"
Project ||--o{ Tag : "has"
Project ||--o{ Activity : "logs"
Member ||--o{ MemberRole : "has"
Task }o--|| Member : "assigned to"
- Java 21 or higher
- Maven 3.6+
- MySQL 8.0+
- RabbitMQ (for message queuing)
-
Clone the repository
git clone https://github.com/rishabhrawat05/projam-backend. git cd projam-backend -
Configure environment variables
Create an
.envfile or set the following environment variables:# Database Configuration DB_URL=jdbc:mysql://localhost:3306/projam DB_USER=your_database_user DB_PASS=your_database_password # JWT Secret JWT_SECRET=your_jwt_secret_key # Email Configuration MAIL_USER=your_email@gmail.com MAIL_PASS=your_app_password # GitHub OAuth GITHUB_CLIENT_ID=your_github_client_id GITHUB_CLIENT_SECRET=your_github_client_secret # GitHub App GITHUB_APP_ID=your_github_app_id GITHUB_PRIVATE_KEY=your_github_private_key # Google OAuth GOOGLE_CLIENT_ID=your_google_client_id # RabbitMQ Configuration RABBIT_HOST=localhost RABBIT_PORT=5672 RABBIT_USER=guest RABBIT_PASS=guest RABBIT_VUSER=/ # Application URLs FRONTEND_URL=http://localhost:3000 BACKEND_URL=http://localhost:8080
-
Build the project
./mvnw clean install
-
Run the application
./mvnw spring-boot:run
The application will start on
http://localhost:8080
| Method | Endpoint | Description |
|---|---|---|
POST |
/projam/auth/signup |
Register new user |
POST |
/projam/auth/login |
User login |
POST |
/projam/auth/verify/gmail |
Verify OTP |
POST |
/projam/auth/google-login |
Google OAuth login |
POST |
/projam/auth/github-login |
GitHub OAuth login |
POST |
/projam/auth/token/refresh |
Refresh access token |
POST |
/projam/auth/logout |
User logout |
GET |
/projam/auth/validate |
Validate token |
| Method | Endpoint | Description |
|---|---|---|
POST |
/projam/workspace/create/workspace |
Create workspace |
PUT |
/projam/workspace/update/workspace |
Update workspace |
DELETE |
/projam/workspace/delete/workspace |
Delete workspace |
GET |
/projam/workspace/all/workspaces |
Get user workspaces |
GET |
/projam/workspace/search |
Search workspaces |
POST |
/projam/workspace/join/workspace/slug |
Join via slug |
GET |
/projam/workspace/join/workspace/{token} |
Join via invite link |
| Method | Endpoint | Description |
|---|---|---|
POST |
/projam/project/create |
Create project |
GET |
/projam/project/get |
Get projects |
PUT |
/projam/project/update-project |
Update project |
PUT |
/projam/project/delete-project |
Mark for deletion |
PUT |
/projam/project/restore-project |
Restore project |
GET |
/projam/project/search |
Search projects |
POST |
/projam/project/send-request |
Send join request |
| Method | Endpoint | Description |
|---|---|---|
POST |
/projam/task/create |
Create task |
GET |
/projam/task/get-all |
Get all tasks |
PUT |
/projam/task/update |
Update task |
DELETE |
/projam/task/delete |
Delete task |
| Method | Endpoint | Description |
|---|---|---|
POST |
/projam/member/add |
Add member |
GET |
/projam/member/get/by-workspace |
Get workspace members |
GET |
/projam/member/get/by-project |
Get project members |
PUT |
/projam/member/remove-from-project |
Remove member |
GET |
/projam/member/suggest |
Suggest members |
| WebSocket | Endpoint | Description |
|---|---|---|
SEND |
/app/chat |
Send chat message |
GET |
/projam/chat/history |
Get chat history |
Key configuration in src/main/resources/application.properties:
# Server Configuration
server.port=8080
# Database
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=false
# JWT
jwt.secretKey=${JWT_SECRET}
# Mail
spring.mail.host=smtp.gmail.com
spring. mail.port=587
# Profile
spring.profiles.active=prod- JWT Authentication: Access and refresh token mechanism
- Password Encryption: BCrypt password encoding
- CORS Configuration: Controlled cross-origin access
- Security Filters: Custom JWT authentication filter
- Role-Based Access:
@PreAuthorizeannotations
Run tests with:
./mvnw test./mvnw clean package -DskipTestsThe JAR file will be in target/projambackend-0.0.1-SNAPSHOT. jar
FROM openjdk:21-jdk-slim
WORKDIR /app
COPY target/projambackend-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Rishabh Rawat - @rishabhrawat05
- Spring Boot Team for the excellent framework
- All contributors and supporters of this project
Made with β€οΈ by Rishabh Rawat