From 6dddff1ef08b195f18e1671e0b70861d2c40d8af Mon Sep 17 00:00:00 2001 From: larama-C Date: Mon, 15 Dec 2025 11:32:54 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=9A=A9=20?= =?UTF-8?q?BaseInitData=20=EA=B5=AC=ED=98=84=20(=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=9C=A0=EC=A0=80,=20=EC=96=B4=EB=93=9C=EB=AF=BC?= =?UTF-8?q?=20=EC=9C=A0=EC=A0=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/users/entity/User.java | 4 ++ .../global/initData/BaseInitData.java | 61 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/main/java/com/back/web7_9_codecrete_be/global/initData/BaseInitData.java 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); + } +}