Skip to content

Commit 08e7ec7

Browse files
authored
Merge pull request #410 from depromeet/develop
v1.3.83
2 parents 6219cff + 3d076ed commit 08e7ec7

24 files changed

+192
-15
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.layer.admin.common;
2+
3+
import org.layer.admin.member.repository.AdminMemberRepository;
4+
import org.layer.admin.retrospect.repository.AdminRetrospectAnswerRepository;
5+
import org.layer.admin.retrospect.repository.AdminRetrospectRepository;
6+
import org.layer.admin.space.repository.AdminSpaceRepository;
7+
import org.springframework.http.ResponseEntity;
8+
import org.springframework.web.bind.annotation.GetMapping;
9+
import org.springframework.web.bind.annotation.RestController;
10+
11+
import lombok.RequiredArgsConstructor;
12+
13+
@RestController
14+
@RequiredArgsConstructor
15+
public class CommonController {
16+
17+
// 간단한 기능이기에 바로 repository를 사용합니다.
18+
private final AdminMemberRepository adminMemberRepository;
19+
private final AdminSpaceRepository adminSpaceRepository;
20+
private final AdminRetrospectRepository adminRetrospectRepository;
21+
private final AdminRetrospectAnswerRepository adminRetrospectAnswerRepository;
22+
23+
24+
@GetMapping("/admin/outline")
25+
public ResponseEntity<OutlineResponse> getOutline() {
26+
27+
return ResponseEntity.ok(
28+
new OutlineResponse(
29+
adminMemberRepository.count(),
30+
adminSpaceRepository.count(),
31+
adminRetrospectRepository.count(),
32+
adminRetrospectAnswerRepository.count()
33+
)
34+
);
35+
}
36+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.layer.admin.common;
2+
3+
public record OutlineResponse(
4+
long totalMemberCount,
5+
long totalSpaceCount,
6+
long totalRetrospectCount,
7+
long totalRetrospectAnswerCount
8+
) {
9+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.layer.admin.common;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Target(ElementType.METHOD)
9+
@Retention(RetentionPolicy.RUNTIME)
10+
public @interface UserOnlyEventListener {
11+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.layer.admin.common;
2+
3+
import org.aspectj.lang.ProceedingJoinPoint;
4+
import org.aspectj.lang.annotation.Around;
5+
import org.aspectj.lang.annotation.Aspect;
6+
import org.layer.admin.member.entity.AdminMemberRole;
7+
import org.layer.admin.member.entity.AdminMemberSignupHistory;
8+
import org.layer.admin.member.repository.AdminMemberRepository;
9+
import org.layer.event.BaseEvent;
10+
import org.springframework.stereotype.Component;
11+
12+
import lombok.RequiredArgsConstructor;
13+
14+
@Aspect
15+
@Component
16+
@RequiredArgsConstructor
17+
public class UserOnlyEventListenerAspect {
18+
19+
private final AdminMemberRepository adminMemberRepository;
20+
21+
@Around("@annotation(UserOnlyEventListener) && @annotation(org.springframework.context.event.EventListener)")
22+
public Object skipIfAdminRole(ProceedingJoinPoint joinPoint) throws Throwable {
23+
Object[] args = joinPoint.getArgs();
24+
if (args.length == 0) return joinPoint.proceed();
25+
26+
if (!(args[0] instanceof BaseEvent event)) {
27+
return joinPoint.proceed();
28+
}
29+
30+
Long memberId = event.memberId();
31+
if (memberId == null) return joinPoint.proceed();
32+
33+
AdminMemberRole role = adminMemberRepository.findById(memberId)
34+
.map(AdminMemberSignupHistory::getMemberRole)
35+
.orElse(null);
36+
37+
if (role == AdminMemberRole.ADMIN) {
38+
// 🔥 ADMIN이면 스킵
39+
return null;
40+
}
41+
42+
return joinPoint.proceed();
43+
}
44+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.layer.admin.member.entity;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
6+
@AllArgsConstructor
7+
@Getter
8+
public enum AdminMemberRole {
9+
USER,
10+
ADMIN;
11+
12+
public static AdminMemberRole fromString(String role) {
13+
for (AdminMemberRole memberRole : values()) {
14+
if (memberRole.name().equalsIgnoreCase(role)) {
15+
return memberRole;
16+
}
17+
}
18+
throw new IllegalArgumentException("Unknown role: " + role);
19+
}
20+
}

layer-admin/src/main/java/org/layer/admin/member/entity/AdminMemberSignupHistory.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.time.LocalDateTime;
44

55
import jakarta.persistence.Entity;
6+
import jakarta.persistence.EnumType;
7+
import jakarta.persistence.Enumerated;
68
import jakarta.persistence.GeneratedValue;
79
import jakarta.persistence.GenerationType;
810
import jakarta.persistence.Id;
@@ -29,10 +31,20 @@ public class AdminMemberSignupHistory {
2931
@NotNull
3032
private String eventId;
3133

34+
@NotNull
35+
@Enumerated(EnumType.STRING)
36+
private AdminMemberRole memberRole;
37+
3238
@Builder
33-
private AdminMemberSignupHistory(LocalDateTime eventTime, Long memberId, String eventId) {
39+
private AdminMemberSignupHistory(
40+
LocalDateTime eventTime,
41+
Long memberId,
42+
String eventId,
43+
AdminMemberRole memberRole
44+
) {
3445
this.eventTime = eventTime;
3546
this.memberId = memberId;
3647
this.eventId = eventId;
48+
this.memberRole = memberRole;
3749
}
3850
}

layer-admin/src/main/java/org/layer/admin/member/listener/SignUpEventListener.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.layer.admin.member.listener;
22

3+
import org.layer.admin.common.UserOnlyEventListener;
34
import org.layer.admin.member.service.AdminMemberService;
45
import org.layer.event.member.SignUpEvent;
56
import org.springframework.context.event.EventListener;
@@ -12,6 +13,7 @@
1213
public class SignUpEventListener {
1314
private final AdminMemberService adminMemberService;
1415

16+
@UserOnlyEventListener
1517
@EventListener
1618
public void handleSignUp(SignUpEvent event) {
1719
adminMemberService.saveMemberSignUp(event);

layer-admin/src/main/java/org/layer/admin/member/service/AdminMemberService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.stream.Collectors;
99

1010
import org.layer.admin.member.controller.dto.MemberSignupCountResponse;
11+
import org.layer.admin.member.entity.AdminMemberRole;
1112
import org.layer.admin.member.entity.AdminMemberSignupHistory;
1213
import org.layer.admin.member.repository.AdminMemberRepository;
1314
import org.layer.event.member.SignUpEvent;
@@ -53,6 +54,7 @@ public void saveMemberSignUp(SignUpEvent event) {
5354
.eventId(event.eventId())
5455
.eventTime(event.eventTime())
5556
.memberId(event.memberId())
57+
.memberRole(AdminMemberRole.fromString(event.memberRole()))
5658
.build();
5759

5860
adminMemberRepository.save(adminMemberSignupHistory);

layer-admin/src/main/java/org/layer/admin/retrospect/listener/AnswerRetrospectEventListener.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.layer.admin.retrospect.listener;
22

3+
import org.layer.admin.common.UserOnlyEventListener;
34
import org.layer.admin.retrospect.service.AdminRetrospectService;
45
import org.layer.event.retrospect.AnswerRetrospectEndEvent;
56
import org.layer.event.retrospect.AnswerRetrospectStartEvent;
@@ -13,11 +14,13 @@
1314
public class AnswerRetrospectEventListener {
1415
private final AdminRetrospectService adminRetrospectService;
1516

17+
@UserOnlyEventListener
1618
@EventListener
1719
public void handleWriteRetrospectStart(AnswerRetrospectStartEvent event) {
1820
adminRetrospectService.saveRetrospectAnswerHistory(event);
1921
}
2022

23+
@UserOnlyEventListener
2124
@EventListener
2225
public void handleWriteRetrospectEnd(AnswerRetrospectEndEvent event) {
2326
adminRetrospectService.updateRetrospectAnswerHistory(event);

layer-admin/src/main/java/org/layer/admin/retrospect/listener/CreateRetrospectEventListener.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.layer.admin.retrospect.listener;
22

3+
import org.layer.admin.common.UserOnlyEventListener;
34
import org.layer.admin.retrospect.service.AdminRetrospectService;
45
import org.layer.event.retrospect.CreateRetrospectEvent;
56
import org.springframework.context.event.EventListener;
@@ -12,6 +13,7 @@
1213
public class CreateRetrospectEventListener {
1314
private final AdminRetrospectService adminRetrospectService;
1415

16+
@UserOnlyEventListener
1517
@EventListener
1618
public void handleWriteRetrospectStart(CreateRetrospectEvent event) {
1719
adminRetrospectService.saveRetrospectHistory(event);

0 commit comments

Comments
 (0)