Skip to content

Commit

Permalink
Merge pull request #84 from softeerbootcamp4th/feature/#79-rush-event…
Browse files Browse the repository at this point in the history
…-fix

Feature/#79 rush event fix
  • Loading branch information
k000927 authored Aug 11, 2024
2 parents ddabea4 + b593e1a commit e06c765
Show file tree
Hide file tree
Showing 14 changed files with 259 additions and 72 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package JGS.CasperEvent.domain.event.controller.eventController;


import JGS.CasperEvent.domain.event.dto.ResponseDto.RushEventListResponseDto;
import JGS.CasperEvent.domain.event.dto.ResponseDto.RushEventRateResponseDto;
import JGS.CasperEvent.domain.event.dto.ResponseDto.RushEventResultResponseDto;
import JGS.CasperEvent.domain.event.dto.ResponseDto.*;
import JGS.CasperEvent.domain.event.service.eventService.RushEventService;
import JGS.CasperEvent.global.entity.BaseUser;
import jakarta.servlet.http.HttpServletRequest;
Expand All @@ -26,34 +24,34 @@ public ResponseEntity<RushEventListResponseDto> getRushEventListAndServerTime()
}

// 밸런스 게임 참여 여부 조회
@GetMapping("/{eventId}/applied")
public ResponseEntity<Boolean> checkUserParticipationInRushEvent(HttpServletRequest httpServletRequest, @PathVariable("eventId") Long eventId) {

@GetMapping("/applied")
public ResponseEntity<Boolean> checkUserParticipationInRushEvent(HttpServletRequest httpServletRequest) {
BaseUser user = (BaseUser) httpServletRequest.getAttribute("user");
return ResponseEntity.ok(rushEventService.isExists(eventId, user.getId()));
return ResponseEntity.ok(rushEventService.isExists(user.getId()));
}

// 밸런스 게임 응모
@PostMapping("/{eventId}/options/{optionId}/apply")
public ResponseEntity<Void> applyRushEvent(HttpServletRequest httpServletRequest, @PathVariable("eventId") Long eventId, @PathVariable("optionId") int optionId) {
@PostMapping("/options/{optionId}/apply")
public ResponseEntity<Void> applyRushEvent(HttpServletRequest httpServletRequest, @PathVariable("optionId") int optionId) {
BaseUser user = (BaseUser) httpServletRequest.getAttribute("user");
rushEventService.apply(user, eventId, optionId);
rushEventService.apply(user, optionId);

return ResponseEntity.noContent().build();
}

// 밸런스 게임 비율 조회
@GetMapping("/{eventId}/balance")
public ResponseEntity<RushEventRateResponseDto> rushEventRate (@PathVariable("eventId") Long eventId) {
RushEventRateResponseDto rushEventRateResponseDto = rushEventService.getRushEventRate(eventId);
@GetMapping("/balance")
public ResponseEntity<RushEventRateResponseDto> rushEventRate(HttpServletRequest httpServletRequest) {
BaseUser user = (BaseUser) httpServletRequest.getAttribute("user");
RushEventRateResponseDto rushEventRateResponseDto = rushEventService.getRushEventRate(user);
return ResponseEntity.ok(rushEventRateResponseDto);
}

// 밸런스 게임 결과 조회
@GetMapping("/{eventId}/result")
public ResponseEntity<RushEventResultResponseDto> rushEventResult(HttpServletRequest httpServletRequest, @PathVariable("eventId") Long eventId) {
@GetMapping("/result")
public ResponseEntity<RushEventResultResponseDto> rushEventResult(HttpServletRequest httpServletRequest) {
BaseUser user = (BaseUser) httpServletRequest.getAttribute("user");
RushEventResultResponseDto result = rushEventService.getRushEventResult(user, eventId);
RushEventResultResponseDto result = rushEventService.getRushEventResult(user);
return ResponseEntity.ok(result);
}

Expand All @@ -63,4 +61,18 @@ public ResponseEntity<Void> setTodayEvent() {
rushEventService.setTodayEventToRedis();
return ResponseEntity.noContent().build();
}

// 오늘의 이벤트 선택지 조회
@GetMapping("/today")
public ResponseEntity<MainRushEventOptionsResponseDto> getTodayEvent() {
MainRushEventOptionsResponseDto mainRushEventOptionsResponseDto = rushEventService.getTodayRushEventOptions();
return ResponseEntity.ok(mainRushEventOptionsResponseDto);
}

// 옵션 선택 결과 조회
@GetMapping("/options/{optionId}/result")
public ResponseEntity<ResultRushEventOptionResponseDto> getResultOption(@PathVariable("optionId") int optionId) {
ResultRushEventOptionResponseDto resultRushEventOptionResponseDto = rushEventService.getRushEventOptionResult(optionId);
return ResponseEntity.ok(resultRushEventOptionResponseDto);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package JGS.CasperEvent.domain.event.dto.ResponseDto;

public record MainRushEventOptionResponseDto(String mainText,
String subText) {

public static MainRushEventOptionResponseDto of(RushEventOptionResponseDto rushEventOptionResponseDto) {
return new MainRushEventOptionResponseDto(
rushEventOptionResponseDto.mainText(),
rushEventOptionResponseDto.subText()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package JGS.CasperEvent.domain.event.dto.ResponseDto;


public record MainRushEventOptionsResponseDto(MainRushEventOptionResponseDto leftOption,
MainRushEventOptionResponseDto rightOption) {

public MainRushEventOptionsResponseDto(MainRushEventOptionResponseDto leftOption, MainRushEventOptionResponseDto rightOption) {
this.leftOption = leftOption;
this.rightOption = rightOption;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package JGS.CasperEvent.domain.event.dto.ResponseDto;

public record ResultRushEventOptionResponseDto(String mainText, String resultMainText, String resultSubText) {
public static ResultRushEventOptionResponseDto of(RushEventOptionResponseDto rushEventOptionResponseDto) {
return new ResultRushEventOptionResponseDto(
rushEventOptionResponseDto.mainText(),
rushEventOptionResponseDto.resultMainText(),
rushEventOptionResponseDto.resultSubText()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package JGS.CasperEvent.domain.event.dto.ResponseDto;

import JGS.CasperEvent.domain.event.entity.event.RushOption;
import JGS.CasperEvent.global.enums.Position;

public record RushEventOptionResponseDto(String mainText, String subText, String resultMainText, String resultSubText, String imageUrl, Position position) {
public static RushEventOptionResponseDto of(RushOption rushOption) {
return new RushEventOptionResponseDto(
rushOption.getMainText(),
rushOption.getSubText(),
rushOption.getResultMainText(),
rushOption.getResultSubText(),
rushOption.getImageUrl(),
rushOption.getPosition()
);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
package JGS.CasperEvent.domain.event.dto.ResponseDto;

import lombok.Getter;

@Getter
public record RushEventRateResponseDto(long leftOption, long rightOption) {
public record RushEventRateResponseDto(int optionId, long leftOption, long rightOption) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,42 @@

import JGS.CasperEvent.domain.event.entity.event.RushEvent;
import JGS.CasperEvent.domain.event.entity.event.RushOption;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Set;
import java.util.stream.Collectors;

public record RushEventResponseDto(Long rushEventId, LocalDateTime startDateTime, LocalDateTime endDateTime,
int winnerCount, String prizeImageUrl, String prizeDescription,
Set<RushOption> options){
public record RushEventResponseDto(Long rushEventId,
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)

LocalDateTime startDateTime,
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)

LocalDateTime endDateTime,
int winnerCount, String prizeImageUrl,
String prizeDescription,
Set<RushEventOptionResponseDto> options){

public static RushEventResponseDto of (RushEvent rushEvent){
Set<RushEventOptionResponseDto> options = rushEvent.getOptions().stream()
.map(RushEventOptionResponseDto::of)
.collect(Collectors.toSet());

return new RushEventResponseDto(
rushEvent.getRushEventId(),
rushEvent.getStartDateTime(),
rushEvent.getEndDateTime(),
rushEvent.getWinnerCount(),
rushEvent.getPrizeImageUrl(),
rushEvent.getPrizeDescription(),
rushEvent.getOptions()
options
);
}

}
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package JGS.CasperEvent.domain.event.entity.event;

import JGS.CasperEvent.domain.event.entity.participants.RushParticipants;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.*;
import lombok.Getter;

import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.Set;

@Entity
Expand All @@ -17,11 +19,11 @@ public class RushEvent extends BaseEvent {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long rushEventId;

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "rush_event_id")
private Set<RushOption> options;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "rushEvent", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonManagedReference
private final Set<RushOption> options = new HashSet<>();

@OneToMany(mappedBy = "rushEvent", cascade = CascadeType.ALL, orphanRemoval = true)
@OneToMany(fetch = FetchType.EAGER, mappedBy = "rushEvent", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<RushParticipants> rushParticipants;

public RushEvent() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package JGS.CasperEvent.domain.event.entity.event;

import JGS.CasperEvent.global.entity.BaseEntity;
import JGS.CasperEvent.global.enums.Position;
import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@NoArgsConstructor
public class RushOption extends BaseEntity {
@Id
Expand All @@ -13,19 +17,24 @@ public class RushOption extends BaseEntity {

@ManyToOne
@JoinColumn(name = "rush_event_id")
@JsonBackReference
private RushEvent rushEvent;
private String mainText;
private String subText;
private String resultMainText;
private String resultSubText;
private String imageUrl;

public RushOption(RushEvent rushEvent, String mainText, String subText, String resultMainText, String resultSubText, String imageUrl) {
@Enumerated(EnumType.STRING)
private Position position;

public RushOption(RushEvent rushEvent, String mainText, String subText, String resultMainText, String resultSubText, String imageUrl, Position position) {
this.rushEvent = rushEvent;
this.mainText = mainText;
this.subText = subText;
this.resultMainText = resultMainText;
this.resultSubText = resultSubText;
this.imageUrl = imageUrl;
this.position = position;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package JGS.CasperEvent.domain.event.service.eventService;

import JGS.CasperEvent.domain.event.dto.ResponseDto.RushEventResponseDto;
import JGS.CasperEvent.domain.event.entity.event.RushEvent;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.RedisTemplate;
Expand All @@ -15,7 +16,7 @@
public class RushEventScheduler {

private final RushEventService rushEventService;
private final RedisTemplate<String, RushEvent> rushEventRedisTemplate;
private final RedisTemplate<String, RushEventResponseDto> rushEventRedisTemplate;

// 매일 12시에 스케줄된 작업을 실행합니다.
@Scheduled(cron = "0 0 12 * * ?")
Expand All @@ -24,7 +25,7 @@ public void fetchDailyEvents() {
LocalDate today = LocalDate.now();

// EventService를 통해 오늘의 이벤트를 가져옵니다.
RushEvent todayEvent = rushEventService.getTodayRushEvent(today);
RushEventResponseDto todayEvent = rushEventService.getTodayRushEvent(today);

// 가져온 이벤트에 대한 추가 작업을 수행합니다.
// 예: 캐싱, 로그 기록, 알림 발송 등
Expand Down
Loading

0 comments on commit e06c765

Please sign in to comment.