Skip to content

Commit

Permalink
refactor : BadgeService
Browse files Browse the repository at this point in the history
  • Loading branch information
redcarrot1 committed Feb 18, 2024
1 parent d45c350 commit 0a88cf6
Show file tree
Hide file tree
Showing 15 changed files with 313 additions and 60 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.playkuround.playkuroundserver.domain.badge.application;

import com.playkuround.playkuroundserver.domain.badge.application.attendance_badge.AttendanceBadgeList;
import com.playkuround.playkuroundserver.domain.badge.application.college.CollegeBadgeList;
import com.playkuround.playkuroundserver.domain.badge.application.college_special_badge.CollegeSpecialBadgeFactory;
import com.playkuround.playkuroundserver.domain.badge.application.specialday_badge.SpecialDayBadgeList;
import com.playkuround.playkuroundserver.domain.badge.dao.BadgeRepository;
import com.playkuround.playkuroundserver.domain.badge.domain.Badge;
import com.playkuround.playkuroundserver.domain.badge.domain.BadgeType;
Expand All @@ -10,7 +12,6 @@
import com.playkuround.playkuroundserver.domain.landmark.domain.Landmark;
import com.playkuround.playkuroundserver.domain.landmark.domain.LandmarkType;
import com.playkuround.playkuroundserver.domain.user.domain.User;
import com.playkuround.playkuroundserver.global.util.DateUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down Expand Up @@ -39,62 +40,23 @@ public NewlyRegisteredBadge updateNewlyAttendanceBadges(User user) {

NewlyRegisteredBadge newlyRegisteredBadge = new NewlyRegisteredBadge();

if (!userBadgeSet.contains(BadgeType.ATTENDANCE_1) &&
isEligibleForAttendanceBadge(user, 1)) {
badgeRepository.save(Badge.createBadge(user, BadgeType.ATTENDANCE_1));
newlyRegisteredBadge.addBadge(BadgeType.ATTENDANCE_1);
}
if (!userBadgeSet.contains(BadgeType.ATTENDANCE_5) &&
isEligibleForAttendanceBadge(user, 5)) {
badgeRepository.save(Badge.createBadge(user, BadgeType.ATTENDANCE_5));
newlyRegisteredBadge.addBadge(BadgeType.ATTENDANCE_5);
}
if (!userBadgeSet.contains(BadgeType.ATTENDANCE_10) &&
isEligibleForAttendanceBadge(user, 10)) {
badgeRepository.save(Badge.createBadge(user, BadgeType.ATTENDANCE_10));
newlyRegisteredBadge.addBadge(BadgeType.ATTENDANCE_10);
}
if (!userBadgeSet.contains(BadgeType.ATTENDANCE_30) &&
isEligibleForAttendanceBadge(user, 30)) {
badgeRepository.save(Badge.createBadge(user, BadgeType.ATTENDANCE_30));
newlyRegisteredBadge.addBadge(BadgeType.ATTENDANCE_30);
}
if (!userBadgeSet.contains(BadgeType.ATTENDANCE_100) &&
isEligibleForAttendanceBadge(user, 100)) {
badgeRepository.save(Badge.createBadge(user, BadgeType.ATTENDANCE_100));
newlyRegisteredBadge.addBadge(BadgeType.ATTENDANCE_100);
}
// 출석일 기준 뱃지
AttendanceBadgeList.getAttendanceBadges().stream()
.filter(attendanceBadge -> attendanceBadge.supports(userBadgeSet, user))
.forEach(attendanceBadge -> {
BadgeType badgeType = attendanceBadge.getBadgeType();
badgeRepository.save(Badge.createBadge(user, badgeType));
newlyRegisteredBadge.addBadge(badgeType);
});

if (DateUtils.isTodayFoundationDay()) {
if (!userBadgeSet.contains(BadgeType.ATTENDANCE_FOUNDATION_DAY)) {
badgeRepository.save(Badge.createBadge(user, BadgeType.ATTENDANCE_FOUNDATION_DAY));
newlyRegisteredBadge.addBadge(BadgeType.ATTENDANCE_FOUNDATION_DAY);
}
}
else if (DateUtils.isTodayArborDay()) {
if (!userBadgeSet.contains(BadgeType.ATTENDANCE_ARBOR_DAY)) {
badgeRepository.save(Badge.createBadge(user, BadgeType.ATTENDANCE_ARBOR_DAY));
newlyRegisteredBadge.addBadge(BadgeType.ATTENDANCE_ARBOR_DAY);
}
}
else if (DateUtils.isTodayChildrenDay()) {
if (!userBadgeSet.contains(BadgeType.ATTENDANCE_CHILDREN_DAY)) {
badgeRepository.save(Badge.createBadge(user, BadgeType.ATTENDANCE_CHILDREN_DAY));
newlyRegisteredBadge.addBadge(BadgeType.ATTENDANCE_CHILDREN_DAY);
}
}
else if (DateUtils.isTodayWhiteDay()) {
if (!userBadgeSet.contains(BadgeType.ATTENDANCE_WHITE_DAY)) {
badgeRepository.save(Badge.createBadge(user, BadgeType.ATTENDANCE_WHITE_DAY));
newlyRegisteredBadge.addBadge(BadgeType.ATTENDANCE_WHITE_DAY);
}
}
else if (DateUtils.isTodayDuckDay()) {
if (!userBadgeSet.contains(BadgeType.ATTENDANCE_DUCK_DAY)) {
badgeRepository.save(Badge.createBadge(user, BadgeType.ATTENDANCE_DUCK_DAY));
newlyRegisteredBadge.addBadge(BadgeType.ATTENDANCE_DUCK_DAY);
}
}
// 기념일 기준 뱃지
SpecialDayBadgeList.getSpecialDayBadges().stream()
.filter(specialDayBadge -> specialDayBadge.supports(userBadgeSet))
.forEach(specialDayBadge -> {
BadgeType badgeType = specialDayBadge.getBadgeType();
badgeRepository.save(Badge.createBadge(user, badgeType));
newlyRegisteredBadge.addBadge(badgeType);
});

return newlyRegisteredBadge;
}
Expand Down Expand Up @@ -133,10 +95,6 @@ private Set<BadgeType> getUserBadgeSet(User user) {
.collect(Collectors.toSet());
}

