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

fix: timetableLecture 클래스 필드 수정 #1070

Merged
merged 22 commits into from
Nov 27, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
22 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
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ public record InnerTimeTableLectureRequest(
List<Integer> classTime,

@Schema(description = "강의 장소", example = "도서관", requiredMode = NOT_REQUIRED)
@Size(max = 30, message = "강의 장소의 최대 글자는 30글자입니다.")
String classPlace,
List<String> classPlace,

@Schema(description = "교수명", example = "null", requiredMode = NOT_REQUIRED)
@Size(max = 30, message = "교수 명의 최대 글자는 30글자입니다.")
Expand All @@ -64,7 +63,7 @@ public TimetableLecture toTimetableLecture(TimetableFrame timetableFrame) {
return new TimetableLecture(
classTitle,
getClassTimeToString(),
classPlace,
getClassPlaceToString(classPlace.toString()),
professor,
grades,
memo,
Expand All @@ -78,7 +77,7 @@ public TimetableLecture toTimetableLecture(TimetableFrame timetableFrame, Lectur
return new TimetableLecture(
classTitle,
getClassTimeToString(),
classPlace,
getClassPlaceToString(classPlace.toString()),
professor,
grades,
memo,
Expand All @@ -94,5 +93,12 @@ private String getClassTimeToString() {
}
return null;
}

private String getClassPlaceToString(String classPlace) {
if (classPlace != null) {
return classPlace.substring(1, classPlace.length() - 1);
}
return null;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,10 @@ public record InnerTimetableLectureRequest(
String classTitle,

@Schema(description = "강의 시간", example = "[210, 211]", requiredMode = NOT_REQUIRED)
@Size(max = 100, message = "강의 시간의 최대 글자는 100글자입니다.")
List<Integer> classTime,

@Schema(description = "강의 장소", example = "null", requiredMode = NOT_REQUIRED)
@Size(max = 30, message = "강의 장소의 최대 글자는 30글자입니다.")
String classPlace,
List<String> classPlace,

@Schema(description = "강의 교수", example = "이돈우", requiredMode = NOT_REQUIRED)
@Size(max = 30, message = "교수 명의 최대 글자는 30글자입니다.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ public class TimetableLecture extends BaseEntity {
@Column(name = "class_time", columnDefinition = "TEXT")
private String classTime;

@Size(max = 30)
@Column(name = "class_place", length = 30)
@Size(max = 255)
@Column(name = "class_place", length = 255)
Copy link
Contributor

Choose a reason for hiding this comment

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

A

구우웃~!

private String classPlace;
Copy link
Contributor

Choose a reason for hiding this comment

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

R

생각해보니 이 부분 TEXT로 변경해야할것 같습니다. List형식의 dto는 @SiZe어노테이션의 유형 검증이 안돼서 서버오류가 발생하더라고요.. 그래서 classTime도 현재 TEXT로 돼있는 이유가 저번에 이러한 이유로 서버 오류가 발생했었기때문이에요.

그래서 맘편하게 model에서 TEXT로 변경하거나, DTO에서 리스트형식의 유효성검증에 대해서 더 찾아봐야할것같아요!

Copy link
Contributor

Choose a reason for hiding this comment

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

지금 로컬에서 돌려보니 서버오류 발생하네요!

Copy link
Contributor Author

@Soundbar91 Soundbar91 Nov 24, 2024

Choose a reason for hiding this comment

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

의견 감사합니다 ! List에 Size 어노테이션을 적용하면, List 길이를 검증하는 것을 생각 못 했네요..
그래서 대안으로 주신 TEXT도 좋다고 생각을 합니다.

저는 개인적으로는 TEXT으로 변경하는 것 보다는 DTO에서 유효성 검증을 추가적으로 하는 것이 어떨까라는 생각이 듭니다.

관련해서 코드를 한번 작성해봤습니다.

@JsonNaming(value = SnakeCaseStrategy.class)
public record InnerTimeTableLectureRequest(
    ...

    @Schema(description = "강의 장소", example = "도서관", requiredMode = NOT_REQUIRED)
    @Size(max = 10)
    @Valid
    List<ClassPlace> classPlace,

    ...
) {
    public record ClassPlace(
        @Length(max = 20)
        String name
    ) {
    }
}

강의 장소 이름 길이 제한은 20, 총 강의 장소의 개수는 10개만 입력을 받게 됩니다.
총 강의 장소에 개수를 거는 상황이 발생하지만, 하나의 커스텀 강의에서 10개 이상의 강의 장소를 선택할까?라는 의문이 드네요,, 만약 이 방안으로 가게 된다면 PM님과의 상의가 필요해 보이는 부분입니다.

요청 메시지 바디는 다음과 같습니다.

{
  "timetable_frame_id": 12084,
  "timetable_lecture": [
    {
      "class_title": "테스트",
      "class_time": [1, 2, 3, -1, 101, 102, 103],
      "class_place": [
        {
          "name": "장소"
        },
        {
          "name": "도서관"
        }
      ],
      "professor": "null",
      "grades": "0",
      "memo": "메모메모"
    }
  ]
}

이전 데이터와의 호환성(?)을 위해 파싱 메소드도 다음과 같이 변경해야할 것 같습니다.

private String getClassPlaceToString() {
    if (classPlace == null) {
        return null;
    }
    return classPlace.stream()
        .map(ClassPlace::name)
        .collect(Collectors.joining(", "));
}

Copy link
Contributor Author

Choose a reason for hiding this comment

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

+ class_time으로 저렇게 바꾸고 싶다는 생각이...

Copy link
Contributor

Choose a reason for hiding this comment

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

저도 dto로 검증하면 좋긴한데.. list형식은 dto에서 size유효성 검증이 안되더라구요


@Size(max = 30)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public TimetableLectureResponse updateTimetablesLectures(Integer userId, Timetab
timetableLecture.update(
timetableRequest.classTitle(),
timetableRequest.classTime().toString(),
timetableRequest.classPlace(),
getClassPlaceToString(timetableRequest.classPlace().toString()),
timetableRequest.professor(),
timetableRequest.grades(),
timetableRequest.memo());
Expand All @@ -137,6 +137,13 @@ public TimetableLectureResponse updateTimetablesLectures(Integer userId, Timetab
return getTimetableLectureResponse(userId, timetableFrame, timetableLectures);
}

private String getClassPlaceToString(String classPlace) {
if (classPlace != null) {
return classPlace.substring(1, classPlace.length() - 1);
}
return null;
}

@Transactional
public TimetableLectureResponse getTimetableLectures(Integer userId, Integer timetableFrameId) {
TimetableFrame frame = timetableFrameRepositoryV2.getById(timetableFrameId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,15 +275,15 @@ void setup() {
{
"class_title": "커스텀생성1",
"class_time" : [200, 201],
"class_place" : "한기대",
"class_place" : ["한기대"],
"professor" : "서정빈",
"grades": "2",
"memo" : "메모"
},
{
"class_title": "커스텀생성2",
"class_time" : [202, 203],
"class_place" : "참빛관 편의점",
"class_place" : ["참빛관 편의점"],
"professor" : "감사 서정빈",
"grades": "1",
"memo" : "메모"
Expand Down Expand Up @@ -356,7 +356,7 @@ void setup() {
"id": 1,
"class_title": "커스텀바꿔요1",
"class_time" : [200, 201],
"class_place" : "한기대",
"class_place" : ["한기대"],
"professor" : "서정빈",
"grades" : "0",
"memo" : "메모한당 히히"
Expand All @@ -365,7 +365,7 @@ void setup() {
"id": 2,
"class_title": "커스텀바꿔요2",
"class_time" : [202, 203],
"class_place" : "참빛관 편의점",
"class_place" : ["참빛관 편의점"],
"professor" : "알바 서정빈",
"grades" : "0",
"memo" : "메모한당 히히"
Expand Down
Loading