본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
공부 시작 시각 인증
수강 인증 사진
community_user 테이블에 datetime 타입이 아닌, date 타입의 'reg_date' 칼럼을 새로 추가한다.
그리고 해당 칼럼에 인덱스 추가한다.
EXPLAIN SELECT cu.reg_date, COUNT(*) AS dailyUserCount
FROM community_user cu
GROUP BY cu.reg_date
ORDER BY cu.reg_date;
UserEntity.java
package org.fastcampus.user.repository.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.time.LocalDate;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.fastcampus.common.domain.*;
import org.fastcampus.common.repository.entity.*;
import org.fastcampus.user.domain.*;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.data.annotation.CreatedDate;
@Entity
@Table(name = "community_user")
@NoArgsConstructor
@AllArgsConstructor
@Getter
@DynamicUpdate
public class UserEntity extends TimeBaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String profileUrl;
private Integer followerCount;
private Integer followingCount;
@CreatedDate
@Column(updatable = false)
private LocalDate reg_date;
public UserEntity(User user) {
this.id = user.getId();
this.name = user.getName();
this.profileUrl = user.getProfileUrl();
this.followerCount = user.followerCount();
this.followingCount = user.followingCount();
}
public User toUser() {
return User.builder()
.id(id)
.info(new UserInfo(name, profileUrl))
.followerCount(new PositiveIntegerCounter(followerCount))
.followingCount(new PositiveIntegerCounter(followingCount))
.build();
}
}
UserStatusQueryRepositoryImpl.java
package org.fastcampus.admin.repository;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.fastcampus.admin.ui.dto.GetDailyRegisterUserResponseDto;
import org.fastcampus.admin.ui.query.UserStatusQueryRepository;
import org.fastcampus.user.repository.entity.QUserEntity;
import org.springframework.stereotype.Repository;
@Repository
@RequiredArgsConstructor
public class UserStatusQueryRepositoryImpl implements UserStatusQueryRepository {
private final JPAQueryFactory queryFactory;
private static final QUserEntity userEntity = QUserEntity.userEntity;
@Override
public List<GetDailyRegisterUserResponseDto> getDailyRegisterStatus(int beforeDays) {
return queryFactory
.select(
Projections.fields(
GetDailyRegisterUserResponseDto.class,
userEntity.reg_date.as("date"),
userEntity.count().as("count")
)
).from(userEntity)
.fetch();
}
}