feat: backend to send game status for the user
This commit is contained in:
parent
28fbdfba07
commit
9b6c58269c
@ -14,7 +14,9 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@ -27,13 +29,24 @@ public class PuzzleController {
|
|||||||
private PuzzleService puzzleService;
|
private PuzzleService puzzleService;
|
||||||
|
|
||||||
@GetMapping("/dailyChallenge")
|
@GetMapping("/dailyChallenge")
|
||||||
@Operation(summary = "Get daily challenge", description = "Returns today's Wordle word and whether user has solved it")
|
@Operation(summary = "Get daily challenge", description = "Returns today's Wordle word and user's attempt details")
|
||||||
public ResponseEntity<ApiResponse<DailyChallengeResponse>> getDailyChallenge() {
|
public ResponseEntity<ApiResponse<DailyChallengeResponse>> getDailyChallenge() {
|
||||||
try {
|
try {
|
||||||
Puzzle todaysPuzzle = puzzleService.getTodaysPuzzle();
|
Puzzle todaysPuzzle = puzzleService.getTodaysPuzzle();
|
||||||
boolean solved = puzzleService.hasUserSolvedToday();
|
Optional<PuzzleAttempt> userAttempt = puzzleService.getUserTodaysAttempt();
|
||||||
|
|
||||||
DailyChallengeResponse response = new DailyChallengeResponse(todaysPuzzle.getWord(), solved);
|
boolean attempted = userAttempt.isPresent();
|
||||||
|
boolean solved = attempted && userAttempt.get().isSolved();
|
||||||
|
Integer attempts = attempted ? userAttempt.get().getAttempts() : null;
|
||||||
|
LocalDateTime solveTime = attempted ? userAttempt.get().getSubmittedAt() : null;
|
||||||
|
|
||||||
|
DailyChallengeResponse response = new DailyChallengeResponse(
|
||||||
|
todaysPuzzle.getWord(),
|
||||||
|
attempted,
|
||||||
|
solved,
|
||||||
|
attempts,
|
||||||
|
solveTime
|
||||||
|
);
|
||||||
return ResponseEntity.ok(ApiResponse.success(response));
|
return ResponseEntity.ok(ApiResponse.success(response));
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
return ResponseEntity.ok(ApiResponse.error(e.getMessage()));
|
return ResponseEntity.ok(ApiResponse.error(e.getMessage()));
|
||||||
@ -64,6 +77,7 @@ public class PuzzleController {
|
|||||||
.map(attempt -> new LeaderboardEntry(
|
.map(attempt -> new LeaderboardEntry(
|
||||||
attempt.getUser().getDisplayName(),
|
attempt.getUser().getDisplayName(),
|
||||||
attempt.getUser().getUsername(),
|
attempt.getUser().getUsername(),
|
||||||
|
attempt.getUser().getAvatar(),
|
||||||
attempt.getAttempts(),
|
attempt.getAttempts(),
|
||||||
attempt.isSolved(),
|
attempt.isSolved(),
|
||||||
attempt.getSubmittedAt()
|
attempt.getSubmittedAt()
|
||||||
|
|||||||
@ -1,15 +1,23 @@
|
|||||||
package online.wesal.wesal.dto;
|
package online.wesal.wesal.dto;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
public class DailyChallengeResponse {
|
public class DailyChallengeResponse {
|
||||||
|
|
||||||
private String wordle;
|
private String wordle;
|
||||||
|
private boolean attempted;
|
||||||
private boolean solved;
|
private boolean solved;
|
||||||
|
private Integer attempts;
|
||||||
|
private LocalDateTime solveTime;
|
||||||
|
|
||||||
public DailyChallengeResponse() {}
|
public DailyChallengeResponse() {}
|
||||||
|
|
||||||
public DailyChallengeResponse(String wordle, boolean solved) {
|
public DailyChallengeResponse(String wordle, boolean attempted, boolean solved, Integer attempts, LocalDateTime solveTime) {
|
||||||
this.wordle = wordle;
|
this.wordle = wordle;
|
||||||
|
this.attempted = attempted;
|
||||||
this.solved = solved;
|
this.solved = solved;
|
||||||
|
this.attempts = attempts;
|
||||||
|
this.solveTime = solveTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getWordle() {
|
public String getWordle() {
|
||||||
@ -20,6 +28,14 @@ public class DailyChallengeResponse {
|
|||||||
this.wordle = wordle;
|
this.wordle = wordle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAttempted() {
|
||||||
|
return attempted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAttempted(boolean attempted) {
|
||||||
|
this.attempted = attempted;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSolved() {
|
public boolean isSolved() {
|
||||||
return solved;
|
return solved;
|
||||||
}
|
}
|
||||||
@ -27,4 +43,20 @@ public class DailyChallengeResponse {
|
|||||||
public void setSolved(boolean solved) {
|
public void setSolved(boolean solved) {
|
||||||
this.solved = solved;
|
this.solved = solved;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getAttempts() {
|
||||||
|
return attempts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAttempts(Integer attempts) {
|
||||||
|
this.attempts = attempts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDateTime getSolveTime() {
|
||||||
|
return solveTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSolveTime(LocalDateTime solveTime) {
|
||||||
|
this.solveTime = solveTime;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -6,15 +6,17 @@ public class LeaderboardEntry {
|
|||||||
|
|
||||||
private String displayName;
|
private String displayName;
|
||||||
private String username;
|
private String username;
|
||||||
|
private String avatar;
|
||||||
private int attempts;
|
private int attempts;
|
||||||
private boolean solved;
|
private boolean solved;
|
||||||
private LocalDateTime submittedAt;
|
private LocalDateTime submittedAt;
|
||||||
|
|
||||||
public LeaderboardEntry() {}
|
public LeaderboardEntry() {}
|
||||||
|
|
||||||
public LeaderboardEntry(String displayName, String username, int attempts, boolean solved, LocalDateTime submittedAt) {
|
public LeaderboardEntry(String displayName, String username, String avatar, int attempts, boolean solved, LocalDateTime submittedAt) {
|
||||||
this.displayName = displayName;
|
this.displayName = displayName;
|
||||||
this.username = username;
|
this.username = username;
|
||||||
|
this.avatar = avatar;
|
||||||
this.attempts = attempts;
|
this.attempts = attempts;
|
||||||
this.solved = solved;
|
this.solved = solved;
|
||||||
this.submittedAt = submittedAt;
|
this.submittedAt = submittedAt;
|
||||||
@ -36,6 +38,14 @@ public class LeaderboardEntry {
|
|||||||
this.username = username;
|
this.username = username;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getAvatar() {
|
||||||
|
return avatar;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAvatar(String avatar) {
|
||||||
|
this.avatar = avatar;
|
||||||
|
}
|
||||||
|
|
||||||
public int getAttempts() {
|
public int getAttempts() {
|
||||||
return attempts;
|
return attempts;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -113,6 +113,13 @@ public class PuzzleService {
|
|||||||
return attempt.isPresent();
|
return attempt.isPresent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Optional<PuzzleAttempt> getUserTodaysAttempt() {
|
||||||
|
User currentUser = userService.getCurrentUser();
|
||||||
|
Puzzle todaysPuzzle = getTodaysPuzzle();
|
||||||
|
|
||||||
|
return puzzleAttemptRepository.findByUserAndPuzzle(currentUser, todaysPuzzle);
|
||||||
|
}
|
||||||
|
|
||||||
public PuzzleAttempt submitAttempt(int attempts, boolean solved) {
|
public PuzzleAttempt submitAttempt(int attempts, boolean solved) {
|
||||||
User currentUser = userService.getCurrentUser();
|
User currentUser = userService.getCurrentUser();
|
||||||
Puzzle todaysPuzzle = getTodaysPuzzle();
|
Puzzle todaysPuzzle = getTodaysPuzzle();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user