https://github.com/hendrowunga/springboot-monolithic
Spring Boot Backend
https://github.com/hendrowunga/springboot-monolithic
mysql spring-boot spring-data-jpa spring-mvc spring-security
Last synced: over 1 year ago
JSON representation
Spring Boot Backend
- Host: GitHub
- URL: https://github.com/hendrowunga/springboot-monolithic
- Owner: hendrowunga
- Created: 2024-06-28T12:42:02.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-07-09T14:23:40.000Z (almost 2 years ago)
- Last Synced: 2025-01-13T12:20:27.592Z (over 1 year ago)
- Topics: mysql, spring-boot, spring-data-jpa, spring-mvc, spring-security
- Language: Java
- Homepage:
- Size: 154 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# E-Commerce Backend Application
## Deskripsi Proyek
Proyek ini adalah backend untuk aplikasi e-commerce yang dibangun menggunakan Spring Boot. Backend ini menyediakan berbagai fitur untuk mengelola produk, pesanan, dan pengguna dalam sebuah platform e-commerce.
## Fitur Utama
- Manajemen pengguna: Registrasi, login, dan verifikasi pengguna.
- Manajemen produk: Menambahkan, menghapus, dan mengupdate produk.
- Manajemen pesanan: Menampilkan dan mengelola pesanan pengguna.
## Teknologi Utama
- **Spring Boot**: Framework Java yang digunakan untuk membangun aplikasi backend.
- **Spring Security**: Untuk keamanan dan otentikasi pengguna.
- **Spring Data JPA**: Untuk interaksi dengan database menggunakan Hibernate.
- **JWT (JSON Web Token)**: Untuk autentikasi pengguna.
- **JUnit 5**: Untuk pengujian unit.
- **MockMvc**: Untuk pengujian integrasi.
## Struktur Proyek
```
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── Backend/
│ │ │ └── SpringBoot/
│ │ │ └── E_Commerce_backend/
│ │ │ ├── api/
│ │ │ │ ├── controller/
│ │ │ │ │ ├── AuthenticationController.java
│ │ │ │ │ ├── OrderController.java
│ │ │ │ │ ├── ProductController.java
│ │ │ │ │ └── UserController.java
│ │ │ │ ├── model/
│ │ │ │ │ ├── LocalUser.java
│ │ │ │ │ ├── WebOrder.java
│ │ │ │ │ └── Product.java
│ │ │ │ └── security/
│ │ │ │ ├── JUnitUserDetailsService.java
│ │ │ │ ├── JWTRequestFilter.java
│ │ │ │ └── JWTServices.java
│ │ │ ├── model/
│ │ │ │ ├── dao/
│ │ │ │ │ ├── LocalUserDAO.java
│ │ │ │ │ ├── OrderDAO.java
│ │ │ │ │ └── ProductDAO.java
│ │ │ │ ├── VerificationToken.java
│ │ │ │ └── EncryptionServices.java
│ │ │ └── services/
│ │ │ ├── UserService.java
│ │ │ ├── ProductService.java
│ │ │ ├── OrderService.java
│ │ │ └── JWTServices.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── Backend/
│ └── SpringBoot/
│ └── E_Commerce_backend/
│ ├── api/
│ │ └── controller/
│ │ ├── AuthenticationControllerTest.java
│ │ ├── OrderControllerTest.java
│ │ ├── ProductControllerTest.java
│ │ └── UserControllerTest.java
│ ├── model/
│ │ └── service/
│ │ ├── EncryptionServiceTest.java
│ │ └── JWTServiceTest.java
│ └── service/
│ └── UserServiceTest.java
└── pom.xml
```
## Instalasi
1. **Clone repository ini:**
```
git clone https://github.com/hendrowunga/E-Commerce-backend-SpringBoot.git
cd repository
```
2. **Build dan jalankan aplikasi:**
```
mvn clean install
mvn spring-boot:run
```
3. **Akses aplikasi:**
Buka `http://localhost:8080` di web browser.
## Penggunaan Endpoint
- POST : http://localhost:8080/auth/register
- POST : http://localhost:8080/auth/login
- GET : http://localhost:8080/order
- GET : http://localhost:8080/product
- GET : http://localhost:8080/user/{userId}/address
- PUT : http://localhost:8080/user/{userId}/address
- PATCH: http://localhost:8080/user/{userId}/address/{addressId}
### 1. AuthenticationController
#### AuthenticationController.java
```java
@RestController
@RequestMapping("/auth")
public class AuthenticationController {
@Autowired
private JWTServices jwtServices;
@Autowired
private UserService userService;
@PostMapping("/register")
public ResponseEntity> registerUser(@RequestBody LocalUser newUser) {
userService.saveUser(newUser);
return ResponseEntity.ok("User registered successfully");
}
@PostMapping("/login")
public ResponseEntity> loginUser(@RequestBody LocalUser loginUser) {
// Authenticate user
final String jwtToken = jwtServices.authenticate(loginUser.getUsername(), loginUser.getPassword());
return ResponseEntity.ok(new AuthResponse(jwtToken));
}
}
```
### 2. OrderController
#### OrderController.java
```java
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderService orderService;
@GetMapping
public ResponseEntity> getAllOrders() {
List orders = orderService.getAllOrders();
return ResponseEntity.ok(orders);
}
}
```
### 3. ProductController
#### ProductController.java
```java
@RestController
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
@GetMapping
public ResponseEntity> getAllProducts() {
List products = productService.getAllProducts();
return ResponseEntity.ok(products);
}
}
```
### 4. UserController
#### UserController.java
```java
@RestController
@RequestMapping("/user")
public class UserController {
private AddressDAO addressDAO;
private SimpMessagingTemplate simpMessagingTemplate;
private UserServices userServices;
public UserController(AddressDAO addressDAO,SimpMessagingTemplate simpMessagingTemplate,UserServices userServices) {
this.addressDAO = addressDAO;
this.simpMessagingTemplate=simpMessagingTemplate;
this.userServices=userServices;
}
@GetMapping("/{userId}/address")
public ResponseEntity> getAddress(@AuthenticationPrincipal LocalUser user, @PathVariable Long userId) {
if (!userServices.userHasPermissionToUser(user, userId)) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
}
return ResponseEntity.ok(addressDAO.findByUser_Id(userId));
}
@PutMapping("/{userId}/address")
public ResponseEntity
putAddress(@AuthenticationPrincipal LocalUser user, @PathVariable Long userId, @RequestBody Address address) {
if (!userServices.userHasPermissionToUser(user, userId)) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
}
address.setId(null);
LocalUser refUser = new LocalUser();
refUser.setId(userId);
address.setUser(refUser);
Address savedAddress = addressDAO.save(address);
simpMessagingTemplate.convertAndSend("/topic/user/" + userId + "/address",
new DataChange<>(DataChange.ChangeType.INSERT, address));
return ResponseEntity.ok(savedAddress);
}
@PatchMapping("/{userId}/address/{addressId}")
public ResponseEntity
patchAddress(
@AuthenticationPrincipal LocalUser user, @PathVariable Long userId,
@PathVariable Long addressId, @RequestBody Address address) {
if (!userServices.userHasPermissionToUser(user, userId)) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
}
if (address.getId() == addressId) {
Optional opOriginalAddress = addressDAO.findById(addressId);
if (opOriginalAddress.isPresent()) {
LocalUser originalUser = opOriginalAddress.get().getUser();
if (originalUser.getId() == userId) {
address.setUser(originalUser);
Address savedAddress = addressDAO.save(address);
simpMessagingTemplate.convertAndSend("/topic/user/" + userId + "/address",
new DataChange<>(DataChange.ChangeType.UPDATE, address));
return ResponseEntity.ok(savedAddress);
}
}
}
return ResponseEntity.badRequest().build();
}
}
```
## Dokumentasi dan Referensi
- Spring Boot Documentation: https://docs.spring.io/spring-boot/docs/current/reference/html/
- Start Spring Boot: https://start.spring.io/
- Stack Overflow: https://stackoverflow.com/
## Hubungi Saya
Untuk pertanyaan lebih lanjut atau diskusi, silakan hubungi saya melalui email di **hendrowunga073@gmail.com**.