diff --git a/module-api/src/main/java/com/checkping/api/controller/notice/NoticeController.java b/module-api/src/main/java/com/checkping/api/controller/notice/NoticeController.java index 20329dee..3ea2bfc4 100644 --- a/module-api/src/main/java/com/checkping/api/controller/notice/NoticeController.java +++ b/module-api/src/main/java/com/checkping/api/controller/notice/NoticeController.java @@ -2,13 +2,14 @@ import com.checkping.common.response.BaseResponse; import com.checkping.dto.notice.request.NoticeCreateRequestDto; -import com.checkping.dto.notice.response.NoticeResponseDto; +import com.checkping.dto.notice.request.NoticeUpdateRequestDto; +import com.checkping.dto.notice.response.NoticeCreateResponseDto; +import com.checkping.dto.notice.response.NoticeUpdateResponseDto; import com.checkping.service.notice.NoticeServiceImpl; +import jakarta.persistence.Id; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequiredArgsConstructor @@ -18,8 +19,16 @@ public class NoticeController { private NoticeServiceImpl noticeService; @PostMapping("/admins/notices") - public BaseResponse registerNotice(@RequestBody NoticeCreateRequestDto noticeCreateRequestDto) { - NoticeResponseDto noticeResponseDto = noticeService.registerNotice(noticeCreateRequestDto); - return BaseResponse.success(noticeResponseDto); + public BaseResponse registerNotice(@RequestBody NoticeCreateRequestDto noticeCreateRequestDto) { + NoticeCreateResponseDto noticeCreateResponseDto = noticeService.registerNotice(noticeCreateRequestDto); + return BaseResponse.success(noticeCreateResponseDto); + } + + @PatchMapping("/admins/notices/{noticeid}") + public BaseResponse updateNotice( + @PathVariable Long noticeid, + @RequestBody NoticeUpdateRequestDto noticeUpdateRequestDto){ + NoticeUpdateResponseDto noticeUpdateResponseDto = noticeService.updateNotice(noticeid, noticeUpdateRequestDto); + return BaseResponse.success(noticeUpdateResponseDto); } } diff --git a/module-domain/src/main/java/com/checkping/domain/notice/Notice.java b/module-domain/src/main/java/com/checkping/domain/notice/Notice.java index fe056e8f..7548b4a6 100644 --- a/module-domain/src/main/java/com/checkping/domain/notice/Notice.java +++ b/module-domain/src/main/java/com/checkping/domain/notice/Notice.java @@ -68,7 +68,6 @@ public enum Category { private final String descrption; } - @Getter @RequiredArgsConstructor public enum Priority { @@ -77,4 +76,11 @@ public enum Priority { private final String descrption; } + + public void updateNotice(String title, String content,String category, String priority){ + if (title != null) this.title = title; + if (content != null) this.content = content; + if (category != null) this.category = Category.valueOf(category); + if (priority != null) this.priority = Priority.valueOf(priority); + } } diff --git a/module-service/src/main/java/com/checkping/dto/notice/request/NoticeUpdateRequestDto.java b/module-service/src/main/java/com/checkping/dto/notice/request/NoticeUpdateRequestDto.java new file mode 100644 index 00000000..3c9a56eb --- /dev/null +++ b/module-service/src/main/java/com/checkping/dto/notice/request/NoticeUpdateRequestDto.java @@ -0,0 +1,29 @@ +package com.checkping.dto.notice.request; + +import com.checkping.domain.notice.Notice; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@AllArgsConstructor +@Getter +public class NoticeUpdateRequestDto { + + private String title; + + private String content; + + private String category; + + private String priority; + + public Notice toEntity(){ + return Notice.builder() + .title(title) + .content(content) + .category(Notice.Category.valueOf(category)) + .priority(Notice.Priority.valueOf(priority)) + .build(); + } +} diff --git a/module-service/src/main/java/com/checkping/dto/notice/response/NoticeResponseDto.java b/module-service/src/main/java/com/checkping/dto/notice/response/NoticeCreateResponseDto.java similarity index 76% rename from module-service/src/main/java/com/checkping/dto/notice/response/NoticeResponseDto.java rename to module-service/src/main/java/com/checkping/dto/notice/response/NoticeCreateResponseDto.java index 3fe62a15..bdb51345 100644 --- a/module-service/src/main/java/com/checkping/dto/notice/response/NoticeResponseDto.java +++ b/module-service/src/main/java/com/checkping/dto/notice/response/NoticeCreateResponseDto.java @@ -9,7 +9,9 @@ @Getter @Builder -public class NoticeResponseDto { +public class NoticeCreateResponseDto { + private Long id; + private Long adminId; private String title; @@ -22,8 +24,9 @@ public class NoticeResponseDto { private LocalDateTime regAt; - public static NoticeResponseDto toDto(Notice notice){ - return NoticeResponseDto.builder() + public static NoticeCreateResponseDto toDto(Notice notice){ + return NoticeCreateResponseDto.builder() + .id(notice.getId()) .adminId(notice.getAdminId()) .title(notice.getTitle()) .content(notice.getContent()) diff --git a/module-service/src/main/java/com/checkping/dto/notice/response/NoticeUpdateResponseDto.java b/module-service/src/main/java/com/checkping/dto/notice/response/NoticeUpdateResponseDto.java new file mode 100644 index 00000000..c43a963f --- /dev/null +++ b/module-service/src/main/java/com/checkping/dto/notice/response/NoticeUpdateResponseDto.java @@ -0,0 +1,44 @@ +package com.checkping.dto.notice.response; + +import com.checkping.domain.notice.Notice; +import com.checkping.dto.notice.request.NoticeUpdateRequestDto; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Builder +@Getter +public class NoticeUpdateResponseDto { + + private Long id; + + private Long adminId; + + private String title; + + private String content; + + private Notice.Category category; + + private Notice.Priority priority; + + private LocalDateTime regAt; + + private LocalDateTime updatedAt; + + public static NoticeUpdateResponseDto toDto(Notice notice){ + return NoticeUpdateResponseDto.builder() + .id(notice.getId()) + .adminId(notice.getAdminId()) + .title(notice.getTitle()) + .content(notice.getContent()) + .category(notice.getCategory()) + .priority(notice.getPriority()) + .regAt(notice.getUpdatedAt()) + .updatedAt(notice.getUpdatedAt()) + .build(); + } +} diff --git a/module-service/src/main/java/com/checkping/service/notice/NoticeService.java b/module-service/src/main/java/com/checkping/service/notice/NoticeService.java index 26b2d0ee..9f37990b 100644 --- a/module-service/src/main/java/com/checkping/service/notice/NoticeService.java +++ b/module-service/src/main/java/com/checkping/service/notice/NoticeService.java @@ -1,10 +1,14 @@ package com.checkping.service.notice; import com.checkping.dto.notice.request.NoticeCreateRequestDto; -import com.checkping.dto.notice.response.NoticeResponseDto; +import com.checkping.dto.notice.request.NoticeUpdateRequestDto; +import com.checkping.dto.notice.response.NoticeCreateResponseDto; +import com.checkping.dto.notice.response.NoticeUpdateResponseDto; public interface NoticeService { - NoticeResponseDto registerNotice(NoticeCreateRequestDto noticeCreateRequestDto); + NoticeCreateResponseDto registerNotice(NoticeCreateRequestDto noticeCreateRequestDto); + + NoticeUpdateResponseDto updateNotice(Long noticeid, NoticeUpdateRequestDto noticeUpdateRequestDto); } diff --git a/module-service/src/main/java/com/checkping/service/notice/NoticeServiceImpl.java b/module-service/src/main/java/com/checkping/service/notice/NoticeServiceImpl.java index d74a4caa..979e03d9 100644 --- a/module-service/src/main/java/com/checkping/service/notice/NoticeServiceImpl.java +++ b/module-service/src/main/java/com/checkping/service/notice/NoticeServiceImpl.java @@ -3,9 +3,14 @@ import com.checkping.common.enums.ErrorCode; import com.checkping.common.exception.BaseException; import com.checkping.domain.notice.Notice; +import com.checkping.domain.project.Project; import com.checkping.dto.notice.request.NoticeCreateRequestDto; -import com.checkping.dto.notice.response.NoticeResponseDto; +import com.checkping.dto.notice.request.NoticeUpdateRequestDto; +import com.checkping.dto.notice.response.NoticeCreateResponseDto; +import com.checkping.dto.notice.response.NoticeUpdateResponseDto; import com.checkping.infra.repository.notice.NoticeRepository; +import jakarta.persistence.Id; +import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -19,7 +24,7 @@ public class NoticeServiceImpl implements NoticeService { private NoticeRepository noticeRepository; @Override - public NoticeResponseDto registerNotice(NoticeCreateRequestDto noticeCreateRequestDto) { + public NoticeCreateResponseDto registerNotice(NoticeCreateRequestDto noticeCreateRequestDto) { if (noticeCreateRequestDto.getAdminId() == null || StringUtils.isBlank(noticeCreateRequestDto.getTitle()) || @@ -30,6 +35,26 @@ public NoticeResponseDto registerNotice(NoticeCreateRequestDto noticeCreateReque } Notice notice = noticeRepository.save(noticeCreateRequestDto.toEntity()); - return NoticeResponseDto.toDto(notice); + return NoticeCreateResponseDto.toDto(notice); + } + + @Override + @Transactional + public NoticeUpdateResponseDto updateNotice(Long noticeid, NoticeUpdateRequestDto noticeUpdateRequestDto) { + + if(StringUtils.isBlank(noticeUpdateRequestDto.getTitle()) && + StringUtils.isBlank(noticeUpdateRequestDto.getContent()) && + noticeUpdateRequestDto.getCategory() == null && + noticeUpdateRequestDto.getPriority() == null){ + throw new BaseException(ErrorCode.BAD_REQUEST); + } + + Notice notice = noticeRepository.findById(noticeid) + .orElseThrow(() -> new BaseException(ErrorCode.NOT_FOUND)); + + notice.updateNotice(noticeUpdateRequestDto.getTitle(), noticeUpdateRequestDto.getContent(), noticeUpdateRequestDto.getCategory(), noticeUpdateRequestDto.getPriority()); + + return NoticeUpdateResponseDto.toDto(notice); + } }