diff --git a/.forge/BAIS-SPRING-ANA-001-attempt-1.md b/.forge/BAIS-SPRING-ANA-001-attempt-1.md new file mode 100644 index 0000000..3c697f9 --- /dev/null +++ b/.forge/BAIS-SPRING-ANA-001-attempt-1.md @@ -0,0 +1,3 @@ +# BAIS-SPRING-ANA-001-attempt-1 + +Forge 이슈 작업 브랜치 `forge/BAIS-SPRING-ANA-001-attempt-1`. diff --git a/docs/business_rules.md b/docs/business_rules.md new file mode 100644 index 0000000..f2d91f8 --- /dev/null +++ b/docs/business_rules.md @@ -0,0 +1,21 @@ +# BAIS 업무 규칙 + +## 계정 관련 규칙 +1. 모든 계정은 고유한 ID를 가져야 한다. +2. 계정 생성 시 이메일 주소는 유효해야 한다. + +## 인증 관련 규칙 +1. 사용자 인증은 두 단계로 진행되어야 한다. +2. 비밀번호는 최소 8자 이상이어야 하며, 대문자, 소문자, 숫자, 특수문자를 포함해야 한다. + +## 권한 부여 관련 규칙 +1. 사용자 역할에 따라 접근 권한이 달라져야 한다. +2. 관리자 권한은 특정 사용자에게만 부여되어야 한다. + +## 카드 관련 규칙 +1. 모든 카드 정보는 암호화되어 저장되어야 한다. +2. 카드 유효기간은 현재 날짜 이후여야 한다. + +## 배치 관련 규칙 +1. 배치 작업은 주기적으로 실행되어야 하며, 실패 시 알림을 보내야 한다. +2. 배치 작업의 로그는 최소 30일간 보관해야 한다. \ No newline at end of file diff --git a/src/main/java/com/example/bais/InvariantRules.java b/src/main/java/com/example/bais/InvariantRules.java new file mode 100644 index 0000000..ab807d4 --- /dev/null +++ b/src/main/java/com/example/bais/InvariantRules.java @@ -0,0 +1,12 @@ +package com.example.bais; + +public class InvariantRules { + public static final String ACCOUNT_UNIQUE_ID = "모든 계정은 고유한 ID를 가져야 한다."; + public static final String ACCOUNT_EMAIL_VALID = "계정 생성 시 이메일 주소는 유효해야 한다."; + public static final String AUTHENTICATION_TWO_STEP = "사용자 인증은 두 단계로 진행되어야 한다."; + public static final String AUTHORIZATION_ROLE_BASED = "사용자 역할에 따라 접근 권한이 달라져야 한다."; + public static final String CARD_ENCRYPTION = "모든 카드 정보는 암호화되어 저장되어야 한다."; + public static final String BATCH_LOG_RETENTION = "배치 작업의 로그는 최소 30일간 보관해야 한다."; + + // 추가적인 불변식 메서드 및 로직을 여기에 추가할 수 있습니다. +} \ No newline at end of file diff --git a/src/test/java/com/example/bais/InvariantRulesTest.java b/src/test/java/com/example/bais/InvariantRulesTest.java new file mode 100644 index 0000000..06a8848 --- /dev/null +++ b/src/test/java/com/example/bais/InvariantRulesTest.java @@ -0,0 +1,36 @@ +package com.example.bais; + +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; + +public class InvariantRulesTest { + @Test + public void testAccountUniqueId() { + assertEquals("모든 계정은 고유한 ID를 가져야 한다.", InvariantRules.ACCOUNT_UNIQUE_ID); + } + + @Test + public void testAccountEmailValid() { + assertEquals("계정 생성 시 이메일 주소는 유효해야 한다.", InvariantRules.ACCOUNT_EMAIL_VALID); + } + + @Test + public void testAuthenticationTwoStep() { + assertEquals("사용자 인증은 두 단계로 진행되어야 한다.", InvariantRules.AUTHENTICATION_TWO_STEP); + } + + @Test + public void testAuthorizationRoleBased() { + assertEquals("사용자 역할에 따라 접근 권한이 달라져야 한다.", InvariantRules.AUTHORIZATION_ROLE_BASED); + } + + @Test + public void testCardEncryption() { + assertEquals("모든 카드 정보는 암호화되어 저장되어야 한다.", InvariantRules.CARD_ENCRYPTION); + } + + @Test + public void testBatchLogRetention() { + assertEquals("배치 작업의 로그는 최소 30일간 보관해야 한다.", InvariantRules.BATCH_LOG_RETENTION); + } +} \ No newline at end of file