package com.tailbet.controller; import com.tailbet.model.dto.LoginDTO; import com.tailbet.model.dto.PageParam; import com.tailbet.model.dto.PointsFlowQueryDTO; import com.tailbet.model.dto.RegisterDTO; import com.tailbet.model.dto.UpdatePasswordDTO; import com.tailbet.model.dto.UpdateUserDTO; import com.tailbet.model.entity.PointsFlow; import com.tailbet.model.entity.RedPacket; import com.tailbet.model.entity.RedPacketRecv; import com.tailbet.model.vo.LoginUserVo; import com.tailbet.model.vo.LoginVo; import com.tailbet.model.vo.R; import com.tailbet.model.vo.UserContext; import com.tailbet.openim.OpenIMApiClient; import com.tailbet.service.IPointsService; import com.tailbet.service.IRedPacketService; import com.tailbet.service.IUserService; import com.tailbet.util.JwtUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; /** * 用户Controller */ @RestController @RequestMapping("/api/user") @RequiredArgsConstructor public class UserController { private final IUserService userService; private final JwtUtil jwtUtil; private final OpenIMApiClient openIMApiClient; private final IPointsService pointsService; private final IRedPacketService redPacketService; /** * 注册 */ @PostMapping("/register") public R register(@RequestBody @Validated RegisterDTO dto) { userService.register(dto.getUsername(), dto.getPassword()); return R.ok(); } /** * 登录 */ @PostMapping("/login") public R login(@RequestBody @Validated LoginDTO dto) { Long userId = userService.login(dto.getUsername(), dto.getPassword()); String token = jwtUtil.generateToken(userId, dto.getUsername()); String openIMToken = openIMApiClient.getUserToken(String.valueOf(userId), 2); // platformID 2=Android LoginVo vo = new LoginVo(); vo.setToken(token); vo.setOpenIMToken(openIMToken); return R.ok("登录成功", vo); } /** * 获取当前用户信息 */ @GetMapping("/info") public R getInfo() { LoginUserVo user = UserContext.getUser(); return R.ok(user); } /** * 更新用户信息 */ @PutMapping("/update") public R update(@RequestBody UpdateUserDTO dto) { Long userId = UserContext.getUserId(); userService.updateUserInfo(userId, dto); return R.ok(); } /** * 修改密码 */ @PutMapping("/password") public R changePassword(@RequestBody @Validated UpdatePasswordDTO dto) { Long userId = UserContext.getUserId(); userService.changePassword(userId, dto.getOldPassword(), dto.getNewPassword()); return R.ok(); } /** * 我的积分流水分页 */ @PostMapping("/points/flow") public R> pointsFlow(@RequestBody PointsFlowQueryDTO query) { Long userId = UserContext.getUserId(); var page = pointsService.getFlowPage(userId, query.getType(), query.getPageNum(), query.getPageSize()); return R.ok(page); } /** * 已发红包分页 */ @PostMapping("/rp/sent") public R> sentRp(@RequestBody PageParam query) { Long userId = UserContext.getUserId(); var page = redPacketService.getRecords(userId, query.getPageNum(), query.getPageSize()); return R.ok(page); } /** * 已收红包分页 */ @PostMapping("/rp/received") public R> receivedRp(@RequestBody PageParam query) { Long userId = UserContext.getUserId(); var page = redPacketService.getReceivedRecords(userId, query.getPageNum(), query.getPageSize()); return R.ok(page); } /** * 退出登录 */ @PostMapping("/logout") public R logout() { // 可以在这里清理Redis中的token return R.ok(); } }