package com.kidgrow.oauth2.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kidgrow.common.constant.CommonConstant;
import com.kidgrow.common.constant.SecurityConstants;
import com.kidgrow.common.lock.DistributedLock;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.ResultBody;
import com.kidgrow.common.service.impl.SuperServiceImpl;
import com.kidgrow.oauth2.mapper.ClientMapper;
import com.kidgrow.oauth2.model.Client;
import com.kidgrow.oauth2.service.IClientService;
import com.kidgrow.redis.template.RedisRepository;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
*
* @Description:
* @Project:
* @CreateDate: Created in 2020/2/20 09:19
* @Author: liuke
*/
@Slf4j
@Service
public class ClientServiceImpl extends SuperServiceImpl implements IClientService {
private final static String LOCK_KEY_CLIENTID = CommonConstant.LOCK_KEY_PREFIX+"clientId:";
@Autowired
private RedisRepository redisRepository;
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private DistributedLock lock;
@Override
public ResultBody saveClient(Client client) {
client.setClientSecret(passwordEncoder.encode(client.getClientSecretStr()));
String clientId = client.getClientId();
super.saveOrUpdateIdempotency(client, lock
, LOCK_KEY_CLIENTID+clientId
, new QueryWrapper().eq("client_id", clientId)
, clientId + "已存在");
return ResultBody.ok().msg("操作成功");
}
@Override
public PageResult listClent(Map params, boolean isPage) {
Page page;
if (isPage) {
page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
} else {
page = new Page<>(1, -1);
}
List list = baseMapper.findList(page, params);
page.setRecords(list);
return PageResult.builder().data(list).code(0).count(page.getTotal()).build();
}
@Override
public void delClient(long id) {
String clientId = baseMapper.selectById(id).getClientId();
baseMapper.deleteById(id);
redisRepository.del(clientRedisKey(clientId));
}
private String clientRedisKey(String clientId) {
return SecurityConstants.CACHE_CLIENT_KEY + ":" + clientId;
}
}