DevWorkspace is a Spring Boot application for managing workspaces and their members.
It allows workspace owners to add/remove members, assign roles, and view workspace member lists.
- Create and manage workspaces
- Add members to a workspace (owner-only permission)
- Remove members from a workspace (owner-only permission)
- List all members in a workspace
- Clean JSON responses using DTOs
- Role-based checks to ensure only owners can modify members
- Backend: Java 17, Spring Boot 3
- Database: H2 (in-memory for testing) / PostgreSQL or MySQL (optional for production)
- ORM: Spring Data JPA (Hibernate)
- Build Tool: Maven
- API: RESTful endpoints
Tables:
users: stores user accountsworkspaces: stores workspace info, links to ownerworkspace_members: maps users to workspaces with roles (ownerormember)
Relationships:
Workspace→User(owner) → One-to-OneWorkspaceMember→User&Workspace→ Many-to-One- Unique constraint on
(user_id, workspace_id)inworkspace_members
- Clone the repository
git clone https://github.com/<your-username>/devworkspace.git
cd devworkspace- Build and run the project
mvn spring-boot:run- Access the API
Base URL: http://localhost:8080API Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET |
/workspace-members/workspace/{id}/members |
List all members of a workspace |
POST |
/workspace-members?requesterId={id} |
Add a member (owner-only) |
DELETE |
/workspace-members/workspace/{workspaceId}/member/{userId}?requesterId={id} |
Remove a member (owner-only) |
GET |
/workspace-members |
List all workspace members |
Example Requests Add Member (POST)
POST /workspace-members?requesterId=1
Content-Type: application/json
{
"user": {
"id": 3,
"name": "Yassine",
"email": "yassine@test.com"
},
"workspace": {
"id": 1
},
"role": "member"
}Expected Response (if requester is owner)
"New member added to workspace"Expected Response (if requester is not owner)
{
"error": "Only owner can add members"
}Remove Member (DELETE)
DELETE /workspace-members/workspace/1/member/3?requesterId=1Expected Response
"Member removed successfully"List Members (GET)
GET /workspace-members/workspace/1/membersResponse:
[
{
"userName": "Alice",
"userEmail": "alice@example.com",
"role": "owner",
"workspaceName": "Team Alpha"
},
{
"userName": "Yassine",
"userEmail": "yassine@test.com",
"role": "member",
"workspaceName": "Team Alpha"
}
]- Testing You can test all endpoints using:
- Postman or Insomnia
- Automated JUnit + Spring Boot tests
This project is licensed under the MIT License.