Skip to content

Commit 9428724

Browse files
committed
feat: 이벤트 처리 구현
- Profile, Option 작성 이벤트 처리 및 Factory 구현 - Hobby, Style 작성 이벤트 처리 구현
1 parent 3dd8719 commit 9428724

15 files changed

+340
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.atwoz.member.application.event;
2+
3+
import com.atwoz.global.event.Event;
4+
import com.atwoz.member.application.info.dto.HobbyWriteRequest;
5+
import lombok.Getter;
6+
import java.util.List;
7+
8+
@Getter
9+
public class HobbyWriteEvent extends Event {
10+
11+
private final Long memberId;
12+
private final List<HobbyWriteRequest> hobbies;
13+
14+
public HobbyWriteEvent(final Long memberId, final List<HobbyWriteRequest> hobbies) {
15+
super();
16+
this.memberId = memberId;
17+
this.hobbies = hobbies;
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.atwoz.member.application.event;
2+
3+
import com.atwoz.global.event.Event;
4+
import com.atwoz.member.application.info.dto.option.OptionWriteRequest;
5+
import lombok.Getter;
6+
7+
@Getter
8+
public class OptionWriteEvent extends Event {
9+
10+
private final Long memberId;
11+
private final OptionWriteRequest request;
12+
13+
public OptionWriteEvent(final Long memberId, final OptionWriteRequest request) {
14+
super();
15+
this.memberId = memberId;
16+
this.request = request;
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.atwoz.member.application.event;
2+
3+
import com.atwoz.global.event.Event;
4+
import com.atwoz.member.application.info.dto.profile.ProfileWriteRequest;
5+
import lombok.Getter;
6+
7+
@Getter
8+
public class ProfileWriteEvent extends Event {
9+
10+
private final Long memberId;
11+
private final ProfileWriteRequest request;
12+
13+
public ProfileWriteEvent(final Long memberId, final ProfileWriteRequest request) {
14+
super();
15+
this.memberId = memberId;
16+
this.request = request;
17+
}
18+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.atwoz.member.application.event;
2+
3+
import com.atwoz.global.event.Event;
4+
import com.atwoz.member.application.info.dto.StyleWriteRequest;
5+
import lombok.Getter;
6+
import java.util.List;
7+
8+
@Getter
9+
public class StyleWriteEvent extends Event {
10+
11+
private final Long memberId;
12+
private final List<StyleWriteRequest> styles;
13+
14+
public StyleWriteEvent(final Long memberId, final List<StyleWriteRequest> styles) {
15+
super();
16+
this.memberId = memberId;
17+
this.styles = styles;
18+
}
19+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.atwoz.member.application.info;
2+
3+
import com.atwoz.global.event.Events;
4+
import com.atwoz.member.application.event.HobbyWriteEvent;
5+
import com.atwoz.member.application.event.OptionWriteEvent;
6+
import com.atwoz.member.application.event.ProfileWriteEvent;
7+
import com.atwoz.member.application.event.StyleWriteEvent;
8+
import com.atwoz.member.application.info.dto.InfoWriteRequest;
9+
import com.atwoz.member.application.info.dto.StyleWriteRequest;
10+
import com.atwoz.member.application.info.dto.HobbyWriteRequest;
11+
import com.atwoz.member.application.info.dto.option.OptionWriteRequest;
12+
import com.atwoz.member.application.info.dto.profile.ProfileWriteRequest;
13+
import lombok.RequiredArgsConstructor;
14+
import org.springframework.stereotype.Service;
15+
import org.springframework.transaction.annotation.Transactional;
16+
import java.util.List;
17+
18+
@RequiredArgsConstructor
19+
@Transactional(readOnly = true)
20+
@Service
21+
public class InfoService {
22+
23+
@Transactional
24+
public void writeProfile(final Long memberId, final InfoWriteRequest request) {
25+
ProfileWriteRequest profileWriteRequest = request.profile();
26+
OptionWriteRequest optionWriteRequest = request.option();
27+
List<HobbyWriteRequest> hobbies = request.hobbies();
28+
List<StyleWriteRequest> styles = request.styles();
29+
30+
Events.raise(new ProfileWriteEvent(memberId, profileWriteRequest));
31+
Events.raise(new OptionWriteEvent(memberId, optionWriteRequest));
32+
33+
Events.raise(new HobbyWriteEvent(memberId, hobbies));
34+
Events.raise(new StyleWriteEvent(memberId, styles));
35+
}
36+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.atwoz.member.application.info.hobby;
2+
3+
import com.atwoz.member.domain.info.hobby.Hobbies;
4+
import com.atwoz.member.infrastructure.info.hobby.HobbiesRepository;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.stereotype.Service;
7+
import org.springframework.transaction.annotation.Transactional;
8+
import java.util.List;
9+
10+
@RequiredArgsConstructor
11+
@Transactional(readOnly = true)
12+
@Service
13+
public class HobbyService {
14+
15+
private final HobbiesRepository hobbiesRepository;
16+
17+
@Transactional
18+
public void writeHobbies(final Long memberId, final List<String> hobbies) {
19+
20+
hobbiesRepository.save(new Hobbies(memberId, hobbies));
21+
}
22+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.atwoz.member.application.info.hobby;
2+
3+
import com.atwoz.member.application.event.HobbyWriteEvent;
4+
import com.atwoz.member.application.info.dto.HobbyWriteRequest;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.context.event.EventListener;
7+
import java.util.List;
8+
9+
@RequiredArgsConstructor
10+
public class HobbyWriteEventHandler {
11+
12+
private final HobbyService hobbyService;
13+
14+
@EventListener
15+
public void writeHobbies(final HobbyWriteEvent event) {
16+
List<String> hobbies = event.getHobbies()
17+
.stream()
18+
.map(HobbyWriteRequest::hobby)
19+
.toList();
20+
21+
hobbyService.writeHobbies(event.getMemberId(), hobbies);
22+
}
23+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.atwoz.member.application.info.option;
2+
3+
import com.atwoz.member.application.info.dto.option.OptionWriteRequest;
4+
import com.atwoz.member.domain.info.option.Option;
5+
import org.springframework.stereotype.Component;
6+
7+
@Component
8+
public class OptionFactory {
9+
10+
public Option fromRequest(final Long memberId, final OptionWriteRequest request) {
11+
12+
return new Option(memberId, request.smoke(), request.religion(), request.drink(), request.mbti(), request.graduate());
13+
}
14+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.atwoz.member.application.info.option;
2+
3+
import com.atwoz.member.application.info.dto.option.OptionWriteRequest;
4+
import com.atwoz.member.domain.info.option.Option;
5+
import com.atwoz.member.infrastructure.info.option.OptionRepository;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.stereotype.Service;
8+
import org.springframework.transaction.annotation.Transactional;
9+
10+
@RequiredArgsConstructor
11+
@Transactional(readOnly = true)
12+
@Service
13+
public class OptionService {
14+
15+
private final OptionFactory optionFactory;
16+
private final OptionRepository optionRepository;
17+
18+
@Transactional
19+
public void writeOption(final Long memberId, final OptionWriteRequest request) {
20+
Option option = optionFactory.fromRequest(memberId, request);
21+
optionRepository.save(option);
22+
}
23+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.atwoz.member.application.info.option;
2+
3+
import com.atwoz.member.application.event.OptionWriteEvent;
4+
import com.atwoz.member.application.info.dto.option.OptionWriteRequest;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.context.event.EventListener;
7+
import org.springframework.stereotype.Component;
8+
9+
@RequiredArgsConstructor
10+
@Component
11+
public class OptionWriteEventHandler {
12+
13+
private final OptionService optionService;
14+
15+
@EventListener
16+
public void writeOption(final OptionWriteEvent event) {
17+
Long memberId = event.getMemberId();
18+
OptionWriteRequest request = event.getRequest();
19+
optionService.writeOption(memberId, request);
20+
}
21+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.atwoz.member.application.info.profile;
2+
3+
import com.atwoz.member.application.info.dto.profile.LocationWriteRequest;
4+
import com.atwoz.member.application.info.dto.profile.ProfileWriteRequest;
5+
import com.atwoz.member.domain.info.profile.Gender;
6+
import com.atwoz.member.domain.info.profile.Job;
7+
import com.atwoz.member.domain.info.profile.Location;
8+
import com.atwoz.member.domain.info.profile.MemberBody;
9+
import com.atwoz.member.domain.info.profile.Profile;
10+
import org.springframework.stereotype.Component;
11+
12+
@Component
13+
public class ProfileFactory {
14+
15+
public Profile fromRequest(final Long memberId, final ProfileWriteRequest request) {
16+
MemberBody memberBody = createMemberBody(request);
17+
Location location = createLocation(request.location());
18+
Job job = createJob(request.job());
19+
return new Profile(memberId, memberBody, location, job);
20+
}
21+
22+
private MemberBody createMemberBody(final ProfileWriteRequest request) {
23+
Integer age = request.age();
24+
Integer height = request.height();
25+
Gender gender = Gender.findByName(request.gender());
26+
27+
return new MemberBody(age, height, gender);
28+
}
29+
30+
private Location createLocation(final LocationWriteRequest request) {
31+
return new Location(request.city(), request.sector());
32+
}
33+
34+
private Job createJob(final String job) {
35+
return new Job(job);
36+
}
37+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.atwoz.member.application.info.profile;
2+
3+
import com.atwoz.member.application.info.dto.profile.ProfileWriteRequest;
4+
import com.atwoz.member.domain.info.profile.Profile;
5+
import com.atwoz.member.infrastructure.info.profile.ProfileRepository;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.stereotype.Service;
8+
import org.springframework.transaction.annotation.Transactional;
9+
10+
@RequiredArgsConstructor
11+
@Transactional(readOnly = true)
12+
@Service
13+
public class ProfileService {
14+
15+
private final ProfileRepository profileRepository;
16+
private final ProfileFactory profileFactory;
17+
18+
@Transactional
19+
public void writeProfile(final Long memberId, final ProfileWriteRequest request) {
20+
21+
Profile profile = profileFactory.fromRequest(memberId, request);
22+
profileRepository.save(profile);
23+
}
24+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.atwoz.member.application.info.profile;
2+
3+
import com.atwoz.member.application.event.ProfileWriteEvent;
4+
import com.atwoz.member.application.info.dto.profile.ProfileWriteRequest;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.context.event.EventListener;
7+
import org.springframework.stereotype.Component;
8+
9+
@RequiredArgsConstructor
10+
@Component
11+
public class ProfileWriteEventHandler {
12+
13+
private final ProfileService profileService;
14+
15+
@EventListener
16+
public void writeProfile(final ProfileWriteEvent event) {
17+
Long memberId = event.getMemberId();
18+
ProfileWriteRequest request = event.getRequest();
19+
20+
profileService.writeProfile(memberId, request);
21+
}
22+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.atwoz.member.application.info.style;
2+
3+
import com.atwoz.member.domain.info.style.Styles;
4+
import com.atwoz.member.infrastructure.info.style.StylesRepository;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.stereotype.Service;
7+
import org.springframework.transaction.annotation.Transactional;
8+
import java.util.List;
9+
10+
@RequiredArgsConstructor
11+
@Transactional(readOnly = true)
12+
@Service
13+
public class StyleService {
14+
15+
private final StylesRepository stylesRepository;
16+
17+
@Transactional
18+
public void writeStyles(final Long memberId, final List<String> styles) {
19+
stylesRepository.save(new Styles(memberId, styles));
20+
}
21+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.atwoz.member.application.info.style;
2+
3+
import com.atwoz.member.application.event.StyleWriteEvent;
4+
import com.atwoz.member.application.info.dto.StyleWriteRequest;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.context.event.EventListener;
7+
import java.util.List;
8+
9+
@RequiredArgsConstructor
10+
public class StyleWriteEventHandler {
11+
12+
private final StyleService styleService;
13+
14+
@EventListener
15+
public void writeStyle(final StyleWriteEvent event) {
16+
List<String> styles = event.getStyles()
17+
.stream()
18+
.map(StyleWriteRequest::style)
19+
.toList();
20+
21+
styleService.writeStyles(event.getMemberId(), styles);
22+
}
23+
}

0 commit comments

Comments
 (0)