package com.talentcard.server.business.admin;
|
|
import java.util.Map;
|
|
import com.talentcard.server.business.PageResult;
|
import com.talentcard.server.business.admin.auth.AdminAuthInterceptor;
|
import com.talentcard.server.common.ApiResponse;
|
import jakarta.validation.Valid;
|
import org.springframework.http.HttpStatus;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.PatchMapping;
|
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.DeleteMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.ResponseStatus;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import jakarta.servlet.http.HttpServletRequest;
|
|
@RestController
|
@RequestMapping("/api/admin/business")
|
public class AdminBusinessController {
|
|
private final AdminBusinessService adminBusinessService;
|
|
public AdminBusinessController(AdminBusinessService adminBusinessService) {
|
this.adminBusinessService = adminBusinessService;
|
}
|
|
@GetMapping("/dashboard")
|
public ApiResponse<Map<String, Object>> dashboard() {
|
return ApiResponse.success(adminBusinessService.dashboard());
|
}
|
|
@GetMapping("/pending-notices")
|
public ApiResponse<java.util.List<Map<String, Object>>> pendingNotices() {
|
return ApiResponse.success(adminBusinessService.pendingNotices());
|
}
|
|
@GetMapping("/news")
|
public ApiResponse<PageResult<Map<String, Object>>> news(
|
@RequestParam(required = false) String title,
|
@RequestParam(required = false) String source,
|
@RequestParam(required = false) Integer status,
|
@RequestParam(required = false) String publishStart,
|
@RequestParam(required = false) String publishEnd,
|
@RequestParam(defaultValue = "1") int page,
|
@RequestParam(defaultValue = "10") int size
|
) {
|
return ApiResponse.success(adminBusinessService.news(title, source, status, publishStart, publishEnd, page, size));
|
}
|
|
@GetMapping("/news/{id}")
|
public ApiResponse<Map<String, Object>> newsDetail(@PathVariable Long id) {
|
return ApiResponse.success(adminBusinessService.newsDetail(id));
|
}
|
|
@PostMapping("/news")
|
@ResponseStatus(HttpStatus.CREATED)
|
public ApiResponse<Map<String, Object>> createNews(@Valid @RequestBody NewsArticleRequest request, HttpServletRequest servletRequest) {
|
String operatorName = String.valueOf(servletRequest.getAttribute(AdminAuthInterceptor.OPERATOR_NAME_ATTRIBUTE));
|
return ApiResponse.success(adminBusinessService.createNews(request, operatorName));
|
}
|
|
@PutMapping("/news/{id}")
|
public ApiResponse<Map<String, Object>> updateNews(
|
@PathVariable Long id,
|
@Valid @RequestBody NewsArticleRequest request
|
) {
|
return ApiResponse.success(adminBusinessService.updateNews(id, request));
|
}
|
|
@PatchMapping("/news/{id}/status")
|
public ApiResponse<Map<String, Object>> updateNewsStatus(
|
@PathVariable Long id,
|
@Valid @RequestBody StatusUpdateRequest request
|
) {
|
return ApiResponse.success(adminBusinessService.updateNewsStatus(id, request.status()));
|
}
|
|
@GetMapping("/policies")
|
public ApiResponse<PageResult<Map<String, Object>>> policies(
|
@RequestParam(required = false) String title,
|
@RequestParam(required = false) String author,
|
@RequestParam(required = false) Integer status,
|
@RequestParam(required = false) String publishStart,
|
@RequestParam(required = false) String publishEnd,
|
@RequestParam(defaultValue = "1") int page,
|
@RequestParam(defaultValue = "10") int size
|
) {
|
return ApiResponse.success(adminBusinessService.policies(title, author, status, publishStart, publishEnd, page, size));
|
}
|
|
@GetMapping("/policies/{id}")
|
public ApiResponse<Map<String, Object>> policyDetail(@PathVariable Long id) {
|
return ApiResponse.success(adminBusinessService.policyDetail(id));
|
}
|
|
@PostMapping("/policies")
|
@ResponseStatus(HttpStatus.CREATED)
|
public ApiResponse<Map<String, Object>> createPolicy(@Valid @RequestBody PolicyArticleRequest request, HttpServletRequest servletRequest) {
|
String operatorName = String.valueOf(servletRequest.getAttribute(AdminAuthInterceptor.OPERATOR_NAME_ATTRIBUTE));
|
Long operatorId = (Long) servletRequest.getAttribute(AdminAuthInterceptor.OPERATOR_ID_ATTRIBUTE);
|
return ApiResponse.success(adminBusinessService.createPolicy(request, operatorId, operatorName));
|
}
|
|
@PutMapping("/policies/{id}")
|
public ApiResponse<Map<String, Object>> updatePolicy(@PathVariable Long id, @Valid @RequestBody PolicyArticleRequest request, HttpServletRequest servletRequest) {
|
Long operatorId = (Long) servletRequest.getAttribute(AdminAuthInterceptor.OPERATOR_ID_ATTRIBUTE);
|
return ApiResponse.success(adminBusinessService.updatePolicy(id, request, operatorId));
|
}
|
|
@PatchMapping("/policies/{id}/status")
|
public ApiResponse<Map<String, Object>> updatePolicyStatus(@PathVariable Long id, @Valid @RequestBody StatusUpdateRequest request) {
|
return ApiResponse.success(adminBusinessService.updatePolicyStatus(id, request.status()));
|
}
|
|
@GetMapping("/merchants")
|
public ApiResponse<PageResult<Map<String, Object>>> merchants(
|
@RequestParam(required = false) String keyword,
|
@RequestParam(required = false) String contactMobile,
|
@RequestParam(required = false) String type,
|
@RequestParam(required = false) Integer status,
|
@RequestParam(required = false) Integer recommend,
|
@RequestParam(required = false) String createdStart,
|
@RequestParam(required = false) String createdEnd,
|
@RequestParam(defaultValue = "1") int page,
|
@RequestParam(defaultValue = "10") int size
|
) {
|
return ApiResponse.success(adminBusinessService.merchants(
|
keyword,
|
contactMobile,
|
type,
|
status,
|
recommend,
|
createdStart,
|
createdEnd,
|
page,
|
size));
|
}
|
|
@GetMapping("/merchants/{id}")
|
public ApiResponse<Map<String, Object>> merchant(@PathVariable Long id) {
|
return ApiResponse.success(adminBusinessService.merchant(id));
|
}
|
|
@GetMapping("/merchants/login-account-available")
|
public ApiResponse<Map<String, Object>> merchantLoginAccountAvailable(
|
@RequestParam String account,
|
@RequestParam(required = false) Long merchantId) {
|
return ApiResponse.success(adminBusinessService.merchantLoginAccountAvailable(account, merchantId));
|
}
|
|
@PostMapping("/merchants")
|
@ResponseStatus(HttpStatus.CREATED)
|
public ApiResponse<Map<String, Object>> createMerchant(@Valid @RequestBody MerchantCreateRequest request) {
|
return ApiResponse.success(adminBusinessService.createMerchant(request));
|
}
|
|
@PutMapping("/merchants/{id}")
|
public ApiResponse<Map<String, Object>> updateMerchant(
|
@PathVariable Long id,
|
@Valid @RequestBody MerchantUpdateRequest request
|
) {
|
return ApiResponse.success(adminBusinessService.updateMerchant(id, request));
|
}
|
|
@PatchMapping("/merchants/{id}/status")
|
public ApiResponse<Map<String, Object>> updateMerchantStatus(
|
@PathVariable Long id,
|
@Valid @RequestBody StatusUpdateRequest request
|
) {
|
return ApiResponse.success(adminBusinessService.updateMerchantStatus(id, request.status()));
|
}
|
|
@PatchMapping("/merchants/{id}/recommend")
|
public ApiResponse<Map<String, Object>> updateMerchantRecommend(
|
@PathVariable Long id,
|
@Valid @RequestBody RecommendUpdateRequest request
|
) {
|
return ApiResponse.success(adminBusinessService.updateMerchantRecommend(id, request.recommend()));
|
}
|
|
@PostMapping("/benefits")
|
@ResponseStatus(HttpStatus.CREATED)
|
public ApiResponse<Map<String, Object>> createBenefit(@Valid @RequestBody BenefitCreateRequest request) {
|
return ApiResponse.success(adminBusinessService.createBenefit(request));
|
}
|
|
@GetMapping("/service-hero-images")
|
public ApiResponse<Map<String, Object>> serviceHeroImages() {
|
return ApiResponse.success(adminBusinessService.serviceHeroImages());
|
}
|
|
@PutMapping("/service-hero-images")
|
public ApiResponse<Map<String, Object>> saveServiceHeroImage(@Valid @RequestBody ServiceHeroImageRequest request) {
|
return ApiResponse.success(adminBusinessService.saveServiceHeroImage(request.type(), request.imageUrl()));
|
}
|
|
@GetMapping("/products")
|
public ApiResponse<PageResult<Map<String, Object>>> products(
|
@RequestParam(required = false) Long merchantId,
|
@RequestParam(required = false) String merchantName,
|
@RequestParam(required = false) String contactMobile,
|
@RequestParam(required = false) String keyword,
|
@RequestParam(required = false) String type,
|
@RequestParam(required = false) Integer status,
|
@RequestParam(required = false) String createdStart,
|
@RequestParam(required = false) String createdEnd,
|
@RequestParam(defaultValue = "1") int page,
|
@RequestParam(defaultValue = "10") int size
|
) {
|
return ApiResponse.success(adminBusinessService.products(
|
merchantId,
|
merchantName,
|
contactMobile,
|
keyword,
|
type,
|
status,
|
createdStart,
|
createdEnd,
|
page,
|
size));
|
}
|
|
@GetMapping("/merchants/{id}/products")
|
public ApiResponse<PageResult<Map<String, Object>>> merchantProducts(
|
@PathVariable Long id,
|
@RequestParam(required = false) String keyword,
|
@RequestParam(required = false) Integer status,
|
@RequestParam(required = false) String createdStart,
|
@RequestParam(required = false) String createdEnd,
|
@RequestParam(defaultValue = "1") int page,
|
@RequestParam(defaultValue = "10") int size
|
) {
|
return ApiResponse.success(adminBusinessService.merchantProducts(id, keyword, status, createdStart, createdEnd, page, size));
|
}
|
|
@GetMapping("/products/{id}")
|
public ApiResponse<Map<String, Object>> product(@PathVariable Long id) {
|
return ApiResponse.success(adminBusinessService.productAuditRecord(id));
|
}
|
|
@PostMapping("/products")
|
@ResponseStatus(HttpStatus.CREATED)
|
public ApiResponse<Map<String, Object>> createProduct(@Valid @RequestBody ProductCreateRequest request) {
|
return ApiResponse.success(adminBusinessService.createProduct(request));
|
}
|
|
@PutMapping("/products/{id}")
|
public ApiResponse<Map<String, Object>> updateProduct(
|
@PathVariable Long id,
|
@Valid @RequestBody ProductUpdateRequest request
|
) {
|
return ApiResponse.success(adminBusinessService.updateProduct(id, request));
|
}
|
|
@PatchMapping("/products/{id}/status")
|
public ApiResponse<Map<String, Object>> updateProductStatus(
|
@PathVariable Long id,
|
@Valid @RequestBody StatusUpdateRequest request
|
) {
|
return ApiResponse.success(adminBusinessService.updateProductStatus(id, request.status()));
|
}
|
|
@DeleteMapping("/products/{id}")
|
public ApiResponse<Map<String, Object>> deleteProduct(@PathVariable Long id) {
|
return ApiResponse.success(adminBusinessService.deleteProduct(id));
|
}
|
|
@PatchMapping("/products/{id}/audit")
|
public ApiResponse<Map<String, Object>> auditProduct(
|
@PathVariable Long id,
|
@Valid @RequestBody ProductAuditRequest request
|
) {
|
return ApiResponse.success(adminBusinessService.auditProductAuditRecord(id, request));
|
}
|
|
@GetMapping("/coupons")
|
public ApiResponse<PageResult<Map<String, Object>>> coupons(
|
@RequestParam(required = false) Long merchantId,
|
@RequestParam(required = false) String keyword,
|
@RequestParam(required = false) Integer status,
|
@RequestParam(required = false) String createdStart,
|
@RequestParam(required = false) String createdEnd,
|
@RequestParam(defaultValue = "1") int page,
|
@RequestParam(defaultValue = "10") int size
|
) {
|
return ApiResponse.success(adminBusinessService.coupons(
|
merchantId,
|
keyword,
|
status,
|
createdStart,
|
createdEnd,
|
page,
|
size));
|
}
|
|
@GetMapping("/coupons/{id}")
|
public ApiResponse<Map<String, Object>> coupon(@PathVariable Long id) {
|
return ApiResponse.success(adminBusinessService.coupon(id));
|
}
|
|
@PostMapping("/coupons")
|
@ResponseStatus(HttpStatus.CREATED)
|
public ApiResponse<Map<String, Object>> createCoupon(@Valid @RequestBody CouponCreateRequest request) {
|
return ApiResponse.success(adminBusinessService.createCoupon(request));
|
}
|
|
@PutMapping("/coupons/{id}")
|
public ApiResponse<Map<String, Object>> updateCoupon(
|
@PathVariable Long id,
|
@Valid @RequestBody CouponUpdateRequest request
|
) {
|
return ApiResponse.success(adminBusinessService.updateCoupon(id, request));
|
}
|
|
@PatchMapping("/coupons/{id}/status")
|
public ApiResponse<Map<String, Object>> updateCouponStatus(
|
@PathVariable Long id,
|
@Valid @RequestBody StatusUpdateRequest request
|
) {
|
return ApiResponse.success(adminBusinessService.updateCouponStatus(id, request.status()));
|
}
|
|
@DeleteMapping("/coupons/{id}")
|
public ApiResponse<Map<String, Object>> deleteCoupon(@PathVariable Long id) {
|
return ApiResponse.success(adminBusinessService.deleteCoupon(id));
|
}
|
}
|