text: package cc.mrbird.febs.auth.controller;
  
  import cc.mrbird.febs.auth.entity.OauthClientDetails;
  import cc.mrbird.febs.auth.service.OauthClientDetailsService;
  import cc.mrbird.febs.common.core.entity.FebsResponse;
  import cc.mrbird.febs.common.core.entity.QueryRequest;
  import cc.mrbird.febs.common.core.exception.FebsException;
  import cc.mrbird.febs.common.core.utils.FebsUtil;
  import lombok.RequiredArgsConstructor;
  import lombok.extern.slf4j.Slf4j;
  import org.apache.commons.lang3.StringUtils;
  import org.springframework.security.access.prepost.PreAuthorize;
  import org.springframework.validation.annotation.Validated;
  import org.springframework.web.bind.annotation.*;
  
  import javax.validation.Valid;
  import javax.validation.constraints.NotBlank;
  import java.util.Map;
  
  /**
   * @author Yuuki
   */
  @Slf4j
  @Validated
  @RestController
  @RequiredArgsConstructor
  @RequestMapping("client")
  public class OauthClientDetailsController {
  
      private final OauthClientDetailsService oauthClientDetailsService;
  
      @GetMapping("check/{clientId}")
      public boolean checkUserName(@NotBlank(message = "{required}") @PathVariable String clientId) {
          OauthClientDetails client = this.oauthClientDetailsService.findById(clientId);
          return client == null;
      }
  
      @GetMapping("secret/{clientId}")
      @PreAuthorize("hasAuthority('client:decrypt')")
      public FebsResponse getOriginClientSecret(@NotBlank(message = "{required}") @PathVariable String clientId) {
          OauthClientDetails client = this.oauthClientDetailsService.findById(clientId);
          String origin = client != null ? client.getOriginSecret() : StringUtils.EMPTY;
          return new FebsResponse().data(origin);
      }
  
      @GetMapping
      @PreAuthorize("hasAuthority('client:view')")
      public FebsResponse oauthCliendetailsList(QueryRequest request, OauthClientDetails oAuthClientDetails) {
          Map<String, Object> dataTable = FebsUtil.getDataTable(this.oauthClientDetailsService.findOauthClientDetails(request, oAuthClientDetails));
          return new FebsResponse().data(dataTable);
      }
  
  
      @PostMapping
      @PreAuthorize("hasAuthority('client:add')")
      public void addOauthCliendetails(@Valid OauthClientDetails oAuthClientDetails) throws FebsException {
          try {
              this.oauthClientDetailsService.createOauthClientDetails(oAuthClientDetails);
          } catch (Exception e) {
              String message = "新增客户端失败";
              log.error(message, e);
              throw new FebsException(message);
          }
      }
  
      @DeleteMapping
      @PreAuthorize("hasAuthority('client:delete')")
      public void deleteOauthCliendetails(@NotBlank(message = "{required}") String clientIds) throws FebsException {
          try {
              this.oauthClientDetailsService.deleteOauthClientDetails(clientIds);
          } catch (Exception e) {
              String message = "删除客户端失败";
              log.error(message, e);
              throw new FebsException(message);
          }
      }
  
      @PutMapping
      @PreAuthorize("hasAuthority('client:update')")
      public void updateOauthCliendetails(@Valid OauthClientDetails oAuthClientDetails) throws FebsException {
          try {
              this.oauthClientDetailsService.updateOauthClientDetails(oAuthClientDetails);
          } catch (Exception e) {
              String message = "修改客户端失败";
              log.error(message, e);
              throw new FebsException(message);
          }
      }
  }
  