Backend project initialized
All checks were successful
Backend CI / Run Maven Tests (push) Successful in 27s

Co-authored-by: Jarno Kiesiläinen <jarnokie@gmail.com>
Co-committed-by: Jarno Kiesiläinen <jarnokie@gmail.com>
This commit was merged in pull request #4.
This commit is contained in:
2025-08-02 19:27:17 +00:00
committed by jarno
parent 47ac6f4c74
commit c3764176ac
15 changed files with 1181 additions and 0 deletions

193
backend/README.md Normal file
View File

@@ -0,0 +1,193 @@
# Vibing Backend
A REST API backend service built with Spring Boot, Java 21, and Maven for the Vibing application.
## Features
- **RESTful API**: Complete CRUD operations for user management
- **Spring Boot 3.2.0**: Latest Spring Boot version with Java 21 support
- **JPA/Hibernate**: Database persistence with H2 in-memory database
- **Spring Security**: Basic security configuration (extensible for production)
- **API Documentation**: Swagger/OpenAPI 3 documentation
- **Validation**: Input validation using Bean Validation
- **Testing**: JUnit 5 test framework
## Prerequisites
- Java 21 or higher
- Maven 3.6 or higher
- IDE (IntelliJ IDEA, Eclipse, VS Code, etc.)
## Getting Started
### 1. Clone the Repository
```bash
git clone <repository-url>
cd vibing/backend
```
### 2. Build the Project
```bash
mvn clean install
```
### 3. Run the Application
```bash
mvn spring-boot:run
```
The application will start on `http://localhost:8080`
## API Endpoints
### Base URL
- **API Base**: `http://localhost:8080/api`
- **Health Check**: `http://localhost:8080/api/health`
- **Swagger UI**: `http://localhost:8080/swagger-ui.html`
- **H2 Console**: `http://localhost:8080/h2-console`
### User Management Endpoints
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/api/users` | Get all users |
| GET | `/api/users/{id}` | Get user by ID |
| GET | `/api/users/username/{username}` | Get user by username |
| POST | `/api/users` | Create new user |
| PUT | `/api/users/{id}` | Update user |
| DELETE | `/api/users/{id}` | Delete user |
| GET | `/api/users/check-username/{username}` | Check username availability |
| GET | `/api/users/check-email/{email}` | Check email availability |
### Health Check Endpoints
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/api/health` | Application health status |
| GET | `/api/health/ping` | Simple ping endpoint |
## Database
The application uses H2 in-memory database for development:
- **URL**: `jdbc:h2:mem:testdb`
- **Username**: `sa`
- **Password**: `password`
- **Console**: `http://localhost:8080/h2-console`
## Project Structure
```
src/
├── main/
│ ├── java/com/vibing/backend/
│ │ ├── VibingBackendApplication.java # Main application class
│ │ ├── controller/ # REST controllers
│ │ │ ├── UserController.java
│ │ │ └── HealthController.java
│ │ ├── service/ # Business logic
│ │ │ └── UserService.java
│ │ ├── repository/ # Data access layer
│ │ │ └── UserRepository.java
│ │ ├── model/ # Entity classes
│ │ │ └── User.java
│ │ ├── config/ # Configuration classes
│ │ │ └── SecurityConfig.java
│ │ └── exception/ # Custom exceptions
│ └── resources/
│ └── application.yml # Application configuration
└── test/
└── java/com/vibing/backend/
└── VibingBackendApplicationTests.java
```
## Configuration
The application configuration is in `src/main/resources/application.yml`:
- **Server Port**: 8080
- **Context Path**: `/api`
- **Database**: H2 in-memory
- **JPA**: Hibernate with create-drop DDL
- **Security**: Basic configuration (allows all user endpoints)
## Development
### Running Tests
```bash
mvn test
```
### Building JAR
```bash
mvn clean package
```
The JAR file will be created in the `target/` directory.
### Running JAR
```bash
java -jar target/vibing-backend-1.0.0.jar
```
## API Documentation
Once the application is running, you can access:
- **Swagger UI**: `http://localhost:8080/swagger-ui.html`
- **OpenAPI JSON**: `http://localhost:8080/api-docs`
## Example API Usage
### Create a User
```bash
curl -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-d '{
"username": "john_doe",
"email": "john@example.com",
"password": "password123",
"firstName": "John",
"lastName": "Doe"
}'
```
### Get All Users
```bash
curl http://localhost:8080/api/users
```
### Get User by ID
```bash
curl http://localhost:8080/api/users/1
```
## Security
The current security configuration allows all requests to user endpoints for development purposes. For production:
1. Implement proper authentication (JWT, OAuth2, etc.)
2. Add role-based authorization
3. Configure CORS properly
4. Use HTTPS
5. Implement rate limiting
## Contributing
1. Create a feature branch
2. Make your changes
3. Add tests
4. Submit a pull request
## License
This project is licensed under the MIT License.