feat: 基础修改

This commit is contained in:
2026-06-15 17:32:32 +08:00
parent 578f2987e5
commit 567bee3e8f
16 changed files with 384 additions and 7 deletions

View File

@@ -1,14 +1,82 @@
package com.webgame.webgamebackend.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.webgame.webgamebackend.common.dto.account.LoginRequest;
import com.webgame.webgamebackend.common.dto.account.LoginResponse;
import com.webgame.webgamebackend.common.dto.account.RegisterRequest;
import com.webgame.webgamebackend.common.exception.BusinessException;
import com.webgame.webgamebackend.common.exception.ErrorCode;
import com.webgame.webgamebackend.entities.AccountEntity;
import com.webgame.webgamebackend.entities.UserEntity;
import com.webgame.webgamebackend.repository.AccountRepository;
import com.webgame.webgamebackend.repository.UserRepository;
import com.webgame.webgamebackend.service.AccountService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.concurrent.ThreadLocalRandom;
/**
* 账号服务实现
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class AccountServiceImpl implements AccountService {
private final AccountRepository accountRepository;
private final UserRepository userRepository;
private final BCryptPasswordEncoder passwordEncoder;
@Override
public String login() {
return "login";
public LoginResponse login(LoginRequest request) {
AccountEntity account = accountRepository.findByUsername(request.getUsername())
.orElseThrow(() -> new BusinessException(ErrorCode.BAD_CREDENTIALS));
if (!passwordEncoder.matches(request.getPassword(), account.getPassword())) {
throw new BusinessException(ErrorCode.BAD_CREDENTIALS);
}
// Sa-Token 登录
StpUtil.login(account.getId());
String token = StpUtil.getTokenValue();
log.info("用户登录成功: username={}", request.getUsername());
return new LoginResponse(token);
}
@Override
@Transactional
public LoginResponse register(RegisterRequest request) {
// 检查用户名是否已存在
if (accountRepository.existsByUsername(request.getUsername())) {
throw new BusinessException(ErrorCode.USERNAME_EXISTS);
}
// 创建账号
AccountEntity account = new AccountEntity();
account.setUsername(request.getUsername());
account.setPassword(passwordEncoder.encode(request.getPassword()));
accountRepository.save(account);
// 创建用户资料(默认值)
UserEntity user = new UserEntity();
user.setAccount(account);
user.setNickName("玩家" + generateRandomCode());
user.setSex(0);
user.setSignature("");
user.setAvatar("");
userRepository.save(user);
log.info("用户注册成功: username={}", request.getUsername());
// 注册后自动登录
StpUtil.login(account.getId());
String token = StpUtil.getTokenValue();
return new LoginResponse(token);
}
/**
* 生成6位随机数字用于默认昵称
*/
private String generateRandomCode() {
return String.valueOf(ThreadLocalRandom.current().nextInt(100000, 1000000));
}
}