Skip to content

Commit

Permalink
Merge pull request #82 from PLADI-ALM/feat/PDS-96-getUserList
Browse files Browse the repository at this point in the history
[PDS-96/feat] 직원 계정 목록 조회 API
  • Loading branch information
leeseunghakhello authored Oct 13, 2023
2 parents a9a16e2 + e2a906f commit 6f66102
Show file tree
Hide file tree
Showing 8 changed files with 110 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@
import com.example.pladialmserver.global.exception.BaseException;
import com.example.pladialmserver.global.exception.BaseResponseCode;
import com.example.pladialmserver.global.utils.JwtUtil;
import com.example.pladialmserver.global.utils.RedisUtil;
import com.example.pladialmserver.user.entity.User;
import com.example.pladialmserver.user.repository.UserRepository;
import com.example.pladialmserver.user.repository.user.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

import com.example.pladialmserver.booking.entity.ResourceBooking;
import com.example.pladialmserver.booking.repository.resourceBooking.ResourceBookingRepository;
import com.example.pladialmserver.global.entity.BookingStatus;
import com.example.pladialmserver.global.exception.BaseException;
import com.example.pladialmserver.global.exception.BaseResponseCode;
import com.example.pladialmserver.global.utils.DateTimeUtil;
Expand All @@ -18,17 +17,14 @@
import com.example.pladialmserver.resource.repository.ResourceRepository;
import com.example.pladialmserver.user.entity.Role;
import com.example.pladialmserver.user.entity.User;
import com.example.pladialmserver.user.repository.UserRepository;
import com.example.pladialmserver.user.repository.user.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;

@Service
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,19 @@
import com.example.pladialmserver.global.response.ResponseCustom;
import com.example.pladialmserver.user.dto.request.CreateUserReq;
import com.example.pladialmserver.user.dto.response.CompanyRankListRes;
import com.example.pladialmserver.user.dto.response.UserRes;
import com.example.pladialmserver.user.entity.User;
import com.example.pladialmserver.user.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
Expand Down Expand Up @@ -49,4 +53,15 @@ public ResponseCustom<CompanyRankListRes> getCompanyRankList() {
return ResponseCustom.OK(userService.getCompanyRankList());
}

@Operation(summary = "직원 계정 목록 조회 (장채은)", description = "직원 계정 목록을 조회한다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "(S0001)직원 계정 목록 조회 성공"),
@ApiResponse(responseCode = "403", description = "(G0002)접근 권한이 없습니다.", content = @Content(schema = @Schema(implementation = ResponseCustom.class)))
})
@GetMapping("")
public ResponseCustom<Page<UserRes>> getUserList(@Account User user,
Pageable pageable,
@Parameter(description = "(String) 성명 검색", example = "홍길동") @RequestParam(name = "name", required = false) String name) {
return ResponseCustom.OK(userService.getUserList(user, name, pageable));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.example.pladialmserver.user.dto.response;

import com.example.pladialmserver.user.entity.User;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class UserRes {
@Schema(type = "Long", description = "1", example = "1")
private Long userId;
@Schema(type = "String", description = "성명", example = "홍길동")
private String name;
@Schema(type = "String", description = "이메일", example = "[email protected]")
private String email;
@Schema(type = "String", description = "부서", example = "마케팅")
private String department;
@Schema(type = "String", description = "직위", example = "팀장")
private String position;
@Schema(type = "String", description = "직책", example = "마케팅 팀장")
private String officeJob;
@Schema(type = "String", description = "역할(일반|관리자)", example = "일반")
private String role;

public static UserRes toDto (User user){
return UserRes.builder()
.userId(user.getUserId())
.name(user.getName())
.email(user.getEmail())
.department(user.getDepartment().getName())
.position(user.getPosition().getName())
.officeJob(user.getOfficeJob())
.role(user.getRole().getValue())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.example.pladialmserver.user.repository.user;

import com.example.pladialmserver.user.entity.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

public interface UserCustom {
Page<User> findAllByName(String name, Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.example.pladialmserver.user.repository;
package com.example.pladialmserver.user.repository.user;

import com.example.pladialmserver.user.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface UserRepository extends JpaRepository<User, Long> {
public interface UserRepository extends JpaRepository<User, Long>, UserCustom{
Optional<User> findByEmail(String email);
Boolean existsByEmail(String email);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.example.pladialmserver.user.repository.user;

import com.example.pladialmserver.user.entity.User;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.util.StringUtils;

import java.util.List;

import static com.example.pladialmserver.user.entity.QUser.user;

@RequiredArgsConstructor
public class UserRepositoryImpl implements UserCustom {
private final JPAQueryFactory jpaQueryFactory;

private BooleanExpression findKeyword(String name) {
return StringUtils.hasText(name) ? user.name.contains(name) : null;
}

@Override
public Page<User> findAllByName(String name, Pageable pageable) {
List<User> content = jpaQueryFactory.selectFrom(user)
.where(findKeyword(name))
.fetch();

int start = (int) pageable.getOffset();
int end = Math.min((start + pageable.getPageSize()), content.size());
return new PageImpl<>(content.subList(start, end), pageable, content.size());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,17 @@
import com.example.pladialmserver.user.dto.request.LoginReq;
import com.example.pladialmserver.user.dto.response.CompanyRankListRes;
import com.example.pladialmserver.user.dto.response.UserPositionRes;
import com.example.pladialmserver.user.dto.response.UserRes;
import com.example.pladialmserver.user.entity.Department;
import com.example.pladialmserver.user.entity.Position;
import com.example.pladialmserver.user.entity.Role;
import com.example.pladialmserver.user.entity.User;
import com.example.pladialmserver.user.repository.DepartmentRepository;
import com.example.pladialmserver.user.repository.PositionRepository;
import com.example.pladialmserver.user.repository.UserRepository;
import com.example.pladialmserver.user.repository.user.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down Expand Up @@ -84,4 +87,11 @@ public CompanyRankListRes getCompanyRankList() {
List<Position> positions = positionRepository.findAll();
return CompanyRankListRes.toDto(departments, positions);
}

// 직원 계정 목록 조회
public Page<UserRes> getUserList(User admin, String name, Pageable pageable) {
// admin 사용자 확인
if (!admin.getRole().equals(Role.ADMIN)) throw new BaseException(NO_AUTHENTICATION);
return userRepository.findAllByName(name, pageable).map(UserRes::toDto);
}
}

0 comments on commit 6f66102

Please sign in to comment.