Skip to content

Commit

Permalink
[feat] 이벤트 유저 검색 기능 구현 (#110)
Browse files Browse the repository at this point in the history
  • Loading branch information
blaxsior committed Aug 20, 2024
1 parent a50384a commit 57e2ca4
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package hyundai.softeer.orange.admin.controller;

import hyundai.softeer.orange.core.auth.Auth;
import hyundai.softeer.orange.core.auth.AuthRole;
import hyundai.softeer.orange.core.auth.list.AdminAuthRequirement;
import hyundai.softeer.orange.eventuser.dto.EventUserPageDto;
import hyundai.softeer.orange.eventuser.service.EventUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.Min;
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;

@Tag(name="admin event user", description = "어드민 페이지에서 이벤트 유저 정보 조회에 사용하는 API")
@RequiredArgsConstructor
@RequestMapping("/api/v1/admin/event-users")
@RestController
@AdminAuthRequirement @Auth({AuthRole.admin})
public class AdminEventUserController {
private final EventUserService eventUserService;

/**
* @param search 이벤트 유저 이름 검색어
* @param page 현재 페이지
* @param size 한 페이지의 크기
*/
@Operation(summary = "이벤트 유저 목록을 검색한다", description="이벤트 유저 목록을 검색한다. 이름을 기준으로 검색할 수 있으며, 페이지 / 사이즈가 존재한다.", responses = {
@ApiResponse(responseCode = "200", description = "매칭되는 이벤트 유저 리스트를 반환한다."),
})
@GetMapping
public ResponseEntity<EventUserPageDto> getEventUsers(
@RequestParam(name="search", required = false, defaultValue = "") String search,
@RequestParam(name="page", required = false, defaultValue = "0") @Min(0) Integer page,
@RequestParam(name="size", required = false, defaultValue = "10") @Min(1) Integer size
) {
var userPageDto = eventUserService.getUserBySearch(search, page, size);
return ResponseEntity.ok(userPageDto);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package hyundai.softeer.orange.eventuser.dto;

import hyundai.softeer.orange.eventuser.entity.EventUser;
import lombok.Getter;

@Getter
public class EventUserOnAdminDto {
private String userName;
private String phoneNumber;
private String frameId;

public static EventUserOnAdminDto from(EventUser eventUser) {
EventUserOnAdminDto dto = new EventUserOnAdminDto();
dto.userName = eventUser.getUserName();
dto.phoneNumber = eventUser.getPhoneNumber();
dto.frameId = eventUser.getEventFrame().getFrameId();
return dto;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package hyundai.softeer.orange.eventuser.dto;

import hyundai.softeer.orange.eventuser.entity.EventUser;
import lombok.Getter;
import org.springframework.data.domain.Page;

import java.util.List;

@Getter
public class EventUserPageDto {
private List<EventUserOnAdminDto> users;
private int totalPage;
private int number;
private int size;

public static EventUserPageDto from(Page<EventUser> userPage) {
EventUserPageDto dto = new EventUserPageDto();
dto.users = userPage.getContent().stream().map(EventUserOnAdminDto::from).toList();
dto.totalPage = userPage.getTotalPages();
dto.number = userPage.getNumber();
dto.size = userPage.getSize();
return dto;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import hyundai.softeer.orange.eventuser.dto.EventUserScoreDto;
import hyundai.softeer.orange.eventuser.entity.EventUser;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
Expand All @@ -20,6 +22,9 @@ public interface EventUserRepository extends JpaRepository<EventUser, Long>, Cus
@Query("SELECT eu FROM EventUser eu WHERE eu.userId IN :userIds")
List<EventUser> findAllByUserId(@Param("userIds") List<String> userIds);

@Query("SELECT eu FROM EventUser eu join fetch eu.eventFrame WHERE eu.userName LIKE %:search%")
Page<EventUser> findBySearch(@Param("search") String search, Pageable pageable);

boolean existsByPhoneNumber(String phoneNumber);

@Query(value = "SELECT u.id as userId, u.score as score FROM event_user u " +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import hyundai.softeer.orange.core.jwt.JWTManager;
import hyundai.softeer.orange.event.common.entity.EventFrame;
import hyundai.softeer.orange.event.common.repository.EventFrameRepository;
import hyundai.softeer.orange.eventuser.dto.EventUserOnAdminDto;
import hyundai.softeer.orange.eventuser.dto.EventUserPageDto;
import hyundai.softeer.orange.eventuser.dto.RequestAuthCodeDto;
import hyundai.softeer.orange.eventuser.dto.RequestUserDto;
import hyundai.softeer.orange.eventuser.entity.EventUser;
Expand All @@ -16,6 +18,9 @@
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down Expand Up @@ -47,6 +52,14 @@ public TokenDto login(RequestUserDto dto) {
return generateToken(eventUser);
}

@Transactional(readOnly = true)
public EventUserPageDto getUserBySearch(String search, int page, int size) {
PageRequest pageRequest = PageRequest.of(page, size);

Page<EventUser> userPage = eventUserRepository.findBySearch(search, pageRequest);
return EventUserPageDto.from(userPage);
}

/**
* 1. 유저가 입력한 인증번호와 Redis에 저장된 인증번호 비교
* 2. 일치하면 신규 유저 저장하고 JWT 토큰 발급
Expand Down

0 comments on commit 57e2ca4

Please sign in to comment.