diff --git a/src/main/java/com/back/web7_9_codecrete_be/domain/users/entity/User.java b/src/main/java/com/back/web7_9_codecrete_be/domain/users/entity/User.java index 8e08a5e2..91ac3a93 100644 --- a/src/main/java/com/back/web7_9_codecrete_be/domain/users/entity/User.java +++ b/src/main/java/com/back/web7_9_codecrete_be/domain/users/entity/User.java @@ -96,5 +96,9 @@ public void softDelete() { this.status = UserStatus.DELETED; this.deletedDate = LocalDateTime.now(); } + + public void promoteToAdmin() { + this.role = Role.ADMIN; + } } diff --git a/src/main/java/com/back/web7_9_codecrete_be/global/initData/BaseInitData.java b/src/main/java/com/back/web7_9_codecrete_be/global/initData/BaseInitData.java new file mode 100644 index 00000000..e50cc942 --- /dev/null +++ b/src/main/java/com/back/web7_9_codecrete_be/global/initData/BaseInitData.java @@ -0,0 +1,61 @@ +package com.back.web7_9_codecrete_be.global.initData; + +import com.back.web7_9_codecrete_be.domain.users.entity.User; +import com.back.web7_9_codecrete_be.domain.users.repository.UserRepository; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Profile; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; + +@Profile("dev") +@Component +@RequiredArgsConstructor +public class BaseInitData { + + private final UserRepository userRepository; + private final PasswordEncoder passwordEncoder; + + @PostConstruct + public void init() { + createTestUser(); + createAdminUser(); + } + + private void createTestUser() { + if (userRepository.existsByEmail("test@test.com")) { + return; + } + + User testUser = User.builder() + .email("test@test.com") + .nickname("테스트유저") + .password(passwordEncoder.encode("test1234!")) + .birth(LocalDate.of(1999, 1, 1)) + .profileImage("https://example.com/profile.jpg") + .build(); + + userRepository.save(testUser); + } + + private void createAdminUser() { + if (userRepository.existsByEmail("admin@test.com")) { + return; + } + + User adminUser = User.builder() + .email("admin@test.com") + .nickname("어드민") + .password(passwordEncoder.encode("admin1234!")) + .birth(LocalDate.of(1990, 1, 1)) + .profileImage("https://example.com/profile.jpg") + .build(); + + // dev 전용 어드민 권한 부여 + adminUser.promoteToAdmin(); + + userRepository.save(adminUser); + } +}