Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,4 @@ jobs:
run: chmod +x gradlew

- name: Build (includes React build)
run: ./gradlew clean bootJar --no-daemon
run: ./gradlew clean build --no-daemon
12 changes: 11 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ dependencies {
implementation libs.org.mybatis.spring.boot.mybatis.spring.boot.starter
runtimeOnly libs.org.springframework.boot.spring.boot.devtools

// Test
testImplementation libs.org.junit.jupiter.junit.jupiter
testImplementation libs.org.mockito.mockito.junit.jupiter
testImplementation libs.org.assertj.assertj.core


// JPA
implementation libs.org.springframework.boot.spring.boot.starter.data.jpa

Expand Down Expand Up @@ -77,6 +83,10 @@ tasks.withType(Javadoc) {
options.encoding = 'UTF-8'
}

tasks.test {
useJUnitPlatform()
}

def frontendDir = "$projectDir/src/main/frontend"
def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile
def reactBuildDir = layout.buildDirectory.dir("frontend").get().asFile
Expand Down Expand Up @@ -138,4 +148,4 @@ tasks.register('copyReactBuildFiles', Copy) {
dependsOn "buildReact"
from "$frontendDir/build"
into reactBuildDir
}
}
3 changes: 3 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,6 @@ org-springframework-boot-spring-boot-starter-tomcat = { module = "org.springfram
org-springframework-boot-spring-boot-starter-web = { module = "org.springframework.boot:spring-boot-starter-web", version.ref = "org-springframework-boot-spring-boot-starter-web" }
org-springframework-security-spring-security-test = { module = "org.springframework.security:spring-security-test", version.ref = "org-springframework-security-spring-security-test" }
org-webjars-jquery = { module = "org.webjars:jquery", version.ref = "org-webjars-jquery" }
org-junit-jupiter-junit-jupiter = { module = "org.junit.jupiter:junit-jupiter" }
org-mockito-mockito-junit-jupiter = { module = "org.mockito:mockito-junit-jupiter" }
org-assertj-assertj-core = { module = "org.assertj:assertj-core" }
2 changes: 1 addition & 1 deletion src/main/frontend/src/js/components/Header.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -110,4 +110,4 @@ const FineInfo = ({totalFine, onShowReceipt, className}) => {
</button>
</div>
)
}
}
14 changes: 7 additions & 7 deletions src/main/frontend/src/js/components/UserProgress.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -213,21 +213,21 @@ export function UserProgress({fromDate, toDate}) {
return (
<div key={i} className={cm(styles.userProgressCard, `${score >= 60 && styles.completed}`)}>
<div className={styles.userProgressAccent}
style={{backgroundColor: DesignUtils.getTierColor(user.tier)}}
style={{backgroundColor: DesignUtils.getTierColor(user.level)}}
/>
<div className={styles.userProgressHeader}>
<div className={styles.userProgressInfo}>
<span
className={cm(styles.tierIcon, `${DesignUtils.getTierIconClass(user.tier)}`)}></span>
className={cm(styles.tierIcon, `${DesignUtils.getTierIconClass(user.level)}`)}></span>
{/*<TierIcon tier={user.tier} size="small"/>*/}
<span className={styles.userProgressName}>
{user.nickname} {isWeekPass ?
<span className={styles.pass_text}>이번주 패스</span> : ''}
{user.weekPassCount > 0 && (
<span className={styles.pass_text}>
🛡️{user.weekPassCount}
</span>
)}
{/*{user.weekPassCount > 0 && (*/}
{/* <span className={styles.pass_text}>*/}
{/* 🛡️{user.weekPassCount}*/}
{/* </span>*/}
{/*)}*/}
</span>
<div className={styles.userProgressMenuContainer} data-dropdown={user.id}>
<button
Expand Down
4 changes: 2 additions & 2 deletions src/main/frontend/src/js/setup/utils/DateUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ export const DateUtils = {

if (orgMonth === 12 && (days) >= (totalDays - orgDate)) {
date.setFullYear(date.getFullYear() + 1);
date.setMonth(1);
date.setMonth(0);
date.setDate((days) - (totalDays - orgDate));
} else {
date.setDate(orgDate + (days));
Expand Down Expand Up @@ -209,4 +209,4 @@ export const DateUtils = {
newDate.setDate(newDate.getDate() + addOffset);
return newDate;
}
}
}
7 changes: 4 additions & 3 deletions src/main/java/com/baektracker/common/util/DateUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

import java.time.LocalDate;
import java.time.temporal.WeekFields;
import java.util.Locale;

public class DateUtil {
private final static WeekFields isoWeekFields = WeekFields.of(Locale.KOREA);
private final static WeekFields isoWeekFields = WeekFields.ISO;

public static String toYearWeek(LocalDate date) {
return String.format("%s-%s", date.getYear(), date.get(isoWeekFields.weekOfWeekBasedYear()));
int year = date.getYear();
int week = date.get(isoWeekFields.weekOfYear());
return String.format("%04d-%02d", year, week);
}

public static int toWeekOfMonth(LocalDate date) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import com.baektracker.global.exception.CustomException;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
Expand All @@ -37,8 +38,6 @@ public class BaekjoonService {
public void loadBaekjoonProblemStatus() {
List<User> users = userRepository.findAll();
for (User user : users) {
int count = 0;

List<SolvedProblem> scrappedProblems = new ArrayList<>();
int top = -1;
do {
Expand All @@ -60,9 +59,8 @@ public void loadBaekjoonProblemStatus() {
System.out.printf("qwe (%s) scrapped : %d, last-read: %d\n", user.getUsername(),
scrappedProblems.size(), updatedLastRead);
user.updateLastRead(updatedLastRead);
user.updateLastReadTime(LocalDateTime.now());
solvedProblemRepository.saveAll(scrappedProblems);
// solvedProblemRepository.flush();
// userRepository.flush();
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Entity
@Table(name = "problems")
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class BaekjoonProblem {
@Id
private Integer id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Entity
@Table(name = "solved_problems")
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class SolvedProblem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
public class SolvedProblemQueryRepository {
private final JPAQueryFactory queryFactory;

public List<SolvedProblem> fetchWeeklyUserScores(LocalDate beforeDate, LocalDate afterDate) {
public List<SolvedProblem> getSolvedCorrectProblems(LocalDate beforeDate, LocalDate afterDate) {
QSolvedProblem sp = QSolvedProblem.solvedProblem;
QSolvedProblem sp2 = new QSolvedProblem("sp2");

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.baektracker.domain.test.controller;

import com.baektracker.domain.user.service.UserService;
import com.baektracker.domain.weekly_result.service.WeeklyResultService;
import java.time.LocalDate;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/v1/test")
@RequiredArgsConstructor
public class TestController {

private final WeeklyResultService weeklyResultService;
private final UserService userService;

@GetMapping("/job/weekly-result")
public ResponseEntity<Void> testWeeklyResultJob(@RequestParam LocalDate date) {
LocalDate fromDate = date.minusDays(6);
System.out.printf("test: %s - %s", fromDate, date);
weeklyResultService.updateWeeklyResults(fromDate, date);
return ResponseEntity.noContent().build();
}

@GetMapping("/job/user-level")
public ResponseEntity<Void> testUserLevelJob() {
userService.updateUserInfoFromSolvedAc();
return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.baektracker.domain.user.controller;

import com.baektracker.domain.user.dto.UserProfile;
import com.baektracker.domain.user.dto.UserInfo;
import com.baektracker.domain.user.dto.request.UpdatePasswordRequestDto;
import com.baektracker.domain.user.service.UserService;
import java.util.List;
Expand All @@ -22,7 +22,7 @@ public class UserController {
private final UserService userService;

@GetMapping("")
public ResponseEntity<List<UserProfile>> getAllUsers() {
public ResponseEntity<List<UserInfo>> getAllUsers() {
return ResponseEntity.ok(userService.getUsers());
}

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/baektracker/domain/user/dto/UserInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ public record UserInfo(
String username,
String nickname,
String password,
Integer level,
Integer lastRead,
Integer streak,
Long weekPassCount
Integer streak
) {
}
27 changes: 0 additions & 27 deletions src/main/java/com/baektracker/domain/user/dto/UserProfile.java

This file was deleted.

12 changes: 12 additions & 0 deletions src/main/java/com/baektracker/domain/user/model/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.annotations.ColumnDefault;

@Entity
Expand All @@ -19,6 +21,7 @@
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand All @@ -37,6 +40,10 @@ public class User {
@Column(name = "streak", nullable = false)
private Integer streak;

@Setter
@Column(name = "level", nullable = true)
private Integer level;

@ColumnDefault("-1")
@Column(name = "last_read", nullable = false)
private Integer lastRead;
Expand All @@ -52,7 +59,12 @@ public void updateLastRead(Integer lastRead) {
this.lastRead = lastRead;
}

public void updateLastReadTime(LocalDateTime lastReadTime) {
this.lastReadTime = lastReadTime;
}

public void setStreak(int streak) {
this.streak = streak;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ public interface UserRepository extends JpaRepository<User, Long> {
u.username,
u.nickname,
u.password,
u.level,
u.lastRead,
u.streak,
count(wr.state)
u.streak
)
from User u
left join WeeklyResult wr on u.id=wr.user.id and wr.state=3
group by u.id
order by u.level desc
""")
List<UserInfo> getUserInfo();
}
26 changes: 16 additions & 10 deletions src/main/java/com/baektracker/domain/user/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@

import com.baektracker.domain.problem.service.SolvedAcService;
import com.baektracker.domain.user.dto.UserInfo;
import com.baektracker.domain.user.dto.UserProfile;
import com.baektracker.domain.user.dto.request.UpdatePasswordRequestDto;
import com.baektracker.domain.user.model.User;
import com.baektracker.domain.user.repository.UserRepository;
import com.baektracker.domain.weekly_result.dto.SolvedAcUser;
import com.baektracker.global.code.ApiResponseCode;
import com.baektracker.global.exception.CustomException;
import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder;
Expand Down Expand Up @@ -38,15 +36,23 @@ public void updatePassword(UpdatePasswordRequestDto dto) {
user.updatePassword(passwordEncoder.encode(dto.newPwd()));
}

public List<UserProfile> getUsers() {
List<UserInfo> users = userRepository.getUserInfo();
List<UserProfile> userProfiles = new ArrayList<>();
for (UserInfo user : users) {
SolvedAcUser solvedAcUser = solvedAcService.searchUser(user.username());
userProfiles.add(UserProfile.of(user, solvedAcUser));
public List<UserInfo> getUsers() {
return userRepository.getUserInfo();
}

@Transactional
public void updateUserInfoFromSolvedAc() {
List<User> users = userRepository.findAll();
for (User user : users) {
SolvedAcUser solvedAcUser = solvedAcService.searchUser(user.getUsername());

try {
user.setLevel(solvedAcUser.items().get(0).tier());
} catch (NullPointerException e) {
e.printStackTrace();
continue;
}
}
userProfiles.sort((u1, u2) -> u2.tier() - u1.tier());
return userProfiles;
}

}
Loading