From fd7808d649792320369d9bddfe1b8102a0a7b131 Mon Sep 17 00:00:00 2001 From: Leetaehoon <66353672+xogns1514@users.noreply.github.com> Date: Fri, 21 Feb 2025 16:11:11 +0900 Subject: [PATCH] Release v1.2.5 (#1035) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: HyungHoKim00 --- .../com/cruru/applicant/util/CsvUtil.java | 25 ++++++++++++++++++- .../com/cruru/applyform/domain/ApplyForm.java | 2 +- ...2_4__change_applyform_description_type.sql | 2 ++ .../service/CsvExportServiceTest.java | 25 ++++++++++++++++++- 4 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 backend/src/main/resources/db/migration/V2_4__change_applyform_description_type.sql diff --git a/backend/src/main/java/com/cruru/applicant/util/CsvUtil.java b/backend/src/main/java/com/cruru/applicant/util/CsvUtil.java index e38591c60..ae9d9ce99 100644 --- a/backend/src/main/java/com/cruru/applicant/util/CsvUtil.java +++ b/backend/src/main/java/com/cruru/applicant/util/CsvUtil.java @@ -11,6 +11,7 @@ import java.nio.charset.StandardCharsets; import java.time.format.DateTimeFormatter; import java.util.List; +import java.util.regex.Pattern; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -57,7 +58,7 @@ private static String createDataLine(ApplicantCsvLine line) { StringBuilder lineBuilder = new StringBuilder() .append(quoteCsvField(line.name())).append(",") .append(quoteCsvField(line.email())).append(",") - .append(quoteCsvField(line.phone())).append(",") + .append(quoteCsvField(formatPhoneNumber(line.phone()))).append(",") .append(quoteCsvField(line.submissionDate().format(DATE_TIME_FORMATTER))); for (String answer : line.answers()) { @@ -66,6 +67,28 @@ private static String createDataLine(ApplicantCsvLine line) { return lineBuilder.toString(); } + private static String formatPhoneNumber(String phone) { + if (phone == null || phone.isEmpty()) { + return ""; + } + + String onlyDigits = phone.replaceAll("[^0-9]", ""); + + if (onlyDigits.length() == 11 && onlyDigits.startsWith("01")) { + return onlyDigits.replaceFirst("(\\d{3})(\\d{4})(\\d{4})", "$1-$2-$3"); + } + + if (onlyDigits.length() == 10) { + return onlyDigits.replaceFirst("(\\d{2,3})(\\d{3,4})(\\d{4})", "$1-$2-$3"); + } + + if (Pattern.matches(".*-.*", phone)) { + return phone; + } + + return phone; + } + private static String quoteCsvField(String field) { if (field == null) { return ""; diff --git a/backend/src/main/java/com/cruru/applyform/domain/ApplyForm.java b/backend/src/main/java/com/cruru/applyform/domain/ApplyForm.java index 5dfe1262b..960ff5647 100644 --- a/backend/src/main/java/com/cruru/applyform/domain/ApplyForm.java +++ b/backend/src/main/java/com/cruru/applyform/domain/ApplyForm.java @@ -33,7 +33,7 @@ public class ApplyForm extends BaseEntity implements SecureResource { private String title; - @Column(columnDefinition = "TEXT") + @Column(columnDefinition = "MEDIUMTEXT") private String description; @Column(name = "start_date") diff --git a/backend/src/main/resources/db/migration/V2_4__change_applyform_description_type.sql b/backend/src/main/resources/db/migration/V2_4__change_applyform_description_type.sql new file mode 100644 index 000000000..cc83cf2bf --- /dev/null +++ b/backend/src/main/resources/db/migration/V2_4__change_applyform_description_type.sql @@ -0,0 +1,2 @@ +ALTER TABLE apply_form + MODIFY description MEDIUMTEXT; diff --git a/backend/src/test/java/com/cruru/applicant/service/CsvExportServiceTest.java b/backend/src/test/java/com/cruru/applicant/service/CsvExportServiceTest.java index bef5c981f..c6efce382 100644 --- a/backend/src/test/java/com/cruru/applicant/service/CsvExportServiceTest.java +++ b/backend/src/test/java/com/cruru/applicant/service/CsvExportServiceTest.java @@ -22,6 +22,7 @@ import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; import java.time.format.DateTimeFormatter; +import java.util.regex.Pattern; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -84,7 +85,7 @@ void exportApplicantsToCsv_singleApplicant() { String expectedDataRow = String.join(",", applicant.getName(), applicant.getEmail(), - applicant.getPhone(), + formatPhoneNumber(applicant.getPhone()), applicant.getCreatedDate().format(DATE_TIME_FORMATTER), answer1.getContent(), answer2.getContent() @@ -100,4 +101,26 @@ private String toStringWithoutBom(ByteArrayInputStream stream) { String text = new String(stream.readAllBytes(), StandardCharsets.UTF_8); return text.replace("\uFEFF", "").replace("\r\n", "\n"); // BOM과 CRLF 제거 } + + private static String formatPhoneNumber(String phone) { + if (phone == null || phone.isEmpty()) { + return ""; + } + + String onlyDigits = phone.replaceAll("[^0-9]", ""); + + if (onlyDigits.length() == 11 && onlyDigits.startsWith("01")) { + return onlyDigits.replaceFirst("(\\d{3})(\\d{4})(\\d{4})", "$1-$2-$3"); + } + + if (onlyDigits.length() == 10) { + return onlyDigits.replaceFirst("(\\d{2,3})(\\d{3,4})(\\d{4})", "$1-$2-$3"); + } + + if (Pattern.matches(".*-.*", phone)) { + return phone; + } + + return phone; + } }