feat: 基础修改
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user