diff --git a/src/main/java/com/sponus/sponusbe/domain/announcement/controller/AnnouncementController.java b/src/main/java/com/sponus/sponusbe/domain/announcement/controller/AnnouncementController.java index f8803f31..6fcbc1ba 100644 --- a/src/main/java/com/sponus/sponusbe/domain/announcement/controller/AnnouncementController.java +++ b/src/main/java/com/sponus/sponusbe/domain/announcement/controller/AnnouncementController.java @@ -98,7 +98,7 @@ public ApiResponse updateAnnouncement( @AuthOrganization Organization authOrganization, @PathVariable Long announcementId, @RequestPart("request") @Valid AnnouncementUpdateRequest request, - @RequestPart(value = "images") @Valid List images + @RequestPart(value = "images", required = false) @Valid List images ) { return ApiResponse.onSuccess(announcementService.updateAnnouncement( authOrganization, diff --git a/src/main/java/com/sponus/sponusbe/domain/announcement/dto/request/AnnouncementUpdateRequest.java b/src/main/java/com/sponus/sponusbe/domain/announcement/dto/request/AnnouncementUpdateRequest.java index de87f380..391c79fb 100644 --- a/src/main/java/com/sponus/sponusbe/domain/announcement/dto/request/AnnouncementUpdateRequest.java +++ b/src/main/java/com/sponus/sponusbe/domain/announcement/dto/request/AnnouncementUpdateRequest.java @@ -1,39 +1,17 @@ package com.sponus.sponusbe.domain.announcement.dto.request; -import static com.sponus.sponusbe.domain.announcement.entity.enums.AnnouncementStatus.*; - -import com.sponus.sponusbe.domain.announcement.entity.Announcement; import com.sponus.sponusbe.domain.announcement.entity.enums.AnnouncementCategory; import com.sponus.sponusbe.domain.announcement.entity.enums.AnnouncementStatus; import com.sponus.sponusbe.domain.announcement.entity.enums.AnnouncementType; -import com.sponus.sponusbe.domain.organization.entity.Organization; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; import lombok.Builder; @Builder public record AnnouncementUpdateRequest( - @NotBlank(message = "[ERROR] 타이틀 입력은 필수 입니다.") String title, - @NotNull(message = "[ERROR] 유형 입력은 필수 입니다.") AnnouncementType type, - @NotNull(message = "[ERROR] 카테코리 입력은 필수 입니다.") AnnouncementCategory category, - @NotBlank(message = "[ERROR] 내용 입력은 필수 입니다.") String content, - AnnouncementStatus status ) { - - public Announcement toEntity(Organization writer) { - return Announcement.builder() - .writer(writer) - .title(title) - .type(type) - .category(category) - .content(content) - .status(OPENED) - .build(); - } } diff --git a/src/main/java/com/sponus/sponusbe/domain/announcement/exception/AnnouncementErrorCode.java b/src/main/java/com/sponus/sponusbe/domain/announcement/exception/AnnouncementErrorCode.java index f32a252b..a7600f13 100644 --- a/src/main/java/com/sponus/sponusbe/domain/announcement/exception/AnnouncementErrorCode.java +++ b/src/main/java/com/sponus/sponusbe/domain/announcement/exception/AnnouncementErrorCode.java @@ -14,7 +14,7 @@ public enum AnnouncementErrorCode implements BaseErrorCode { ANNOUNCEMENT_ERROR(HttpStatus.BAD_REQUEST, "ANC4000", "공고 관련 에러"), ANNOUNCEMENT_ALREADY_DELETED(HttpStatus.BAD_REQUEST, "ANC4001", "이미 삭제된 공지사항입니다."), INVALID_ORGANIZATION(HttpStatus.BAD_REQUEST, "ANC4002", "해당 단체의 공고가 아닙니다."), - INVALID_ANNOUNCEMENT_STATUS(HttpStatus.BAD_REQUEST, "ANC4003", "해당 상태의 공고는 수정할 수 없습니다."), + CLOSED_ANNOUNCEMENT_STATUS(HttpStatus.BAD_REQUEST, "ANC4003", "마감된 공고는 수정할 수 없습니다."), ANNOUNCEMENT_NOT_IN_PROGRESS(HttpStatus.BAD_REQUEST, "ANC4004", "진행 중인 공고가 아닙니다."), ANNOUNCEMENT_NOT_FOUND(HttpStatus.NOT_FOUND, "ANC4040", "해당 공고가 존재하지 않습니다."); diff --git a/src/main/java/com/sponus/sponusbe/domain/announcement/service/AnnouncementService.java b/src/main/java/com/sponus/sponusbe/domain/announcement/service/AnnouncementService.java index 802c7e6d..f0c1d526 100644 --- a/src/main/java/com/sponus/sponusbe/domain/announcement/service/AnnouncementService.java +++ b/src/main/java/com/sponus/sponusbe/domain/announcement/service/AnnouncementService.java @@ -82,7 +82,7 @@ public AnnouncementUpdateResponse updateAnnouncement( .orElseThrow(() -> new AnnouncementException(AnnouncementErrorCode.ANNOUNCEMENT_NOT_FOUND)); if (announcement.getStatus() != AnnouncementStatus.OPENED) - throw new AnnouncementException(AnnouncementErrorCode.INVALID_ANNOUNCEMENT_STATUS); + throw new AnnouncementException(AnnouncementErrorCode.CLOSED_ANNOUNCEMENT_STATUS); if (!isOrganizationsAnnouncement(authOrganization.getId(), announcement)) throw new AnnouncementException(AnnouncementErrorCode.INVALID_ORGANIZATION); @@ -93,7 +93,11 @@ public AnnouncementUpdateResponse updateAnnouncement( request.content(), request.status() ); - updateAnnouncementImages(announcement, images); + + // 공고는 이미지가 필수이므로, 이미지가 없는 경우에는 업데이트하지 않음 + if (images != null) + updateAnnouncementImages(announcement, images); + announcementRepository.save(announcement); return AnnouncementUpdateResponse.from(announcement); }