Skip to content

Commit abd50e3

Browse files
committed
2 parents 64c548a + b132666 commit abd50e3

File tree

18 files changed

+233
-95
lines changed

18 files changed

+233
-95
lines changed
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.back.domain.item.entity;
22

33
public enum ItemType {
4-
AVATAR,
5-
FURNITURE,
6-
CLOTHE,
7-
BACKGROUND,
4+
NATURE,
5+
FESTIVAL,
6+
SPORTS,
7+
SPECIAL
88
}

backend/src/main/java/com/back/domain/member/controller/ApiV1MemberController.java

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -157,23 +157,23 @@ public ResponseEntity<ApiResponse<MemberDto>> modifyProfile(
157157
);
158158
}
159159

160-
public record PasswordReqDto(String password) {}
161-
@PutMapping("/modify/password")
162-
@Operation(summary = "[Test] 비밀번호 변경", description = "비밀번호 변경")
163-
public ResponseEntity<ApiResponse<Void>> modifyPassword(
164-
@Valid @RequestBody PasswordReqDto reqBody
165-
) {
166-
Member actor = rq.getActorFromDb();
167-
memberService.modifyPassword(actor, reqBody.password());
168-
169-
return ResponseEntity
170-
.status(HttpStatus.OK)
171-
.body(new ApiResponse<>(
172-
"200",
173-
"[Member] Success: 비밀번호 변경"
174-
)
175-
);
176-
}
160+
// public record PasswordReqDto(String password) {}
161+
// @PutMapping("/modify/password")
162+
// @Operation(summary = "[Test] 비밀번호 변경", description = "비밀번호 변경")
163+
// public ResponseEntity<ApiResponse<Void>> modifyPassword(
164+
// @Valid @RequestBody PasswordReqDto reqBody
165+
// ) {
166+
// Member actor = rq.getActorFromDb();
167+
// memberService.modifyPassword(actor, reqBody.password());
168+
//
169+
// return ResponseEntity
170+
// .status(HttpStatus.OK)
171+
// .body(new ApiResponse<>(
172+
// "200",
173+
// "[Member] Success: 비밀번호 변경"
174+
// )
175+
// );
176+
// }
177177

178178
@GetMapping("/me")
179179
@Operation(summary = "회원 정보 확인", description = "현재 로그인된 사용자 정보 확인")
@@ -326,4 +326,19 @@ public ResponseEntity<ApiResponse<MemberDto>> obtainTitle(
326326
)
327327
);
328328
}
329+
330+
@GetMapping("/me/statistic")
331+
@Operation(summary = "회원 통계 확인", description = "클리어한 미션 카운트")
332+
public ResponseEntity<ApiResponse<StatisticDto>> meStatistic() {
333+
Member actor = rq.getActorFromDb();
334+
335+
return ResponseEntity
336+
.status(HttpStatus.OK)
337+
.body(new ApiResponse<>(
338+
"200",
339+
"[Member] Success: 사용자 통계 확인 (%s)".formatted(actor.getEmail()),
340+
new StatisticDto(actor.getStatistic())
341+
)
342+
);
343+
}
329344
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.back.domain.member.dto;
2+
3+
import com.back.domain.member.entity.MemberStatistic;
4+
5+
public record StatisticDto(
6+
int countDaily,
7+
int countWeekly,
8+
int countChallenge
9+
) {
10+
public StatisticDto(MemberStatistic statistic) {
11+
this(
12+
statistic.getCountDaily(),
13+
statistic.getCountWeekly(),
14+
statistic.getCountChallenge()
15+
);
16+
}
17+
}

