Skip to content

Commit

Permalink
Merge pull request #24 from ThisIsComedy/feat/#22
Browse files Browse the repository at this point in the history
자정에 담배를 피지 않은 사람들의 통계 업데이트
  • Loading branch information
hw9402 authored Nov 14, 2023
2 parents 84e07f5 + a955402 commit 727d3e8
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableJpaAuditing
@ConfigurationPropertiesScan
@EnableFeignClients
@EnableScheduling
public class ServerApplication {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,16 @@ public List<GrassGetResponse> getGrass() {

public SmokeCauseResponse getCauseStats() {
User user = userGetService.getUser();
return smokeRepository.getSmokeCauseStats(user).get(0);
List<SmokeCauseResponse> smokeCauseResponseList = smokeRepository.getSmokeCauseStats(user);

if (smokeCauseResponseList.isEmpty()) {
return null;
}

return smokeCauseResponseList.get(0);
}

public boolean isSmokedToday(User user) {
return smokeRepository.existsByUser(user);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import thisiscomedy.nodamnodam.server.domain.smoke.exception.AlreadyPressFailButton;
import thisiscomedy.nodamnodam.server.domain.smoke.presentation.dto.request.SmokeRequest;
import thisiscomedy.nodamnodam.server.domain.smoke.repository.SmokeRepository;
import thisiscomedy.nodamnodam.server.domain.stats.application.StatsGetService;
import thisiscomedy.nodamnodam.server.domain.stats.application.StatsUpdateService;
import thisiscomedy.nodamnodam.server.domain.user.application.UserGetService;
import thisiscomedy.nodamnodam.server.domain.user.application.UserSaveService;
import thisiscomedy.nodamnodam.server.domain.user.domain.User;
Expand All @@ -19,6 +21,8 @@ public class SmokeSaveService {
private final SmokeRepository smokeRepository;
private final UserGetService userGetService;
private final UserSaveService userSaveService;
private final StatsGetService statsGetService;
private final StatsUpdateService statsUpdateService;

public Long execute(SmokeRequest request) {
User user = userGetService.getUser();
Expand All @@ -32,6 +36,8 @@ public Long execute(SmokeRequest request) {

userSaveService.updateNoSmokeStartAt(user);

statsUpdateService.updateWhenSmoke(statsGetService.getStats(user));

return smokeRepository.save(request.toEntity(user)).getId();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public interface SmokeRepository extends JpaRepository<Smoke, Long> {

boolean existsByCreatedAt(LocalDate date);

boolean existsByUser(User user);

@Query(value = """
select new thisiscomedy.nodamnodam.server.domain.smoke.presentation.dto.response.SmokeCauseResponse(
s1.moment, s1.count,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import thisiscomedy.nodamnodam.server.domain.smoke.application.SmokeGetService;
import thisiscomedy.nodamnodam.server.domain.smoke.presentation.dto.response.GrassGetResponse;
import thisiscomedy.nodamnodam.server.domain.smoke.presentation.dto.response.SmokeCauseResponse;
import thisiscomedy.nodamnodam.server.domain.stats.domain.Stats;
import thisiscomedy.nodamnodam.server.domain.stats.presentation.dto.response.StatsGetBadgeResponse;
import thisiscomedy.nodamnodam.server.domain.stats.presentation.dto.response.StatsGetDetailsResponse;
import thisiscomedy.nodamnodam.server.domain.stats.presentation.dto.response.StatsGetSummaryResponse;
Expand Down Expand Up @@ -60,4 +61,9 @@ public StatsResponse getDetails() {
public List<RankResponse> getRank() {
return statsRepository.getRank(PageRequest.of(0, 50));
}

public Stats getStats(User user) {
return statsRepository.findByUser(user)
.orElse(null);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package thisiscomedy.nodamnodam.server.domain.stats.application;

import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import thisiscomedy.nodamnodam.server.domain.smoke.application.SmokeGetService;
import thisiscomedy.nodamnodam.server.domain.stats.domain.Stats;
import thisiscomedy.nodamnodam.server.domain.stats.repository.StatsRepository;
import thisiscomedy.nodamnodam.server.domain.user.domain.User;

import java.util.List;

@Service
@RequiredArgsConstructor
public class StatsUpdateService {

private final StatsRepository statsRepository;
private final SmokeGetService smokeGetService;

@Scheduled(cron = "0 0 0 * * *")
public void updateStatsScheduling() {
List<Stats> statsList = statsRepository.findAll();
statsList.forEach(stats -> {
User user = stats.getUser();

if (smokeGetService.isSmokedToday(user)) {
return;
}

statsRepository.save(stats.updateByScheduling());
});
}

public void updateWhenSmoke(Stats stats) {
statsRepository.save(stats.updateWhenSmoke());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@
import thisiscomedy.nodamnodam.server.domain.user.domain.User;
import thisiscomedy.nodamnodam.server.global.entity.BaseTimeEntity;

import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.Date;

@Entity
@Getter
@NoArgsConstructor
Expand Down Expand Up @@ -48,4 +53,25 @@ public Stats(User user, Integer noSmokeDay, Integer saveMoney, Integer currentCo
this.threeDayContinuityNoSmoke = threeDayContinuityNoSmoke;
this.smokeCount = smokeCount;
}

public Stats updateByScheduling() {
noSmokeDay += 1;
saveMoney += user.getCigarettePrice();
currentContinuityNoSmoke += 1;
maximumContinuityNoSmoke += 1;

LocalDate userNoSmokeStartAt = user.getNoSmokeStartAt();
LocalDate currentDate = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

threeDayContinuityNoSmoke = Math.abs(Math.toIntExact(ChronoUnit.DAYS.between(currentDate, userNoSmokeStartAt))) / 3;

return this;
}

public Stats updateWhenSmoke() {
this.smokeCount += 1;
this.currentContinuityNoSmoke = 0;
this.threeDayContinuityNoSmoke = 0;
return this;
}
}

0 comments on commit 727d3e8

Please sign in to comment.