Skip to content

Commit e38c3aa

Browse files
Merge branch 'dev' into inventory
2 parents 6346582 + f90e5da commit e38c3aa

File tree

63 files changed

+3218
-1048
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+3218
-1048
lines changed

backend/src/main/java/com/smalltrend/controller/AuditLogController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ public ResponseEntity<AuditLogPageResponse> getAuditLogs(
5151
@RequestParam(required = false) String ipAddress,
5252
@RequestParam(required = false) String traceId,
5353
@RequestParam(required = false) String source,
54-
@RequestParam(defaultValue = "0") Integer page,
55-
@RequestParam(defaultValue = "50") Integer size,
56-
@RequestParam(defaultValue = "createdAt") String sortBy,
57-
@RequestParam(defaultValue = "DESC") String sortDirection
54+
@RequestParam(value = "page", defaultValue = "0") Integer page,
55+
@RequestParam(value = "size", defaultValue = "50") Integer size,
56+
@RequestParam(value = "sortBy", defaultValue = "createdAt") String sortBy,
57+
@RequestParam(value = "sortDirection", defaultValue = "DESC") String sortDirection
5858
) {
5959
AuditLogFilterRequest filter = AuditLogFilterRequest.builder()
6060
.fromDateTime(fromDateTime)

backend/src/main/java/com/smalltrend/controller/AuthController.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import com.smalltrend.dto.auth.AuthRequest;
44
import com.smalltrend.dto.auth.AuthResponse;
5+
import com.smalltrend.dto.auth.ForgotPasswordOtpRequest;
6+
import com.smalltrend.dto.auth.ResetPasswordOtpRequest;
57
import com.smalltrend.dto.common.MessageResponse;
68
import com.smalltrend.entity.User;
9+
import com.smalltrend.service.PasswordResetOtpService;
710
import com.smalltrend.service.UserService;
811
import com.smalltrend.validation.UserManagementValidator;
912
import jakarta.validation.Valid;
@@ -30,6 +33,7 @@
3033
public class AuthController {
3134

3235
private final UserService userService;
36+
private final PasswordResetOtpService passwordResetOtpService;
3337
private final AuthenticationManager authenticationManager;
3438
private final UserManagementValidator validator;
3539

@@ -143,4 +147,41 @@ public ResponseEntity<?> validateToken() {
143147
.body(new MessageResponse("Token không hợp lệ"));
144148
}
145149
}
150+
151+
@PostMapping("/forgot-password/otp")
152+
public ResponseEntity<?> requestPasswordOtp(@Valid @RequestBody ForgotPasswordOtpRequest request) {
153+
try {
154+
passwordResetOtpService.requestOtp(request.getEmail());
155+
return ResponseEntity.ok(new MessageResponse("OTP da duoc gui den email"));
156+
} catch (RuntimeException ex) {
157+
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
158+
.body(new MessageResponse(ex.getMessage()));
159+
} catch (Exception ex) {
160+
log.error("Request password OTP error for email {}", request.getEmail(), ex);
161+
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
162+
.body(new MessageResponse("Khong the gui OTP, vui long thu lai sau"));
163+
}
164+
}
165+
166+
@PostMapping("/forgot-password/reset")
167+
public ResponseEntity<?> resetPasswordWithOtp(@Valid @RequestBody ResetPasswordOtpRequest request) {
168+
try {
169+
passwordResetOtpService.resetPassword(
170+
request.getEmail(),
171+
request.getOtp(),
172+
request.getNewPassword(),
173+
request.getConfirmPassword());
174+
return ResponseEntity.ok(new MessageResponse("Dat lai mat khau thanh cong"));
175+
} catch (IllegalArgumentException ex) {
176+
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
177+
.body(new MessageResponse(ex.getMessage()));
178+
} catch (RuntimeException ex) {
179+
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
180+
.body(new MessageResponse(ex.getMessage()));
181+
} catch (Exception ex) {
182+
log.error("Reset password by OTP failed for email {}", request.getEmail(), ex);
183+
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
184+
.body(new MessageResponse("Khong the dat lai mat khau, vui long thu lai sau"));
185+
}
186+
}
146187
}

