package com.izouma.walkchina.web; import com.izouma.walkchina.dto.Result; import com.izouma.walkchina.domain.UserInfo; import com.izouma.walkchina.exception.ServiceException; import com.izouma.walkchina.repo.UserInfoRepository; import com.izouma.walkchina.service.UserInfoService; import com.izouma.walkchina.utils.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Example; import org.springframework.data.domain.PageRequest; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/user") public class UserInfoController { @Autowired private UserInfoRepository userInfoRepository; @Autowired private UserInfoService userInfoService; @GetMapping("/my") public Result my() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); UserInfo userInfo = (UserInfo) authentication.getPrincipal(); userInfo = userInfoRepository.findById(userInfo.getId()).orElseThrow(new ServiceException("无记录")); return Result.ok(userInfo); } @GetMapping("/get") public Result get(UserInfo probe) { UserInfo userInfo = userInfoRepository.findOne(Example.of(probe)).orElseThrow(new ServiceException("无结果")); return Result.ok(userInfo); } @GetMapping("/all") public Result all(UserInfo probe) { return Result.ok(userInfoRepository.findAll(Example.of(probe))); } @GetMapping("/page") public Result page(@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "20") int size, UserInfo probe) { return Result.ok(userInfoRepository.findAll(Example.of(probe), PageRequest.of(page, size))); } @PostMapping("/getMiniAppUserInfo") public Result getMiniAppUserInfo(String sessionKey, String rawData, String signature, String encryptedData, String iv) { UserInfo userInfo = userInfoService.getMiniAppUserInfo(sessionKey, rawData, signature, encryptedData, iv); if (userInfo != null) { return Result.ok(userInfo); } return Result.error("获取用户信息失败,请稍后再试"); } @GetMapping("/saveFriend") public Result saveFriend(@RequestParam("userId") Long userId) { try { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); UserInfo userInfo = (UserInfo) authentication.getPrincipal(); userInfoService.saveFriend(userId, userInfo.getId()); return Result.ok(); } catch (Exception ignored) { } return Result.error(); } @PostMapping("/updateLocation") public Result updateLocation(@RequestParam("latitude") Double latitude, @RequestParam("longitude") Double longitude) { try { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); UserInfo userInfo = (UserInfo) authentication.getPrincipal(); userInfoService.updateLocation(userInfo.getId(), latitude, longitude); return Result.ok(); } catch (Exception ignored) { } return Result.error(); } @PostMapping("/saveUser") public Result saveUser(UserInfo userInfo) { userInfoRepository.save(userInfo); return Result.ok(); } @GetMapping("/walkStats") public Result walkStats(Long userId) { if (userId == null) { UserInfo userInfo = SecurityUtils.getAuthenticatedUser(); userId = userInfo.getId(); } return Result.ok(userInfoService.getUserWalkStats(userId)); } }