Skip to content

Commit

Permalink
feat: 순환 참조 방지를 위한 Event 객체 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
hyeonic committed Sep 8, 2022
1 parent 47b7ee6 commit 0b0bd7c
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.github.hyeonic.circularreference.event;

import io.github.hyeonic.circularreference.category.Category;
import io.github.hyeonic.circularreference.category.CategoryService;
import io.github.hyeonic.circularreference.member.Member;
import io.github.hyeonic.circularreference.subscription.SubscriptionService;
import javax.transaction.Transactional;
import org.springframework.stereotype.Component;

@Component
public class MemberSaveAfterEvent {

private final CategoryService categoryService;
private final SubscriptionService subscriptionService;

public MemberSaveAfterEvent(final CategoryService categoryService, final SubscriptionService subscriptionService) {
this.categoryService = categoryService;
this.subscriptionService = subscriptionService;
}

@Transactional
public void process(final String name, final Member member) {
Category newCategory = categoryService.save(member.getId(), name);
subscriptionService.save(member.getId(), newCategory.getId());
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package io.github.hyeonic.circularreference.member;

import io.github.hyeonic.circularreference.category.Category;
import io.github.hyeonic.circularreference.category.CategoryService;
import io.github.hyeonic.circularreference.subscription.SubscriptionService;
import io.github.hyeonic.circularreference.event.MemberSaveAfterEvent;
import java.util.NoSuchElementException;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;
Expand All @@ -12,23 +10,17 @@ public class MemberService {

private static final String MY_SCHEDULE = "내 일정";

private final CategoryService categoryService;
private final SubscriptionService subscriptionService;
private final MemberRepository memberRepository;

public MemberService(final CategoryService categoryService, final SubscriptionService subscriptionService,
final MemberRepository memberRepository) {
this.categoryService = categoryService;
this.subscriptionService = subscriptionService;
public MemberService(final MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}

@Transactional
public Member save(final String email, final String displayName) {
public Member save(final String email, final String displayName, MemberSaveAfterEvent memberSaveAfterEvent) {
Member newMember = memberRepository.save(new Member(email, displayName));

Category newCategory = categoryService.save(newMember.getId(), MY_SCHEDULE);
subscriptionService.save(newMember.getId(), newCategory.getId());
memberSaveAfterEvent.process(MY_SCHEDULE, newMember);

return newMember;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package io.github.hyeonic.circularreference.presentation;

import io.github.hyeonic.circularreference.event.MemberSaveAfterEvent;
import io.github.hyeonic.circularreference.member.Member;
import io.github.hyeonic.circularreference.member.MemberService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/members")
public class MemberController {

private final MemberService memberService;
private final MemberSaveAfterEvent memberSaveAfterEvent;

public MemberController(final MemberService memberService, final MemberSaveAfterEvent memberSaveAfterEvent) {
this.memberService = memberService;
this.memberSaveAfterEvent = memberSaveAfterEvent;
}

@PostMapping
public ResponseEntity<Member> save(@RequestParam String email, @RequestParam String displayName) {
Member member = memberService.save(email, displayName, memberSaveAfterEvent);
return ResponseEntity.ok(member);
}
}

0 comments on commit 0b0bd7c

Please sign in to comment.