Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/sheets #66

Merged
merged 14 commits into from
Feb 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
14 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ dependencies {
implementation 'io.jsonwebtoken:jjwt-impl:0.11.5'
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
//jwt ์ถ”๊ฐ€


// excel ์ฝ๊ธฐ์šฉ poi
implementation 'org.apache.poi:poi-ooxml:5.4.0'
}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,6 @@ public void finPhoto(@PathVariable String phoneNumber) {
public void finApplyAgree(@PathVariable String phoneNumber) {
Teacher teacher = teacherGetService.byPhoneNumber(phoneNumber);
teacherMessage.matchingChannel(teacher);
teacherMessage.applyChannel(teacher);
}

@PostMapping("/test/teacher/recommend/{applicationFormId}/{phoneNumber}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.yedu.backend.domain.teacher.domain.entity.constant.District;
import com.yedu.backend.domain.teacher.domain.entity.constant.TeachingStyle;
import com.yedu.backend.domain.teacher.domain.entity.constant.University;
import com.yedu.backend.global.excel.application.dto.TeacherInfoRequest;

import java.time.LocalTime;
import java.util.ArrayList;
Expand All @@ -15,7 +16,8 @@
import java.util.Map;

public class TeacherMapper {
public static TeacherInfo mapToTeacherInfo(TeacherInfoFormRequest request) {

private static TeacherInfo mapToTeacherInfo(TeacherInfoFormRequest request) {
return TeacherInfo.builder()
.name(request.name())
.nickName(request.nickName())
Expand All @@ -26,7 +28,7 @@ public static TeacherInfo mapToTeacherInfo(TeacherInfoFormRequest request) {
.build();
}

public static TeacherSchoolInfo mapToTeacherSchoolInfo(TeacherInfoFormRequest request) {
private static TeacherSchoolInfo mapToTeacherSchoolInfo(TeacherInfoFormRequest request) {
boolean etc = University.checkEtc(request.university());
return TeacherSchoolInfo.builder()
.university(request.university())
Expand All @@ -36,14 +38,14 @@ public static TeacherSchoolInfo mapToTeacherSchoolInfo(TeacherInfoFormRequest re
.build();
}

public static TeacherClassInfo mapToTeacherClassInfo(TeacherInfoFormRequest request) {
private static TeacherClassInfo mapToTeacherClassInfo(TeacherInfoFormRequest request) {
// style enum์œผ๋กœ ์‚ฌ์šฉ ์˜ˆ์ •
TeacherClassInfo.TeacherClassInfoBuilder builder = TeacherClassInfo.builder()
.introduce(request.introduce())
.teachingStyle1(TeachingStyle.fromString(request.teachingStyle1()))
.teachingStyle2(TeachingStyle.fromString(request.teachingStyle2()))
.teachingStyleInfo1(request.teachingStyleInfo1())
.teachingStyleInfo2(request.teachingStyleInfo1())
.teachingStyleInfo2(request.teachingStyleInfo2())
.comment(request.comment())
.englishPossible(request.englishPossible())
.mathPossible(request.mathPossible());
Expand Down Expand Up @@ -144,6 +146,8 @@ public static TeacherEnglishResponse mapToTeacherEnglish(Teacher teacher, Teache
}

private static List<String> getOrganizeContexts(String context) {
if (context == null)
return new ArrayList<>();
String organizeContext = context.replace("#", "");
return Arrays.stream(organizeContext.split("\n")).toList()
.stream()
Expand Down Expand Up @@ -174,4 +178,69 @@ public static EnglishCurriculumResponse mapToEnglishCurriculumResponse(TeacherIn
public static DistrictAndTimeResponse mapToDistrictAndTimeResponse(List<String> districts, Map<Day, List<LocalTime>> availableTimes) {
return new DistrictAndTimeResponse(districts, availableTimes);
}

private static TeacherInfo mapToTeacherInfo(TeacherInfoRequest request) {
return TeacherInfo.builder()
.name(request.name())
.nickName(request.nickName())
.email(request.email())
.phoneNumber(request.phoneNumber())
.birth(request.birth())
.gender(request.gender())
.build();
}

private static TeacherSchoolInfo mapToTeacherSchoolInfo(TeacherInfoRequest request) {
boolean etc = University.checkEtc(request.university());
return TeacherSchoolInfo.builder()
.university(request.university())
.etc(etc)
.major(request.major())
.highSchool(request.highSchool())
.build();
}

private static TeacherClassInfo mapToTeacherClassInfo(TeacherInfoRequest request) {
// style enum์œผ๋กœ ์‚ฌ์šฉ ์˜ˆ์ •
TeacherClassInfo.TeacherClassInfoBuilder builder = TeacherClassInfo.builder()
.introduce(request.introduce())
.teachingStyle1(TeachingStyle.fromString(request.teachingStyle1()))
.teachingStyle2(TeachingStyle.fromString(request.teachingStyle2()))
.teachingStyleInfo1(request.teachingStyleInfo1())
.teachingStyleInfo2(request.teachingStyleInfo2())
.comment(request.comment())
.englishPossible(request.englishPossible())
.mathPossible(request.mathPossible());
return builder.build();
}

public static Teacher mapToTeacher(TeacherInfoRequest request) {
return Teacher.builder()
.teacherInfo(mapToTeacherInfo(request))
.teacherSchoolInfo(mapToTeacherSchoolInfo(request))
.teacherClassInfo(mapToTeacherClassInfo(request))
.source(request.source())
.marketingAgree(request.marketingAgree())
.build();
}

public static TeacherEnglish mapToTeacherEnglish(Teacher teacher, TeacherInfoRequest request) {
return TeacherEnglish.builder()
.teacher(teacher)
.teachingExperience(request.english().teachingExperience())
.teachingHistory(request.english().teachingHistory())
.teachingStyle(request.english().teachingStyle())
.foreignExperience(request.english().foreignExperience())
.build();
}

public static TeacherMath mapToTeacherMath(Teacher teacher, TeacherInfoRequest request) {
return TeacherMath.builder()
.teacher(teacher)
.teachingExperience(request.math().teachingExperience())
.teachingHistory(request.math().teachingHistory())
.teachingStyle(request.math().teachingStyle())
.build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ public void submitContract(TeacherContractRequest request) {
Teacher teacher = teacherGetService.byPhoneNumber(request.phoneNumber());
teacherUpdateService.updateActive(teacher);
bizppurioTeacherMessage.matchingChannel(teacher);
bizppurioTeacherMessage.applyChannel(teacher);
}

public List<Teacher> notifyClass(ApplicationForm applicationForm) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class TeacherEnglish {
private Teacher teacher;
@Column(columnDefinition = "TEXT")
private String appealPoint;
@Column(columnDefinition = "TEXT", nullable = false)
@Column(columnDefinition = "TEXT")
private String teachingExperience;
@Column(nullable = false)
private int teachingHistory;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public class TeacherInfo {
private String email;
@Column(nullable = false, unique = true)
private String phoneNumber;
@Column(nullable = false)
@Column
private String birth;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class TeacherMath {
private Teacher teacher;
@Column(columnDefinition = "TEXT")
private String appealPoint;
@Column(columnDefinition = "TEXT", nullable = false)
@Column(columnDefinition = "TEXT")
private String teachingExperience;
@Column(nullable = false)
private int teachingHistory;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import java.util.Optional;

public interface TeacherRepository extends JpaRepository<Teacher, Long>, TeacherDslRepository {
Optional<Teacher> findByTeacherInfo_PhoneNumber(String PhoneNumber);
Optional<Teacher> findByTeacherInfo_PhoneNumber(String phoneNumber);

void deleteAllByTeacherInfo_PhoneNumber(String phoneNumber);

Optional<Teacher> findByTeacherInfo_NameAndTeacherInfo_NickName(String name, String nickName);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ public class TeacherGetService {
private final TeacherAvailableRepository availableRepository;
private final TeacherDistrictRepository districtRepository;

public Teacher byNameAndNickName(String name, String nickName) {
return teacherRepository.findByTeacherInfo_NameAndTeacherInfo_NickName(name, nickName)
.orElseThrow();
}

public Teacher byPhoneNumber(String phoneNumber) {
return teacherRepository.findByTeacherInfo_PhoneNumber(phoneNumber)
.orElseThrow();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.yedu.backend.global.excel.application.dto;

import com.yedu.backend.domain.teacher.domain.entity.constant.TeacherGender;

import java.util.List;

public record TeacherInfoRequest(
String name,
String nickName,
String email,
String phoneNumber,
String birth,
TeacherGender gender,
String university,
String major,
String highSchool,
String highSchoolType,
String introduce,
String teachingStyle1,
String teachingStyleInfo1,
String teachingStyle2,
String teachingStyleInfo2,
boolean englishPossible,
boolean mathPossible,
String recommenedStudent,
String comment,
List<List<String>> available,
List<String> region,
String source,
boolean marketingAgree,
English english,
Math math
) {
Comment on lines +7 to +33
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๐Ÿ› ๏ธ Refactor suggestion

Add validation annotations for fields.

Consider adding validation annotations to ensure data integrity:

  1. Email validation for email
  2. Phone number format validation for phoneNumber
  3. Date format validation for birth
  4. Non-null validation for required fields
  5. Size constraints for lists
+import javax.validation.constraints.*;
+import java.util.List;

 public record TeacherInfoRequest(
+        @NotBlank(message = "Name is required")
         String name,
+        @NotBlank(message = "Nickname is required")
         String nickName,
+        @Email(message = "Invalid email format")
         String email,
+        @Pattern(regexp = "^\\d{3}-\\d{3,4}-\\d{4}$", message = "Invalid phone number format")
         String phoneNumber,
+        @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$", message = "Invalid date format (YYYY-MM-DD)")
         String birth,
+        @NotNull(message = "Gender is required")
         TeacherGender gender,
         // ... other fields ...
+        @Size(max = 7, message = "Maximum 7 days allowed")
         List<List<String>> available,
+        @Size(max = 5, message = "Maximum 5 regions allowed")
         List<String> region,
         // ... remaining fields ...
 )
๐Ÿ“ Committable suggestion

โ€ผ๏ธ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
public record TeacherInfoRequest(
String name,
String nickName,
String email,
String phoneNumber,
String birth,
TeacherGender gender,
String university,
String major,
String highSchool,
String highSchoolType,
String introduce,
String teachingStyle1,
String teachingStyleInfo1,
String teachingStyle2,
String teachingStyleInfo2,
boolean englishPossible,
boolean mathPossible,
String recommenedStudent,
String comment,
List<List<String>> available,
List<String> region,
String source,
boolean marketingAgree,
English english,
Math math
) {
import javax.validation.constraints.*;
import java.util.List;
public record TeacherInfoRequest(
@NotBlank(message = "Name is required")
String name,
@NotBlank(message = "Nickname is required")
String nickName,
@Email(message = "Invalid email format")
String email,
@Pattern(regexp = "^\\d{3}-\\d{3,4}-\\d{4}$", message = "Invalid phone number format")
String phoneNumber,
@Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$", message = "Invalid date format (YYYY-MM-DD)")
String birth,
@NotNull(message = "Gender is required")
TeacherGender gender,
String university,
String major,
String highSchool,
String highSchoolType,
String introduce,
String teachingStyle1,
String teachingStyleInfo1,
String teachingStyle2,
String teachingStyleInfo2,
boolean englishPossible,
boolean mathPossible,
String recommenedStudent,
String comment,
@Size(max = 7, message = "Maximum 7 days allowed")
List<List<String>> available,
@Size(max = 5, message = "Maximum 5 regions allowed")
List<String> region,
String source,
boolean marketingAgree,
English english,
Math math
) {
}

public record English(
String appealPoint,
String teachingExperience,
String foreignExperience,
int teachingHistory,
String teachingStyle,
String managementStyle
) {}

public record Math(
String appealPoint,
String teachingExperience,
int teachingHistory,
String teachingStyle,
String managementStyle
) {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package com.yedu.backend.global.excel.application.mapper;

import com.yedu.backend.domain.teacher.domain.entity.constant.TeacherGender;
import com.yedu.backend.global.excel.application.dto.TeacherInfoRequest;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static com.yedu.backend.global.excel.constant.TeacherExcelColumn.*;

public class ExcelMapper {

public static TeacherInfoRequest mapToInfoRequest(Row row) {
String email = getStringValue(row.getCell(EMAIL.getIndex()));
String name = getStringValue(row.getCell(NAME.getIndex()));
String nickName = getStringValue(row.getCell(NICKNAME.getIndex()));
String phoneNumber = getStringValue(row.getCell(PHONE_NUMBER.getIndex()));
double birthNum = getNumericValue(row.getCell(BIRTH.getIndex()));
String birth = birthNum == 0 ? null : String.valueOf(birthNum);
String gender = getStringValue(row.getCell(GENDER.getIndex()));
String university = getStringValue(row.getCell(UNIVERSITY.getIndex()));
String major = getStringValue(row.getCell(MAJOR.getIndex()));
String highSchool = getStringValue(row.getCell(HIGH_SCHOOL.getIndex()));
String highSchoolType = getStringValue(row.getCell(HIGH_SCHOOL_TYPE.getIndex()));
String introduce = getStringValue(row.getCell(INTRODUCE.getIndex()));
String teachingStyle1 = getStringValue(row.getCell(TEACHING_STYLE_1.getIndex()));
String teachingStyleInfo1 = getStringValue(row.getCell(TEACHING_STYLE_INFO_1.getIndex()));
String teachingStyle2 = getStringValue(row.getCell(TEACHING_STYLE_2.getIndex()));
String teachingStyleInfo2 = getStringValue(row.getCell(TEACHING_STYLE_INFO_2.getIndex()));
boolean englishPossible = getBooleanValueByString(row.getCell(ENGLISH_POSSIBLE.getIndex()));
boolean mathPossible = getBooleanValueByString(row.getCell(MATH_POSSIBLE.getIndex()));
String recommendStudent = getStringValue(row.getCell(RECOMMEND_STUDENT.getIndex()));
String comment = getStringValue(row.getCell(COMMENT.getIndex()));
List<List<String>> available = new ArrayList<>();
List<String> region = Arrays.stream((getStringValue(row.getCell(REGION.getIndex())))
.split(",")).toList();
String source = getStringValue(row.getCell(SOURCE.getIndex()));
boolean marketingAgree = true;

return new TeacherInfoRequest(
name, nickName, email, phoneNumber, birth, TeacherGender.valueOf(gender), university,
major, highSchool, highSchoolType, introduce, teachingStyle1, teachingStyleInfo1, teachingStyle2, teachingStyleInfo2,
englishPossible, mathPossible, recommendStudent, comment, available, region, source, marketingAgree, getEnglish(row), getMath(row)
);
}

private static TeacherInfoRequest.Math getMath(Row row) {
int mathTeachingHistory = (int) getNumericValue(row.getCell(MATH_TEACHING_HISTORY.getIndex()));
String mathAppealPoint = getStringValue(row.getCell(MATH_APPEAL_POINT.getIndex()));
String mathTeachingExperience = getStringValue(row.getCell(MATH_TEACHING_EXPERIENCE.getIndex()));
String mathTeachingStyle = getStringValue(row.getCell(MATH_TEACHING_STYLE.getIndex()));
String mathManageStyle = getStringValue(row.getCell(MATH_MANAGE_STYLE.getIndex()));
return new TeacherInfoRequest.Math(
mathAppealPoint,
mathTeachingExperience,
mathTeachingHistory,
mathTeachingStyle,
mathManageStyle
);
}

private static TeacherInfoRequest.English getEnglish(Row row) {
int englishTeachingHistory = (int) getNumericValue(row.getCell(ENGLISH_TEACHING_HISTORY.getIndex()));
String englishAppealPoint = getStringValue(row.getCell(ENGLISH_APPEAL_POINT.getIndex()));
String englishTeachingExperience = getStringValue(row.getCell(ENGLISH_TEACHING_EXPERIENCE.getIndex()));
String englishForeignExperience = getStringValue(row.getCell(ENGLISH_FOREIGN_EXPERIENCE.getIndex()));
String englishTeachingStyle = getStringValue(row.getCell(ENGLISH_TEACHING_STYLE.getIndex()));
String englishManagementStyle = getStringValue(row.getCell(ENGLISH_MANAGEMENT_STYLE.getIndex()));
// ์˜์–ด ๊ณผ์™ธ ์ •๋ณด
return new TeacherInfoRequest.English(
englishAppealPoint,
englishTeachingExperience,
englishForeignExperience,
englishTeachingHistory,
englishTeachingStyle,
englishManagementStyle
);
}

private static String getStringValue(Cell cell) {
return (cell != null && cell.getCellType() != CellType.BLANK && cell.getCellType() != CellType._NONE) ? cell.getStringCellValue() : null;
}

private static double getNumericValue(Cell cell) {
return (cell != null && cell.getCellType() != CellType.BLANK && cell.getCellType() != CellType._NONE) ? cell.getNumericCellValue() : 0;
}

private static boolean getBooleanValueByString(Cell cell) {
if (cell != null && cell.getCellType() != CellType.BLANK && cell.getCellType() != CellType._NONE) {
String value = cell.getStringCellValue();
return "๋„ค".equals(value);
}
return false;
}
}
Loading