goldenChat base source add

This commit is contained in:
aidev
2026-05-23 15:11:48 +09:00
commit a4ea7762b5
2081 changed files with 1155760 additions and 0 deletions
@@ -0,0 +1,68 @@
package com.goldenchart.service;
import com.goldenchart.auth.UserRole;
import com.goldenchart.dto.LoginResponse;
import com.goldenchart.entity.GcUser;
import com.goldenchart.repository.GcUserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.server.ResponseStatusException;
import java.util.Optional;
@Service
@RequiredArgsConstructor
public class AuthService {
private final GcUserRepository userRepo;
private final PasswordEncoder passwordEncoder;
@Transactional(readOnly = true)
public LoginResponse login(String username, String password) {
if (username == null || username.isBlank() || password == null || password.isBlank()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "아이디와 비밀번호를 입력하세요.");
}
GcUser user = userRepo.findByUsername(username.trim())
.orElseThrow(() -> new ResponseStatusException(HttpStatus.UNAUTHORIZED, "아이디 또는 비밀번호가 올바르지 않습니다."));
if (!Boolean.TRUE.equals(user.getEnabled())) {
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "비활성화된 계정입니다.");
}
if (!passwordEncoder.matches(password, user.getPasswordHash())) {
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "아이디 또는 비밀번호가 올바르지 않습니다.");
}
return toLoginResponse(user);
}
@Transactional(readOnly = true)
public Optional<LoginResponse> me(Long userId) {
if (userId == null) return Optional.empty();
return userRepo.findById(userId)
.filter(u -> Boolean.TRUE.equals(u.getEnabled()))
.map(this::toLoginResponse);
}
private LoginResponse toLoginResponse(GcUser user) {
return LoginResponse.builder()
.userId(user.getId())
.username(user.getUsername())
.displayName(user.getDisplayName() != null ? user.getDisplayName() : user.getUsername())
.role(user.getRole() != null ? user.getRole() : UserRole.USER.name())
.build();
}
/** 기본 관리자 계정 (admin / admin) — 없으면 생성 */
@Transactional
public void ensureDefaultAdmin() {
if (userRepo.findByUsername("admin").isPresent()) return;
userRepo.save(GcUser.builder()
.username("admin")
.passwordHash(passwordEncoder.encode("admin"))
.displayName("관리자")
.enabled(true)
.role(UserRole.ADMIN.name())
.build());
}
}