Files
LinHelp/backend/src/main/java/com/linhelp/groupbuy/GroupBuyController.java
2026-07-14 16:04:51 +08:00

164 lines
7.9 KiB
Java

package com.linhelp.groupbuy;
import com.linhelp.common.api.ApiResponse;
import com.linhelp.common.api.PageResponse;
import com.linhelp.common.enums.GroupBuyOrderStatus;
import com.linhelp.common.security.AuthService;
import com.linhelp.common.security.CurrentUser;
import com.linhelp.common.security.RequireRole;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
@RestController
public class GroupBuyController {
private final GroupBuyService groupBuyService;
private final GroupBuyOrderService orderService;
private final AuthService authService;
public GroupBuyController(GroupBuyService groupBuyService,
GroupBuyOrderService orderService,
AuthService authService) {
this.groupBuyService = groupBuyService;
this.orderService = orderService;
this.authService = authService;
}
@GetMapping("/api/admin/group-buys")
@RequireRole({"PLATFORM_ADMIN", "COMMUNITY_ADMIN", "MERCHANT"})
public ApiResponse<List<GroupBuyResponse>> listAdmin() {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(groupBuyService.listAdmin(user.getCommunityId()));
}
@PostMapping("/api/admin/group-buys")
@RequireRole({"PLATFORM_ADMIN", "COMMUNITY_ADMIN", "MERCHANT"})
public ApiResponse<GroupBuyResponse> create(@Valid @RequestBody GroupBuyRequest request) {
CurrentUser user = authService.currentUser();
request.setTenantId(user.getTenantId());
request.setCommunityId(user.getCommunityId());
return ApiResponse.ok(groupBuyService.create(request));
}
@PutMapping("/api/admin/group-buys/{id}")
@RequireRole({"PLATFORM_ADMIN", "COMMUNITY_ADMIN", "MERCHANT"})
public ApiResponse<GroupBuyResponse> update(@PathVariable Long id, @Valid @RequestBody GroupBuyRequest request) {
CurrentUser user = authService.currentUser();
request.setTenantId(user.getTenantId());
request.setCommunityId(user.getCommunityId());
return ApiResponse.ok(groupBuyService.updateAdmin(user.getCommunityId(), id, request));
}
@PutMapping("/api/admin/group-buys/{id}/start")
@RequireRole({"PLATFORM_ADMIN", "COMMUNITY_ADMIN", "MERCHANT"})
public ApiResponse<GroupBuyResponse> start(@PathVariable Long id) {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(groupBuyService.startAdmin(user.getCommunityId(), id));
}
@PutMapping("/api/admin/group-buys/{id}/close")
@RequireRole({"PLATFORM_ADMIN", "COMMUNITY_ADMIN", "MERCHANT"})
public ApiResponse<GroupBuyResponse> close(@PathVariable Long id) {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(groupBuyService.closeAdmin(user.getCommunityId(), id));
}
@PutMapping("/api/admin/group-buys/{id}/complete")
@RequireRole({"PLATFORM_ADMIN", "COMMUNITY_ADMIN", "MERCHANT"})
public ApiResponse<GroupBuyResponse> completeGroupBuy(@PathVariable Long id) {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(groupBuyService.completeAdmin(user.getCommunityId(), id));
}
@GetMapping("/api/admin/group-buys/{id}/orders")
@RequireRole({"PLATFORM_ADMIN", "COMMUNITY_ADMIN", "MERCHANT"})
public ApiResponse<List<GroupBuyOrderResponse>> listOrders(@PathVariable Long id) {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(orderService.listByGroupBuyAdmin(user.getCommunityId(), id));
}
@GetMapping("/api/admin/group-buys/{id}/orders/page")
@RequireRole({"PLATFORM_ADMIN", "COMMUNITY_ADMIN", "MERCHANT"})
public ApiResponse<PageResponse<GroupBuyOrderResponse>> pageOrders(@PathVariable Long id,
@RequestParam(required = false) GroupBuyOrderStatus status,
@RequestParam(required = false) Integer pageNo,
@RequestParam(required = false) Integer pageSize) {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(orderService.listByGroupBuyAdminPage(user.getCommunityId(), id, status, pageNo, pageSize));
}
@GetMapping("/api/admin/group-buy-orders/page")
@RequireRole({"PLATFORM_ADMIN", "COMMUNITY_ADMIN", "MERCHANT"})
public ApiResponse<PageResponse<GroupBuyOrderResponse>> pageAllOrders(@RequestParam(required = false) GroupBuyOrderStatus status,
@RequestParam(required = false) Integer pageNo,
@RequestParam(required = false) Integer pageSize) {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(orderService.listAdminPage(user.getCommunityId(), status, pageNo, pageSize));
}
@PutMapping("/api/admin/group-buy-orders/{id}/confirm")
@RequireRole({"PLATFORM_ADMIN", "COMMUNITY_ADMIN", "MERCHANT"})
public ApiResponse<GroupBuyOrderResponse> confirmOrder(@PathVariable Long id) {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(orderService.confirmAdmin(user.getCommunityId(), id, user.getUserId()));
}
@PutMapping("/api/admin/group-buy-orders/{id}/ready")
@RequireRole({"PLATFORM_ADMIN", "COMMUNITY_ADMIN", "MERCHANT"})
public ApiResponse<GroupBuyOrderResponse> markOrderReady(@PathVariable Long id) {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(orderService.markReadyAdmin(user.getCommunityId(), id));
}
@GetMapping("/api/mini/group-buys")
public ApiResponse<List<GroupBuyResponse>> listMini() {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(groupBuyService.listMini(user.getCommunityId()));
}
@GetMapping("/api/mini/group-buys/{id}")
public ApiResponse<GroupBuyResponse> detail(@PathVariable Long id) {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(groupBuyService.detailMini(user.getCommunityId(), id));
}
@PostMapping("/api/mini/group-buy-orders")
public ApiResponse<GroupBuyOrderResponse> createOrder(@Valid @RequestBody GroupBuyOrderRequest request) {
CurrentUser user = authService.currentUser();
request.setTenantId(user.getTenantId());
request.setCommunityId(user.getCommunityId());
return ApiResponse.ok(orderService.create(user.getUserId(), request));
}
@GetMapping("/api/mini/group-buy-orders")
public ApiResponse<List<GroupBuyOrderResponse>> listMine() {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(orderService.listMine(user.getUserId()));
}
@GetMapping("/api/mini/group-buy-orders/{id}")
public ApiResponse<GroupBuyOrderResponse> orderDetail(@PathVariable Long id) {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(orderService.detailMine(user.getUserId(), id));
}
@PutMapping("/api/mini/group-buy-orders/{id}/cancel")
public ApiResponse<GroupBuyOrderResponse> cancel(@PathVariable Long id) {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(orderService.cancelMine(user.getUserId(), id));
}
@PutMapping("/api/mini/group-buy-orders/{id}/complete")
public ApiResponse<GroupBuyOrderResponse> completeOrder(@PathVariable Long id) {
CurrentUser user = authService.currentUser();
return ApiResponse.ok(orderService.completeMine(user.getUserId(), id));
}
}