package com.tcm.training.admin.user.controller; import com.tcm.training.admin.common.ApiResponse; import com.tcm.training.admin.common.PageResponse; import com.tcm.training.admin.user.dto.AccountCreateRequest; import com.tcm.training.admin.user.dto.AccountResetPasswordRequest; import com.tcm.training.admin.user.dto.AccountStatusRequest; import com.tcm.training.admin.user.dto.AccountUpdateRequest; import com.tcm.training.admin.user.service.AccountAppService; import com.tcm.training.admin.user.vo.AccountDetailVO; import com.tcm.training.admin.user.vo.AccountListItemVO; import com.tcm.training.admin.user.vo.AccountStatusVO; import com.tcm.training.admin.user.vo.RoleOptionVO; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; 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.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.util.List; @Validated @RestController @RequestMapping({"/api/v1", "/api"}) public class AccountController { private final AccountAppService accountAppService; public AccountController(AccountAppService accountAppService) { this.accountAppService = accountAppService; } @GetMapping("/accounts") public ApiResponse> page( @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "10") int pageSize, @RequestParam(required = false) String realName, @RequestParam(required = false) String phone, @RequestParam(required = false) Long roleId, @RequestParam(required = false) Integer status ) { return ApiResponse.ok(accountAppService.page(page, pageSize, realName, phone, roleId, status)); } @GetMapping("/accounts/{id}") public ApiResponse detail(@PathVariable("id") Long id) { return ApiResponse.ok(accountAppService.detail(id)); } @PostMapping("/accounts") public ApiResponse create(@Valid @RequestBody AccountCreateRequest req) { return ApiResponse.ok(accountAppService.create(req)); } @PutMapping("/accounts/{id}") public ApiResponse update( @PathVariable("id") Long id, @Valid @RequestBody AccountUpdateRequest req ) { return ApiResponse.ok(accountAppService.update(id, req)); } @PatchMapping("/accounts/{id}/status") public ApiResponse patchStatus( @PathVariable("id") Long id, @Valid @RequestBody AccountStatusRequest req ) { return ApiResponse.ok(accountAppService.patchStatus(id, req)); } @PostMapping("/accounts/{id}/reset-password") public ApiResponse resetPassword( @PathVariable("id") Long id, @Valid @RequestBody AccountResetPasswordRequest req ) { accountAppService.resetPassword(id, req); return ApiResponse.ok(null); } @DeleteMapping("/accounts/{id}") public ApiResponse delete(@PathVariable("id") Long id) { accountAppService.delete(id); return ApiResponse.ok(null); } @GetMapping("/roles/options") public ApiResponse> roleOptions() { return ApiResponse.ok(accountAppService.listRoleOptions()); } }