This commit is contained in:
2026-04-27 22:36:44 +09:30
parent 86b6d6c0b9
commit 2d03f3a7f4
58 changed files with 4376 additions and 62 deletions
@@ -0,0 +1,86 @@
package net.moustos.mtgsearch.service;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import net.moustos.mtgsearch.model.User;
import net.moustos.mtgsearch.repository.UserRepository;
import net.moustos.mtgsearch.security.JwtTokenProvider;
import java.util.Optional;
/**
* Authentication service for user login and registration
*/
@Service
@Transactional
public class AuthService {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final JwtTokenProvider jwtTokenProvider;
public AuthService(UserRepository userRepository, PasswordEncoder passwordEncoder, JwtTokenProvider jwtTokenProvider) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
this.jwtTokenProvider = jwtTokenProvider;
}
/**
* Register a new user
*/
public User register(String username, String email, String password) {
if (userRepository.existsByUsername(username)) {
throw new IllegalArgumentException("Username already exists");
}
if (userRepository.existsByEmail(email)) {
throw new IllegalArgumentException("Email already exists");
}
User user = User.builder()
.username(username)
.email(email)
.password(passwordEncoder.encode(password))
.active(true)
.build();
return userRepository.save(user);
}
/**
* Authenticate user and return JWT token
*/
public String authenticate(String username, String password) {
Optional<User> userOpt = userRepository.findByUsername(username);
if (userOpt.isEmpty()) {
throw new IllegalArgumentException("Invalid username or password");
}
User user = userOpt.get();
if (!user.getActive()) {
throw new IllegalArgumentException("User account is inactive");
}
if (!passwordEncoder.matches(password, user.getPassword())) {
throw new IllegalArgumentException("Invalid username or password");
}
return jwtTokenProvider.generateToken(user.getId(), user.getUsername(), user.getEmail());
}
/**
* Get user by ID
*/
@Transactional(readOnly = true)
public Optional<User> getUserById(Long userId) {
return userRepository.findById(userId);
}
/**
* Get user by username
*/
@Transactional(readOnly = true)
public Optional<User> getUserByUsername(String username) {
return userRepository.findByUsername(username);
}
}