본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
공부 시작 시각 인증
공부 시작 시각 인증
수강 인증 사진
수강 인증 사진
UserAuthEntity.java
package org.fastcampus.auth.repository.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.fastcampus.auth.domain.UserAuth;
import org.fastcampus.common.repository.entity.*;
@Entity
@Table(name = "community_user_auth")
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class UserAuthEntity extends TimeBaseEntity {
@Id
private String email;
private String password;
private String role;
private Long userId;
private LocalDateTime lastLoginDt;
public UserAuthEntity(UserAuth userAuth, Long userId) {
this.email = userAuth.getEmail();
this.password = userAuth.getPassword();
this.role = userAuth.getUserRole();
this.userId = userId;
}
public UserAuth toUserAuth() {
return new UserAuth(email, password, role, userId);
}
public void updateLastLoginDt() {
this.lastLoginDt = LocalDateTime.now();
}
}
UserAuthRepositoryImpl.java
package org.fastcampus.auth.repository;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.fastcampus.auth.application.Interfaces.UserAuthRepository;
import org.fastcampus.auth.domain.UserAuth;
import org.fastcampus.auth.repository.entity.UserAuthEntity;
import org.fastcampus.auth.repository.jpa.JpaUserAuthRepository;
import org.fastcampus.user.application.Interfaces.UserRepository;
import org.fastcampus.user.domain.User;
import org.springframework.stereotype.Repository;
@Repository
@RequiredArgsConstructor
public class UserAuthRepositoryImpl implements UserAuthRepository {
private final JpaUserAuthRepository jpaUserAuthRepository;
private final UserRepository userRepository;
@Override
@Transactional
public UserAuth registerUser(UserAuth auth, User user) {
User savedUser = userRepository.save(user);
UserAuthEntity userAuthEntity = new UserAuthEntity(auth, savedUser.getId());
userAuthEntity = jpaUserAuthRepository.save(userAuthEntity);
return userAuthEntity.toUserAuth();
}
@Override
@Transactional
public UserAuth loggingUser(String email, String password) {
UserAuthEntity userAuthEntity = jpaUserAuthRepository.findById(email).orElseThrow();
UserAuth userAuth = userAuthEntity.toUserAuth();
if (!userAuth.matchPassword(password)) {
throw new IllegalArgumentException("Invalid password");
}
userAuthEntity.updateLastLoginDt();
return userAuth;
}
}
GetUserTableRequestDto.java
package org.fastcampus.admin.ui.dto.users;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.fastcampus.common.domain.*;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class GetUserTableRequestDto extends Pageable {
private String name;
}
GetUserTableResponseDto.java
package org.fastcampus.admin.ui.dto.users;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.fastcampus.common.utils.*;
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class GetUserTableResponseDto {
@Getter
private Long id;
@Getter
private String email;
@Getter
private String name;
@Getter
private String role;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private LocalDateTime lastLoginAt;
public String getCreatedAt() {
return TimeCalculator.getFormattedDate(createdAt);
}
public String getUpdatedAt() {
return TimeCalculator.getFormattedDate(updatedAt);
}
public String getLastLoginAt() {
return TimeCalculator.getFormattedDate(lastLoginAt);
}
}
GetTableListResponse.java
package org.fastcampus.admin.ui.dto;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class GetTableListResponse<T> {
private int totalCount;
private List<T> tableData;
}
AdminTableQueryRepository.java
package org.fastcampus.admin.ui.query;
import org.fastcampus.admin.ui.dto.*;
import org.fastcampus.admin.ui.dto.users.GetUserTableRequestDto;
import org.fastcampus.admin.ui.dto.users.GetUserTableResponseDto;
public interface AdminTableQueryRepository {
GetTableListResponse<GetUserTableResponseDto> getUserTableData(GetUserTableRequestDto dto);
}
AdminTableQueryRepositoryImpl.java
package org.fastcampus.admin.repository;
import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.jpa.impl.JPAQueryFactory;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.fastcampus.admin.ui.dto.*;
import org.fastcampus.admin.ui.dto.users.GetUserTableRequestDto;
import org.fastcampus.admin.ui.dto.users.GetUserTableResponseDto;
import org.fastcampus.admin.ui.query.AdminTableQueryRepository;
import org.fastcampus.auth.repository.entity.*;
import org.fastcampus.user.repository.entity.*;
import org.springframework.stereotype.Repository;
@Repository
@RequiredArgsConstructor
public class AdminTableQueryRepositoryImpl implements AdminTableQueryRepository {
private final JPAQueryFactory queryFactory;
private static final QUserAuthEntity userAuthEntity = QUserAuthEntity.userAuthEntity;
private static final QUserEntity userEntity = QUserEntity.userEntity;
@Override
public GetTableListResponse<GetUserTableResponseDto> getUserTableData(
GetUserTableRequestDto dto) {
int total = queryFactory.select(userEntity.id)
.from(userEntity)
.where(likeName(dto.getName()))
.fetch()
.size();
List<GetUserTableResponseDto> result = queryFactory
.select(
Projections.fields(
GetUserTableResponseDto.class,
userEntity.id.as("id"),
userAuthEntity.email.as("email"),
userEntity.name.as("name"),
userAuthEntity.role.as("role"),
userEntity.regDt.as("createdAt"),
userEntity.updDt.as("updatedAt"),
userAuthEntity.lastLoginDt.as("lastLoginAt")
)
)
.from(userEntity)
.join(userAuthEntity).on(userAuthEntity.userId.eq(userEntity.id))
.where(likeName(dto.getName()))
.orderBy(userEntity.id.desc())
.offset(dto.getOffset())
.limit(dto.getLimit())
.fetch();
return new GetTableListResponse<>(total, result);
}
private BooleanExpression likeName(String name) {
if (name == null || name.isEmpty()) {
return null;
}
return userEntity.name.like(name + "%");
}
}
AdminController.java
package org.fastcampus.admin.ui;
import lombok.RequiredArgsConstructor;
import org.fastcampus.admin.ui.dto.*;
import org.fastcampus.admin.ui.dto.users.GetUserTableRequestDto;
import org.fastcampus.admin.ui.dto.users.GetUserTableResponseDto;
import org.fastcampus.admin.ui.query.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
@RestController
@RequestMapping("/admin")
@RequiredArgsConstructor
public class AdminController {
private final UserStatusQueryRepository userStatusQueryRepository;
private final AdminTableQueryRepository adminTableQueryRepository;
@GetMapping("/index")
public ModelAndView index() {
ModelAndView mav = new ModelAndView("index");
mav.addObject("result", userStatusQueryRepository.getDailyRegisterStatus(7));
return mav;
}
@GetMapping("/users")
public ModelAndView users(GetUserTableRequestDto dto) {
ModelAndView mav = new ModelAndView("users");
GetTableListResponse<GetUserTableResponseDto> result = adminTableQueryRepository.getUserTableData(dto);
mav.addObject("requestDto", dto);
mav.addObject("result", result.getTableData());
mav.addObject("totalCount", result.getTotalCount());
return mav;
}
}
학습 인증샷
학습 인증샷
공부 종료 시각 인증
공부 종료 시각 인증
https://bit.ly/4hTSJNB