diff --git a/src/main/java/com/tiki/server/common/Constants.java b/src/main/java/com/tiki/server/common/Constants.java index 7981f498..cfff9a15 100644 --- a/src/main/java/com/tiki/server/common/Constants.java +++ b/src/main/java/com/tiki/server/common/Constants.java @@ -3,4 +3,5 @@ public class Constants { public static final String AUTHORIZATION = "Authorization"; public static final String BEARER = "Bearer "; + public static final String WRONG_INPUT = "잘못된 JSON 형식입니다."; } diff --git a/src/main/java/com/tiki/server/common/handler/ErrorHandler.java b/src/main/java/com/tiki/server/common/handler/ErrorHandler.java index 07e0436f..5b7b29f1 100644 --- a/src/main/java/com/tiki/server/common/handler/ErrorHandler.java +++ b/src/main/java/com/tiki/server/common/handler/ErrorHandler.java @@ -3,7 +3,10 @@ import com.tiki.server.auth.exception.AuthException; import com.tiki.server.common.dto.ErrorCodeResponse; import com.tiki.server.emailverification.exception.EmailVerificationException; +import com.tiki.server.note.exception.NoteException; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -20,6 +23,7 @@ import lombok.val; import static com.tiki.server.auth.message.ErrorCode.UNCAUGHT_SERVER_EXCEPTION; +import static com.tiki.server.common.Constants.WRONG_INPUT; @Slf4j @RestControllerAdvice @@ -60,6 +64,13 @@ public ResponseEntity documentException(DocumentException exceptio return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); } + @ExceptionHandler(NoteException.class) + public ResponseEntity noteException(NoteException exception) { + log.error(exception.getMessage()); + val errorCode = exception.getErrorCode(); + return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); + } + @ExceptionHandler(ExternalException.class) public ResponseEntity externalException(ExternalException exception) { log.error(exception.getMessage()); @@ -79,7 +90,14 @@ public ResponseEntity AuthException(AuthException exception) { log.error(exception.getMessage()); val errorCode = exception.getErrorCode(); return ResponseEntity.status(errorCode.getHttpStatus()).body( - ErrorCodeResponse.of(errorCode.getCode(), errorCode.getMessage())); + ErrorCodeResponse.of(errorCode.getCode(), errorCode.getMessage())); + } + + @ExceptionHandler(HttpMessageNotReadableException.class) + public ResponseEntity httpMessageNotReadableException(HttpMessageNotReadableException exception) { + log.error(exception.getMessage()); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body( + ErrorResponse.of(WRONG_INPUT)); } @ExceptionHandler(Exception.class) diff --git a/src/main/java/com/tiki/server/note/adapter/NoteSaver.java b/src/main/java/com/tiki/server/note/adapter/NoteSaver.java new file mode 100644 index 00000000..112db2ac --- /dev/null +++ b/src/main/java/com/tiki/server/note/adapter/NoteSaver.java @@ -0,0 +1,17 @@ +package com.tiki.server.note.adapter; + +import com.tiki.server.common.support.RepositoryAdapter; +import com.tiki.server.note.entity.Note; +import com.tiki.server.note.repository.NoteRepository; +import lombok.RequiredArgsConstructor; + +@RepositoryAdapter +@RequiredArgsConstructor +public class NoteSaver { + + private final NoteRepository noteRepository; + + public Note createNote(final Note note) { + return noteRepository.save(note); + } +} diff --git a/src/main/java/com/tiki/server/note/controller/NoteController.java b/src/main/java/com/tiki/server/note/controller/NoteController.java new file mode 100644 index 00000000..f0460ffe --- /dev/null +++ b/src/main/java/com/tiki/server/note/controller/NoteController.java @@ -0,0 +1,53 @@ +package com.tiki.server.note.controller; + +import com.tiki.server.common.dto.SuccessResponse; +import com.tiki.server.common.support.UriGenerator; +import com.tiki.server.note.controller.dto.request.NoteFreeCreateRequest; +import com.tiki.server.note.controller.dto.request.NoteTemplateCreateRequest; +import com.tiki.server.note.service.NoteService; +import com.tiki.server.note.service.dto.request.NoteFreeCreateDTO; +import com.tiki.server.note.service.dto.request.NoteTemplateCreateDTO; +import com.tiki.server.note.service.dto.response.NoteCreateResponseDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +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; + +import java.security.Principal; + +import static com.tiki.server.common.dto.SuccessResponse.success; +import static com.tiki.server.note.message.SuccessMessage.CREATE_NOTE_FREE; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1/notes") +public class NoteController { + + private final NoteService noteService; + + @PostMapping("/free") + public ResponseEntity> createNoteFree( + final Principal principal, + @RequestBody final NoteFreeCreateRequest request + ) { + long memberId = Long.parseLong(principal.getName()); + NoteCreateResponseDTO response = noteService.createNoteFree(NoteFreeCreateDTO.of(request, memberId)); + return ResponseEntity.created( + UriGenerator.getUri("/api/v1/notes" + response.noteId()) + ).body(success(CREATE_NOTE_FREE.getMessage(), response)); + } + + @PostMapping("/template") + public ResponseEntity> createNoteTemplate( + final Principal principal, + @RequestBody final NoteTemplateCreateRequest request + ) { + long memberId = Long.parseLong(principal.getName()); + NoteCreateResponseDTO response = noteService.createNoteTemplate(NoteTemplateCreateDTO.of(request, memberId)); + return ResponseEntity.created( + UriGenerator.getUri("/api/v1/notes" + response.noteId()) + ).body(success(CREATE_NOTE_FREE.getMessage(), response)); + } +} \ No newline at end of file diff --git a/src/main/java/com/tiki/server/note/controller/dto/request/NoteFreeCreateRequest.java b/src/main/java/com/tiki/server/note/controller/dto/request/NoteFreeCreateRequest.java new file mode 100644 index 00000000..f308bc85 --- /dev/null +++ b/src/main/java/com/tiki/server/note/controller/dto/request/NoteFreeCreateRequest.java @@ -0,0 +1,19 @@ +package com.tiki.server.note.controller.dto.request; + +import lombok.NonNull; + +import java.time.LocalDate; +import java.util.List; + +public record NoteFreeCreateRequest( + @NonNull + String title, + boolean complete, + @NonNull LocalDate startDate, + @NonNull LocalDate endDate, + @NonNull String contents, + List timeBlockIds, + List documentIds, + long teamId +) { +} \ No newline at end of file diff --git a/src/main/java/com/tiki/server/note/controller/dto/request/NoteTemplateCreateRequest.java b/src/main/java/com/tiki/server/note/controller/dto/request/NoteTemplateCreateRequest.java new file mode 100644 index 00000000..cada8718 --- /dev/null +++ b/src/main/java/com/tiki/server/note/controller/dto/request/NoteTemplateCreateRequest.java @@ -0,0 +1,22 @@ +package com.tiki.server.note.controller.dto.request; + +import lombok.NonNull; + +import java.time.LocalDate; +import java.util.List; + +public record NoteTemplateCreateRequest( + @NonNull + String title, + boolean complete, + @NonNull LocalDate startDate, + @NonNull LocalDate endDate, + @NonNull String answerWhatActivity, + @NonNull String answerHowToPrepare, + @NonNull String answerWhatIsDisappointedThing, + @NonNull String answerHowToFix, + @NonNull List timeBlockIds, + @NonNull List documentIds, + long teamId +) { +} \ No newline at end of file diff --git a/src/main/java/com/tiki/server/note/entity/Note.java b/src/main/java/com/tiki/server/note/entity/Note.java new file mode 100644 index 00000000..aee020cf --- /dev/null +++ b/src/main/java/com/tiki/server/note/entity/Note.java @@ -0,0 +1,65 @@ +package com.tiki.server.note.entity; + +import com.tiki.server.common.entity.BaseTime; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +import static jakarta.persistence.GenerationType.IDENTITY; +import static lombok.AccessLevel.PRIVATE; +import static lombok.AccessLevel.PROTECTED; + +@Entity +@Getter +@Builder +@AllArgsConstructor(access = PRIVATE) +@NoArgsConstructor(access = PROTECTED) +public class Note extends BaseTime { + + @Id + @GeneratedValue(strategy = IDENTITY) + @Column(name = "note_id") + private Long id; + + private String title; + + private boolean complete; + + private LocalDate startDate; + + private LocalDate endDate; + + private long memberId; + + private long teamId; + + private String contents; + + private NoteType noteType; + + public static Note of( + final String title, + final boolean complete, + final LocalDate startDate, + final LocalDate endDate, + final String contents, + final long memberId, + final long teamId, + final NoteType noteType + ) { + return Note.builder() + .title(title) + .complete(complete) + .startDate(startDate) + .endDate(endDate) + .memberId(memberId) + .teamId(teamId) + .contents(contents) + .noteType(noteType) + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/com/tiki/server/note/entity/NoteType.java b/src/main/java/com/tiki/server/note/entity/NoteType.java new file mode 100644 index 00000000..409ba86f --- /dev/null +++ b/src/main/java/com/tiki/server/note/entity/NoteType.java @@ -0,0 +1,6 @@ +package com.tiki.server.note.entity; + +public enum NoteType { + FREE, + TEMPLATE +} diff --git a/src/main/java/com/tiki/server/note/exception/NoteException.java b/src/main/java/com/tiki/server/note/exception/NoteException.java new file mode 100644 index 00000000..54a9524f --- /dev/null +++ b/src/main/java/com/tiki/server/note/exception/NoteException.java @@ -0,0 +1,15 @@ +package com.tiki.server.note.exception; + +import com.tiki.server.note.message.ErrorCode; +import lombok.Getter; + +@Getter +public class NoteException extends RuntimeException { + + private final ErrorCode errorCode; + + public NoteException(final ErrorCode errorCode) { + super("[NoteException] : " + errorCode.getMessage()); + this.errorCode = errorCode; + } +} \ No newline at end of file diff --git a/src/main/java/com/tiki/server/note/message/ErrorCode.java b/src/main/java/com/tiki/server/note/message/ErrorCode.java new file mode 100644 index 00000000..4f96bf73 --- /dev/null +++ b/src/main/java/com/tiki/server/note/message/ErrorCode.java @@ -0,0 +1,23 @@ +package com.tiki.server.note.message; + +import static org.springframework.http.HttpStatus.BAD_REQUEST; +import static org.springframework.http.HttpStatus.NOT_FOUND; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum ErrorCode { + + /* 400 BAD REQUEST : 잘못된 요청 */ + TITLE_IS_EMPTY(BAD_REQUEST, "제목은 필수 입력값 입니다."), + TITLE_LENGTH_OVER(BAD_REQUEST, "제목은 100자를 넘길 수 없습니다."), + + /* 404 NOT_FOUND : 자원을 찾을 수 없음 */ + INVALID_NOTE(NOT_FOUND, "유효하지 않은 노트입니다."); + + private final HttpStatus httpStatus; + private final String message; +} diff --git a/src/main/java/com/tiki/server/note/message/SuccessMessage.java b/src/main/java/com/tiki/server/note/message/SuccessMessage.java new file mode 100644 index 00000000..78aee2ad --- /dev/null +++ b/src/main/java/com/tiki/server/note/message/SuccessMessage.java @@ -0,0 +1,13 @@ +package com.tiki.server.note.message; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum SuccessMessage { + + CREATE_NOTE_FREE("노트 생성 성공"); + + private final String message; +} diff --git a/src/main/java/com/tiki/server/note/repository/NoteRepository.java b/src/main/java/com/tiki/server/note/repository/NoteRepository.java new file mode 100644 index 00000000..ae316559 --- /dev/null +++ b/src/main/java/com/tiki/server/note/repository/NoteRepository.java @@ -0,0 +1,11 @@ +package com.tiki.server.note.repository; + +import com.tiki.server.note.entity.Note; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface NoteRepository extends JpaRepository { + + List findAllByTeamId(final long teamId); +} diff --git a/src/main/java/com/tiki/server/note/service/NoteService.java b/src/main/java/com/tiki/server/note/service/NoteService.java new file mode 100644 index 00000000..aff3b5dc --- /dev/null +++ b/src/main/java/com/tiki/server/note/service/NoteService.java @@ -0,0 +1,87 @@ +package com.tiki.server.note.service; + +import com.tiki.server.memberteammanager.adapter.MemberTeamManagerFinder; +import com.tiki.server.note.adapter.NoteSaver; +import com.tiki.server.note.entity.Note; +import com.tiki.server.note.entity.NoteType; +import com.tiki.server.note.service.dto.request.NoteBaseDTO; +import com.tiki.server.note.service.dto.request.NoteFreeCreateDTO; +import com.tiki.server.note.service.dto.request.NoteTemplateCreateDTO; +import com.tiki.server.note.service.dto.response.NoteCreateResponseDTO; +import com.tiki.server.notedocumentmanager.adapter.NoteDocumentManagerSaver; +import com.tiki.server.notedocumentmanager.entity.NoteDocumentManager; +import com.tiki.server.notetimeblockmanager.adapter.NoteTimeBlockManagerSaver; +import com.tiki.server.notetimeblockmanager.entity.NoteTimeBlockManager; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Base64; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class NoteService { + + private final MemberTeamManagerFinder memberTeamManagerFinder; + private final NoteSaver noteSaver; + private final NoteTimeBlockManagerSaver noteTimeBlockManagerSaver; + private final NoteDocumentManagerSaver noteDocumentManagerSaver; + + @Transactional + public NoteCreateResponseDTO createNoteFree(final NoteFreeCreateDTO request) { + memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId()); + String encryptedContents = encryptedContents(request); + Note note = createNote(NoteBaseDTO.of(request), encryptedContents, NoteType.FREE); + return NoteCreateResponseDTO.from(note.getId()); + } + + @Transactional + public NoteCreateResponseDTO createNoteTemplate(final NoteTemplateCreateDTO request) { + memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId()); + String encryptedContents = encryptedContents(request); + Note note = createNote(NoteBaseDTO.of(request), encryptedContents, NoteType.TEMPLATE); + return NoteCreateResponseDTO.from(note.getId()); + } + + private String encryptedContents(final NoteTemplateCreateDTO request) { + String activity = Base64.getEncoder().encodeToString(request.answerWhatActivity().getBytes()); + String prepare = Base64.getEncoder().encodeToString(request.answerHowToPrepare().getBytes()); + String disappointing = Base64.getEncoder().encodeToString(request.answerWhatIsDisappointedThing().getBytes()); + String complement = Base64.getEncoder().encodeToString(request.answerHowToFix().getBytes()); + return String.join("|", activity, prepare, disappointing, complement); + } + + private String encryptedContents(final NoteFreeCreateDTO request) { + return Base64.getEncoder().encodeToString(request.contents().getBytes()); + } + + private Note createNote(final NoteBaseDTO request, final String encryptedContents, final NoteType noteType) { + Note note = noteSaver.createNote( + Note.of( + request.title(), + request.complete(), + request.startDate(), + request.endDate(), + encryptedContents, + request.memberId(), + request.teamId(), + noteType + )); + createNoteTimeBlockManagers(request.timeBlockIds(), note.getId()); + createNoteDocumentManagers(request.documentIds(), note.getId()); + return note; + } + + private void createNoteTimeBlockManagers(final List timeBlockIds, final long noteId) { + timeBlockIds.stream() + .map(timeBlockId -> NoteTimeBlockManager.of(noteId, timeBlockId)) + .forEach(noteTimeBlockManagerSaver::save); + } + + private void createNoteDocumentManagers(final List documentIds, final long noteId) { + documentIds.stream() + .map(documentId -> NoteDocumentManager.of(noteId, documentId)) + .forEach(noteDocumentManagerSaver::save); + } +} \ No newline at end of file diff --git a/src/main/java/com/tiki/server/note/service/dto/request/NoteBaseDTO.java b/src/main/java/com/tiki/server/note/service/dto/request/NoteBaseDTO.java new file mode 100644 index 00000000..2d8b451d --- /dev/null +++ b/src/main/java/com/tiki/server/note/service/dto/request/NoteBaseDTO.java @@ -0,0 +1,42 @@ +package com.tiki.server.note.service.dto.request; + +import java.time.LocalDate; +import java.util.List; + +public record NoteBaseDTO( + String title, + boolean complete, + LocalDate startDate, + LocalDate endDate, + long memberId, + long teamId, + List timeBlockIds, + List documentIds +) { + + public static NoteBaseDTO of(final NoteFreeCreateDTO noteFreeCreateDTO) { + return new NoteBaseDTO( + noteFreeCreateDTO.title(), + noteFreeCreateDTO.complete(), + noteFreeCreateDTO.startDate(), + noteFreeCreateDTO.endDate(), + noteFreeCreateDTO.memberId(), + noteFreeCreateDTO.teamId(), + noteFreeCreateDTO.timeBlockIds(), + noteFreeCreateDTO.documentIds() + ); + } + + public static NoteBaseDTO of(final NoteTemplateCreateDTO noteTemplateCreateDTO) { + return new NoteBaseDTO( + noteTemplateCreateDTO.title(), + noteTemplateCreateDTO.complete(), + noteTemplateCreateDTO.startDate(), + noteTemplateCreateDTO.endDate(), + noteTemplateCreateDTO.memberId(), + noteTemplateCreateDTO.teamId(), + noteTemplateCreateDTO.timeBlockIds(), + noteTemplateCreateDTO.documentIds() + ); + } +} diff --git a/src/main/java/com/tiki/server/note/service/dto/request/NoteFreeCreateDTO.java b/src/main/java/com/tiki/server/note/service/dto/request/NoteFreeCreateDTO.java new file mode 100644 index 00000000..31ccdc38 --- /dev/null +++ b/src/main/java/com/tiki/server/note/service/dto/request/NoteFreeCreateDTO.java @@ -0,0 +1,36 @@ +package com.tiki.server.note.service.dto.request; + +import com.tiki.server.note.controller.dto.request.NoteFreeCreateRequest; +import lombok.NonNull; + +import java.time.LocalDate; +import java.util.List; + +public record NoteFreeCreateDTO( + @NonNull String title, + boolean complete, + @NonNull LocalDate startDate, + @NonNull LocalDate endDate, + @NonNull String contents, + long teamId, + List timeBlockIds, + List documentIds, + long memberId +) { + public static NoteFreeCreateDTO of( + final NoteFreeCreateRequest request, + final long memberId + ) { + return new NoteFreeCreateDTO( + request.title(), + request.complete(), + request.startDate(), + request.endDate(), + request.contents(), + request.teamId(), + request.timeBlockIds(), + request.documentIds(), + memberId + ); + } +} diff --git a/src/main/java/com/tiki/server/note/service/dto/request/NoteTemplateCreateDTO.java b/src/main/java/com/tiki/server/note/service/dto/request/NoteTemplateCreateDTO.java new file mode 100644 index 00000000..ed71a25c --- /dev/null +++ b/src/main/java/com/tiki/server/note/service/dto/request/NoteTemplateCreateDTO.java @@ -0,0 +1,42 @@ +package com.tiki.server.note.service.dto.request; + +import com.tiki.server.note.controller.dto.request.NoteTemplateCreateRequest; +import lombok.NonNull; + +import java.time.LocalDate; +import java.util.List; + +public record NoteTemplateCreateDTO( + @NonNull String title, + boolean complete, + @NonNull LocalDate startDate, + @NonNull LocalDate endDate, + @NonNull String answerWhatActivity, + @NonNull String answerHowToPrepare, + @NonNull String answerWhatIsDisappointedThing, + @NonNull String answerHowToFix, + long teamId, + List timeBlockIds, + List documentIds, + long memberId +) { + public static NoteTemplateCreateDTO of( + final NoteTemplateCreateRequest request, + final long memberId + ) { + return new NoteTemplateCreateDTO( + request.title(), + request.complete(), + request.startDate(), + request.endDate(), + request.answerWhatActivity(), + request.answerHowToPrepare(), + request.answerWhatIsDisappointedThing(), + request.answerHowToFix(), + request.teamId(), + request.timeBlockIds(), + request.documentIds(), + memberId + ); + } +} diff --git a/src/main/java/com/tiki/server/note/service/dto/response/NoteCreateResponseDTO.java b/src/main/java/com/tiki/server/note/service/dto/response/NoteCreateResponseDTO.java new file mode 100644 index 00000000..94de8816 --- /dev/null +++ b/src/main/java/com/tiki/server/note/service/dto/response/NoteCreateResponseDTO.java @@ -0,0 +1,9 @@ +package com.tiki.server.note.service.dto.response; + +public record NoteCreateResponseDTO( + long noteId +) { + public static NoteCreateResponseDTO from(final long noteId) { + return new NoteCreateResponseDTO(noteId); + } +} diff --git a/src/main/java/com/tiki/server/notedocumentmanager/adapter/NoteDocumentManagerSaver.java b/src/main/java/com/tiki/server/notedocumentmanager/adapter/NoteDocumentManagerSaver.java new file mode 100644 index 00000000..1341fe92 --- /dev/null +++ b/src/main/java/com/tiki/server/notedocumentmanager/adapter/NoteDocumentManagerSaver.java @@ -0,0 +1,17 @@ +package com.tiki.server.notedocumentmanager.adapter; + +import com.tiki.server.common.support.RepositoryAdapter; +import com.tiki.server.notedocumentmanager.entity.NoteDocumentManager; +import com.tiki.server.notedocumentmanager.repository.NoteDocumentRepository; +import lombok.RequiredArgsConstructor; + +@RepositoryAdapter +@RequiredArgsConstructor +public class NoteDocumentManagerSaver { + + private NoteDocumentRepository noteDocumentRepository; + + public NoteDocumentManager save(final NoteDocumentManager noteDocumentManager) { + return noteDocumentRepository.save(noteDocumentManager); + } +} diff --git a/src/main/java/com/tiki/server/notedocumentmanager/entity/NoteDocumentManager.java b/src/main/java/com/tiki/server/notedocumentmanager/entity/NoteDocumentManager.java new file mode 100644 index 00000000..2be4db1c --- /dev/null +++ b/src/main/java/com/tiki/server/notedocumentmanager/entity/NoteDocumentManager.java @@ -0,0 +1,38 @@ +package com.tiki.server.notedocumentmanager.entity; + +import com.tiki.server.common.entity.BaseTime; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import static jakarta.persistence.GenerationType.IDENTITY; +import static lombok.AccessLevel.PRIVATE; +import static lombok.AccessLevel.PROTECTED; + +@Entity +@Getter +@Builder(access = PRIVATE) +@AllArgsConstructor(access = PRIVATE) +@NoArgsConstructor(access = PROTECTED) +public class NoteDocumentManager extends BaseTime { + + @Id + @GeneratedValue(strategy = IDENTITY) + @Column(name = "manager_id") + private Long id; + + @JoinColumn(name = "note_id") + private long noteId; + + @JoinColumn(name = "team_id") + private long documentId; + + public static NoteDocumentManager of(final long noteId, final long documentId) { + return NoteDocumentManager.builder() + .noteId(noteId) + .documentId(documentId) + .build(); + } +} diff --git a/src/main/java/com/tiki/server/notedocumentmanager/repository/NoteDocumentRepository.java b/src/main/java/com/tiki/server/notedocumentmanager/repository/NoteDocumentRepository.java new file mode 100644 index 00000000..441397f1 --- /dev/null +++ b/src/main/java/com/tiki/server/notedocumentmanager/repository/NoteDocumentRepository.java @@ -0,0 +1,7 @@ +package com.tiki.server.notedocumentmanager.repository; + +import com.tiki.server.notedocumentmanager.entity.NoteDocumentManager; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface NoteDocumentRepository extends JpaRepository { +} diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NoteTimeBlockManagerSaver.java b/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NoteTimeBlockManagerSaver.java new file mode 100644 index 00000000..ebbe13f4 --- /dev/null +++ b/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NoteTimeBlockManagerSaver.java @@ -0,0 +1,17 @@ +package com.tiki.server.notetimeblockmanager.adapter; + +import com.tiki.server.common.support.RepositoryAdapter; +import com.tiki.server.notetimeblockmanager.entity.NoteTimeBlockManager; +import com.tiki.server.notetimeblockmanager.repository.NoteTimeBlockManagerRepository; +import lombok.RequiredArgsConstructor; + +@RepositoryAdapter +@RequiredArgsConstructor +public class NoteTimeBlockManagerSaver { + + private NoteTimeBlockManagerRepository noteTimeBlockManagerRepository; + + public NoteTimeBlockManager save(final NoteTimeBlockManager noteTimeBlockManager) { + return noteTimeBlockManagerRepository.save(noteTimeBlockManager); + } +} diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/entity/NoteTimeBlockManager.java b/src/main/java/com/tiki/server/notetimeblockmanager/entity/NoteTimeBlockManager.java new file mode 100644 index 00000000..027accfe --- /dev/null +++ b/src/main/java/com/tiki/server/notetimeblockmanager/entity/NoteTimeBlockManager.java @@ -0,0 +1,38 @@ +package com.tiki.server.notetimeblockmanager.entity; + +import com.tiki.server.common.entity.BaseTime; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import static jakarta.persistence.GenerationType.IDENTITY; +import static lombok.AccessLevel.PRIVATE; +import static lombok.AccessLevel.PROTECTED; + +@Entity +@Getter +@Builder(access = PRIVATE) +@AllArgsConstructor(access = PRIVATE) +@NoArgsConstructor(access = PROTECTED) +public class NoteTimeBlockManager extends BaseTime { + + @Id + @GeneratedValue(strategy = IDENTITY) + @Column(name = "manager_id") + private Long id; + + @JoinColumn(name = "note_id") + private long noteId; + + @JoinColumn(name = "time_block_id") + private long timeBlockId; + + public static NoteTimeBlockManager of(final long noteId, final long timeBlockId) { + return NoteTimeBlockManager.builder() + .noteId(noteId) + .timeBlockId(timeBlockId) + .build(); + } +} diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/repository/NoteTimeBlockManagerRepository.java b/src/main/java/com/tiki/server/notetimeblockmanager/repository/NoteTimeBlockManagerRepository.java new file mode 100644 index 00000000..d11225e7 --- /dev/null +++ b/src/main/java/com/tiki/server/notetimeblockmanager/repository/NoteTimeBlockManagerRepository.java @@ -0,0 +1,7 @@ +package com.tiki.server.notetimeblockmanager.repository; + +import com.tiki.server.notetimeblockmanager.entity.NoteTimeBlockManager; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface NoteTimeBlockManagerRepository extends JpaRepository { +}