backend/src/main/java/com/back/domain/member/entity/Member.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ public class Member extends BaseEntity {
5252
private MemberRole role = MemberRole.USER;
5353
private String apiKey = null;
5454
private String socialAccessToken = null;
55+
@OneToOne(cascade = CascadeType.ALL)
56+
private MemberStatistic statistic;
5557

5658
//생성자(회원 가입)
5759
public Member(String email, String password, String name) {
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.back.domain.member.entity;
2+
3+
import com.back.global.jpa.entity.BaseEntity;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.OneToOne;
6+
import lombok.*;
7+
8+
@Entity
9+
@Getter
10+
@Setter
11+
@NoArgsConstructor
12+
@AllArgsConstructor
13+
public class MemberStatistic extends BaseEntity {
14+
@OneToOne
15+
private Member member;
16+
17+
private int countDaily = 0;
18+
private int countWeekly = 0;
19+
private int countChallenge = 0;
20+
21+
public MemberStatistic(Member member) {
22+
this.member = member;
23+
}
24+
25+
public void clearDaily() {
26+
this.countDaily++;
27+
}
28+
29+
public void clearWeekly() {
30+
this.countWeekly++;
31+
}
32+
33+
public void clearChallenge() {
34+
this.countChallenge++;
35+
}
36+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.back.domain.member.repository;
2+
3+
import com.back.domain.member.entity.MemberStatistic;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface MemberStatisticRepository extends JpaRepository<MemberStatistic, Integer> {
7+
8+
}

backend/src/main/java/com/back/domain/member/service/MemberService.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.back.domain.item.repository.ItemRepository;
66
import com.back.domain.member.entity.Member;
77
import com.back.domain.member.entity.MemberGender;
8+
import com.back.domain.member.entity.MemberStatistic;
89
import com.back.domain.member.repository.MemberRepository;
910
import com.back.domain.title.entity.Title;
1011
import com.back.domain.title.repository.TitleRepository;
@@ -26,6 +27,7 @@
2627
public class MemberService {
2728
private final PasswordEncoder passwordEncoder;
2829
private final AuthService authService;
30+
private final MemberStatisticService memberStatisticService;
2931
private final MemberRepository memberRepository;
3032
private final ItemRepository itemRepository;
3133
private final TitleRepository titleRepository;
@@ -39,6 +41,8 @@ public Member signup(String email, String password, String name) {
3941

4042
password = passwordEncoder.encode(password);
4143
Member member = new Member(email, password, name);
44+
MemberStatistic memberStatistic = memberStatisticService.create(member);
45+
member.setStatistic(memberStatistic);
4246

4347
return memberRepository.save(member);
4448
}
@@ -87,6 +91,7 @@ public void genCode(Member member) {
8791

8892
//회원 탈퇴
8993
public void delete(Member member) {
94+
memberStatisticService.delete(member);
9095
memberRepository.delete(member);
9196
}
9297

@@ -135,11 +140,20 @@ public void unequipTitle(Member member) {
135140
member.setTitle(null);
136141
}
137142

138-
// *** Modify 메서드 ***
139-
public void modifyPassword(Member member, String password) {
140-
member.setPassword(passwordEncoder.encode(password));
143+
// *** 미션 클리어 카운트 ***
144+
public void clearDaily(Member member) {
145+
member.getStatistic().clearDaily();
146+
}
147+
148+
public void clearWeekly(Member member) {
149+
member.getStatistic().clearWeekly();
141150
}
142151

152+
public void clearChallenge(Member member) {
153+
member.getStatistic().clearChallenge();
154+
}
155+
156+
// *** Modify 메서드 ***
143157
public void modifyProfile(Member member, String name, LocalDate age, MemberGender gender) {
144158
member.setName(name);
145159
member.setBirth(age);
@@ -152,6 +166,10 @@ public void modifyStatus(Member member, int level, int xp, int money) {
152166
member.setMoney(money);
153167
}
154168

169+
// public void modifyPassword(Member member, String password) {
170+
// member.setPassword(passwordEncoder.encode(password));
171+
// }
172+
155173
// *** Find 메서드 ***
156174
public Optional<Member> findById(int id) {
157175
return memberRepository.findById(id);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.back.domain.member.service;
2+
3+
import com.back.domain.member.entity.Member;
4+
import com.back.domain.member.entity.MemberStatistic;
5+
import com.back.domain.member.repository.MemberStatisticRepository;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.stereotype.Service;
8+
import org.springframework.transaction.annotation.Transactional;
9+
10+
@Service
11+
@RequiredArgsConstructor
12+
@Transactional
13+
public class MemberStatisticService {
14+
private final MemberStatisticRepository memberStatisticRepository;
15+
16+
public MemberStatistic create(Member member) {
17+
return memberStatisticRepository.save(new MemberStatistic(member));
18+
}
19+
20+
public void delete(Member member) {
21+
memberStatisticRepository.delete(member.getStatistic());
22+
}
23+
}

backend/src/main/java/com/back/domain/notification/dto/NotificationDto.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,24 @@
77

88
import java.time.LocalDateTime;
99

10+
1011
public record NotificationDto(
1112
@NotNull int id,
1213
@NotNull int memberID,
1314
@NotNull NotificationType type,
14-
@NotBlank String message,
15+
@NotBlank String message,
1516
@NotNull Boolean isRead,
1617
@NotNull LocalDateTime createDate,
1718
@NotNull LocalDateTime modifyDate
1819

1920
) {
2021

21-
public NotificationDto(Notification notification)
22+
public LocalDateTime getCreateDate()
2223
{
24+
return createDate;
25+
}
26+
public NotificationDto(Notification notification) {
27+
2328
this(
2429
notification.getId(),
2530
notification.getMemberId(),
@@ -30,4 +35,5 @@ public NotificationDto(Notification notification)
3035
notification.getModifyDate()
3136
);
3237
}
38+
3339
}

backend/src/main/java/com/back/domain/notification/service/NotificationService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import lombok.RequiredArgsConstructor;
1010
import org.springframework.stereotype.Service;
1111

12+
import java.util.Comparator;
1213
import java.util.List;
1314

1415
@Service
@@ -34,7 +35,9 @@ public NotificationDto findById(int id) {
3435
}
3536

3637
public List<NotificationDto> findAll() {
37-
return notificationRepository.findAll().stream().map(NotificationDto::new).toList();
38+
return notificationRepository.findAll().stream().map(NotificationDto::new)
39+
.sorted(Comparator.comparing(NotificationDto::getCreateDate).reversed())
40+
.toList();
3841
}
3942

4043
public void deleteNotification(int id) {
@@ -64,6 +67,7 @@ public List<NotificationDto> findByUserId(int userId) {
6467
return notificationRepository.findByMemberId(userId)
6568
.stream()
6669
.map(NotificationDto::new) // 생성자 참조
70+
.sorted(Comparator.comparing(NotificationDto::getCreateDate).reversed())
6771
.toList();
6872

6973
}
@@ -72,6 +76,7 @@ public List<NotificationDto> findByUserIdAndIsRead(int userId, boolean isRead) {
7276
return notificationRepository.findByMemberIdAndIsRead(userId, isRead)
7377
.stream()
7478
.map(NotificationDto::new) // 생성자 참조
79+
.sorted(Comparator.comparing(NotificationDto::getCreateDate).reversed())
7580
.toList();
7681
}
7782

0 commit comments

Comments
 (0)