Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[201700981 신성희] Level8 미션 제출합니다 #42

Open
wants to merge 9 commits into
base: level8-initial
Choose a base branch
from
36 changes: 28 additions & 8 deletions src/main/java/backend/likelion/todos/goal/GoalController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
Expand All @@ -26,8 +27,15 @@ public ResponseEntity<Void> create(
@Auth Long memberId,
@RequestBody GoalCreateRequest request
) {
// TODO [8단계] GoalCreateRequest에서 이름과 색상을 추출하여 goalService의 save 메소드를 호출하고, 생성된 Goal의 ID로 URI를 생성하여 ResponseEntity를 반환하세요.
return null;
// TODO [8단계] GoalCreateRequest에서 이름과 색상을 추출하여 goalService의 save 메소드를 호출하고,
String name = request.name();
String color = request.color();
long saveInfo = goalService.save(name,color,memberId);
// TODO 생성된 Goal의 ID로 URI를 생성하여 ResponseEntity를 반환하세요.
URI uri = URI.create(String.valueOf(saveInfo));
ResponseEntity.BodyBuilder responseEntity = ResponseEntity.created(uri);

return responseEntity.build();
}

@PutMapping("/{id}")
Expand All @@ -36,24 +44,36 @@ public ResponseEntity<Void> update(
@Auth Long memberId,
@RequestBody GoalUpdateRequest request
) {
// TODO [8단계] GoalUpdateRequest에서 이름과 색상을 추출하고, id와 memberId를 함께 goalService의 update 메소드에 전달하여 Goal 정보를 업데이트한 후, ResponseEntity.ok()를 반환하세요.
return null;
// TODO [8단계] GoalUpdateRequest에서 이름과 색상을 추출하고,
String name= request.name();
String color =request.color();
// TODO id와 memberId를 함께 goalService의 update 메소드에 전달하여 Goal 정보를 업데이트한 후,
goalService.update(id,name,color,memberId);
// TODO ResponseEntity.ok()를 반환하세요.
ResponseEntity.BodyBuilder ok = ResponseEntity.ok();
return ok.build();
}

@DeleteMapping("/{id}")
public ResponseEntity<Void> delete(
@PathVariable("id") Long id,
@Auth Long memberId
) {
// TODO [8단계] id와 memberId를 goalService의 delete 메소드에 전달하여 Goal을 삭제하고, ResponseEntity.ok()를 반환하세요.
return null;
// TODO [8단계] id와 memberId를 goalService의 delete 메소드에 전달하여 Goal을 삭제하고,
goalService.delete(id,memberId);
// TODO ResponseEntity.ok()를 반환하세요.
ResponseEntity.BodyBuilder ok = ResponseEntity.ok();
return ok.build();
}

@GetMapping("/my")
public ResponseEntity<List<GoalResponse>> findMine(
@Auth Long memberId
) {
// TODO [8단계] memberId를 goalService의 findAllByMemberId 메소드에 전달하여 해당 회원의 모든 Goal 정보를 조회하고, 조회된 정보를 ResponseEntity.ok()에 담아 반환하세요.
return null;
// TODO [8단계] memberId를 goalService의 findAllByMemberId 메소드에 전달하여 해당 회원의 모든 Goal 정보를 조회하고,
List<GoalResponse> info = goalService.findAllByMemberId(memberId);
// TODO 조회된 정보를 ResponseEntity.ok()에 담아 반환하세요.
ResponseEntity<List<GoalResponse>> ok = ResponseEntity.ok(info);
return ok;
}
}
58 changes: 50 additions & 8 deletions src/main/java/backend/likelion/todos/goal/GoalService.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
import backend.likelion.todos.common.NotFoundException;
import backend.likelion.todos.member.Member;
import backend.likelion.todos.member.MemberRepository;

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

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

