· 오늘 공부한 것

1차 통합과정

checklist 전체적인 틀 완성

 

· 공부한 내용, 궁금한 내용, 부족한 내용

오늘은 checklist 기능을 구현하면서 기존과 다른 방법들을 사용하였다. service에서 repository를 주입해서 사용했는데 이번에는 하나의 service는 하나의 repository만 주입받는 걸로 규칙을 정하였다. 그래서 다른 repository를 사용해야 한다면 해당하는 service를 주입받아서 사용해야 했다. 이런 식으로 코딩을 하면 오류를 찾기도 쉽고 하나의 service는 하나의 repository이기 때문에 흐름을 파악하기도 쉬웠다. 또한 API당 requestDto와 responseDto도 다 따로 두었다. 겹치는 부분도 있겠지만 나중에 수정할 때 겹치는 부분이 없기 때문에 쉽게 수정에 접근할 수 있었다. 그리고 객체를 만들 때 new로 생성하는 것을 지양하는 방향으로 하고 static메서드로 만들어 of로 정적객체를 만드는 방향으로 갔다. 그리고 무엇보다 프로젝트를 진행하면서 좋은 점이 다른 팀원의 코드를 볼 수 있고 서로 공유할 수 있다는 부분이다. 내가 부족한 부분을 채울 수도 있고 내가 아는 부분을 공유함으로써 확실히 알고 넘어갈 수 있었다. 또한 맡은 역할이 있기 때문에 책임감을 가지고 코드를 작성할 수 있었다.

현재 코드구현에서 부족한 부분으로는 예외처리하는 부분인데 일단은 try-catch로 throw를 잡아서 처리하려고 한다. 그리고 request로 들어오는 부분을 validation으로 처리하는 것을 구현해야 한다.

오늘 1차 통합과정을 가졌는데 서로의 코드를 리뷰하고 부족한 부분을 채워나갈 수 있었다. 1차에는 각자 도메인에서 작업을 했기에 충돌이 별로 없었는데 모두 머지를 진행하고 실행했을 때 약간의 오류가 있었다. 그래도 팀원들과 함께 고민하며 해결해서 지금은 잘 실행이 되었다. 아직 구현하지 못한 부분들이 있었지만 오류 없이 진행되어 이후 작업을 할 수 있었다. 로직에서 지금 구현해야 할 부분을 주석처리해서 적어 두었는데 내일 직접 구현해 보아야 할 거 같다. 그리고 도전하고 싶은 부분은 checklist에 대한 통합테스트 코드를 작성해 보는 것이다. checklist의 흐름이 생성되고 contents를 수정하고 check를 수정하고 priority를 수정하고 마지막에 삭제하는 과정으로 테스트코드를 작성할 생각이다. controller부분에 대한 테스트코드는 일단 보류 중이다.

@Service
@RequiredArgsConstructor
public class ChecklistService {

	private final ChecklistRepository checklistRepository;
	private final CardTempService cardTempService;

	public ChecklistCreateResponseDto createChecklist(ChecklistCreateRequestDto checklistCreateRequestDto, Long boardId, Long stageId,
		Long cardId, User user) {
		// 보드아이디와 사용자 유저정보를 가지고 userRole 알아내기
		// 관리자, 매니저, 카드를 부여받은 유저까지 생성가능하다.
		// 단, 일반유저는 부여받은 해당 카드에만 체크리스트를 생성할 수 있다.

		// 카드 레포에서 해당 카드 정보 가져오기
		Card card = cardTempService.getCard(cardId);

		Checklist checklist = Checklist.of(checklistCreateRequestDto, false, 4, card, user); // 카드정보, 유저정보 추가
		Checklist savedChecklist = checklistRepository.save(checklist);
		return ChecklistCreateResponseDto.of(savedChecklist);
	}

	public ChecklistContentsUpdateResponseDto updateChecklistConetents(
		@Valid ChecklistContentsUpdateRequestDto checklistContentsUpdateRequestDto,
		Long boardId,
		Long stageId,
		Long cardId,
		Long checklistId, User user) {
		Checklist checklist = checklistRepository.findById(checklistId).orElseThrow(() -> new IllegalArgumentException("해당 체크리스트는 업습니다."));
		// 체크리스트 작성자 or 매니저 or 관리자 까지 수정가능하다.
		// boardId와 user 정보로 해당 보드에서 이 유저가 어떤 권한인지 확인한다.
		// 관리자 가능
		// 해당 카드를 만든 매니저 가능
		// 체크리스트 생성한 유저 가능
		if (!Objects.equals(checklist.getUser().getId(), user.getId())) {
			throw new IllegalArgumentException("체크리스트 생성자만 수정이 가능합니다.");
		}

		checklist.setContents(checklistContentsUpdateRequestDto.getContents());
		return ChecklistContentsUpdateResponseDto.of(checklist);
	}
}

위에 코드는 현재까지 진행한 create와 update부분으로 나머지 2개의 update도 흐름은 비슷하기에 1개만 가져왔다. 주석처리한 사용자 정보를 가지고 해당유저가 해당보드에 어떤 권한을 가지고 있는지를 먼저 보고 그것에 따라 해당 작업이 가능한지 못한 지를 판단해야 할 거 같다.

 

· 오늘 서칭 한 자료

https://www.one-tab.com/page/RXU_k3SWS86pyrnBI6yPFQ

 

OneTab - Shared tabs

Scan this QR code using the camera app on your mobile or tablet

www.one-tab.com

 

 

· 느낀 점

- 팀프로젝트는 스스로 부족한 부분이 많이 발견되어서 자신감이 하락할 때도 있지만 모르는 것을 배우면서 성장하는 느낌이 든다.

- 내가 부족한 부분을 팀원에게서 배울 수 있어서 좋았다.

- 오류가 발생했을 때 혼자 고민하는 것보다 서로의 의견을 공유하며 해결하는 게 더 빠르다고 생각한다.

- 확실히 맡은 부분에 책임감이 생기고 내가 작성한 코드에 애정이 간다.

반응형

+ Recent posts