-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feat: 사용자 회원 가입 시 기본 링크 분류가 만들어진다.
- Loading branch information
Showing
16 changed files
with
366 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
src/main/java/com/seong/shoutlink/domain/auth/service/event/CreateMemberEvent.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package com.seong.shoutlink.domain.auth.service.event; | ||
|
||
import com.seong.shoutlink.domain.common.Event; | ||
|
||
public record CreateMemberEvent(Long memberId) implements Event { | ||
|
||
} |
19 changes: 19 additions & 0 deletions
19
src/main/java/com/seong/shoutlink/domain/linkbundle/LinkBundle.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package com.seong.shoutlink.domain.linkbundle; | ||
|
||
import com.seong.shoutlink.domain.member.Member; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
public class LinkBundle { | ||
|
||
private Long linkBundleId; | ||
private String description; | ||
private boolean isDefault; | ||
private Member member; | ||
|
||
public LinkBundle(String description, boolean isDefault, Member member) { | ||
this.description = description; | ||
this.isDefault = isDefault; | ||
this.member = member; | ||
} | ||
} |
43 changes: 43 additions & 0 deletions
43
src/main/java/com/seong/shoutlink/domain/linkbundle/repository/LinkBundleEntity.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package com.seong.shoutlink.domain.linkbundle.repository; | ||
|
||
import com.seong.shoutlink.domain.linkbundle.LinkBundle; | ||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.GeneratedValue; | ||
import jakarta.persistence.GenerationType; | ||
import jakarta.persistence.Id; | ||
import lombok.AccessLevel; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
@Entity | ||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
public class LinkBundleEntity { | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private Long linkBundleId; | ||
|
||
private String description; | ||
private boolean isDefault; | ||
private Long memberId; | ||
|
||
private LinkBundleEntity( | ||
Long linkBundleId, | ||
String description, | ||
boolean isDefault, | ||
Long memberId) { | ||
this.linkBundleId = linkBundleId; | ||
this.description = description; | ||
this.isDefault = isDefault; | ||
this.memberId = memberId; | ||
} | ||
|
||
public static LinkBundleEntity create(LinkBundle linkBundle) { | ||
return new LinkBundleEntity( | ||
linkBundle.getLinkBundleId(), | ||
linkBundle.getDescription(), | ||
linkBundle.isDefault(), | ||
linkBundle.getMember().getMemberId()); | ||
} | ||
} |
7 changes: 7 additions & 0 deletions
7
src/main/java/com/seong/shoutlink/domain/linkbundle/repository/LinkBundleJpaRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package com.seong.shoutlink.domain.linkbundle.repository; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
|
||
public interface LinkBundleJpaRepository extends JpaRepository<LinkBundleEntity, Long> { | ||
|
||
} |
20 changes: 20 additions & 0 deletions
20
src/main/java/com/seong/shoutlink/domain/linkbundle/repository/LinkBundleRepositoryImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package com.seong.shoutlink.domain.linkbundle.repository; | ||
|
||
import com.seong.shoutlink.domain.linkbundle.LinkBundle; | ||
import com.seong.shoutlink.domain.linkbundle.service.LinkBundleRepository; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Repository; | ||
|
||
@Repository | ||
@RequiredArgsConstructor | ||
public class LinkBundleRepositoryImpl implements LinkBundleRepository { | ||
|
||
private final LinkBundleJpaRepository linkBundleJpaRepository; | ||
|
||
@Override | ||
public Long save(LinkBundle linkBundle) { | ||
LinkBundleEntity linkBundleEntity = LinkBundleEntity.create(linkBundle); | ||
linkBundleJpaRepository.save(linkBundleEntity); | ||
return linkBundleEntity.getLinkBundleId(); | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
src/main/java/com/seong/shoutlink/domain/linkbundle/service/LinkBundleRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package com.seong.shoutlink.domain.linkbundle.service; | ||
|
||
import com.seong.shoutlink.domain.linkbundle.LinkBundle; | ||
|
||
public interface LinkBundleRepository { | ||
|
||
Long save(LinkBundle linkBundle); | ||
} |
28 changes: 28 additions & 0 deletions
28
src/main/java/com/seong/shoutlink/domain/linkbundle/service/LinkBundleService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package com.seong.shoutlink.domain.linkbundle.service; | ||
|
||
import com.seong.shoutlink.domain.exception.ErrorCode; | ||
import com.seong.shoutlink.domain.exception.ShoutLinkException; | ||
import com.seong.shoutlink.domain.linkbundle.LinkBundle; | ||
import com.seong.shoutlink.domain.linkbundle.service.response.CreateLinkBundleCommand; | ||
import com.seong.shoutlink.domain.linkbundle.service.response.CreateLinkBundleResponse; | ||
import com.seong.shoutlink.domain.member.Member; | ||
import com.seong.shoutlink.domain.member.service.MemberRepository; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class LinkBundleService { | ||
|
||
private final MemberRepository memberRepository; | ||
private final LinkBundleRepository linkBundleRepository; | ||
|
||
@Transactional | ||
public CreateLinkBundleResponse createLinkBundle(CreateLinkBundleCommand command) { | ||
Member member = memberRepository.findById(command.memberId()) | ||
.orElseThrow(() -> new ShoutLinkException("존재하지 않는 사용자입니다.", ErrorCode.NOT_FOUND)); | ||
LinkBundle linkBundle = new LinkBundle(command.description(), command.isDefault(), member); | ||
return new CreateLinkBundleResponse(linkBundleRepository.save(linkBundle)); | ||
} | ||
} |
5 changes: 5 additions & 0 deletions
5
.../java/com/seong/shoutlink/domain/linkbundle/service/response/CreateLinkBundleCommand.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package com.seong.shoutlink.domain.linkbundle.service.response; | ||
|
||
public record CreateLinkBundleCommand(Long memberId, String description, boolean isDefault) { | ||
|
||
} |
5 changes: 5 additions & 0 deletions
5
...java/com/seong/shoutlink/domain/linkbundle/service/response/CreateLinkBundleResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package com.seong.shoutlink.domain.linkbundle.service.response; | ||
|
||
public record CreateLinkBundleResponse(Long linkBundleId) { | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
26 changes: 26 additions & 0 deletions
26
src/main/java/com/seong/shoutlink/global/event/SpringEventListener.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package com.seong.shoutlink.global.event; | ||
|
||
import com.seong.shoutlink.domain.auth.service.event.CreateMemberEvent; | ||
import com.seong.shoutlink.domain.linkbundle.service.LinkBundleService; | ||
import com.seong.shoutlink.domain.linkbundle.service.response.CreateLinkBundleCommand; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.transaction.annotation.Propagation; | ||
import org.springframework.transaction.annotation.Transactional; | ||
import org.springframework.transaction.event.TransactionPhase; | ||
import org.springframework.transaction.event.TransactionalEventListener; | ||
|
||
@RequiredArgsConstructor | ||
public class SpringEventListener { | ||
|
||
private static final String DEFAULT_LINK_BUNDLE = "기본"; | ||
|
||
private final LinkBundleService linkBundleService; | ||
|
||
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) | ||
@Transactional(propagation = Propagation.REQUIRES_NEW) | ||
public void createDefaultLinkBundle(CreateMemberEvent event) { | ||
CreateLinkBundleCommand command | ||
= new CreateLinkBundleCommand(event.memberId(), DEFAULT_LINK_BUNDLE, true); | ||
linkBundleService.createLinkBundle(command); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
22 changes: 22 additions & 0 deletions
22
src/test/java/com/seong/shoutlink/domain/linkbundle/repository/FakeLinkBundleRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package com.seong.shoutlink.domain.linkbundle.repository; | ||
|
||
import com.seong.shoutlink.domain.linkbundle.LinkBundle; | ||
import com.seong.shoutlink.domain.linkbundle.service.LinkBundleRepository; | ||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
public class FakeLinkBundleRepository implements LinkBundleRepository { | ||
|
||
private final Map<Long, LinkBundle> memory = new HashMap<>(); | ||
|
||
@Override | ||
public Long save(LinkBundle linkBundle) { | ||
long nextId = getNextId(); | ||
memory.put(nextId, linkBundle); | ||
return nextId; | ||
} | ||
|
||
private long getNextId() { | ||
return memory.keySet().size() + 1; | ||
} | ||
} |
Oops, something went wrong.