From 4055166150a454d7545061b68de74609c249a998 Mon Sep 17 00:00:00 2001 From: jonghun Date: Thu, 6 Jun 2024 15:30:50 +0900 Subject: [PATCH 01/20] =?UTF-8?q?#87=20build:=20uuid=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.gradle b/build.gradle index 7f4bbf4..a5bd91b 100644 --- a/build.gradle +++ b/build.gradle @@ -44,6 +44,9 @@ dependencies { runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.2' implementation 'io.jsonwebtoken:jjwt-api:0.11.2' + // uuid + implementation 'com.fasterxml.uuid:java-uuid-generator:4.0.1' + // jackson implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' implementation 'com.fasterxml.jackson.core:jackson-databind' From cefe694e6848129df711774c4dc0189c47a28048 Mon Sep 17 00:00:00 2001 From: jonghun Date: Thu, 6 Jun 2024 15:31:09 +0900 Subject: [PATCH 02/20] =?UTF-8?q?#87=20build:=20IdGenerator=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/idgenerator/IdGenerator.java | 322 +----------------- 1 file changed, 3 insertions(+), 319 deletions(-) diff --git a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGenerator.java b/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGenerator.java index fa74019..4f48eaa 100644 --- a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGenerator.java +++ b/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGenerator.java @@ -1,325 +1,9 @@ package com.seoultech.synergybe.domain.common.idgenerator; -import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.security.SecureRandom; -import java.time.Instant; -import java.util.HashMap; -import java.util.random.RandomGenerator; - -@Slf4j @Component -public class IdGenerator { - private static final int ASCII_LOWER_CASE_START = 97; - private static final int ASCII_LOWER_CASE_END = 122; - private static final int ASCII_UPPER_CASE_START = 65; - private static final int ASCII_UPPER_CASE_END = 90; - private static final int ASCII_DIGIT_START = 48; - private static final int ASCII_DIGIT_END = 57; - private static final int TIME_NUMBER_START = 0; - private static final int TIME_UPPER_CASE_START = 10; - private static final int TIME_LOWER_CASE_START = 36; - - - private final HashMap asciiMap = new HashMap<>(); - private final HashMap timeMap = new HashMap<>(); - - public IdGenerator() { - initializeAsciiMap(); - initializeTimeMap(); - } - - public String generateId(IdPrefix idPrefix) { - // 생성 시간 - Instant createAt = Instant.now(); - - // 난수 - String randomString = createRandomStr(4, false); - Integer pseudo = createPseudo(); - - // hash값 - String hash = createSecureHash(randomString, pseudo); - - // 시간 bit - String timeBit = calculateInstant(createAt); - - String generatedId = timeBit + "-" + idPrefix.getValue() + "-" + hash; // ex) generatedId : 244C85-user-XNc9rQ4i - return generatedId; - } - - public Integer createPseudo() { - RandomGenerator generator = RandomGenerator.of("L128X256MixRandom"); - Integer pseudo = generator.nextInt(10000); - return pseudo; - } - - /** - * Instant에서 년, 월, 일, 시, 분을 추출 - * 년도는 숫자 그대로 나타내며 - * 월, 일, 시, 분에 대해 timeMap에서 값을 가져와 String 생성 - * timeMap은 0-9 / A-Z / a-z 순으로 이루어진 hashMap - * 이렇게 함으로써 시간순으로 정렬이 가능하도록 됨 - * @param createAt - * @return - */ - private String calculateInstant(Instant createAt) { - - int year = createAt.atZone(java.time.ZoneOffset.UTC).getYear(); - int yearSecondDigit = year % 100; - int month = createAt.atZone(java.time.ZoneOffset.UTC).getMonthValue(); - int day = createAt.atZone(java.time.ZoneOffset.UTC).getDayOfMonth(); - int hour = createAt.atZone(java.time.ZoneOffset.UTC).getHour(); - int minute = createAt.atZone(java.time.ZoneOffset.UTC).getMinute(); - - String total = String.valueOf(yearSecondDigit); - - Character CMonth = timeMap.getOrDefault(month, '0'); - Character CDay = timeMap.getOrDefault(day, '0'); - Character CHour = timeMap.getOrDefault(hour, '0'); - Character CMinute = timeMap.getOrDefault(minute, '0'); - - total = total + CMonth + CDay + CHour + CMinute; - log.info(total); - - return total; - } - - /** - * 자릿수(length) 만큼 랜덤한 문자열을 대문자/소문자에 따라 반환 받습니다. - * - * @param length 자릿수 - * @param isUpperCase 대문자 여부 - * @return 랜덤한 문자열 - */ - public String createRandomStr(int length, boolean isUpperCase) { - String alphabet = "abcdefghijklmnopqrstuvwxyz"; - SecureRandom secureRandom = new SecureRandom(); - StringBuilder sb = new StringBuilder(length); - for (int i = 0; i < length; i++) { - sb.append(alphabet.charAt(secureRandom.nextInt(alphabet.length()))); - } - return isUpperCase ? sb.toString().toUpperCase() : sb.toString().toLowerCase(); - } - - /** - * createSecureHash 함수 동작 원리 - * ---- String -> 2진수 변환 시작 ---- - * 1. name, createAt을 입력 - * 2. 이름의 끝 4자리 + 날짜 끝 4자리를 사용 - * 3. 이름날짜이름날짜... 순으로 서로를 번갈아가며 1개의 조합을 만들고 String에 저장 - * 4. 해당 String을 char단위로 나누어 저장 - * 5. char들을 char -> 16진수 -> 10진수 -> 2진수 순으로 변환 - * 5. 변환한 값을 4bit 만큼 left shift 수행 - * 6. 왼쪽으로 shift하고 남은 자리인 4bit에 대해 입력받은 name의 길이정보를 2진수로 변환하여 넣음 - * 7. leftshit를 1bit만큼 다시 수행 - * 8. ---- 2진수로 변환 완료 ---- - * - * ---- 2진수 -> String 변환 시작 ---- - * 9. 2진수에 대해 숫자, 알파벳으로 변환하기 위해 ASCII 범위(0-127) 내에 속하는지 체크 (8bit는 256만큼 표현이 가능하므로) - * 10. 속하지 않는다면 1의 보수법으로 변환 - * 11. 숫자, 글자범위에 속하는지 체크 - * 12. 속하지 않는다면 hashMap으로 매핑 - * 13. 2진수 -> 10진수 -> String 순으로 변환 - * ---- String으로 변환 완료 ---- - * - * - * @param name - * @param pseudo - */ - private String createSecureHash(String name, Integer pseudo) { - StringBuffer hexSb = new StringBuffer(); - StringBuffer binarySb = new StringBuffer(); - - String lastFourChar = name.substring(name.length() - 4); - String SPseudo = String.format("%4s", pseudo).replace(' ', '0'); - - String mixedString = mixString(lastFourChar, SPseudo); -// log.info("mixedString : " + mixedString); - - int j = 0; - for (int i = 0; i < 8; i++) { - char c = mixedString.charAt(i); -// log.info("c : " + c); - String hex = Integer.toHexString(c); - hexSb.append(hex.charAt(0)); - hexSb.append(Character.isDigit(hex.charAt(1)) ? hex.charAt(1) : Character.toUpperCase(hex.charAt(1))); -// log.info("hex : " + hex); - -// log.info("StringBuffer : " + hexSb.charAt(j)); -// log.info("StringBuffer : " + hexSb.charAt(j + 1)); - j +=2; - } -// log.info("end StringBuffer-----------------------------------------"); - - for (int i = 0; i < 16; i++) { - int value; - char ch = hexSb.charAt(i); -// log.info("ch : " + ch); - if (Character.isDigit(ch)) { - value = Character.digit(ch, 16); - } else { - value = Character.digit(ch, 16); - } -// log.info("value : " + value); - String binary = String.format("%4s", Integer.toBinaryString(value)).replace(' ', '0'); -// log.info("final binary : " + binary); - binarySb.append(binary); - } -// log.info("end binary transfer -----------------------------------------"); - - int n = name.length(); - String nameLengthBinary = String.format("%4s", Integer.toBinaryString(n)).replace(' ', '0'); - binarySb.append(nameLengthBinary); - - String binarySbString = binarySb.substring(4); - String transferedBinary = binarySbString.substring(1) + "0"; -// log.info("leftShiftOneBit : " + transferedBinary); - - StringBuilder transferedToChar = new StringBuilder(); - - for (int i = 0; i < 8; i++) { - boolean isASCII; - // 토큰에서 2진수를 총 8bit만큼 추출 -> 16진수로 만들기 위해 - String binary = transferedBinary.substring(i, i + 8); - // 아스키 범위안에 속하는지 체크 - if (binary.charAt(0) == '0') { - isASCII = true; - } else { - isASCII = false; - } - - // 범위가 아니라면 1의 보수를 통해 아스키범위로 전환 - if (!isASCII) { - binary = onesComplement(binary); - } - -// log.info("isASCII : " + isASCII); -// log.info("binary ASCII : " + binary); - - int first = Integer.parseInt(binary.substring(0, 4), 2); - int last = Integer.parseInt(binary.substring(4, 8), 2); - int decimalNumber = (first * (int)Math.pow(2, 4)) + last; -// log.info("first : " + first); -// log.info("last : " + last); -// -// log.info("decimalNumber : " + decimalNumber); - - if (!isValidAscii(decimalNumber)) { - decimalNumber = asciiMap.get(decimalNumber); - } - - // 10진수를 알파벳으로 변환 - char asciiChar = (char) decimalNumber; - - // StringBuffer에 추가 - transferedToChar.append(asciiChar); - } - - return transferedToChar.toString(); - } - - private boolean isValidAscii(int decimalNumber) { - return (decimalNumber >= ASCII_DIGIT_START && decimalNumber <= ASCII_DIGIT_END) || - (decimalNumber >= ASCII_UPPER_CASE_START && decimalNumber <= ASCII_UPPER_CASE_END) || - (decimalNumber >= ASCII_LOWER_CASE_START && decimalNumber <= ASCII_LOWER_CASE_END); - } - - private String mixString(String lastFourChar, String lastFourDigits) { - StringBuilder result = new StringBuilder(); - for (int i = 0; i < 4; i++) { - result.append(lastFourChar.charAt(i)); - result.append(lastFourDigits.charAt(i)); - } - return result.toString(); - } - - // 1의 보수 계산 함수 - public String onesComplement(String binary) { - StringBuilder result = new StringBuilder(); - for (int i = 0; i < binary.length(); i++) { - char bit = binary.charAt(i); - if (bit == '0') { - result.append('1'); - } else if (bit == '1') { - result.append('0'); - } else { - // 예외 처리: 0 또는 1이 아닌 문자가 있을 경우 - throw new IllegalArgumentException("Invalid binary input"); - } - } - return result.toString(); - } - - private void initializeTimeMap() { - char v = '0'; - for (int i = TIME_NUMBER_START; i < 10; i++) { - timeMap.put(i, v); -// log.info("v : " + v); - v++; - - } - - v = 'A'; - - for (int i = TIME_UPPER_CASE_START; i < 36; i++) { - timeMap.put(i, v); -// log.info("v : " + v); - v++; - - } - - v = 'a'; - - for (int i = TIME_LOWER_CASE_START; i < 62; i++) { - timeMap.put(i, v); -// log.info("v : " + v); - v++; - } - } - - - private void initializeAsciiMap() { - // ASCII_DIGIT_START - 48 - int v = ASCII_DIGIT_START; - for (int i = 0; i < 10; i++) { - asciiMap.put(i, v); - v++; - } - - // ASCII_UPPER_CASE_START - 65 - v = ASCII_UPPER_CASE_START; - for (int i = 10; i < 36; i++) { - asciiMap.put(i, v); - v++; - } - - // ASCII_LOWER_CASE_START - 97 - v = ASCII_LOWER_CASE_START; - for (int i = 36; i < 48; i++) { - asciiMap.put(i, v); - v++; - } - - // 중간값 계산 - v = 109; - for (int i = 58; i < 65; i++) { - asciiMap.put(i, v); - v++; - } - - // 중간값 계산 - v = 115; - for (int i = 91; i < 97; i++) { - asciiMap.put(i, v); - v++; - } +public interface IdGenerator { + String generateId(IdPrefix idPrefix); - // ASCII_DIGIT_START - 48 - v = ASCII_DIGIT_START; - for (int i = 123; i < 128; i++) { - asciiMap.put(i, v); - v++; - } - } -} \ No newline at end of file +} From 4c4cc381cd711d335b663f8d5eff35d17bb24191 Mon Sep 17 00:00:00 2001 From: jonghun Date: Thu, 6 Jun 2024 15:31:54 +0900 Subject: [PATCH 03/20] =?UTF-8?q?#87=20feat:=20IdGenerator=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EA=B8=B0=20=EA=B5=AC=ED=98=84=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?-=20=EC=9D=B4=ED=9B=84=20=EC=B1=85=EC=9E=84=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../idgenerator/IdGeneratorRivkodeImpl.java | 325 ++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorRivkodeImpl.java diff --git a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorRivkodeImpl.java b/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorRivkodeImpl.java new file mode 100644 index 0000000..0b31f3f --- /dev/null +++ b/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorRivkodeImpl.java @@ -0,0 +1,325 @@ +package com.seoultech.synergybe.domain.common.idgenerator; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.security.SecureRandom; +import java.time.Instant; +import java.util.HashMap; +import java.util.random.RandomGenerator; + +@Slf4j +@Component +public class IdGeneratorRivkodeImpl implements IdGenerator { + private static final int ASCII_LOWER_CASE_START = 97; + private static final int ASCII_LOWER_CASE_END = 122; + private static final int ASCII_UPPER_CASE_START = 65; + private static final int ASCII_UPPER_CASE_END = 90; + private static final int ASCII_DIGIT_START = 48; + private static final int ASCII_DIGIT_END = 57; + private static final int TIME_NUMBER_START = 0; + private static final int TIME_UPPER_CASE_START = 10; + private static final int TIME_LOWER_CASE_START = 36; + + + private final HashMap asciiMap = new HashMap<>(); + private final HashMap timeMap = new HashMap<>(); + + public IdGeneratorRivkodeImpl() { + initializeAsciiMap(); + initializeTimeMap(); + } + + public String generateId(IdPrefix idPrefix) { + // 생성 시간 + Instant createAt = Instant.now(); + + // 난수 + String randomString = createRandomStr(4, false); + Integer pseudo = createPseudo(); + + // hash값 + String hash = createSecureHash(randomString, pseudo); + + // 시간 bit + String timeBit = calculateInstant(createAt); + + String generatedId = timeBit + "-" + idPrefix.getValue() + "-" + hash; // ex) generatedId : 244C85-user-XNc9rQ4i + return generatedId; + } + + public Integer createPseudo() { + RandomGenerator generator = RandomGenerator.of("L128X256MixRandom"); + Integer pseudo = generator.nextInt(10000); + return pseudo; + } + + /** + * Instant에서 년, 월, 일, 시, 분을 추출 + * 년도는 숫자 그대로 나타내며 + * 월, 일, 시, 분에 대해 timeMap에서 값을 가져와 String 생성 + * timeMap은 0-9 / A-Z / a-z 순으로 이루어진 hashMap + * 이렇게 함으로써 시간순으로 정렬이 가능하도록 됨 + * @param createAt + * @return + */ + private String calculateInstant(Instant createAt) { + + int year = createAt.atZone(java.time.ZoneOffset.UTC).getYear(); + int yearSecondDigit = year % 100; + int month = createAt.atZone(java.time.ZoneOffset.UTC).getMonthValue(); + int day = createAt.atZone(java.time.ZoneOffset.UTC).getDayOfMonth(); + int hour = createAt.atZone(java.time.ZoneOffset.UTC).getHour(); + int minute = createAt.atZone(java.time.ZoneOffset.UTC).getMinute(); + + String total = String.valueOf(yearSecondDigit); + + Character CMonth = timeMap.getOrDefault(month, '0'); + Character CDay = timeMap.getOrDefault(day, '0'); + Character CHour = timeMap.getOrDefault(hour, '0'); + Character CMinute = timeMap.getOrDefault(minute, '0'); + + total = total + CMonth + CDay + CHour + CMinute; + log.info(total); + + return total; + } + + /** + * 자릿수(length) 만큼 랜덤한 문자열을 대문자/소문자에 따라 반환 받습니다. + * + * @param length 자릿수 + * @param isUpperCase 대문자 여부 + * @return 랜덤한 문자열 + */ + public String createRandomStr(int length, boolean isUpperCase) { + String alphabet = "abcdefghijklmnopqrstuvwxyz"; + SecureRandom secureRandom = new SecureRandom(); + StringBuilder sb = new StringBuilder(length); + for (int i = 0; i < length; i++) { + sb.append(alphabet.charAt(secureRandom.nextInt(alphabet.length()))); + } + return isUpperCase ? sb.toString().toUpperCase() : sb.toString().toLowerCase(); + } + + /** + * createSecureHash 함수 동작 원리 + * ---- String -> 2진수 변환 시작 ---- + * 1. name, createAt을 입력 + * 2. 이름의 끝 4자리 + 날짜 끝 4자리를 사용 + * 3. 이름날짜이름날짜... 순으로 서로를 번갈아가며 1개의 조합을 만들고 String에 저장 + * 4. 해당 String을 char단위로 나누어 저장 + * 5. char들을 char -> 16진수 -> 10진수 -> 2진수 순으로 변환 + * 5. 변환한 값을 4bit 만큼 left shift 수행 + * 6. 왼쪽으로 shift하고 남은 자리인 4bit에 대해 입력받은 name의 길이정보를 2진수로 변환하여 넣음 + * 7. leftshit를 1bit만큼 다시 수행 + * 8. ---- 2진수로 변환 완료 ---- + * + * ---- 2진수 -> String 변환 시작 ---- + * 9. 2진수에 대해 숫자, 알파벳으로 변환하기 위해 ASCII 범위(0-127) 내에 속하는지 체크 (8bit는 256만큼 표현이 가능하므로) + * 10. 속하지 않는다면 1의 보수법으로 변환 + * 11. 숫자, 글자범위에 속하는지 체크 + * 12. 속하지 않는다면 hashMap으로 매핑 + * 13. 2진수 -> 10진수 -> String 순으로 변환 + * ---- String으로 변환 완료 ---- + * + * + * @param name + * @param pseudo + */ + private String createSecureHash(String name, Integer pseudo) { + StringBuffer hexSb = new StringBuffer(); + StringBuffer binarySb = new StringBuffer(); + + String lastFourChar = name.substring(name.length() - 4); + String SPseudo = String.format("%4s", pseudo).replace(' ', '0'); + + String mixedString = mixString(lastFourChar, SPseudo); +// log.info("mixedString : " + mixedString); + + int j = 0; + for (int i = 0; i < 8; i++) { + char c = mixedString.charAt(i); +// log.info("c : " + c); + String hex = Integer.toHexString(c); + hexSb.append(hex.charAt(0)); + hexSb.append(Character.isDigit(hex.charAt(1)) ? hex.charAt(1) : Character.toUpperCase(hex.charAt(1))); +// log.info("hex : " + hex); + +// log.info("StringBuffer : " + hexSb.charAt(j)); +// log.info("StringBuffer : " + hexSb.charAt(j + 1)); + j +=2; + } +// log.info("end StringBuffer-----------------------------------------"); + + for (int i = 0; i < 16; i++) { + int value; + char ch = hexSb.charAt(i); +// log.info("ch : " + ch); + if (Character.isDigit(ch)) { + value = Character.digit(ch, 16); + } else { + value = Character.digit(ch, 16); + } +// log.info("value : " + value); + String binary = String.format("%4s", Integer.toBinaryString(value)).replace(' ', '0'); +// log.info("final binary : " + binary); + binarySb.append(binary); + } +// log.info("end binary transfer -----------------------------------------"); + + int n = name.length(); + String nameLengthBinary = String.format("%4s", Integer.toBinaryString(n)).replace(' ', '0'); + binarySb.append(nameLengthBinary); + + String binarySbString = binarySb.substring(4); + String transferedBinary = binarySbString.substring(1) + "0"; +// log.info("leftShiftOneBit : " + transferedBinary); + + StringBuilder transferedToChar = new StringBuilder(); + + for (int i = 0; i < 8; i++) { + boolean isASCII; + // 토큰에서 2진수를 총 8bit만큼 추출 -> 16진수로 만들기 위해 + String binary = transferedBinary.substring(i, i + 8); + // 아스키 범위안에 속하는지 체크 + if (binary.charAt(0) == '0') { + isASCII = true; + } else { + isASCII = false; + } + + // 범위가 아니라면 1의 보수를 통해 아스키범위로 전환 + if (!isASCII) { + binary = onesComplement(binary); + } + +// log.info("isASCII : " + isASCII); +// log.info("binary ASCII : " + binary); + + int first = Integer.parseInt(binary.substring(0, 4), 2); + int last = Integer.parseInt(binary.substring(4, 8), 2); + int decimalNumber = (first * (int)Math.pow(2, 4)) + last; +// log.info("first : " + first); +// log.info("last : " + last); +// +// log.info("decimalNumber : " + decimalNumber); + + if (!isValidAscii(decimalNumber)) { + decimalNumber = asciiMap.get(decimalNumber); + } + + // 10진수를 알파벳으로 변환 + char asciiChar = (char) decimalNumber; + + // StringBuffer에 추가 + transferedToChar.append(asciiChar); + } + + return transferedToChar.toString(); + } + + private boolean isValidAscii(int decimalNumber) { + return (decimalNumber >= ASCII_DIGIT_START && decimalNumber <= ASCII_DIGIT_END) || + (decimalNumber >= ASCII_UPPER_CASE_START && decimalNumber <= ASCII_UPPER_CASE_END) || + (decimalNumber >= ASCII_LOWER_CASE_START && decimalNumber <= ASCII_LOWER_CASE_END); + } + + private String mixString(String lastFourChar, String lastFourDigits) { + StringBuilder result = new StringBuilder(); + for (int i = 0; i < 4; i++) { + result.append(lastFourChar.charAt(i)); + result.append(lastFourDigits.charAt(i)); + } + return result.toString(); + } + + // 1의 보수 계산 함수 + public String onesComplement(String binary) { + StringBuilder result = new StringBuilder(); + for (int i = 0; i < binary.length(); i++) { + char bit = binary.charAt(i); + if (bit == '0') { + result.append('1'); + } else if (bit == '1') { + result.append('0'); + } else { + // 예외 처리: 0 또는 1이 아닌 문자가 있을 경우 + throw new IllegalArgumentException("Invalid binary input"); + } + } + return result.toString(); + } + + private void initializeTimeMap() { + char v = '0'; + for (int i = TIME_NUMBER_START; i < 10; i++) { + timeMap.put(i, v); +// log.info("v : " + v); + v++; + + } + + v = 'A'; + + for (int i = TIME_UPPER_CASE_START; i < 36; i++) { + timeMap.put(i, v); +// log.info("v : " + v); + v++; + + } + + v = 'a'; + + for (int i = TIME_LOWER_CASE_START; i < 62; i++) { + timeMap.put(i, v); +// log.info("v : " + v); + v++; + } + } + + + private void initializeAsciiMap() { + // ASCII_DIGIT_START - 48 + int v = ASCII_DIGIT_START; + for (int i = 0; i < 10; i++) { + asciiMap.put(i, v); + v++; + } + + // ASCII_UPPER_CASE_START - 65 + v = ASCII_UPPER_CASE_START; + for (int i = 10; i < 36; i++) { + asciiMap.put(i, v); + v++; + } + + // ASCII_LOWER_CASE_START - 97 + v = ASCII_LOWER_CASE_START; + for (int i = 36; i < 48; i++) { + asciiMap.put(i, v); + v++; + } + + // 중간값 계산 + v = 109; + for (int i = 58; i < 65; i++) { + asciiMap.put(i, v); + v++; + } + + // 중간값 계산 + v = 115; + for (int i = 91; i < 97; i++) { + asciiMap.put(i, v); + v++; + } + + // ASCII_DIGIT_START - 48 + v = ASCII_DIGIT_START; + for (int i = 123; i < 128; i++) { + asciiMap.put(i, v); + v++; + } + } +} \ No newline at end of file From 6de3b7241c936312b8f54d4b14bde0d32b8ffd0b Mon Sep 17 00:00:00 2001 From: jonghun Date: Thu, 6 Jun 2024 15:32:18 +0900 Subject: [PATCH 04/20] =?UTF-8?q?#87=20feat:=20UUID=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/idgenerator/IdGeneratorUUID.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUID.java diff --git a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUID.java b/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUID.java new file mode 100644 index 0000000..b521615 --- /dev/null +++ b/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUID.java @@ -0,0 +1,18 @@ +package com.seoultech.synergybe.domain.common.idgenerator; + +import com.fasterxml.uuid.Generators; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +@Component +public class IdGeneratorUUID { + + public String generateId(IdPrefix idPrefix) { + UUID originUuid = Generators.timeBasedGenerator().generate(); + String[] uuidArr = originUuid.toString().split("-"); + String uuidStr = uuidArr[2] + uuidArr[1] + uuidArr[0] + uuidArr[3] + uuidArr[4]; + String uuid = idPrefix.getValue() + "-" + uuidStr; + return uuid; + } +} From 7dd96ab76684360ff9622646643c2786f2f7c01f Mon Sep 17 00:00:00 2001 From: jonghun Date: Thu, 6 Jun 2024 15:32:28 +0900 Subject: [PATCH 05/20] =?UTF-8?q?#87=20feat:=20UUID=20=EB=B3=80=ED=99=98?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/idgenerator/UUIDConverter.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/com/seoultech/synergybe/domain/common/idgenerator/UUIDConverter.java diff --git a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/UUIDConverter.java b/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/UUIDConverter.java new file mode 100644 index 0000000..d1dbfb2 --- /dev/null +++ b/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/UUIDConverter.java @@ -0,0 +1,17 @@ +package com.seoultech.synergybe.domain.common.idgenerator; + +import org.springframework.stereotype.Component; + +import java.nio.ByteBuffer; +import java.util.UUID; + +@Component +public class UUIDConverter { + // UUID를 BINARY(16)로 변환 + public static byte[] toBinaryUUID(UUID uuid) { + ByteBuffer bb = ByteBuffer.wrap(new byte[16]); + bb.putLong(uuid.getMostSignificantBits()); + bb.putLong(uuid.getLeastSignificantBits()); + return bb.array(); + } +} From 99c6a0953e42ec2c5e2eff065331a88ae137efc9 Mon Sep 17 00:00:00 2001 From: jonghun Date: Sat, 8 Jun 2024 20:12:26 +0900 Subject: [PATCH 06/20] =?UTF-8?q?#87=20test:=20Post=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../idgenerator/IdGeneratorUUIDTest.java | 33 +++++++++ .../domain/post/PostGeneratorTest.java | 67 +++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 src/test/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUIDTest.java create mode 100644 src/test/java/com/seoultech/synergybe/domain/post/PostGeneratorTest.java diff --git a/src/test/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUIDTest.java b/src/test/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUIDTest.java new file mode 100644 index 0000000..af76888 --- /dev/null +++ b/src/test/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUIDTest.java @@ -0,0 +1,33 @@ +package com.seoultech.synergybe.domain.common.idgenerator; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +public class IdGeneratorUUIDTest { + @Autowired + IdGenerator idGenerator; + + @Test + void generateUUID() { +// List list = new ArrayList<>(); + + for (int i = 0; i < 100; i++) { + String postId = idGenerator.generateId(IdPrefix.POST); + System.out.println("postId : " + i + " 번째 : "+ postId); +// list.add(postId); + } + + + +// assertThat() + } + + +} \ No newline at end of file diff --git a/src/test/java/com/seoultech/synergybe/domain/post/PostGeneratorTest.java b/src/test/java/com/seoultech/synergybe/domain/post/PostGeneratorTest.java new file mode 100644 index 0000000..788dd78 --- /dev/null +++ b/src/test/java/com/seoultech/synergybe/domain/post/PostGeneratorTest.java @@ -0,0 +1,67 @@ +package com.seoultech.synergybe.domain.post; + +import com.seoultech.synergybe.domain.common.CustomPasswordEncoder; +import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; +import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.post.implement.PostFactory; +import com.seoultech.synergybe.domain.post.implement.PostManager; +import com.seoultech.synergybe.domain.user.User; +import com.seoultech.synergybe.domain.user.repository.UserRepository; +import com.seoultech.synergybe.domain.user.service.UserService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +public class PostGeneratorTest { + private static final int TEST_COUNT = 10000; + + @Autowired + CustomPasswordEncoder passwordEncoder; + + @Autowired + IdGenerator idGenerator; + + @Autowired + PostManager postManager; + + @Autowired + UserRepository userRepository; + + + @Test + void generatePost() { + User user = User.builder() + .id("user-id") + .password("3e4r5t6y6y7u") + .passwordEncoder(passwordEncoder) + .email("email@email.com") + .name("jonghun") + .major("cs") + .build(); + userRepository.save(user); + + assertThat("email@email.com").isEqualTo(user.getEmail().getEmail()); + + List postList = new ArrayList<>(); + + + for (int i = 0; i < 10000; i++) { + String postId = idGenerator.generateId(IdPrefix.POST); + Post post = Post.builder() + .id(postId) + .user(user) + .title("title") + .content("content") + .build(); + postList.add(post); + + } + postManager.saveAll(postList); + } +} From 517d862374bf0f9778a40b36da9df6fe9e59a578 Mon Sep 17 00:00:00 2001 From: jonghun Date: Sun, 9 Jun 2024 18:05:28 +0900 Subject: [PATCH 07/20] #87 rename: data -> infrastructure --- .../post/{data => infrastructure}/PostJpaRepository.java | 8 ++++++-- .../post/{data => infrastructure}/PostRepository.java | 4 ++-- .../{data => infrastructure}/PostRepositoryCustom.java | 3 +-- .../post/{data => infrastructure}/PostRepositoryImpl.java | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) rename src/main/java/com/seoultech/synergybe/domain/post/{data => infrastructure}/PostJpaRepository.java (88%) rename src/main/java/com/seoultech/synergybe/domain/post/{data => infrastructure}/PostRepository.java (93%) rename src/main/java/com/seoultech/synergybe/domain/post/{data => infrastructure}/PostRepositoryCustom.java (78%) rename src/main/java/com/seoultech/synergybe/domain/post/{data => infrastructure}/PostRepositoryImpl.java (97%) diff --git a/src/main/java/com/seoultech/synergybe/domain/post/data/PostJpaRepository.java b/src/main/java/com/seoultech/synergybe/domain/post/infrastructure/PostJpaRepository.java similarity index 88% rename from src/main/java/com/seoultech/synergybe/domain/post/data/PostJpaRepository.java rename to src/main/java/com/seoultech/synergybe/domain/post/infrastructure/PostJpaRepository.java index 7efa4cc..cdbbac9 100644 --- a/src/main/java/com/seoultech/synergybe/domain/post/data/PostJpaRepository.java +++ b/src/main/java/com/seoultech/synergybe/domain/post/infrastructure/PostJpaRepository.java @@ -1,4 +1,4 @@ -package com.seoultech.synergybe.domain.post.data; +package com.seoultech.synergybe.domain.post.infrastructure; import com.seoultech.synergybe.domain.post.Post; import com.seoultech.synergybe.domain.post.exception.PostNotFoundException; @@ -16,11 +16,15 @@ public void save(Post post) { postRepository.save(post); } + public void saveAll(List postList) { + postRepository.saveAll(postList); + } + public void delete(Post post) { postRepository.delete(post); } - public Post findById(String postId) { + public Post findById(Long postId) { return postRepository.findById(postId) .orElseThrow(() -> new PostNotFoundException("존재하지 않는 게시글입니다.")); } diff --git a/src/main/java/com/seoultech/synergybe/domain/post/data/PostRepository.java b/src/main/java/com/seoultech/synergybe/domain/post/infrastructure/PostRepository.java similarity index 93% rename from src/main/java/com/seoultech/synergybe/domain/post/data/PostRepository.java rename to src/main/java/com/seoultech/synergybe/domain/post/infrastructure/PostRepository.java index 27bef78..cd58166 100644 --- a/src/main/java/com/seoultech/synergybe/domain/post/data/PostRepository.java +++ b/src/main/java/com/seoultech/synergybe/domain/post/infrastructure/PostRepository.java @@ -1,4 +1,4 @@ -package com.seoultech.synergybe.domain.post.data; +package com.seoultech.synergybe.domain.post.infrastructure; import com.seoultech.synergybe.domain.post.Post; import org.springframework.data.domain.Page; @@ -10,7 +10,7 @@ import java.util.List; -public interface PostRepository extends JpaRepository, PostRepositoryCustom { +public interface PostRepository extends JpaRepository, PostRepositoryCustom { @Query(value = "SELECT * FROM post WHERE post_id < :postId AND is_deleted = 0 ORDER BY post_id DESC LIMIT 10", nativeQuery = true) List findAllByEndId(@Param("postId") String postId); diff --git a/src/main/java/com/seoultech/synergybe/domain/post/data/PostRepositoryCustom.java b/src/main/java/com/seoultech/synergybe/domain/post/infrastructure/PostRepositoryCustom.java similarity index 78% rename from src/main/java/com/seoultech/synergybe/domain/post/data/PostRepositoryCustom.java rename to src/main/java/com/seoultech/synergybe/domain/post/infrastructure/PostRepositoryCustom.java index acd8710..2b0c871 100644 --- a/src/main/java/com/seoultech/synergybe/domain/post/data/PostRepositoryCustom.java +++ b/src/main/java/com/seoultech/synergybe/domain/post/infrastructure/PostRepositoryCustom.java @@ -1,7 +1,6 @@ -package com.seoultech.synergybe.domain.post.data; +package com.seoultech.synergybe.domain.post.infrastructure; import com.seoultech.synergybe.domain.post.Post; -import com.seoultech.synergybe.domain.post.presentation.dto.response.GetPostResponse; import java.util.List; diff --git a/src/main/java/com/seoultech/synergybe/domain/post/data/PostRepositoryImpl.java b/src/main/java/com/seoultech/synergybe/domain/post/infrastructure/PostRepositoryImpl.java similarity index 97% rename from src/main/java/com/seoultech/synergybe/domain/post/data/PostRepositoryImpl.java rename to src/main/java/com/seoultech/synergybe/domain/post/infrastructure/PostRepositoryImpl.java index c8836d6..011cce8 100644 --- a/src/main/java/com/seoultech/synergybe/domain/post/data/PostRepositoryImpl.java +++ b/src/main/java/com/seoultech/synergybe/domain/post/infrastructure/PostRepositoryImpl.java @@ -1,4 +1,4 @@ -package com.seoultech.synergybe.domain.post.data; +package com.seoultech.synergybe.domain.post.infrastructure; import com.querydsl.jpa.impl.JPAQueryFactory; import com.seoultech.synergybe.domain.post.Post; From 8390ca8f47fb7368fb5b2b972cbadb27118bf69f Mon Sep 17 00:00:00 2001 From: jonghun Date: Sun, 9 Jun 2024 18:06:12 +0900 Subject: [PATCH 08/20] =?UTF-8?q?#87=20feat:=20snow=20flake=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=20id=20=EC=83=9D=EC=84=B1=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../idgenerator/IdGeneratorSnowFlake.java | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorSnowFlake.java diff --git a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorSnowFlake.java b/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorSnowFlake.java new file mode 100644 index 0000000..4922782 --- /dev/null +++ b/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorSnowFlake.java @@ -0,0 +1,141 @@ +package com.seoultech.synergybe.domain.common.idgenerator; + +import org.springframework.stereotype.Component; + +import java.net.NetworkInterface; +import java.security.SecureRandom; +import java.time.Instant; +import java.util.Enumeration; + +/** + * Distributed Sequence Generator. + * Inspired by Twitter snowflake: https://github.com/twitter/snowflake/tree/snowflake-2010 + * + * This class should be used as a Singleton. + * Make sure that you create and reuse a Single instance of Snowflake per node in your distributed system cluster. + */ +@Component +public class IdGeneratorSnowFlake implements IdGenerator { + private static final int UNUSED_BITS = 1; // Sign bit, Unused (always set to 0) + private static final int EPOCH_BITS = 41; + private static final int NODE_ID_BITS = 10; + private static final int SEQUENCE_BITS = 12; + + private static final long maxNodeId = (1L << NODE_ID_BITS) - 1; + private static final long maxSequence = (1L << SEQUENCE_BITS) - 1; + + // Custom Epoch (January 1, 2015 Midnight UTC = 2015-01-01T00:00:00Z) + private static final long DEFAULT_CUSTOM_EPOCH = 1420070400000L; + + private final long nodeId; + private final long customEpoch; + + private volatile long lastTimestamp = -1L; + private volatile long sequence = 0L; + + // Create Snowflake with a nodeId and custom epoch + public IdGeneratorSnowFlake(long nodeId, long customEpoch) { + if(nodeId < 0 || nodeId > maxNodeId) { + throw new IllegalArgumentException(String.format("NodeId must be between %d and %d", 0, maxNodeId)); + } + this.nodeId = nodeId; + this.customEpoch = customEpoch; + } + + // Create Snowflake with a nodeId + public IdGeneratorSnowFlake(long nodeId) { + this(nodeId, DEFAULT_CUSTOM_EPOCH); + } + + // Let Snowflake generate a nodeId + public IdGeneratorSnowFlake() { + this.nodeId = createNodeId(); + this.customEpoch = DEFAULT_CUSTOM_EPOCH; + } + + public String generateId(IdPrefix idPrefix) { + long id = nextId(); + return String.valueOf(id); + } + + public synchronized long nextId() { + long currentTimestamp = timestamp(); + + if(currentTimestamp < lastTimestamp) { + throw new IllegalStateException("Invalid System Clock!"); + } + + if (currentTimestamp == lastTimestamp) { + sequence = (sequence + 1) & maxSequence; + if(sequence == 0) { + // Sequence Exhausted, wait till next millisecond. + currentTimestamp = waitNextMillis(currentTimestamp); + } + } else { + // reset sequence to start with zero for the next millisecond + sequence = 0; + } + + lastTimestamp = currentTimestamp; + + long id = currentTimestamp << (NODE_ID_BITS + SEQUENCE_BITS) + | (nodeId << SEQUENCE_BITS) + | sequence; + + return id; + } + + + // Get current timestamp in milliseconds, adjust for the custom epoch. + private long timestamp() { + return Instant.now().toEpochMilli() - customEpoch; + } + + // Block and wait till next millisecond + private long waitNextMillis(long currentTimestamp) { + while (currentTimestamp == lastTimestamp) { + currentTimestamp = timestamp(); + } + return currentTimestamp; + } + + private long createNodeId() { + long nodeId; + try { + StringBuilder sb = new StringBuilder(); + Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces(); + while (networkInterfaces.hasMoreElements()) { + NetworkInterface networkInterface = networkInterfaces.nextElement(); + byte[] mac = networkInterface.getHardwareAddress(); + if (mac != null) { + for(byte macPort: mac) { + sb.append(String.format("%02X", macPort)); + } + } + } + nodeId = sb.toString().hashCode(); + } catch (Exception ex) { + nodeId = (new SecureRandom().nextInt()); + } + nodeId = nodeId & maxNodeId; + return nodeId; + } + + public long[] parse(long id) { + long maskNodeId = ((1L << NODE_ID_BITS) - 1) << SEQUENCE_BITS; + long maskSequence = (1L << SEQUENCE_BITS) - 1; + + long timestamp = (id >> (NODE_ID_BITS + SEQUENCE_BITS)) + customEpoch; + long nodeId = (id & maskNodeId) >> SEQUENCE_BITS; + long sequence = id & maskSequence; + + return new long[]{timestamp, nodeId, sequence}; + } + + @Override + public String toString() { + return "Snowflake Settings [EPOCH_BITS=" + EPOCH_BITS + ", NODE_ID_BITS=" + NODE_ID_BITS + + ", SEQUENCE_BITS=" + SEQUENCE_BITS + ", CUSTOM_EPOCH=" + customEpoch + + ", NodeId=" + nodeId + "]"; + } +} \ No newline at end of file From e3a0d4d1e29138868e3b7969572f201e2a313291 Mon Sep 17 00:00:00 2001 From: jonghun Date: Mon, 10 Jun 2024 22:25:44 +0900 Subject: [PATCH 09/20] =?UTF-8?q?#87=20fix:=20apply=20=EB=8C=80=EC=B2=B4?= =?UTF-8?q?=ED=82=A4=20=EC=88=98=EC=A0=95=20id=20->=20Long=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=20token=20->=20String=20=ED=83=80=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/seoultech/synergybe/domain/apply/Apply.java | 7 +++++-- .../synergybe/domain/apply/service/ApplyService.java | 10 ++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/seoultech/synergybe/domain/apply/Apply.java b/src/main/java/com/seoultech/synergybe/domain/apply/Apply.java index 5456cdf..20d542b 100644 --- a/src/main/java/com/seoultech/synergybe/domain/apply/Apply.java +++ b/src/main/java/com/seoultech/synergybe/domain/apply/Apply.java @@ -22,7 +22,9 @@ public class Apply { @Id @Column(name = "apply_id") - private String id; + private Long id; + + private String applyToken; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") @@ -40,8 +42,9 @@ public class Apply { private IsDeleted isDeleted = new IsDeleted(IS_DELETED_DEFAULT); @Builder - public Apply(String id, User user, Project project) { + public Apply(Long id, String applyToken, User user, Project project) { this.id = id; + this.applyToken = applyToken; this.user = user; this.project = project; this.status = ApplyStatus.NEW; diff --git a/src/main/java/com/seoultech/synergybe/domain/apply/service/ApplyService.java b/src/main/java/com/seoultech/synergybe/domain/apply/service/ApplyService.java index c3a31c5..eea9456 100644 --- a/src/main/java/com/seoultech/synergybe/domain/apply/service/ApplyService.java +++ b/src/main/java/com/seoultech/synergybe/domain/apply/service/ApplyService.java @@ -5,9 +5,9 @@ import com.seoultech.synergybe.domain.apply.exception.ApplyBadRequestException; import com.seoultech.synergybe.domain.apply.exception.ApplyNotFoundException; import com.seoultech.synergybe.domain.apply.repository.ApplyRepository; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; -import com.seoultech.synergybe.domain.notification.NotificationType; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.TokenGenerator; import com.seoultech.synergybe.domain.notification.service.NotificationService; import com.seoultech.synergybe.domain.project.Project; import com.seoultech.synergybe.domain.project.service.ProjectService; @@ -33,12 +33,14 @@ public class ApplyService { private final UserService userService; private final NotificationService notificationService; private final IdGenerator idGenerator; + private final TokenGenerator tokenGenerator; @Transactional public GetApplyResponse createApply(String userId, String projectId) { Project project = projectService.findProjectById(projectId); User user = userService.getUser(userId); - String applyId = idGenerator.generateId(IdPrefix.APPLY); + Long applyId = idGenerator.generateId(); + String applyToken = tokenGenerator.generateToken(IdPrefix.APPLY); Apply apply = Apply.builder() .id(applyId).user(user).project(project) From 11a491fd98bb3e9342cb9413061dbf2ff47cb68b Mon Sep 17 00:00:00 2001 From: jonghun Date: Mon, 10 Jun 2024 22:29:04 +0900 Subject: [PATCH 10/20] =?UTF-8?q?#87=20feat:=20=EB=8C=80=EC=B2=B4=ED=82=A4?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=EA=B8=B0=20IdGenerator=20->=20TokenGenera?= =?UTF-8?q?tor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기존 Id 생성 역할을 Token 생성으로 변경 --- .../domain/common/generator/TokenGenerator.java | 5 +++++ .../TokenGeneratorUUID.java} | 8 ++++---- .../TokenGeneratorUUIDTest.java} | 9 +++------ 3 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/seoultech/synergybe/domain/common/generator/TokenGenerator.java rename src/main/java/com/seoultech/synergybe/domain/common/{idgenerator/IdGeneratorUUID.java => generator/TokenGeneratorUUID.java} (62%) rename src/test/java/com/seoultech/synergybe/domain/common/{idgenerator/IdGeneratorUUIDTest.java => generator/TokenGeneratorUUIDTest.java} (72%) diff --git a/src/main/java/com/seoultech/synergybe/domain/common/generator/TokenGenerator.java b/src/main/java/com/seoultech/synergybe/domain/common/generator/TokenGenerator.java new file mode 100644 index 0000000..30773d7 --- /dev/null +++ b/src/main/java/com/seoultech/synergybe/domain/common/generator/TokenGenerator.java @@ -0,0 +1,5 @@ +package com.seoultech.synergybe.domain.common.generator; + +public interface TokenGenerator { + String generateToken(IdPrefix idPrefix); +} diff --git a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUID.java b/src/main/java/com/seoultech/synergybe/domain/common/generator/TokenGeneratorUUID.java similarity index 62% rename from src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUID.java rename to src/main/java/com/seoultech/synergybe/domain/common/generator/TokenGeneratorUUID.java index b521615..1198d61 100644 --- a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUID.java +++ b/src/main/java/com/seoultech/synergybe/domain/common/generator/TokenGeneratorUUID.java @@ -1,4 +1,4 @@ -package com.seoultech.synergybe.domain.common.idgenerator; +package com.seoultech.synergybe.domain.common.generator; import com.fasterxml.uuid.Generators; import org.springframework.stereotype.Component; @@ -6,13 +6,13 @@ import java.util.UUID; @Component -public class IdGeneratorUUID { +public class TokenGeneratorUUID implements TokenGenerator { - public String generateId(IdPrefix idPrefix) { + public String generateToken(IdPrefix idPrefix) { UUID originUuid = Generators.timeBasedGenerator().generate(); String[] uuidArr = originUuid.toString().split("-"); String uuidStr = uuidArr[2] + uuidArr[1] + uuidArr[0] + uuidArr[3] + uuidArr[4]; - String uuid = idPrefix.getValue() + "-" + uuidStr; + String uuid = idPrefix.getValue() + "_" + uuidStr; return uuid; } } diff --git a/src/test/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUIDTest.java b/src/test/java/com/seoultech/synergybe/domain/common/generator/TokenGeneratorUUIDTest.java similarity index 72% rename from src/test/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUIDTest.java rename to src/test/java/com/seoultech/synergybe/domain/common/generator/TokenGeneratorUUIDTest.java index af76888..f6f5fe6 100644 --- a/src/test/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorUUIDTest.java +++ b/src/test/java/com/seoultech/synergybe/domain/common/generator/TokenGeneratorUUIDTest.java @@ -1,16 +1,13 @@ -package com.seoultech.synergybe.domain.common.idgenerator; +package com.seoultech.synergybe.domain.common.generator; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import java.util.ArrayList; -import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest -public class IdGeneratorUUIDTest { +public class TokenGeneratorUUIDTest { @Autowired IdGenerator idGenerator; @@ -19,7 +16,7 @@ void generateUUID() { // List list = new ArrayList<>(); for (int i = 0; i < 100; i++) { - String postId = idGenerator.generateId(IdPrefix.POST); + Long postId = idGenerator.generateId(); System.out.println("postId : " + i + " 번째 : "+ postId); // list.add(postId); } From f80a0400714806e7e52d50804d49ef9b4c455200 Mon Sep 17 00:00:00 2001 From: jonghun Date: Mon, 10 Jun 2024 22:30:05 +0900 Subject: [PATCH 11/20] #87 rename: idgenerator -> generator --- .../synergybe/domain/common/generator/IdGenerator.java | 8 ++++++++ .../IdGeneratorRivkodeImpl.java | 4 ++-- .../{idgenerator => generator}/IdGeneratorSnowFlake.java | 6 +++--- .../common/{idgenerator => generator}/IdPrefix.java | 2 +- .../common/{idgenerator => generator}/UUIDConverter.java | 2 +- .../synergybe/domain/common/idgenerator/IdGenerator.java | 9 --------- 6 files changed, 15 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/seoultech/synergybe/domain/common/generator/IdGenerator.java rename src/main/java/com/seoultech/synergybe/domain/common/{idgenerator => generator}/IdGeneratorRivkodeImpl.java (98%) rename src/main/java/com/seoultech/synergybe/domain/common/{idgenerator => generator}/IdGeneratorSnowFlake.java (97%) rename src/main/java/com/seoultech/synergybe/domain/common/{idgenerator => generator}/IdPrefix.java (91%) rename src/main/java/com/seoultech/synergybe/domain/common/{idgenerator => generator}/UUIDConverter.java (87%) delete mode 100644 src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGenerator.java diff --git a/src/main/java/com/seoultech/synergybe/domain/common/generator/IdGenerator.java b/src/main/java/com/seoultech/synergybe/domain/common/generator/IdGenerator.java new file mode 100644 index 0000000..6572c8e --- /dev/null +++ b/src/main/java/com/seoultech/synergybe/domain/common/generator/IdGenerator.java @@ -0,0 +1,8 @@ +package com.seoultech.synergybe.domain.common.generator; + +import org.springframework.stereotype.Component; + +@Component +public interface IdGenerator { + Long generateId(); +} diff --git a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorRivkodeImpl.java b/src/main/java/com/seoultech/synergybe/domain/common/generator/IdGeneratorRivkodeImpl.java similarity index 98% rename from src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorRivkodeImpl.java rename to src/main/java/com/seoultech/synergybe/domain/common/generator/IdGeneratorRivkodeImpl.java index 0b31f3f..7340780 100644 --- a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorRivkodeImpl.java +++ b/src/main/java/com/seoultech/synergybe/domain/common/generator/IdGeneratorRivkodeImpl.java @@ -1,4 +1,4 @@ -package com.seoultech.synergybe.domain.common.idgenerator; +package com.seoultech.synergybe.domain.common.generator; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -10,7 +10,7 @@ @Slf4j @Component -public class IdGeneratorRivkodeImpl implements IdGenerator { +public class IdGeneratorRivkodeImpl { private static final int ASCII_LOWER_CASE_START = 97; private static final int ASCII_LOWER_CASE_END = 122; private static final int ASCII_UPPER_CASE_START = 65; diff --git a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorSnowFlake.java b/src/main/java/com/seoultech/synergybe/domain/common/generator/IdGeneratorSnowFlake.java similarity index 97% rename from src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorSnowFlake.java rename to src/main/java/com/seoultech/synergybe/domain/common/generator/IdGeneratorSnowFlake.java index 4922782..efafe91 100644 --- a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGeneratorSnowFlake.java +++ b/src/main/java/com/seoultech/synergybe/domain/common/generator/IdGeneratorSnowFlake.java @@ -1,4 +1,4 @@ -package com.seoultech.synergybe.domain.common.idgenerator; +package com.seoultech.synergybe.domain.common.generator; import org.springframework.stereotype.Component; @@ -53,9 +53,9 @@ public IdGeneratorSnowFlake() { this.customEpoch = DEFAULT_CUSTOM_EPOCH; } - public String generateId(IdPrefix idPrefix) { + public Long generateId() { long id = nextId(); - return String.valueOf(id); + return id; } public synchronized long nextId() { diff --git a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdPrefix.java b/src/main/java/com/seoultech/synergybe/domain/common/generator/IdPrefix.java similarity index 91% rename from src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdPrefix.java rename to src/main/java/com/seoultech/synergybe/domain/common/generator/IdPrefix.java index c670924..dab7ec0 100644 --- a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdPrefix.java +++ b/src/main/java/com/seoultech/synergybe/domain/common/generator/IdPrefix.java @@ -1,4 +1,4 @@ -package com.seoultech.synergybe.domain.common.idgenerator; +package com.seoultech.synergybe.domain.common.generator; import lombok.Getter; diff --git a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/UUIDConverter.java b/src/main/java/com/seoultech/synergybe/domain/common/generator/UUIDConverter.java similarity index 87% rename from src/main/java/com/seoultech/synergybe/domain/common/idgenerator/UUIDConverter.java rename to src/main/java/com/seoultech/synergybe/domain/common/generator/UUIDConverter.java index d1dbfb2..8c0bfea 100644 --- a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/UUIDConverter.java +++ b/src/main/java/com/seoultech/synergybe/domain/common/generator/UUIDConverter.java @@ -1,4 +1,4 @@ -package com.seoultech.synergybe.domain.common.idgenerator; +package com.seoultech.synergybe.domain.common.generator; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGenerator.java b/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGenerator.java deleted file mode 100644 index 4f48eaa..0000000 --- a/src/main/java/com/seoultech/synergybe/domain/common/idgenerator/IdGenerator.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.seoultech.synergybe.domain.common.idgenerator; - -import org.springframework.stereotype.Component; - -@Component -public interface IdGenerator { - String generateId(IdPrefix idPrefix); - -} From e19424e25a9350d77f45fe092e3beeb66728ea48 Mon Sep 17 00:00:00 2001 From: jonghun Date: Mon, 10 Jun 2024 22:31:01 +0900 Subject: [PATCH 12/20] #87 rename: idgenerator -> generator --- .../synergybe/domain/chat/service/ChatRoomService.java | 4 ++-- .../synergybe/domain/comment/service/CommentService.java | 4 ++-- .../synergybe/domain/follow/service/FollowService.java | 4 ++-- .../domain/library/scheduler/PublicLibraryScheduler.java | 4 ++-- .../domain/library/scheduler/SmallLibraryScheduler.java | 4 ++-- .../synergybe/domain/notice/service/NoticeService.java | 4 ++-- .../synergybe/domain/post/implement/PostFactory.java | 4 ++-- .../synergybe/domain/post/implement/PostManager.java | 8 +++++++- .../synergybe/domain/post/implement/PostReader.java | 2 +- .../domain/postlike/service/PostLikeService.java | 6 +++--- .../synergybe/domain/project/service/ProjectService.java | 5 ++--- .../domain/projectlike/service/ProjectLikeService.java | 5 ++--- .../domain/projectuser/service/ProjectUserService.java | 4 ++-- .../synergybe/domain/rate/service/RateService.java | 4 ++-- .../synergybe/domain/ticket/service/TicketService.java | 4 ++-- .../domain/ticketUser/service/TicketUserService.java | 4 ++-- .../synergybe/domain/user/service/UserService.java | 4 ++-- .../com/seoultech/synergybe/base/BaseRepositoryTest.java | 2 +- .../synergybe/domain/post/PostGeneratorTest.java | 6 ++---- 19 files changed, 42 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/seoultech/synergybe/domain/chat/service/ChatRoomService.java b/src/main/java/com/seoultech/synergybe/domain/chat/service/ChatRoomService.java index 2faea9e..9720a0d 100644 --- a/src/main/java/com/seoultech/synergybe/domain/chat/service/ChatRoomService.java +++ b/src/main/java/com/seoultech/synergybe/domain/chat/service/ChatRoomService.java @@ -4,8 +4,8 @@ import com.seoultech.synergybe.domain.chat.dto.request.CreateChatRoomRequest; import com.seoultech.synergybe.domain.chat.dto.response.GetChatRoomResponse; import com.seoultech.synergybe.domain.chat.jpa_repository.ChatRoomRepository; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.user.User; import com.seoultech.synergybe.domain.user.service.UserService; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/seoultech/synergybe/domain/comment/service/CommentService.java b/src/main/java/com/seoultech/synergybe/domain/comment/service/CommentService.java index bf074ff..9c2fbbc 100644 --- a/src/main/java/com/seoultech/synergybe/domain/comment/service/CommentService.java +++ b/src/main/java/com/seoultech/synergybe/domain/comment/service/CommentService.java @@ -6,8 +6,8 @@ import com.seoultech.synergybe.domain.comment.dto.response.GetCommentResponse; import com.seoultech.synergybe.domain.comment.exception.CommentNotFoundException; import com.seoultech.synergybe.domain.comment.repository.CommentRepository; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.common.paging.ListResponse; import com.seoultech.synergybe.domain.notification.service.NotificationService; import com.seoultech.synergybe.domain.post.Post; diff --git a/src/main/java/com/seoultech/synergybe/domain/follow/service/FollowService.java b/src/main/java/com/seoultech/synergybe/domain/follow/service/FollowService.java index acbc155..eb85fbc 100644 --- a/src/main/java/com/seoultech/synergybe/domain/follow/service/FollowService.java +++ b/src/main/java/com/seoultech/synergybe/domain/follow/service/FollowService.java @@ -1,7 +1,7 @@ package com.seoultech.synergybe.domain.follow.service; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.common.paging.ListResponse; import com.seoultech.synergybe.domain.follow.Follow; import com.seoultech.synergybe.domain.follow.FollowStatus; diff --git a/src/main/java/com/seoultech/synergybe/domain/library/scheduler/PublicLibraryScheduler.java b/src/main/java/com/seoultech/synergybe/domain/library/scheduler/PublicLibraryScheduler.java index f777f44..ff37044 100644 --- a/src/main/java/com/seoultech/synergybe/domain/library/scheduler/PublicLibraryScheduler.java +++ b/src/main/java/com/seoultech/synergybe/domain/library/scheduler/PublicLibraryScheduler.java @@ -1,7 +1,7 @@ package com.seoultech.synergybe.domain.library.scheduler; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.library.domain.PublicLibrary; import com.seoultech.synergybe.domain.library.domain.RawPublicLibrary; import com.seoultech.synergybe.domain.library.repository.PublicLibraryRepository; diff --git a/src/main/java/com/seoultech/synergybe/domain/library/scheduler/SmallLibraryScheduler.java b/src/main/java/com/seoultech/synergybe/domain/library/scheduler/SmallLibraryScheduler.java index c01b5ab..0a9ac4f 100644 --- a/src/main/java/com/seoultech/synergybe/domain/library/scheduler/SmallLibraryScheduler.java +++ b/src/main/java/com/seoultech/synergybe/domain/library/scheduler/SmallLibraryScheduler.java @@ -1,7 +1,7 @@ package com.seoultech.synergybe.domain.library.scheduler; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.library.domain.RawSmallLibrary; import com.seoultech.synergybe.domain.library.domain.SmallLibrary; import com.seoultech.synergybe.domain.library.repository.RawSmallLibraryRepository; diff --git a/src/main/java/com/seoultech/synergybe/domain/notice/service/NoticeService.java b/src/main/java/com/seoultech/synergybe/domain/notice/service/NoticeService.java index aaf3633..2c07780 100644 --- a/src/main/java/com/seoultech/synergybe/domain/notice/service/NoticeService.java +++ b/src/main/java/com/seoultech/synergybe/domain/notice/service/NoticeService.java @@ -1,7 +1,7 @@ package com.seoultech.synergybe.domain.notice.service; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.common.paging.ListResponse; import com.seoultech.synergybe.domain.notice.Notice; import com.seoultech.synergybe.domain.notice.dto.request.CreateNoticeRequest; diff --git a/src/main/java/com/seoultech/synergybe/domain/post/implement/PostFactory.java b/src/main/java/com/seoultech/synergybe/domain/post/implement/PostFactory.java index 86c5008..33cf350 100644 --- a/src/main/java/com/seoultech/synergybe/domain/post/implement/PostFactory.java +++ b/src/main/java/com/seoultech/synergybe/domain/post/implement/PostFactory.java @@ -1,7 +1,7 @@ package com.seoultech.synergybe.domain.post.implement; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.post.Post; import com.seoultech.synergybe.domain.user.User; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/seoultech/synergybe/domain/post/implement/PostManager.java b/src/main/java/com/seoultech/synergybe/domain/post/implement/PostManager.java index 0bf9efc..aa2110a 100644 --- a/src/main/java/com/seoultech/synergybe/domain/post/implement/PostManager.java +++ b/src/main/java/com/seoultech/synergybe/domain/post/implement/PostManager.java @@ -2,11 +2,13 @@ import com.seoultech.synergybe.domain.post.Post; import com.seoultech.synergybe.domain.post.business.dto.UpdatePostDto; -import com.seoultech.synergybe.domain.post.data.PostJpaRepository; +import com.seoultech.synergybe.domain.post.infrastructure.PostJpaRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Transactional @Component @RequiredArgsConstructor @@ -24,4 +26,8 @@ public void update(Post post, UpdatePostDto updatePostDto) { public void delete(Post post) { postRepository.delete(post); } + + public void saveAll(List postList) { + postRepository.saveAll(postList); + } } diff --git a/src/main/java/com/seoultech/synergybe/domain/post/implement/PostReader.java b/src/main/java/com/seoultech/synergybe/domain/post/implement/PostReader.java index d908416..802fd18 100644 --- a/src/main/java/com/seoultech/synergybe/domain/post/implement/PostReader.java +++ b/src/main/java/com/seoultech/synergybe/domain/post/implement/PostReader.java @@ -2,7 +2,7 @@ import com.seoultech.synergybe.domain.common.paging.ListResponse; import com.seoultech.synergybe.domain.post.Post; -import com.seoultech.synergybe.domain.post.data.PostJpaRepository; +import com.seoultech.synergybe.domain.post.infrastructure.PostJpaRepository; import com.seoultech.synergybe.domain.post.presentation.dto.response.GetPostResponse; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/seoultech/synergybe/domain/postlike/service/PostLikeService.java b/src/main/java/com/seoultech/synergybe/domain/postlike/service/PostLikeService.java index 9ae83a5..933e27b 100644 --- a/src/main/java/com/seoultech/synergybe/domain/postlike/service/PostLikeService.java +++ b/src/main/java/com/seoultech/synergybe/domain/postlike/service/PostLikeService.java @@ -1,10 +1,10 @@ package com.seoultech.synergybe.domain.postlike.service; import com.seoultech.synergybe.domain.common.constants.LikeStatus; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.post.Post; -import com.seoultech.synergybe.domain.post.data.PostJpaRepository; +import com.seoultech.synergybe.domain.post.infrastructure.PostJpaRepository; import com.seoultech.synergybe.domain.postlike.PostLike; import com.seoultech.synergybe.domain.postlike.PostLikeType; import com.seoultech.synergybe.domain.postlike.dto.response.GetPostLikeResponse; diff --git a/src/main/java/com/seoultech/synergybe/domain/project/service/ProjectService.java b/src/main/java/com/seoultech/synergybe/domain/project/service/ProjectService.java index 0d852be..b8fe6d7 100644 --- a/src/main/java/com/seoultech/synergybe/domain/project/service/ProjectService.java +++ b/src/main/java/com/seoultech/synergybe/domain/project/service/ProjectService.java @@ -3,9 +3,8 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.seoultech.synergybe.domain.apply.repository.ApplyRepository; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.common.paging.ListResponse; import com.seoultech.synergybe.domain.project.Project; import com.seoultech.synergybe.domain.project.dto.request.CreateProjectRequest; diff --git a/src/main/java/com/seoultech/synergybe/domain/projectlike/service/ProjectLikeService.java b/src/main/java/com/seoultech/synergybe/domain/projectlike/service/ProjectLikeService.java index 0eff05a..0836808 100644 --- a/src/main/java/com/seoultech/synergybe/domain/projectlike/service/ProjectLikeService.java +++ b/src/main/java/com/seoultech/synergybe/domain/projectlike/service/ProjectLikeService.java @@ -1,11 +1,10 @@ package com.seoultech.synergybe.domain.projectlike.service; import com.seoultech.synergybe.domain.common.constants.LikeStatus; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.project.Project; import com.seoultech.synergybe.domain.project.repository.ProjectRepository; -import com.seoultech.synergybe.domain.project.service.ProjectService; import com.seoultech.synergybe.domain.projectlike.ProjectLike; import com.seoultech.synergybe.domain.projectlike.ProjectLikeType; import com.seoultech.synergybe.domain.projectlike.dto.response.ProjectLikeResponse; diff --git a/src/main/java/com/seoultech/synergybe/domain/projectuser/service/ProjectUserService.java b/src/main/java/com/seoultech/synergybe/domain/projectuser/service/ProjectUserService.java index 5e7ea33..101cd77 100644 --- a/src/main/java/com/seoultech/synergybe/domain/projectuser/service/ProjectUserService.java +++ b/src/main/java/com/seoultech/synergybe/domain/projectuser/service/ProjectUserService.java @@ -1,7 +1,7 @@ package com.seoultech.synergybe.domain.projectuser.service; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.project.Project; import com.seoultech.synergybe.domain.project.repository.ProjectRepository; import com.seoultech.synergybe.domain.projectuser.ProjectUser; diff --git a/src/main/java/com/seoultech/synergybe/domain/rate/service/RateService.java b/src/main/java/com/seoultech/synergybe/domain/rate/service/RateService.java index 37ffd53..b30c998 100644 --- a/src/main/java/com/seoultech/synergybe/domain/rate/service/RateService.java +++ b/src/main/java/com/seoultech/synergybe/domain/rate/service/RateService.java @@ -1,7 +1,7 @@ package com.seoultech.synergybe.domain.rate.service; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.common.paging.ListResponse; import com.seoultech.synergybe.domain.project.Project; import com.seoultech.synergybe.domain.project.exception.ProjectLeaderBadRequestException; diff --git a/src/main/java/com/seoultech/synergybe/domain/ticket/service/TicketService.java b/src/main/java/com/seoultech/synergybe/domain/ticket/service/TicketService.java index 4723b3c..081ee38 100644 --- a/src/main/java/com/seoultech/synergybe/domain/ticket/service/TicketService.java +++ b/src/main/java/com/seoultech/synergybe/domain/ticket/service/TicketService.java @@ -1,7 +1,7 @@ package com.seoultech.synergybe.domain.ticket.service; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.common.paging.ListResponse; import com.seoultech.synergybe.domain.project.Project; import com.seoultech.synergybe.domain.project.service.ProjectService; diff --git a/src/main/java/com/seoultech/synergybe/domain/ticketUser/service/TicketUserService.java b/src/main/java/com/seoultech/synergybe/domain/ticketUser/service/TicketUserService.java index 4b52f14..41e8004 100644 --- a/src/main/java/com/seoultech/synergybe/domain/ticketUser/service/TicketUserService.java +++ b/src/main/java/com/seoultech/synergybe/domain/ticketUser/service/TicketUserService.java @@ -1,7 +1,7 @@ package com.seoultech.synergybe.domain.ticketUser.service; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.ticket.Ticket; import com.seoultech.synergybe.domain.ticketUser.TicketUser; import com.seoultech.synergybe.domain.ticketUser.repository.TicketUserRepository; diff --git a/src/main/java/com/seoultech/synergybe/domain/user/service/UserService.java b/src/main/java/com/seoultech/synergybe/domain/user/service/UserService.java index 6fdf492..1063c9a 100644 --- a/src/main/java/com/seoultech/synergybe/domain/user/service/UserService.java +++ b/src/main/java/com/seoultech/synergybe/domain/user/service/UserService.java @@ -4,8 +4,8 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.seoultech.synergybe.domain.common.CustomPasswordEncoder; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.common.paging.ListResponse; import com.seoultech.synergybe.domain.email.MailService; import com.seoultech.synergybe.domain.user.UserRefreshToken; diff --git a/src/test/java/com/seoultech/synergybe/base/BaseRepositoryTest.java b/src/test/java/com/seoultech/synergybe/base/BaseRepositoryTest.java index 6d6905d..74ac757 100644 --- a/src/test/java/com/seoultech/synergybe/base/BaseRepositoryTest.java +++ b/src/test/java/com/seoultech/synergybe/base/BaseRepositoryTest.java @@ -3,7 +3,7 @@ import com.seoultech.synergybe.base.config.TestQueryDslConfig; import com.seoultech.synergybe.domain.apply.repository.ApplyRepository; import com.seoultech.synergybe.domain.common.CustomPasswordEncoder; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; import com.seoultech.synergybe.domain.project.repository.ProjectRepository; import com.seoultech.synergybe.domain.user.repository.UserRepository; import jakarta.persistence.EntityManager; diff --git a/src/test/java/com/seoultech/synergybe/domain/post/PostGeneratorTest.java b/src/test/java/com/seoultech/synergybe/domain/post/PostGeneratorTest.java index 788dd78..329977f 100644 --- a/src/test/java/com/seoultech/synergybe/domain/post/PostGeneratorTest.java +++ b/src/test/java/com/seoultech/synergybe/domain/post/PostGeneratorTest.java @@ -1,13 +1,11 @@ package com.seoultech.synergybe.domain.post; import com.seoultech.synergybe.domain.common.CustomPasswordEncoder; -import com.seoultech.synergybe.domain.common.idgenerator.IdGenerator; -import com.seoultech.synergybe.domain.common.idgenerator.IdPrefix; -import com.seoultech.synergybe.domain.post.implement.PostFactory; +import com.seoultech.synergybe.domain.common.generator.IdGenerator; +import com.seoultech.synergybe.domain.common.generator.IdPrefix; import com.seoultech.synergybe.domain.post.implement.PostManager; import com.seoultech.synergybe.domain.user.User; import com.seoultech.synergybe.domain.user.repository.UserRepository; -import com.seoultech.synergybe.domain.user.service.UserService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; From a4adcec4674d88ccdfa7d8b862556bf4d8927878 Mon Sep 17 00:00:00 2001 From: jonghun Date: Mon, 10 Jun 2024 22:32:59 +0900 Subject: [PATCH 13/20] =?UTF-8?q?#87=20fix:=20chatRoom=20=EB=8C=80?= =?UTF-8?q?=EC=B2=B4=ED=82=A4=20=EC=88=98=EC=A0=95=20id=20->=20Long=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=20token=20->=20String=20=ED=83=80=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../seoultech/synergybe/domain/chat/domain/ChatRoom.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/seoultech/synergybe/domain/chat/domain/ChatRoom.java b/src/main/java/com/seoultech/synergybe/domain/chat/domain/ChatRoom.java index 55b4193..9b8f877 100644 --- a/src/main/java/com/seoultech/synergybe/domain/chat/domain/ChatRoom.java +++ b/src/main/java/com/seoultech/synergybe/domain/chat/domain/ChatRoom.java @@ -12,7 +12,9 @@ public class ChatRoom { @Id @Column(name = "chat_room_id") - private String id; + private Long id; + + private String chatRoomToken; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "create_user_id", nullable = false) @@ -27,8 +29,9 @@ public class ChatRoom { @Builder - public ChatRoom(String id, User createUser, User attendUser, String name) { + public ChatRoom(Long id, String chatRoomToken, User createUser, User attendUser, String name) { this.id = id; + this.chatRoomToken = chatRoomToken; this.createUser = createUser; this.attendUser = attendUser; this.name = name; From 8ad98107289a6898373015103676d2f2cafc7d9d Mon Sep 17 00:00:00 2001 From: jonghun Date: Mon, 10 Jun 2024 22:34:52 +0900 Subject: [PATCH 14/20] =?UTF-8?q?#87=20fix:=20Comment=20=EB=8C=80=EC=B2=B4?= =?UTF-8?q?=ED=82=A4=20=EC=88=98=EC=A0=95=20id=20->=20Long=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=20token=20->=20String=20=ED=83=80=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/seoultech/synergybe/domain/apply/Apply.java | 1 + .../com/seoultech/synergybe/domain/chat/domain/ChatRoom.java | 1 + .../java/com/seoultech/synergybe/domain/comment/Comment.java | 5 ++++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/seoultech/synergybe/domain/apply/Apply.java b/src/main/java/com/seoultech/synergybe/domain/apply/Apply.java index 20d542b..4b57723 100644 --- a/src/main/java/com/seoultech/synergybe/domain/apply/Apply.java +++ b/src/main/java/com/seoultech/synergybe/domain/apply/Apply.java @@ -24,6 +24,7 @@ public class Apply { @Column(name = "apply_id") private Long id; + @Column(name = "apply_token") private String applyToken; @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/com/seoultech/synergybe/domain/chat/domain/ChatRoom.java b/src/main/java/com/seoultech/synergybe/domain/chat/domain/ChatRoom.java index 9b8f877..5cadcab 100644 --- a/src/main/java/com/seoultech/synergybe/domain/chat/domain/ChatRoom.java +++ b/src/main/java/com/seoultech/synergybe/domain/chat/domain/ChatRoom.java @@ -14,6 +14,7 @@ public class ChatRoom { @Column(name = "chat_room_id") private Long id; + @Column(name = "chat_room_token") private String chatRoomToken; @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/com/seoultech/synergybe/domain/comment/Comment.java b/src/main/java/com/seoultech/synergybe/domain/comment/Comment.java index 82f5cda..64d5d94 100644 --- a/src/main/java/com/seoultech/synergybe/domain/comment/Comment.java +++ b/src/main/java/com/seoultech/synergybe/domain/comment/Comment.java @@ -28,7 +28,10 @@ public class Comment extends BaseTime { @Id @Column(name = "comment_id") - private String id; + private Long id; + + @Column(name = "comment_token") + private String commentToken; @Embedded private CommentContent comment; From 991defe316e5cad53455d049dacd0738b0b243ad Mon Sep 17 00:00:00 2001 From: jonghun Date: Mon, 10 Jun 2024 22:35:25 +0900 Subject: [PATCH 15/20] =?UTF-8?q?#87=20fix:=20Follow=20=EB=8C=80=EC=B2=B4?= =?UTF-8?q?=ED=82=A4=20=EC=88=98=EC=A0=95=20id=20->=20Long=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=20token=20->=20String=20=ED=83=80=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/seoultech/synergybe/domain/follow/Follow.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/seoultech/synergybe/domain/follow/Follow.java b/src/main/java/com/seoultech/synergybe/domain/follow/Follow.java index da586f0..d2200f3 100644 --- a/src/main/java/com/seoultech/synergybe/domain/follow/Follow.java +++ b/src/main/java/com/seoultech/synergybe/domain/follow/Follow.java @@ -14,7 +14,10 @@ public class Follow extends BaseTime { @Id @Column(name = "follow_id") - private String id; + private Long id; + + @Column(name = "follow_token") + private String followToken; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "follower_id") @@ -29,7 +32,7 @@ public class Follow extends BaseTime { private FollowStatus status; @Builder - public Follow(String id, User follower, User following) { + public Follow(Long id, User follower, User following) { this.id = id; this.follower = follower; this.following = following; From a91a556d86b501ab83a7b50f9a642ab6122820ec Mon Sep 17 00:00:00 2001 From: jonghun Date: Mon, 10 Jun 2024 22:37:47 +0900 Subject: [PATCH 16/20] =?UTF-8?q?#87=20fix:=20Library=20=EB=8C=80=EC=B2=B4?= =?UTF-8?q?=ED=82=A4=20=EC=88=98=EC=A0=95=20id=20->=20Long=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=20token=20->=20String=20=ED=83=80=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../synergybe/domain/library/domain/PublicLibrary.java | 9 +++++++-- .../synergybe/domain/library/domain/SmallLibrary.java | 8 ++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/seoultech/synergybe/domain/library/domain/PublicLibrary.java b/src/main/java/com/seoultech/synergybe/domain/library/domain/PublicLibrary.java index 2551f15..404075f 100644 --- a/src/main/java/com/seoultech/synergybe/domain/library/domain/PublicLibrary.java +++ b/src/main/java/com/seoultech/synergybe/domain/library/domain/PublicLibrary.java @@ -16,7 +16,10 @@ public class PublicLibrary { @Id @Column(name = "library_id") - private String id; + private Long id; + + @Column(name = "public_library") + private String publicLibraryToken; @Column(name = "name") private String name; @@ -41,7 +44,8 @@ public class PublicLibrary { @Builder public PublicLibrary( - String id, + Long id, + String publicLibraryToken, String name, String address, String telNumber, @@ -51,6 +55,7 @@ public PublicLibrary( Point location ) { this.id = id; + this.publicLibraryToken = publicLibraryToken; this.name = name; this.address = address; this.telNumber = telNumber; diff --git a/src/main/java/com/seoultech/synergybe/domain/library/domain/SmallLibrary.java b/src/main/java/com/seoultech/synergybe/domain/library/domain/SmallLibrary.java index 75e7290..c5c7348 100644 --- a/src/main/java/com/seoultech/synergybe/domain/library/domain/SmallLibrary.java +++ b/src/main/java/com/seoultech/synergybe/domain/library/domain/SmallLibrary.java @@ -16,7 +16,9 @@ public class SmallLibrary { @Id @Column(name = "library_id") - private String id; + private Long id; + + private String smallLibraryToken; private String name; @@ -36,7 +38,8 @@ public class SmallLibrary { @Builder public SmallLibrary( - String id, + Long id, + String smallLibraryToken, String name, String address, String telNumber, @@ -46,6 +49,7 @@ public SmallLibrary( Point location ) { this.id = id; + this.smallLibraryToken = smallLibraryToken; this.name = name; this.address = address; this.telNumber = telNumber; From c2a793c33745718ec1bbcc0d2252f9c6578983b6 Mon Sep 17 00:00:00 2001 From: jonghun Date: Mon, 10 Jun 2024 22:46:40 +0900 Subject: [PATCH 17/20] =?UTF-8?q?#87=20fix:=20Notice=20=EB=8C=80=EC=B2=B4?= =?UTF-8?q?=ED=82=A4=20=EC=88=98=EC=A0=95=20id=20->=20Long=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=20token=20->=20String=20=ED=83=80=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/seoultech/synergybe/domain/notice/Notice.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/seoultech/synergybe/domain/notice/Notice.java b/src/main/java/com/seoultech/synergybe/domain/notice/Notice.java index 159e270..db8a3b0 100644 --- a/src/main/java/com/seoultech/synergybe/domain/notice/Notice.java +++ b/src/main/java/com/seoultech/synergybe/domain/notice/Notice.java @@ -25,7 +25,10 @@ public class Notice extends BaseTime { @Id @Column(name = "notice_id") - private String id; + private Long id; + + @Column(name = "notice_token") + private String noticeToken; @Embedded private NoticeTitle title; @@ -42,8 +45,9 @@ public class Notice extends BaseTime { @Builder - public Notice(String id, String title, String content, Project project) { + public Notice(Long id, String noticeToken, String title, String content, Project project) { this.id = id; + this.noticeToken = noticeToken; this.title = new NoticeTitle(title); this.content = new NoticeContent(content); this.project = project; From 2f6834907efa8dbd352bcf416fbbe0b96f3189d4 Mon Sep 17 00:00:00 2001 From: jonghun Date: Mon, 10 Jun 2024 22:46:58 +0900 Subject: [PATCH 18/20] =?UTF-8?q?#87=20fix:=20Post=20=EB=8C=80=EC=B2=B4?= =?UTF-8?q?=ED=82=A4=20=EC=88=98=EC=A0=95=20id=20->=20Long=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=20token=20->=20String=20=ED=83=80=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/seoultech/synergybe/domain/post/Post.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/seoultech/synergybe/domain/post/Post.java b/src/main/java/com/seoultech/synergybe/domain/post/Post.java index 8d76f6c..208284e 100644 --- a/src/main/java/com/seoultech/synergybe/domain/post/Post.java +++ b/src/main/java/com/seoultech/synergybe/domain/post/Post.java @@ -28,11 +28,10 @@ public class Post extends BaseTime { @Id @Column(name = "post_id") - private String id; + private Long id; -// @Column(name = "post_sequence") -// @GeneratedValue(strategy = GenerationType.IDENTITY) -// private Long postSequence; + @Column(name = "post_token") + private String postToken; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") @@ -69,8 +68,9 @@ public class Post extends BaseTime { private IsDeleted isDeleted = new IsDeleted(IS_DELETED_DEFAULT); @Builder - public Post(String id, User user, String title, String content, String thumbnailImageId) { + public Post(Long id, String postToken, User user, String title, String content, String thumbnailImageId) { this.id = id; + this.postToken = postToken; this.user = user; this.title = new PostTitle(title); this.content = new PostContent(content); From 6db3df78d0e98c4284d471f77cdbb2513c6f5925 Mon Sep 17 00:00:00 2001 From: jonghun Date: Mon, 10 Jun 2024 22:48:26 +0900 Subject: [PATCH 19/20] =?UTF-8?q?#87=20fix:=20=EB=AA=A8=EB=93=A0=20?= =?UTF-8?q?=EC=97=94=ED=8B=B0=ED=8B=B0=20=EB=8C=80=EC=B2=B4=ED=82=A4=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20=EA=B8=B0=EC=A1=B4=20id=20->=20token?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20id=20->=20Long=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=20token=20->=20String=20=ED=83=80=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../seoultech/synergybe/domain/postlike/PostLike.java | 8 ++++++-- .../seoultech/synergybe/domain/project/Project.java | 11 +++++------ .../synergybe/domain/projectlike/ProjectLike.java | 8 ++++++-- .../synergybe/domain/projectuser/ProjectUser.java | 8 ++++++-- .../com/seoultech/synergybe/domain/rate/Rate.java | 8 ++++++-- .../seoultech/synergybe/domain/schedule/Schedule.java | 8 ++++++-- .../com/seoultech/synergybe/domain/ticket/Ticket.java | 8 ++++++-- .../synergybe/domain/ticketUser/TicketUser.java | 8 ++++++-- .../com/seoultech/synergybe/domain/user/User.java | 9 +++++++-- .../synergybe/domain/user/UserRefreshToken.java | 4 ++-- 10 files changed, 56 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/seoultech/synergybe/domain/postlike/PostLike.java b/src/main/java/com/seoultech/synergybe/domain/postlike/PostLike.java index b135d9f..9ab986e 100644 --- a/src/main/java/com/seoultech/synergybe/domain/postlike/PostLike.java +++ b/src/main/java/com/seoultech/synergybe/domain/postlike/PostLike.java @@ -17,7 +17,10 @@ public class PostLike extends BaseTime { @Id @Column(name = "post_like_id") - private String id; + private Long id; + + @Column(name = "post_like_token") + private String postLikeToken; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") @@ -32,8 +35,9 @@ public class PostLike extends BaseTime { private LikeStatus likeStatus = LikeStatus.LIKE; @Builder - public PostLike(String id, User user, Post post) { + public PostLike(Long id, String postLikeToken, User user, Post post) { this.id = id; + this.postLikeToken = postLikeToken; this.user = user; this.post = post; post.getLikes().add(this); diff --git a/src/main/java/com/seoultech/synergybe/domain/project/Project.java b/src/main/java/com/seoultech/synergybe/domain/project/Project.java index 3a35f4f..bcb253c 100644 --- a/src/main/java/com/seoultech/synergybe/domain/project/Project.java +++ b/src/main/java/com/seoultech/synergybe/domain/project/Project.java @@ -33,12 +33,10 @@ public class Project extends BaseTime { @Id @Column(name = "project_id") - private String id; + private Long id; -// @Id -// @Column(name = "project_sequence") -// @GeneratedValue(strategy = GenerationType.IDENTITY) -// private Long seq; + @Column(name = "project_token") + private String projectToken; @Embedded private ProjectName name; @@ -88,9 +86,10 @@ public class Project extends BaseTime { private List schedules = new ArrayList<>(); @Builder - public Project(String id, String name, String content, ProjectField field, Point location, LocalDateTime startAt, + public Project(Long id, String projectToken, String name, String content, ProjectField field, Point location, LocalDateTime startAt, LocalDateTime endAt, String leaderId) { this.id = id; + this.projectToken = projectToken; this.name = new ProjectName(name); this.content = new ProjectContent(content); this.field = field; diff --git a/src/main/java/com/seoultech/synergybe/domain/projectlike/ProjectLike.java b/src/main/java/com/seoultech/synergybe/domain/projectlike/ProjectLike.java index 404b132..ecb53de 100644 --- a/src/main/java/com/seoultech/synergybe/domain/projectlike/ProjectLike.java +++ b/src/main/java/com/seoultech/synergybe/domain/projectlike/ProjectLike.java @@ -18,7 +18,10 @@ public class ProjectLike extends BaseTime { @Id @Column(name = "project_like_id") - private String id; + private Long id; + + @Column(name = "project_like_token") + private String projectLikeToken; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") @@ -35,8 +38,9 @@ public class ProjectLike extends BaseTime { @Builder - public ProjectLike(String id, User user, Project project) { + public ProjectLike(Long id, String projectLikeToken, User user, Project project) { this.id = id; + this.projectLikeToken = projectLikeToken; this.user = user; this.project = project; project.getLikes().add(this); diff --git a/src/main/java/com/seoultech/synergybe/domain/projectuser/ProjectUser.java b/src/main/java/com/seoultech/synergybe/domain/projectuser/ProjectUser.java index bcb36a8..82cdfcc 100644 --- a/src/main/java/com/seoultech/synergybe/domain/projectuser/ProjectUser.java +++ b/src/main/java/com/seoultech/synergybe/domain/projectuser/ProjectUser.java @@ -16,7 +16,10 @@ public class ProjectUser extends BaseTime { @Id @Column(name = "project_user_id") - private String id; + private Long id; + + @Column(name = "project_user_token") + private String projectUserToken; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "project_id") @@ -27,8 +30,9 @@ public class ProjectUser extends BaseTime { private User user; @Builder - public ProjectUser(String id, Project project, User user) { + public ProjectUser(Long id, String projectUserToken, Project project, User user) { this.id = id; + this.projectUserToken = projectUserToken; this.project = project; this.user = user; } diff --git a/src/main/java/com/seoultech/synergybe/domain/rate/Rate.java b/src/main/java/com/seoultech/synergybe/domain/rate/Rate.java index bf47a35..6f6f2fc 100644 --- a/src/main/java/com/seoultech/synergybe/domain/rate/Rate.java +++ b/src/main/java/com/seoultech/synergybe/domain/rate/Rate.java @@ -25,7 +25,10 @@ public class Rate extends BaseTime { @Id @Column(name = "rate_id") - private String id; + private Long id; + + @Column(name = "rate_token") + private String rateToken; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "project_id") @@ -49,8 +52,9 @@ public class Rate extends BaseTime { private RateContent content; @Builder - public Rate(String id, Project project, User giveUser, User receiveUser, int score, String content) { + public Rate(Long id, String rateToken, Project project, User giveUser, User receiveUser, int score, String content) { this.id = id; + this.rateToken = rateToken; this.project = project; this.giveUser = giveUser; this.receiveUser = receiveUser; diff --git a/src/main/java/com/seoultech/synergybe/domain/schedule/Schedule.java b/src/main/java/com/seoultech/synergybe/domain/schedule/Schedule.java index 3adb49b..1980978 100644 --- a/src/main/java/com/seoultech/synergybe/domain/schedule/Schedule.java +++ b/src/main/java/com/seoultech/synergybe/domain/schedule/Schedule.java @@ -27,7 +27,10 @@ public class Schedule extends BaseTime { @Id @Column(name = "schedule_id") - private String id; + private Long id; + + @Column(name = "schedule_token") + private String scheduleToken; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "project_id") @@ -48,8 +51,9 @@ public class Schedule extends BaseTime { private SchedulePeriod period; @Builder - public Schedule(String id, Project project, String title, String content, String label, LocalDateTime startAt, LocalDateTime endAt) { + public Schedule(Long id, String scheduleToken, Project project, String title, String content, String label, LocalDateTime startAt, LocalDateTime endAt) { this.id = id; + this.scheduleToken = scheduleToken; this.title = new ScheduleTitle(title); this.content = new ScheduleContent(content); this.label = label; diff --git a/src/main/java/com/seoultech/synergybe/domain/ticket/Ticket.java b/src/main/java/com/seoultech/synergybe/domain/ticket/Ticket.java index ae8838e..376228b 100644 --- a/src/main/java/com/seoultech/synergybe/domain/ticket/Ticket.java +++ b/src/main/java/com/seoultech/synergybe/domain/ticket/Ticket.java @@ -31,7 +31,10 @@ public class Ticket extends BaseTime { @Id @Column(name = "ticket_id") - private String id; + private Long id; + + @Column(name = "ticket_token") + private String ticketToken; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "project_id") @@ -60,9 +63,10 @@ public class Ticket extends BaseTime { private IsDeleted isDeleted = new IsDeleted(IS_DELETED_DEFAULT); @Builder - public Ticket(String id, String name, String content, Integer orderNumber, String tag, Project project, + public Ticket(Long id, String ticketToken, String name, String content, Integer orderNumber, String tag, Project project, String tagColor) { this.id = id; + this.ticketToken = ticketToken; this.name = new TicketName(name); this.content = new TicketContent(content); this.information = new TicketTagInformation(tag, tagColor); diff --git a/src/main/java/com/seoultech/synergybe/domain/ticketUser/TicketUser.java b/src/main/java/com/seoultech/synergybe/domain/ticketUser/TicketUser.java index 5904f86..47cd566 100644 --- a/src/main/java/com/seoultech/synergybe/domain/ticketUser/TicketUser.java +++ b/src/main/java/com/seoultech/synergybe/domain/ticketUser/TicketUser.java @@ -15,7 +15,10 @@ public class TicketUser extends BaseTime { @Id @Column(name = "ticket_user_id") - private String id; + private Long id; + + @Column(name = "ticket_user_token") + private String ticketUserToken; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ticket_id") @@ -26,8 +29,9 @@ public class TicketUser extends BaseTime { private User user; @Builder - public TicketUser(String id, Ticket ticket, User user) { + public TicketUser(Long id, String ticketUserToken, Ticket ticket, User user) { this.id = id; + this.ticketUserToken = ticketUserToken; this.ticket = ticket; this.user = user; } diff --git a/src/main/java/com/seoultech/synergybe/domain/user/User.java b/src/main/java/com/seoultech/synergybe/domain/user/User.java index 4f94970..2cce4da 100644 --- a/src/main/java/com/seoultech/synergybe/domain/user/User.java +++ b/src/main/java/com/seoultech/synergybe/domain/user/User.java @@ -16,7 +16,10 @@ public class User extends BaseTime { @Id @Column(name = "user_id") - private String id; + private Long id; + + @Column(name = "user_token") + private String userToken; @Embedded private UserEmail email; @@ -35,7 +38,8 @@ public class User extends BaseTime { @Builder public User( - String id, + Long id, + String userToken, String email, String password, String name, @@ -43,6 +47,7 @@ public User( String major ) { this.id = id; + this.userToken = userToken; this.email = new UserEmail(email); this.password = new UserPassword(password, passwordEncoder); this.name = new UserName(name); diff --git a/src/main/java/com/seoultech/synergybe/domain/user/UserRefreshToken.java b/src/main/java/com/seoultech/synergybe/domain/user/UserRefreshToken.java index 0a37fa9..b835f3f 100644 --- a/src/main/java/com/seoultech/synergybe/domain/user/UserRefreshToken.java +++ b/src/main/java/com/seoultech/synergybe/domain/user/UserRefreshToken.java @@ -19,14 +19,14 @@ public class UserRefreshToken { private Long id; @Column(name = "user_id") - private String userId; + private Long userId; @Embedded private RefreshToken refreshToken; public UserRefreshToken( - String userId + Long userId ) { this.userId = userId; this.refreshToken = new RefreshToken(); From 9b3be20fbb7863bf8f7f913b7d80c946ffa122a6 Mon Sep 17 00:00:00 2001 From: jonghun Date: Mon, 10 Jun 2024 22:55:14 +0900 Subject: [PATCH 20/20] =?UTF-8?q?#87=20fix:=20tokenGenerator=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../synergybe/domain/post/PostGeneratorTest.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/seoultech/synergybe/domain/post/PostGeneratorTest.java b/src/test/java/com/seoultech/synergybe/domain/post/PostGeneratorTest.java index 329977f..db2a5b4 100644 --- a/src/test/java/com/seoultech/synergybe/domain/post/PostGeneratorTest.java +++ b/src/test/java/com/seoultech/synergybe/domain/post/PostGeneratorTest.java @@ -3,6 +3,7 @@ import com.seoultech.synergybe.domain.common.CustomPasswordEncoder; import com.seoultech.synergybe.domain.common.generator.IdGenerator; import com.seoultech.synergybe.domain.common.generator.IdPrefix; +import com.seoultech.synergybe.domain.common.generator.TokenGenerator; import com.seoultech.synergybe.domain.post.implement.PostManager; import com.seoultech.synergybe.domain.user.User; import com.seoultech.synergybe.domain.user.repository.UserRepository; @@ -25,6 +26,9 @@ public class PostGeneratorTest { @Autowired IdGenerator idGenerator; + @Autowired + TokenGenerator tokenGenerator; + @Autowired PostManager postManager; @@ -34,8 +38,11 @@ public class PostGeneratorTest { @Test void generatePost() { + Long userId = idGenerator.generateId(); + String userToken = tokenGenerator.generateToken(IdPrefix.USER); + User user = User.builder() - .id("user-id") + .id(userId) .password("3e4r5t6y6y7u") .passwordEncoder(passwordEncoder) .email("email@email.com") @@ -49,10 +56,13 @@ void generatePost() { List postList = new ArrayList<>(); - for (int i = 0; i < 10000; i++) { - String postId = idGenerator.generateId(IdPrefix.POST); + for (int i = 0; i < 10; i++) { + Long postId = idGenerator.generateId(); + String postToken = tokenGenerator.generateToken(IdPrefix.POST); + Post post = Post.builder() .id(postId) + .postToken(postToken) .user(user) .title("title") .content("content")