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

[YS-203] hotfix: 공고 등록 API 비대면 옵션 선택 시 필드 처리 개선 #56

Merged
merged 2 commits into from
Jan 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -38,9 +38,9 @@ class CreateExperimentPostUseCase(
val timeRequired: TimeSlot?,

val leadResearcher: String,
val univName: String,
val region: Region,
val area: Area,
val univName: String?,
val region: Region?,
val area: Area?,
val detailedAddress: String?,

val reward: String,
Expand Down Expand Up @@ -86,14 +86,7 @@ class CreateExperimentPostUseCase(

override fun execute(input: Input): Output {
val member = memberGateway.getById(input.memberId)

if (member.role != RoleType.RESEARCHER) {
throw PermissionDeniedException()
}

if (input.imageListInfo.images.size > 3) {
throw ExperimentPostException(ErrorCode.EXPERIMENT_POST_IMAGE_SIZE_LIMIT)
}
validate(input, member)

val targetGroup = createTargetGroup(input.targetGroupInfo)
val applyMethod = createApplyMethod(input.applyMethodInfo)
Expand Down Expand Up @@ -181,4 +174,28 @@ class CreateExperimentPostUseCase(
updatedAt = LocalDateTime.now(),
)
}

private fun validate(input: Input, member: Member){
validateMemberRole(member)
validateImageListSize(input.imageListInfo)
validateOnlineMatchType(input)
}

private fun validateMemberRole(member :Member){
if(member.role != RoleType.RESEARCHER)
throw PermissionDeniedException()
}

private fun validateImageListSize(imageListInfo: ImageListInfo){
if(imageListInfo.images.size > 3)
throw ExperimentPostException(ErrorCode.EXPERIMENT_POST_IMAGE_SIZE_LIMIT);
}

private fun validateOnlineMatchType(input: Input){
if(input.matchType == MatchType.ONLINE){
if(input.univName != null || input.region != null || input.area != null) {
throw ExperimentPostException(ErrorCode.EXPERIMENT_POST_INVALID_ONLINE_REQUEST)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class GetExperimentPostsUseCase (
val experimentPostId: Long,
val title: String,
val views: Int,
val univName: String,
val univName: String?,
val reward: String,
val recruitStatus: Boolean,
val durationInfo: DurationInfoOutput
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,5 +89,5 @@ enum class ErrorCode(
EXPERIMENT_POST_IMAGE_SIZE_LIMIT("EP005", "Image can be uploaded maximum 3 images.", HttpStatus.BAD_REQUEST),
EXPERIMENT_POST_RECRUIT_STATUS_ERROR("EP006", "This experiment post has already closed recruitment.", HttpStatus.BAD_REQUEST),
EXPERIMENT_POST_CANNOT_UPDATE_DATE("EP007", "You cannot update experiment post with past experiment dates.", HttpStatus.BAD_REQUEST),
EXPERIMENT_POST_CANNOT_UPDATE_ALARM("EP008", "The alarmAgree for the experiment post cannot be updated.", HttpStatus.BAD_REQUEST)
EXPERIMENT_POST_INVALID_ONLINE_REQUEST("EP008", "univName, region, area field value must be null when MatchType is online.", HttpStatus.BAD_REQUEST),
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ data class ExperimentPost(
var timeRequired: TimeSlot?,
var count: Int,
var matchType: MatchType,
var univName: String,
var region: Region,
var area: Area,
var univName: String?,
var region: Region?,
var area: Area?,
var detailedAddress: String?,
val alarmAgree: Boolean,
var recruitStatus: Boolean,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,16 @@ class ExperimentPostEntity(
@Column(name = "match_type", nullable = false)
var matchType: MatchType,

@Column(name = "univ_name", length = 100, nullable = false)
var univName: String,
@Column(name = "univ_name", length = 100)
var univName: String?,

@Enumerated(EnumType.STRING)
@Column(name = "region", nullable = false)
var region: Region,
@Column(name = "region")
var region: Region?,

@Enumerated(EnumType.STRING)
@Column(name = "area", nullable = false)
var area: Area,
@Column(name = "area")
var area: Area?,

@Column(name = "detailed_address", length = 70)
var detailedAddress: String?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ data class CreateExperimentPostRequest(

val leadResearcher: String, // 연구 책임 정보 -> 기본값: 연구자 정보에서 끌어와야 함, 추후에 자유롭게 수정 가능

val univName: String, // 대학교 이름 -> 기본값: 연구자 정보에서 끌어와야 함, 추후에 자유롭게 수정 가능
val region: Region,
val area: Area,
val univName: String?, // 대학교 이름 -> 기본값: 연구자 정보에서 끌어와야 함, 추후에 자유롭게 수정 가능
val region: Region?,
val area: Area?,
val detailedAddress: String?,

val reward: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,13 @@ data class ExperimentPostDetailResponse(
@Schema(description = "주소 응답 DTO")
data class AddressResponse(
@Schema(description = "학교", example = "건국대학교")
val univName: String,
val univName: String?,

@Schema(description = "지역", example = "SEOUL")
val region: Region,
val region: Region?,

@Schema(description = "구/군", example = "GWANGJINGU")
val area: Area,
val area: Area?,

@Schema(description = "상세 주소 (nullable)", example = "1동 101호", nullable = true)
val detailedAddress: String?
Expand Down
Loading