import com.tourbida.login.vo.TokenVo;
import com.yanzuoguang.util.vo.ResponseResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.MediaType;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 颜佐光
 *
 * @author huangzheng
 */
@RestController
@RequestMapping("/redis")
@Api(value = "测试redis", description = "测试redis")
public class TestController {

    @Resource
    private RedisTemplate redisTemplate;

    @Autowired
    private TestCache testCache;

    @GetMapping("/setUser")
    public String setUser() {
        SecurityProperties.User user = new SecurityProperties.User();
        user.setName("yanzuoguang");
        user.setPassword("123456");
        List<String> list = new ArrayList<>();
        list.add("小学");
        list.add("初中");
        list.add("高中");
        list.add("大学");
        user.setRoles(list);
        redisTemplate.opsForValue().set("test.userInfo", user);
        return "success";
    }

    @GetMapping("/getUser")
    public SecurityProperties.User getUser() {
        return (SecurityProperties.User) redisTemplate.opsForValue().get("test.userInfo");
    }


    /**
     * 测试加载
     *
     * @return
     */
    @PostMapping(value = "/load", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "测试加载", notes = "测试加载")
    public ResponseResult<TokenVo> load(@RequestBody TokenVo req) {
        return ResponseResult.result(testCache.load(req));
    }

    /**
     * 测试保存
     *
     * @return
     */
    @PostMapping(value = "/save", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "测试保存", notes = "测试保存")
    public ResponseResult<String> save(@RequestBody TokenVo req) {
        return ResponseResult.result(testCache.save(req));
    }

    /**
     * 测试删除
     *
     * @return
     */
    @PostMapping(value = "/remove", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "测试删除", notes = "测试删除")
    public ResponseResult<Integer> remove(@RequestBody TokenVo req) {
        return ResponseResult.result(testCache.remove(req));
    }


}