Expand All @@ -15,29 +19,67 @@ public class GoalService {
private final GoalRepository goalRepository;

public Long save(String name, String color, Long memberId) {
// TODO [8단계] memberId로 회원을 조회하고, 조회에 실패하면 "회원 정보가 없습니다." 예외를 발생시키세요.
// TODO [8단계] memberId로 회원을 조회하고,
// 조회에 실패하면 "회원 정보가 없습니다."
// 예외를 발생시키세요.
Optional<Member> member = memberRepository.findById(memberId);
if (member.isEmpty()) {
throw new NotFoundException("회원 정보가 없습니다.");
}
// TODO [8단계] 조회된 회원 정보를 사용하여 새 Goal 객체를 생성하세요.
// TODO [8단계] 생성된 Goal 객체를 goalRepository에 저장하고, 저장된 Goal의 ID를 반환하세요.
return null;
Goal newGoal = new Goal(name,color,member.get());
// TODO [8단계] 생성된 Goal 객체를 goalRepository에 저장하고,
goalRepository.save(newGoal);
// TODO 저장된 Goal의 ID를 반환하세요.
return newGoal.getId();
}

public void update(Long goalId, String name, String color, Long memberId) {
// TODO [8단계] memberId로 회원을 조회하고, 조회에 실패하면 "회원 정보가 없습니다." 예외를 발생시키세요.
// TODO [8단계] goalId로 목표(Goal)를 조회하고, 조회에 실패하면 "목표 정보가 없습니다." 예외를 발생시키세요.
// TODO [8단계] memberId로 회원을 조회하고,
// 조회에 실패하면 "회원 정보가 없습니다." 예외를 발생시키세요.
Optional<Member> member = memberRepository.findById(memberId);
if (member.isEmpty()) {
throw new NotFoundException("회원 정보가 없습니다.");
}
// TODO [8단계] goalId로 목표(Goal)를 조회하고,
// 조회에 실패하면 "목표 정보가 없습니다." 예외를 발생시키세요.
Optional<Goal> goal = goalRepository.findById(goalId);
if (goal.isEmpty()) {
throw new NotFoundException("목표 정보가 없습니다.");
}
// TODO [8단계] 조회된 Goal의 회원 정보가 입력된 memberId와 일치하는지 검증하세요.
goal.get().validateMember(member.get());
// TODO [8단계] Goal 객체의 정보를 새로운 name과 color로 업데이트하세요.
goal.get().update(name,color);
}

public void delete(Long goalId, Long memberId) {
// TODO [8단계] memberId로 회원을 조회하고, 조회에 실패하면 "회원 정보가 없습니다." 예외를 발생시키세요.
// TODO [8단계] goalId로 목표(Goal)를 조회하고, 조회에 실패하면 "목표 정보가 없습니다." 예외를 발생시키세요.
// TODO [8단계] memberId로 회원을 조회하고,
// 조회에 실패하면 "회원 정보가 없습니다." 예외를 발생시키세요.
Optional<Member> member = memberRepository.findById(memberId);
if (member.isEmpty()) {
throw new NotFoundException("회원 정보가 없습니다.");
}
// TODO [8단계] goalId로 목표(Goal)를 조회하고,
// 조회에 실패하면 "목표 정보가 없습니다." 예외를 발생시키세요.
Optional<Goal> goal = goalRepository.findById(goalId);
if (goal.isEmpty()) {
throw new NotFoundException("목표 정보가 없습니다.");
}
// TODO [8단계] 조회된 Goal의 회원 정보가 입력된 memberId와 일치하는지 검증하세요.
goal.get().validateMember(member.get());
// TODO [8단계] 검증이 완료되면 Goal을 goalRepository에서 삭제하세요.
goalRepository.delete(goal.get());
}

public List<GoalResponse> findAllByMemberId(Long memberId) {
// TODO [8단계] memberId로 모든 목표(Goal)를 조회하세요.
List<Goal> goalList = goalRepository.findAllByMemberId(memberId);
// TODO [8단계] 조회된 Goal들을 GoalResponse 리스트로 변환하여 반환하세요.
return null;
List<GoalResponse> goalResponseList = new ArrayList<>();
for (Goal g : goalList) {
goalResponseList.add(new GoalResponse(g.getId(),g.getName(),g.getColor()));
}
return goalResponseList;
}
}