backend/src/main/java/com/smalltrend/controller/CRM/CustomerController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class CustomerController {
2020
private final CustomerService customerService;
2121

2222
@GetMapping("/customers")
23+
@PreAuthorize("hasAnyAuthority('ADMIN','ROLE_ADMIN','MANAGER','ROLE_MANAGER')")
2324
public ResponseEntity<List<CustomerResponse>> getAllCustomers() {
2425
List<CustomerResponse> customers = customerService.getAllCustomers();
2526
return ResponseEntity.ok(customers);

backend/src/main/java/com/smalltrend/controller/ReportController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ public ResponseEntity<ReportDTO> generateReport(
5454
@GetMapping("/history")
5555
@PreAuthorize("hasRole('ADMIN')")
5656
public ResponseEntity<ReportPageResponse> getReportHistory(
57-
@RequestParam(defaultValue = "0") int page,
58-
@RequestParam(defaultValue = "10") int size,
57+
@RequestParam(value = "page", defaultValue = "0") int page,
58+
@RequestParam(value = "size", defaultValue = "10") int size,
5959
Authentication authentication) {
6060
String userEmail = authentication.getName();
6161
ReportPageResponse response = reportService.getReportHistory(userEmail, page, size);
@@ -68,8 +68,8 @@ public ResponseEntity<ReportPageResponse> getReportHistory(
6868
@GetMapping("/all")
6969
@PreAuthorize("hasRole('ADMIN')")
7070
public ResponseEntity<ReportPageResponse> getAllReports(
71-
@RequestParam(defaultValue = "0") int page,
72-
@RequestParam(defaultValue = "10") int size) {
71+
@RequestParam(value = "page", defaultValue = "0") int page,
72+
@RequestParam(value = "size", defaultValue = "10") int size) {
7373
ReportPageResponse response = reportService.getAllReports(page, size);
7474
return ResponseEntity.ok(response);
7575
}

backend/src/main/java/com/smalltrend/controller/SaleOrderController.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,23 @@ public class SaleOrderController {
2525
@GetMapping
2626
@PreAuthorize("hasAnyRole('ADMIN', 'MANAGER', 'CASHIER', 'SALES_STAFF')")
2727
public ResponseEntity<?> list(
28-
@RequestParam(required = false) String status,
29-
@RequestParam(required = false) Integer cashierId,
30-
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate fromDate,
31-
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate toDate) {
28+
@RequestParam(value = "status", required = false) String status,
29+
@RequestParam(value = "cashierId", required = false) Integer cashierId,
30+
@RequestParam(value = "fromDate", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate fromDate,
31+
@RequestParam(value = "toDate", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate toDate) {
3232
List<OrderResponse> responses = saleOrderService.listOrders(status, cashierId, fromDate, toDate);
3333
return ResponseEntity.ok(responses);
3434
}
3535

3636
@GetMapping("/{id}")
3737
@PreAuthorize("hasAnyRole('ADMIN', 'MANAGER', 'CASHIER', 'SALES_STAFF')")
38-
public ResponseEntity<?> getById(@PathVariable Integer id) {
38+
public ResponseEntity<?> getById(@PathVariable("id") Integer id) {
3939
return ResponseEntity.ok(saleOrderService.getById(id));
4040
}
4141

4242
@GetMapping("/code/{orderCode}")
4343
@PreAuthorize("hasAnyRole('ADMIN', 'MANAGER', 'CASHIER', 'SALES_STAFF')")
44-
public ResponseEntity<?> getByCode(@PathVariable String orderCode) {
44+
public ResponseEntity<?> getByCode(@PathVariable("orderCode") String orderCode) {
4545
return ResponseEntity.ok(saleOrderService.getByOrderCode(orderCode));
4646
}
4747

@@ -53,26 +53,26 @@ public ResponseEntity<?> create(@RequestBody OrderRequest request) {
5353

5454
@PutMapping("/{id}")
5555
@PreAuthorize("hasAnyRole('ADMIN', 'MANAGER', 'CASHIER')")
56-
public ResponseEntity<?> update(@PathVariable Integer id, @RequestBody OrderRequest request) {
56+
public ResponseEntity<?> update(@PathVariable("id") Integer id, @RequestBody OrderRequest request) {
5757
return ResponseEntity.ok(saleOrderService.update(id, request));
5858
}
5959

6060
@PatchMapping("/{id}/status")
6161
@PreAuthorize("hasAnyRole('ADMIN', 'MANAGER', 'CASHIER')")
62-
public ResponseEntity<?> updateStatus(@PathVariable Integer id, @RequestBody OrderStatusUpdateRequest request) {
62+
public ResponseEntity<?> updateStatus(@PathVariable("id") Integer id, @RequestBody OrderStatusUpdateRequest request) {
6363
return ResponseEntity.ok(saleOrderService.updateStatus(id, request));
6464
}
6565

6666
@DeleteMapping("/{id}")
6767
@PreAuthorize("hasAnyRole('ADMIN', 'MANAGER')")
68-
public ResponseEntity<?> delete(@PathVariable Integer id) {
68+
public ResponseEntity<?> delete(@PathVariable("id") Integer id) {
6969
saleOrderService.delete(id);
7070
return ResponseEntity.ok(new MessageResponse("Sale order deleted"));
7171
}
7272

7373
@GetMapping("/{id}/history")
7474
@PreAuthorize("hasAnyRole('ADMIN', 'MANAGER', 'CASHIER', 'SALES_STAFF')")
75-
public ResponseEntity<?> listHistory(@PathVariable Integer id) {
75+
public ResponseEntity<?> listHistory(@PathVariable("id") Integer id) {
7676
List<OrderStatusHistoryResponse> responses = saleOrderService.listHistory(id);
7777
return ResponseEntity.ok(responses);
7878
}

backend/src/main/java/com/smalltrend/controller/products/ProductComboController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public ResponseEntity<List<ProductComboResponse>> getAll() {
2828

2929
// Lấy thông tin chi tiết một combo theo ID
3030
@GetMapping("/{id}")
31-
public ResponseEntity<ProductComboResponse> getById(@PathVariable Integer id) {
31+
public ResponseEntity<ProductComboResponse> getById(@PathVariable("id") Integer id) {
3232
return ResponseEntity.ok(productComboService.getComboById(id));
3333
}
3434

@@ -40,21 +40,21 @@ public ResponseEntity<ProductComboResponse> create(@RequestBody CreateProductCom
4040

4141
// Cập nhật thông tin của một combo hiện có
4242
@PutMapping("/{id}")
43-
public ResponseEntity<ProductComboResponse> update(@PathVariable Integer id,
43+
public ResponseEntity<ProductComboResponse> update(@PathVariable("id") Integer id,
4444
@RequestBody CreateProductComboRequest request) {
4545
return ResponseEntity.ok(productComboService.updateCombo(id, request));
4646
}
4747

4848
// Bật/Tắt trạng thái hoạt động (mở bán/ngừng bán) của combo
4949
@PutMapping("/{id}/toggle-status")
50-
public ResponseEntity<String> toggleStatus(@PathVariable Integer id) {
50+
public ResponseEntity<String> toggleStatus(@PathVariable("id") Integer id) {
5151
productComboService.toggleStatus(id);
5252
return ResponseEntity.ok("Đã thay đổi trạng thái combo");
5353
}
5454

5555
// Xóa một combo theo ID
5656
@DeleteMapping("/{id}")
57-
public ResponseEntity<String> delete(@PathVariable Integer id) {
57+
public ResponseEntity<String> delete(@PathVariable("id") Integer id) {
5858
productComboService.deleteCombo(id);
5959
return ResponseEntity.ok("Đã xóa combo thành công");
6060
}

0 commit comments

Comments
 (0)