Skip to content
8 changes: 4 additions & 4 deletions src/main/java/com/tiki/server/common/util/ContentDecoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ public class ContentDecoder {

public static List<String> decodeNoteTemplate(final String encodedData) {
String[] parts = encodedData.split("\\|");
String decodedActivity = new String(Base64.getDecoder().decode(parts[0]));
String decodedPrepare = new String(Base64.getDecoder().decode(parts[1]));
String decodedDisappointing = new String(Base64.getDecoder().decode(parts[2]));
String decodedComplement = new String(Base64.getDecoder().decode(parts[3]));
String decodedActivity = parts[0].isBlank() ? "" : new String(Base64.getDecoder().decode(parts[0]));
String decodedPrepare = parts[1].isBlank() ? "" : new String(Base64.getDecoder().decode(parts[1]));
String decodedDisappointing = parts[2].isBlank() ? "" : new String(Base64.getDecoder().decode(parts[2]));
String decodedComplement = parts[3].isBlank() ? "" : new String(Base64.getDecoder().decode(parts[3]));
return List.of(decodedActivity, decodedPrepare, decodedDisappointing, decodedComplement);
}

Expand Down
8 changes: 4 additions & 4 deletions src/main/java/com/tiki/server/common/util/ContentEncoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
public class ContentEncoder {

public static String encodeNoteTemplate(final String activity, final String prepare, final String disappointing, final String complement) {
String encodedActivity = Base64.getEncoder().encodeToString(activity.getBytes());
String encodedPrepare = Base64.getEncoder().encodeToString(prepare.getBytes());
String encodedDisappointing = Base64.getEncoder().encodeToString(disappointing.getBytes());
String encodedComplement = Base64.getEncoder().encodeToString(complement.getBytes());
String encodedActivity = activity.isBlank() ? " " : Base64.getEncoder().encodeToString(activity.getBytes());
String encodedPrepare = prepare.isBlank() ? " " : Base64.getEncoder().encodeToString(prepare.getBytes());
String encodedDisappointing = disappointing.isBlank() ? " " : Base64.getEncoder().encodeToString(disappointing.getBytes());
String encodedComplement = complement.isBlank() ? " " : Base64.getEncoder().encodeToString(complement.getBytes());

return String.join("|", encodedActivity, encodedPrepare, encodedDisappointing, encodedComplement);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,23 +32,23 @@ public class DocumentService {
private final MemberTeamManagerFinder memberTeamManagerFinder;

public DocumentsGetResponse getAllDocuments(long memberId, long teamId, String type) {
MemberTeamManager memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId);
MemberTeamManager memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamIdOrElseThrow(memberId, teamId);
Position accessiblePosition = Position.getAccessiblePosition(type);
memberTeamManager.checkMemberAccessible(accessiblePosition);
return getAllDocumentsByType(teamId, accessiblePosition);
}

@Transactional
public void deleteDocument(long memberId, long teamId, long documentId) {
MemberTeamManager memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId);
MemberTeamManager memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamIdOrElseThrow(memberId, teamId);
Document document = documentFinder.findByIdWithTimeBlock(documentId);
memberTeamManager.checkMemberAccessible(document.getTimeBlock().getAccessiblePosition());
documentDeleter.delete(document);
}

@Transactional
public DocumentsCreateResponse createDocuments(long memberId, long teamId, DocumentsCreateRequest request) {
memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId);
memberTeamManagerFinder.findByMemberIdAndTeamIdOrElseThrow(memberId, teamId);
checkFolderIsExist(request.folderId());
List<Long> documentIds = request.documents().stream()
.map(document -> saveDocument(teamId, request.folderId(), document).getId())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public FoldersGetResponse get(final long memberId, final long teamId, final Stri
@Transactional
public FolderCreateResponse create(long memberId, long teamId, FolderCreateRequest request) {
// 같은 레벨 파일명 중복 방지 로직 추가 필요
memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId);
memberTeamManagerFinder.findByMemberIdAndTeamIdOrElseThrow(memberId, teamId);
Folder parentFolder = getFolder(request.parentId());
Folder folder = folderSaver.save(new Folder(request.name(), parentFolder, teamId));
return FolderCreateResponse.from(folder.getId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,28 @@
import lombok.RequiredArgsConstructor;

import java.util.List;
import java.util.Optional;

@RepositoryAdapter
@RequiredArgsConstructor
public class MemberTeamManagerFinder {

private final MemberTeamManagerRepository teamManagerRepository;
private final MemberTeamManagerRepository memberTeamManagerRepository;

public MemberTeamManager findByMemberIdAndTeamId(long memberId, long teamId) {
return teamManagerRepository.findByMemberIdAndTeamId(memberId, teamId)
public MemberTeamManager findByMemberIdAndTeamIdOrElseThrow(long memberId, long teamId) {
return memberTeamManagerRepository.findByMemberIdAndTeamId(memberId, teamId)
.orElseThrow(() -> new MemberTeamManagerException(INVALID_MEMBER_TEAM_MANAGER));
}

public Optional<MemberTeamManager> findByMemberIdAndTeamId(final long memberId, final long teamId) {
return memberTeamManagerRepository.findByMemberIdAndTeamId(memberId, teamId);
}

public List<MemberTeamManager> findBelongTeamByMemberId(long memberId) {
return teamManagerRepository.findAllBelongTeamByMemberId(memberId).stream().toList();
return memberTeamManagerRepository.findAllBelongTeamByMemberId(memberId).stream().toList();
}

public List<MemberTeamManager> findAllByTeamId(long teamId) {
return teamManagerRepository.findAllByTeamId(teamId);
return memberTeamManagerRepository.findAllByTeamId(teamId);
}
}
8 changes: 4 additions & 4 deletions src/main/java/com/tiki/server/note/adapter/NoteFinder.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ public class NoteFinder {

private final NoteRepository noteRepository;

public List<Note> findByModifiedAtBeforeOrderByModifiedAtDesc(final LocalDateTime lastUpdatedAt, final PageRequest pageRequest) {
return noteRepository.findByModifiedAtBeforeOrderByModifiedAtDesc(lastUpdatedAt, pageRequest);
public List<Note> findByCreatedAtBeforeOrderByModifiedAtDesc(final LocalDateTime createdAt, final PageRequest pageRequest) {
return noteRepository.findByCreatedAtBeforeOrderByModifiedAtDesc(createdAt, pageRequest);
}

public List<Note> findByModifiedAtAfterOrderByModifiedAtAsc(final LocalDateTime lastUpdatedAt, final PageRequest pageRequest) {
return noteRepository.findByModifiedAtAfterOrderByModifiedAtAsc(lastUpdatedAt, pageRequest);
public List<Note> findByCreatedAtAfterOrderByModifiedAtAsc(final LocalDateTime createdAt, final PageRequest pageRequest) {
return noteRepository.findByCreatedAtAfterOrderByModifiedAtAsc(createdAt, pageRequest);
}

public Note findById(final long noteId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,14 +84,14 @@ public ResponseEntity<BaseResponse> updateNoteTemplate(
public ResponseEntity<SuccessResponse<NoteListGetServiceResponse>> getNote(
final Principal principal,
@PathVariable long teamId,
@RequestParam(required = false) LocalDateTime lastUpdatedAt,
@RequestParam(required = false) LocalDateTime createdAt,
@RequestParam(defaultValue = "DESC") SortOrder sortOrder
) {
long memberId = Long.parseLong(principal.getName());
if (lastUpdatedAt == null) {
lastUpdatedAt = (sortOrder == SortOrder.DESC) ? LocalDateTime.now() : LocalDateTime.of(1970, 1, 1, 0, 0);
if (createdAt == null) {
createdAt = (sortOrder == SortOrder.DESC) ? LocalDateTime.now() : LocalDateTime.of(1970, 1, 1, 0, 0);
}
NoteListGetServiceResponse response = noteService.getNote(teamId, memberId, lastUpdatedAt, sortOrder);
NoteListGetServiceResponse response = noteService.getNote(teamId, memberId, createdAt, sortOrder);
return ResponseEntity.ok().body(success(GET_NOTE.getMessage(), response));
}

Expand Down
4 changes: 0 additions & 4 deletions src/main/java/com/tiki/server/note/entity/Note.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@ public class Note extends BaseTime {

private String title;

private String author;

private boolean complete;

private LocalDate startDate;
Expand All @@ -49,7 +47,6 @@ public class Note extends BaseTime {

public static Note of(
final String title,
final String author,
final boolean complete,
final LocalDate startDate,
final LocalDate endDate,
Expand All @@ -60,7 +57,6 @@ public static Note of(
) {
return Note.builder()
.title(title)
.author(author)
.complete(complete)
.startDate(startDate)
.endDate(endDate)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@

public interface NoteRepository extends JpaRepository<Note, Long> {

@Query("SELECT n FROM Note n WHERE n.updatedAt < :lastModifiedAt ORDER BY n.updatedAt DESC")
List<Note> findByModifiedAtBeforeOrderByModifiedAtDesc(@Param("lastModifiedAt") LocalDateTime lastModifiedAt, Pageable pageable);
@Query("SELECT n FROM Note n WHERE n.createdAt < :createdAt ORDER BY n.createdAt DESC")
List<Note> findByCreatedAtBeforeOrderByModifiedAtDesc(@Param("createdAt") LocalDateTime createdAt, Pageable pageable);

@Query("SELECT n FROM Note n WHERE n.updatedAt > :lastModifiedAt ORDER BY n.updatedAt ASC")
List<Note> findByModifiedAtAfterOrderByModifiedAtAsc(@Param("lastModifiedAt") LocalDateTime lastModifiedAt, Pageable pageable);
@Query("SELECT n FROM Note n WHERE n.createdAt > :createdAt ORDER BY n.createdAt ASC")
List<Note> findByCreatedAtAfterOrderByModifiedAtAsc(@Param("createdAt") LocalDateTime createdAt, Pageable pageable);
}
55 changes: 36 additions & 19 deletions src/main/java/com/tiki/server/note/service/NoteService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import com.tiki.server.common.util.ContentEncoder;
import com.tiki.server.document.adapter.DocumentFinder;
import com.tiki.server.document.entity.Document;
import com.tiki.server.member.adapter.MemberFinder;
import com.tiki.server.memberteammanager.adapter.MemberTeamManagerFinder;
import com.tiki.server.memberteammanager.entity.MemberTeamManager;
import com.tiki.server.note.adapter.NoteDeleter;
import com.tiki.server.note.adapter.NoteFinder;
import com.tiki.server.note.adapter.NoteSaver;
Expand All @@ -29,6 +31,7 @@

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

import static com.tiki.server.common.Constants.INIT_NUM;
Expand All @@ -50,27 +53,28 @@ public class NoteService {
private final NoteDocumentManagerDeleter noteDocumentManagerDeleter;
private final TimeBlockFinder timeBlockFinder;
private final DocumentFinder documentFinder;
private final MemberFinder memberFinder;

@Transactional
public NoteCreateServiceResponse createNoteFree(final NoteFreeCreateServiceRequest request) {
String author = memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId()).getName();
memberTeamManagerFinder.findByMemberIdAndTeamIdOrElseThrow(request.memberId(), request.teamId());
String encryptedContents = ContentEncoder.encodeNoteFree(request.contents());
Note note = createNote(NoteBase.of(request), author, encryptedContents, NoteType.FREE);
Note note = createNote(NoteBase.of(request), encryptedContents, NoteType.FREE);
createNoteTimeBlockManagers(request.timeBlockIds(), note.getId());
createNoteDocumentManagers(request.documentIds(), note.getId());
return NoteCreateServiceResponse.from(note.getId());
}

@Transactional
public NoteCreateServiceResponse createNoteTemplate(final NoteTemplateCreateServiceRequest request) {
String author = memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId()).getName();
memberTeamManagerFinder.findByMemberIdAndTeamIdOrElseThrow(request.memberId(), request.teamId());
String encryptedContents = ContentEncoder.encodeNoteTemplate(
request.answerWhatActivity(),
request.answerHowToPrepare(),
request.answerWhatIsDisappointedThing(),
request.answerHowToFix()
);
Note note = createNote(NoteBase.of(request), author, encryptedContents, NoteType.TEMPLATE);
Note note = createNote(NoteBase.of(request), encryptedContents, NoteType.TEMPLATE);
createNoteTimeBlockManagers(request.timeBlockIds(), note.getId());
createNoteDocumentManagers(request.documentIds(), note.getId());
return NoteCreateServiceResponse.from(note.getId());
Expand All @@ -79,7 +83,7 @@ public NoteCreateServiceResponse createNoteTemplate(final NoteTemplateCreateServ
@Transactional
public void updateNoteFree(final NoteFreeUpdateServiceRequest request) {
Note note = noteFinder.findById(request.noteId());
memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId());
memberTeamManagerFinder.findByMemberIdAndTeamIdOrElseThrow(request.memberId(), request.teamId());
String encryptedContents = ContentEncoder.encodeNoteFree(request.contents());
note.updateValue(
request.memberId(),
Expand All @@ -98,7 +102,7 @@ public void updateNoteFree(final NoteFreeUpdateServiceRequest request) {
@Transactional
public void updateNoteTemplate(final NoteTemplateUpdateServiceRequest request) {
Note note = noteFinder.findById(request.noteId());
memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId());
memberTeamManagerFinder.findByMemberIdAndTeamIdOrElseThrow(request.memberId(), request.teamId());
String encryptedContents = ContentEncoder.encodeNoteTemplate(
request.answerWhatActivity(),
request.answerHowToPrepare(),
Expand All @@ -121,7 +125,7 @@ public void updateNoteTemplate(final NoteTemplateUpdateServiceRequest request) {

@Transactional
public void deleteNotes(final List<Long> noteIds, final long teamId, final long memberId) {
memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId);
memberTeamManagerFinder.findByMemberIdAndTeamIdOrElseThrow(memberId, teamId);
noteDocumentManagerDeleter.deleteByNoteIds(noteIds);
noteTimeBlockManagerDeleter.noteTimeBlockManagerDeleteByIds(noteIds);
noteDeleter.deleteNoteByIds(noteIds);
Expand All @@ -130,26 +134,40 @@ public void deleteNotes(final List<Long> noteIds, final long teamId, final long
public NoteListGetServiceResponse getNote(
final long teamId,
final long memberId,
final LocalDateTime lastUpdatedAt,
final LocalDateTime createdAt,
final SortOrder sortOrder
) {
memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId);
memberTeamManagerFinder.findByMemberIdAndTeamIdOrElseThrow(memberId, teamId);
PageRequest pageable = PageRequest.of(INIT_NUM, PAGE_SIZE);
List<Note> noteList = getNotes(lastUpdatedAt, sortOrder, pageable);
List<Note> noteList = getNotes(createdAt, sortOrder, pageable);
List<NoteGetResponse> noteGetResponseList = noteList.stream()
.map(NoteGetResponse::of)
.map(note -> {
Optional<MemberTeamManager> memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamId(note.getMemberId(), teamId);
return NoteGetResponse.of(note, memberTeamManager.isEmpty() ? "알 수 없음" : memberTeamManager.get().getName());
})
.collect(Collectors.toList());
return new NoteListGetServiceResponse(noteGetResponseList);
}

public NoteDetailGetServiceResponse getNoteDetail(final long teamId, final long memberId, final long noteId) {
memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId);
memberTeamManagerFinder.findByMemberIdAndTeamIdOrElseThrow(memberId, teamId);
Note note = noteFinder.findById(noteId);
Optional<MemberTeamManager> memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamId(note.getMemberId(), teamId);
List<Document> documentList = getDocumentListMappedByNote(noteId);
List<TimeBlock> timeBlockList = getTimeBlocksMappedByNote(noteId);
return note.getNoteType() == NoteType.FREE ?
NoteFreeDetailGetServiceResponse.of(note, documentList, timeBlockList) :
NoteTemplateDetailGetServiceResponse.of(note, documentList, timeBlockList);
NoteFreeDetailGetServiceResponse.of(
note,
memberTeamManager.isEmpty() ? "알 수 없음" : memberTeamManager.get().getName(),
documentList,
timeBlockList
) :
NoteTemplateDetailGetServiceResponse.of(
note,
memberTeamManager.isEmpty() ? "알 수 없음" : memberTeamManager.get().getName(),
documentList,
timeBlockList
);
}

private void updateNoteDocumentManager(final List<Long> documentIds, final long noteId) {
Expand Down Expand Up @@ -180,11 +198,11 @@ private void updateNoteTimeBlockManager(final List<Long> timeBlockIds, final lon
noteTimeBlockManagerDeleter.deleteByNoteIdAndTimeBlockId(noteId, idsToRemove);
}

private List<Note> getNotes(final LocalDateTime lastUpdatedAt, final SortOrder sortOrder, final PageRequest pageable) {
private List<Note> getNotes(final LocalDateTime createdAt, final SortOrder sortOrder, final PageRequest pageable) {
if (sortOrder == SortOrder.DESC) {
return noteFinder.findByModifiedAtBeforeOrderByModifiedAtDesc(lastUpdatedAt, pageable);
return noteFinder.findByCreatedAtBeforeOrderByModifiedAtDesc(createdAt, pageable);
}
return noteFinder.findByModifiedAtAfterOrderByModifiedAtAsc(lastUpdatedAt, pageable);
return noteFinder.findByCreatedAtAfterOrderByModifiedAtAsc(createdAt, pageable);
}

private List<TimeBlock> getTimeBlocksMappedByNote(final long noteId) {
Expand All @@ -205,11 +223,10 @@ private List<Document> getDocumentListMappedByNote(final long noteId) {
.toList();
}

private Note createNote(final NoteBase request, final String author, final String encryptedContents, final NoteType noteType) {
private Note createNote(final NoteBase request, final String encryptedContents, final NoteType noteType) {
return noteSaver.createNote(
Note.of(
request.title(),
author,
request.complete(),
request.startDate(),
request.endDate(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,15 @@ public record NoteFreeDetailGetServiceResponse(

public static NoteFreeDetailGetServiceResponse of(
final Note note,
final String author,
final List<Document> documentList,
final List<TimeBlock> timeBlockList
) {
return new NoteFreeDetailGetServiceResponse(
note.getId(),
NoteType.FREE,
note.getTitle(),
note.getAuthor(),
author,
note.getStartDate(),
note.getEndDate(),
note.isComplete(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ public record NoteGetResponse(
LocalDateTime lastUpdatedAt
) {

public static NoteGetResponse of(final Note note) {
public static NoteGetResponse of(final Note note, final String author) {
return new NoteGetResponse(
note.getId(),
note.getTitle(),
note.getStartDate(),
note.getEndDate(),
note.getAuthor(),
author,
note.isComplete(),
note.getUpdatedAt()
);
Expand Down
Loading
Loading