private boolean isEligibleForAttendanceBadge(User user, int requiredAttendanceDays) {
return user.getAttendanceDays() >= requiredAttendanceDays;
}

@Transactional
public boolean saveTheDreamOfDuckBadge(User user) {
if (badgeRepository.existsByUserAndBadgeType(user, BadgeType.THE_DREAM_OF_DUCK)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.playkuround.playkuroundserver.domain.badge.application.attendance_badge;

import com.playkuround.playkuroundserver.domain.badge.domain.BadgeType;
import com.playkuround.playkuroundserver.domain.user.domain.User;

import java.util.Set;

public interface AttendanceBadge {

boolean supports(Set<BadgeType> userBadgeSet, User user);

BadgeType getBadgeType();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.playkuround.playkuroundserver.domain.badge.application.attendance_badge;

import lombok.Getter;

import java.util.List;

public class AttendanceBadgeList {

@Getter
private final static List<AttendanceBadge> attendanceBadges = List.of(
new Attendance_1(),
new Attendance_5(),
new Attendance_10(),
new Attendance_30(),
new Attendance_100()
);

private AttendanceBadgeList() {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.playkuround.playkuroundserver.domain.badge.application.attendance_badge;

import com.playkuround.playkuroundserver.domain.badge.domain.BadgeType;
import com.playkuround.playkuroundserver.domain.user.domain.User;

import java.util.Set;

public class Attendance_1 implements AttendanceBadge {

Attendance_1() {
}

@Override
public boolean supports(Set<BadgeType> userBadgeSet, User user) {
BadgeType badgeType = getBadgeType();
return !userBadgeSet.contains(badgeType) && user.getAttendanceDays() >= 1;
}

@Override
public BadgeType getBadgeType() {
return BadgeType.ATTENDANCE_1;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.playkuround.playkuroundserver.domain.badge.application.attendance_badge;

import com.playkuround.playkuroundserver.domain.badge.domain.BadgeType;
import com.playkuround.playkuroundserver.domain.user.domain.User;

import java.util.Set;

public class Attendance_10 implements AttendanceBadge {

Attendance_10() {
}

@Override
public boolean supports(Set<BadgeType> userBadgeSet, User user) {
BadgeType badgeType = getBadgeType();
return !userBadgeSet.contains(badgeType) && user.getAttendanceDays() >= 10;
}

@Override
public BadgeType getBadgeType() {
return BadgeType.ATTENDANCE_10;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.playkuround.playkuroundserver.domain.badge.application.attendance_badge;

import com.playkuround.playkuroundserver.domain.badge.domain.BadgeType;
import com.playkuround.playkuroundserver.domain.user.domain.User;

import java.util.Set;

public class Attendance_100 implements AttendanceBadge {

Attendance_100() {
}

@Override
public boolean supports(Set<BadgeType> userBadgeSet, User user) {
BadgeType badgeType = getBadgeType();
return !userBadgeSet.contains(badgeType) && user.getAttendanceDays() >= 100;
}

@Override
public BadgeType getBadgeType() {
return BadgeType.ATTENDANCE_100;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.playkuround.playkuroundserver.domain.badge.application.attendance_badge;

import com.playkuround.playkuroundserver.domain.badge.domain.BadgeType;
import com.playkuround.playkuroundserver.domain.user.domain.User;

import java.util.Set;

public class Attendance_30 implements AttendanceBadge {

Attendance_30() {
}

@Override
public boolean supports(Set<BadgeType> userBadgeSet, User user) {
BadgeType badgeType = getBadgeType();
return !userBadgeSet.contains(badgeType) && user.getAttendanceDays() >= 30;
}

@Override
public BadgeType getBadgeType() {
return BadgeType.ATTENDANCE_30;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.playkuround.playkuroundserver.domain.badge.application.attendance_badge;

import com.playkuround.playkuroundserver.domain.badge.domain.BadgeType;
import com.playkuround.playkuroundserver.domain.user.domain.User;

import java.util.Set;

public class Attendance_5 implements AttendanceBadge {

Attendance_5() {
}

@Override
public boolean supports(Set<BadgeType> userBadgeSet, User user) {
BadgeType badgeType = getBadgeType();
return !userBadgeSet.contains(badgeType) && user.getAttendanceDays() >= 5;
}

@Override
public BadgeType getBadgeType() {
return BadgeType.ATTENDANCE_5;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.playkuround.playkuroundserver.domain.badge.application.specialday_badge;

import com.playkuround.playkuroundserver.domain.badge.domain.BadgeType;
import com.playkuround.playkuroundserver.global.util.DateUtils;

import java.util.Set;

public class ArborDayBadge implements SpecialDayBadge {

ArborDayBadge() {
}

@Override
public boolean supports(Set<BadgeType> userBadgeSet) {
BadgeType badgeType = getBadgeType();
return DateUtils.isTodayArborDay() && !userBadgeSet.contains(badgeType);
}

@Override
public BadgeType getBadgeType() {
return BadgeType.ATTENDANCE_ARBOR_DAY;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.playkuround.playkuroundserver.domain.badge.application.specialday_badge;

import com.playkuround.playkuroundserver.domain.badge.domain.BadgeType;
import com.playkuround.playkuroundserver.global.util.DateUtils;

import java.util.Set;

public class ChildrenDayBadge implements SpecialDayBadge {

ChildrenDayBadge() {
}

@Override
public boolean supports(Set<BadgeType> userBadgeSet) {
BadgeType badgeType = getBadgeType();
return DateUtils.isTodayChildrenDay() && !userBadgeSet.contains(badgeType);
}

@Override
public BadgeType getBadgeType() {
return BadgeType.ATTENDANCE_CHILDREN_DAY;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.playkuround.playkuroundserver.domain.badge.application.specialday_badge;

import com.playkuround.playkuroundserver.domain.badge.domain.BadgeType;
import com.playkuround.playkuroundserver.global.util.DateUtils;

import java.util.Set;

public class DuckDayBadge implements SpecialDayBadge {

DuckDayBadge() {
}

@Override
public boolean supports(Set<BadgeType> userBadgeSet) {
BadgeType badgeType = getBadgeType();
return DateUtils.isTodayDuckDay() && !userBadgeSet.contains(badgeType);
}

@Override
public BadgeType getBadgeType() {
return BadgeType.ATTENDANCE_DUCK_DAY;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.playkuround.playkuroundserver.domain.badge.application.specialday_badge;

import com.playkuround.playkuroundserver.domain.badge.domain.BadgeType;
import com.playkuround.playkuroundserver.global.util.DateUtils;

import java.util.Set;

public class FoundationDayBadge implements SpecialDayBadge {

FoundationDayBadge() {
}

@Override
public boolean supports(Set<BadgeType> userBadgeSet) {
BadgeType badgeType = getBadgeType();
return DateUtils.isTodayFoundationDay() && !userBadgeSet.contains(badgeType);
}

@Override
public BadgeType getBadgeType() {
return BadgeType.ATTENDANCE_FOUNDATION_DAY;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.playkuround.playkuroundserver.domain.badge.application.specialday_badge;

import com.playkuround.playkuroundserver.domain.badge.domain.BadgeType;

import java.util.Set;

public interface SpecialDayBadge {

boolean supports(Set<BadgeType> userBadgeSet);

BadgeType getBadgeType();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.playkuround.playkuroundserver.domain.badge.application.specialday_badge;

import lombok.Getter;

import java.util.List;

public class SpecialDayBadgeList {

@Getter
private final static List<SpecialDayBadge> specialDayBadges = List.of(
new FoundationDayBadge(),
new ArborDayBadge(),
new ChildrenDayBadge(),
new DuckDayBadge(),
new WhiteDayBadge()
);

private SpecialDayBadgeList() {
}
}
Loading

0 comments on commit 0a88cf6

Please sign in to comment.