Skip to content

Commit

Permalink
Merge pull request #98 from DSM-Repo/notice
Browse files Browse the repository at this point in the history
공지 작성, 삭제, 수정 api 추가
  • Loading branch information
ori0o0p authored Sep 26, 2024
2 parents 1d263b8 + f0c56bb commit 38dbd1d
Show file tree
Hide file tree
Showing 15 changed files with 237 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.repo.whopper.application.notice.impl;

import com.repo.whopper.application.notice.usecase.DeleteNoticeUseCase;
import com.repo.whopper.domain.notice.NoticeRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
public class DeleteNoticeService implements DeleteNoticeUseCase {
private final NoticeRepository noticeRepository;

@Override
@Transactional
public void deleteNotice(String noticeId) {
noticeRepository.deleteById(noticeId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.repo.whopper.application.notice.impl;

import com.repo.whopper.application.notice.usecase.EditNoticeUseCase;
import com.repo.whopper.common.exception.notice.NoticeNotFoundException;
import com.repo.whopper.domain.notice.NoticeRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
public class EditNoticeService implements EditNoticeUseCase {
private final NoticeRepository noticeRepository;

@Override
@Transactional
public void editNotice(String noticeId, String title, String content) {
final var notice = noticeRepository.findById(noticeId)
.orElseThrow(()-> NoticeNotFoundException.EXCEPTION);

var newNotice = notice.editNotice(title, content);
noticeRepository.save(newNotice);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.repo.whopper.application.notice.impl;

import com.repo.whopper.application.notice.usecase.WriteNoticeUseCase;
import com.repo.whopper.application.teacher.component.CurrentTeacher;
import com.repo.whopper.domain.notice.NoticeModel;
import com.repo.whopper.domain.notice.NoticeRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;

@Service
@RequiredArgsConstructor
public class WriteNoticeService implements WriteNoticeUseCase {
private final NoticeRepository noticeRepository;
private final CurrentTeacher currentTeacher;

@Override
@Transactional
public void writeNotice(String title, String content) {
LocalDateTime now = LocalDateTime.now();

final var teacher = currentTeacher.getTeacher();

noticeRepository.save(new NoticeModel(null, title, content, teacher.name(), now, false));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.repo.whopper.application.notice.usecase;

public interface DeleteNoticeUseCase {
void deleteNotice(String noticeId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.repo.whopper.application.notice.usecase;

public interface EditNoticeUseCase {
void editNotice(String noticeId, String title, String content);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.repo.whopper.common.swagger.notice;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "Delete_notice", description = "공지 삭제 API")
public interface DeleteNoticeApiDocumentation {
@ApiResponses({
@ApiResponse(
responseCode = "200",
description = "OK, 성공!"
)
})
@Operation(
summary = "공지 삭제 API",
description = "클라이언트에서 받은 id로 공지를 삭제합니다."
)
void deleteNotice(String noticeId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.repo.whopper.common.swagger.notice;

import com.repo.whopper.interfaces.notice.dto.request.NoticeRequest;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "Edit_notice", description = "공지 수정 API")
public interface EditNoticeApiDocumentation {
@ApiResponses({
@ApiResponse(
responseCode = "200",
description = "OK, 성공!"
)
})
@Operation(
summary = "공지 수정 API",
description = "클라이언트에서 받은 id로 공지를 검색하고, 검색한 공지의 제목과 내용을 수정합니다."
)
void editNotice(String noticeId, NoticeRequest request);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.repo.whopper.common.swagger.notice;

import com.repo.whopper.interfaces.notice.dto.request.NoticeRequest;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "Write_notice", description = "공지 작성 API")
public interface WriteNoticeApiDocumentation {
@ApiResponses({
@ApiResponse(
responseCode = "200",
description = "OK, 성공!"
)
})
@Operation(
summary = "공지 작성 API",
description = "제목과 내용을 받아서 데이터베이스에 저장합니다."
)
void writeNotice(NoticeRequest request);
}
4 changes: 4 additions & 0 deletions src/main/java/com/repo/whopper/domain/notice/NoticeModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,8 @@ public record NoticeModel(
public NoticeModel checkNotice() {
return new NoticeModel(id, title, content, writerName, createdAt, true);
}

public NoticeModel editNotice(String title, String content) {
return new NoticeModel(id, title, content, writerName, createdAt, checked);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
import java.util.stream.Stream;

public interface NoticeRepository {
NoticeModel save(NoticeModel model);
void save(NoticeModel model);
Optional<NoticeModel> findById(String noticeId);
Stream<NoticeModel> findAll();
void deleteById(String noticeId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ public class NoticeRepositoryImpl implements NoticeRepository {
private final NoticeEntityMapper noticeEntityMapper;

@Override
public NoticeModel save(NoticeModel model) {
public void save(NoticeModel model) {
final var entity = noticeEntityMapper.toEntity(model);

return noticeEntityMapper.toModel(noticeMongoRepository.save(entity));
noticeMongoRepository.save(entity);
}

@Override
Expand All @@ -30,4 +30,9 @@ public Stream<NoticeModel> findAll() {

return noticeEntityMapper.toStreamLibraryModel(result);
}

@Override
public void deleteById(String noticeId) {
noticeMongoRepository.deleteById(noticeId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.repo.whopper.interfaces.notice;

import com.repo.whopper.application.notice.usecase.DeleteNoticeUseCase;
import com.repo.whopper.common.annotation.OnlyTeacher;
import com.repo.whopper.common.swagger.notice.DeleteNoticeApiDocumentation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("/notice")
public class DeleteNoticeController implements DeleteNoticeApiDocumentation {
private final DeleteNoticeUseCase deleteNoticeUseCase;

@OnlyTeacher
@DeleteMapping("/{noticeId}")
public void deleteNotice(@PathVariable String noticeId) {
deleteNoticeUseCase.deleteNotice(noticeId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.repo.whopper.interfaces.notice;

import com.repo.whopper.application.notice.usecase.EditNoticeUseCase;
import com.repo.whopper.common.annotation.OnlyTeacher;
import com.repo.whopper.common.swagger.notice.EditNoticeApiDocumentation;
import com.repo.whopper.interfaces.notice.dto.request.NoticeRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("/notice")
public class EditNoticeController implements EditNoticeApiDocumentation {
private final EditNoticeUseCase editNoticeUseCase;

@OnlyTeacher
@PatchMapping("/{noticeId}")
public void editNotice(@PathVariable String noticeId, @RequestBody NoticeRequest request) {
editNoticeUseCase.editNotice(noticeId, request.title(), request.content());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.repo.whopper.interfaces.notice;

import com.repo.whopper.application.notice.usecase.WriteNoticeUseCase;
import com.repo.whopper.common.annotation.OnlyTeacher;
import com.repo.whopper.common.swagger.notice.WriteNoticeApiDocumentation;
import com.repo.whopper.interfaces.notice.dto.request.NoticeRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("/notice")
public class WriteNoticeController implements WriteNoticeApiDocumentation {
private final WriteNoticeUseCase writeNoticeUseCase;

@OnlyTeacher
@PostMapping
public void writeNotice(@RequestBody NoticeRequest request) {
writeNoticeUseCase.writeNotice(request.title(), request.content());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.repo.whopper.interfaces.notice.dto.request;

public record NoticeRequest(
String title,
String content
) {}

0 comments on commit 38dbd1d

Please sign in to comment.