Skip to content

Commit

Permalink
YEL-158 [deploy] v1.1.92
Browse files Browse the repository at this point in the history
YEL-158 [deploy] v1.1.92
  • Loading branch information
euije authored Sep 9, 2023
2 parents 08697cc + d4e7860 commit 7dcd429
Show file tree
Hide file tree
Showing 11 changed files with 250 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,27 @@
import static com.yello.server.global.common.SuccessCode.LOGIN_USER_ADMIN_SUCCESS;
import static com.yello.server.global.common.SuccessCode.READ_COOLDOWN_ADMIN_SUCCESS;
import static com.yello.server.global.common.SuccessCode.READ_USER_ADMIN_SUCCESS;
import static com.yello.server.global.common.SuccessCode.READ_USER_DETAIL_ADMIN_SUCCESS;
import static com.yello.server.global.common.SuccessCode.UPDATE_USER_DETAIL_ADMIN_SUCCESS;

import com.yello.server.domain.admin.dto.request.AdminLoginRequest;
import com.yello.server.domain.admin.dto.request.AdminUserDetailRequest;
import com.yello.server.domain.admin.dto.response.AdminCooldownResponse;
import com.yello.server.domain.admin.dto.response.AdminLoginResponse;
import com.yello.server.domain.admin.dto.response.AdminUserDetailResponse;
import com.yello.server.domain.admin.dto.response.AdminUserResponse;
import com.yello.server.domain.admin.service.AdminService;
import com.yello.server.domain.user.entity.User;
import com.yello.server.global.common.annotation.AccessTokenUser;
import com.yello.server.global.common.dto.BaseResponse;
import com.yello.server.global.common.dto.EmptyObject;
import com.yello.server.global.common.factory.PaginationFactory;
import javax.annotation.Nullable;
import lombok.RequiredArgsConstructor;
import lombok.val;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
Expand Down Expand Up @@ -49,6 +55,19 @@ public BaseResponse<AdminUserResponse> getUserAdmin(@AccessTokenUser User user,
return BaseResponse.success(READ_USER_ADMIN_SUCCESS, data);
}

@GetMapping("/user/{id}")
public BaseResponse<AdminUserDetailResponse> getUserDetailAdmin(@AccessTokenUser User user, @PathVariable Long id) {
val data = adminService.findUserDetail(user.getId(), id);
return BaseResponse.success(READ_USER_DETAIL_ADMIN_SUCCESS, data);
}

@PostMapping("/user/{id}")
public BaseResponse<EmptyObject> postUserDetailAdmin(@AccessTokenUser User user,
@PathVariable Long id, @RequestBody AdminUserDetailRequest request) {
val data = adminService.updateUserDetail(user.getId(), id, request);
return BaseResponse.success(UPDATE_USER_DETAIL_ADMIN_SUCCESS);
}

@DeleteMapping("/user")
public BaseResponse deleteUser(@AccessTokenUser User user, @RequestParam Long userId) {
adminService.deleteUser(user.getId(), userId);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.yello.server.domain.admin.dto.request;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yello.server.domain.user.entity.Gender;
import com.yello.server.domain.user.entity.Social;
import com.yello.server.domain.user.entity.Subscribe;
import javax.validation.constraints.NotNull;

public record AdminUserDetailRequest(
@JsonIgnore Long id,
@NotNull Long recommendCount,
@NotNull String name,
@NotNull String yelloId,
@NotNull Gender gender,
@NotNull Integer point,
@NotNull Social social,
@NotNull String profileImage,
@NotNull String uuid,
@JsonIgnore @NotNull String deletedAt,
@JsonIgnore @NotNull Long groupId,
@NotNull int groupAdmissionYear,
@NotNull String email,
@NotNull Integer ticketCount,
@NotNull String deviceToken,
@NotNull Subscribe subscribe
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.yello.server.domain.admin.dto.response;

import com.yello.server.domain.user.entity.User;
import lombok.Builder;

@Builder
public record AdminUserDetailResponse(
Long id,
Long recommendCount,
String name,
String yelloId,
String gender,
Integer point,
String social,
String profileImage,
String uuid,
String deletedAt,
String group,
int groupAdmissionYear,
String email,
Integer ticketCount,
String deviceToken,
String subscribe
) {

public static AdminUserDetailResponse of(User user) {
return AdminUserDetailResponse.builder()
.id(user.getId())
.recommendCount(user.getRecommendCount())
.name(user.getName())
.yelloId(user.getYelloId())
.gender(user.getGender().toString())
.point(user.getPoint())
.social(user.getSocial().toString())
.profileImage(user.getProfileImage())
.uuid(user.getUuid())
.deletedAt(user.getDeletedAt() == null ? "" : user.getDeletedAt().toString())
.group(user.getGroup().toString())
.groupAdmissionYear(user.getGroupAdmissionYear())
.email(user.getEmail())
.ticketCount(user.getTicketCount())
.deviceToken(user.getDeviceToken())
.subscribe(user.getSubscribe().toString())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,33 @@
package com.yello.server.domain.admin.service;

import static com.yello.server.global.common.ErrorCode.DEVICE_TOKEN_CONFLICT_USER_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.USER_ADMIN_NOT_FOUND_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.UUID_CONFLICT_USER_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.YELLOID_CONFLICT_USER_EXCEPTION;

import com.yello.server.domain.admin.dto.request.AdminLoginRequest;
import com.yello.server.domain.admin.dto.request.AdminUserDetailRequest;
import com.yello.server.domain.admin.dto.response.AdminCooldownContentVO;
import com.yello.server.domain.admin.dto.response.AdminCooldownResponse;
import com.yello.server.domain.admin.dto.response.AdminLoginResponse;
import com.yello.server.domain.admin.dto.response.AdminUserContentVO;
import com.yello.server.domain.admin.dto.response.AdminUserDetailResponse;
import com.yello.server.domain.admin.dto.response.AdminUserResponse;
import com.yello.server.domain.admin.exception.UserAdminNotFoundException;
import com.yello.server.domain.admin.repository.UserAdminRepository;
import com.yello.server.domain.authorization.service.TokenProvider;
import com.yello.server.domain.cooldown.entity.Cooldown;
import com.yello.server.domain.cooldown.repository.CooldownRepository;
import com.yello.server.domain.user.entity.Gender;
import com.yello.server.domain.user.entity.User;
import com.yello.server.domain.user.exception.UserConflictException;
import com.yello.server.domain.user.repository.UserRepository;
import com.yello.server.domain.user.service.UserManager;
import com.yello.server.global.common.dto.EmptyObject;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.Objects;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -34,21 +43,21 @@ public class AdminService {
private final CooldownRepository cooldownRepository;
private final UserAdminRepository userAdminRepository;

@Value("${admin.password}")
String adminPassword;

public AdminLoginResponse login(AdminLoginRequest request) {
AtomicReference<String> accessToken = new AtomicReference<>();
String accessToken;

userManager.getOfficialUsers()
.forEach((user) -> {
if (user.getYelloId().equals(request.password())) {
accessToken.set(tokenProvider.createAccessToken(user.getId(), user.getUuid()));
}
});
if (request.password().equals(adminPassword)) {
final User user = userManager.getOfficialUser(Gender.FEMALE);

if (accessToken.get() == null || accessToken.get().isEmpty()) {
accessToken = tokenProvider.createAccessToken(user.getId(), user.getUuid());
} else {
throw new UserAdminNotFoundException(USER_ADMIN_NOT_FOUND_EXCEPTION);
}

return AdminLoginResponse.of(accessToken.get());
return AdminLoginResponse.of(accessToken);
}

public AdminUserResponse findUser(Long adminId, Pageable page) {
Expand Down Expand Up @@ -79,6 +88,50 @@ public AdminUserResponse findUserContaining(Long adminId, Pageable page, String
return AdminUserResponse.of(totalCount, list);
}

public AdminUserDetailResponse findUserDetail(Long adminId, Long userId) {
// exception
final User admin = userRepository.getById(adminId);
userAdminRepository.getByUser(admin);

// logic
final User user = userRepository.getById(userId);

return AdminUserDetailResponse.of(user);
}

@Transactional
public EmptyObject updateUserDetail(Long adminId, Long userId, AdminUserDetailRequest request) {
// exception
final User admin = userRepository.getById(adminId);
userAdminRepository.getByUser(admin);

// logic
final User user = userRepository.getById(userId);

userRepository.findByUuidNotFiltered(request.uuid())
.ifPresent(action -> {
if (!Objects.equals(action.getId(), userId)) {
throw new UserConflictException(UUID_CONFLICT_USER_EXCEPTION);
}
});
userRepository.findByYelloIdNotFiltered(request.yelloId())
.ifPresent(action -> {
if (!Objects.equals(action.getId(), userId)) {
throw new UserConflictException(YELLOID_CONFLICT_USER_EXCEPTION);
}
});
userRepository.findByDeviceTokenNotFiltered(request.deviceToken())
.ifPresent(action -> {
if (!Objects.equals(action.getId(), userId)) {
throw new UserConflictException(DEVICE_TOKEN_CONFLICT_USER_EXCEPTION);
}
});

user.update(request);

return EmptyObject.builder().build();
}

@Transactional
public void deleteUser(Long adminId, Long userId) {
// exception
Expand Down
19 changes: 18 additions & 1 deletion src/main/java/com/yello/server/domain/user/entity/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static com.yello.server.global.common.util.ConstantUtil.RECOMMEND_POINT;

import com.yello.server.domain.admin.dto.request.AdminUserDetailRequest;
import com.yello.server.domain.authorization.dto.request.SignUpRequest;
import com.yello.server.domain.group.entity.School;
import com.yello.server.global.common.dto.AuditingTimeEntity;
Expand Down Expand Up @@ -132,6 +133,22 @@ public void delete() {
this.deviceToken = null;
}

public void update(AdminUserDetailRequest request) {
this.recommendCount = request.recommendCount();
this.name = request.name();
this.yelloId = request.yelloId();
this.gender = request.gender();
this.point = request.point();
this.social = request.social();
this.profileImage = request.profileImage();
this.uuid = request.uuid();
this.groupAdmissionYear = request.groupAdmissionYear();
this.email = request.email();
this.ticketCount = request.ticketCount();
this.deviceToken = request.deviceToken();
this.subscribe = request.subscribe();
}

public void renew() {
this.deletedAt = null;
}
Expand All @@ -149,7 +166,7 @@ public void increaseRecommendPoint() {
}

public void plusPoint(Integer point) {
if (this.getSubscribe()==Subscribe.NORMAL) {
if (this.getSubscribe() == Subscribe.NORMAL) {
this.point += point;
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,18 @@ public interface UserRepository {

boolean existsByUuid(String uuid);

User getByYelloId(String yelloId);

User getByYelloIdNotFiltered(String yelloId);

Optional<User> findByYelloId(String yelloId);

Optional<User> findByYelloIdNotFiltered(String yelloId);

User getByYelloId(String yelloId);
User getByDeviceToken(String deviceToken);

User getByDeviceTokenNotFiltered(String deviceToken);


Optional<User> findByDeviceToken(String deviceToken);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.yello.server.domain.user.repository;

import static com.yello.server.global.common.ErrorCode.AUTH_UUID_NOT_FOUND_USER_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.DEVICE_TOKEN_NOT_FOUND_USER_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.USERID_NOT_FOUND_USER_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.YELLOID_NOT_FOUND_USER_EXCEPTION;

Expand Down Expand Up @@ -58,6 +59,18 @@ public boolean existsByUuid(String uuid) {
return userJpaRepository.existsByUuid(uuid);
}

@Override
public User getByYelloId(String yelloId) {
return userJpaRepository.findByYelloId(yelloId)
.orElseThrow(() -> new UserNotFoundException(YELLOID_NOT_FOUND_USER_EXCEPTION));
}

@Override
public User getByYelloIdNotFiltered(String yelloId) {
return userJpaRepository.findByYelloIdNotFiltered(yelloId)
.orElseThrow(() -> new UserNotFoundException(YELLOID_NOT_FOUND_USER_EXCEPTION));
}

@Override
public Optional<User> findByYelloId(String yelloId) {
return userJpaRepository.findByYelloId(yelloId);
Expand All @@ -69,9 +82,15 @@ public Optional<User> findByYelloIdNotFiltered(String yelloId) {
}

@Override
public User getByYelloId(String yelloId) {
return userJpaRepository.findByYelloId(yelloId)
.orElseThrow(() -> new UserNotFoundException(YELLOID_NOT_FOUND_USER_EXCEPTION));
public User getByDeviceToken(String deviceToken) {
return userJpaRepository.findByDeviceToken(deviceToken)
.orElseThrow(() -> new UserNotFoundException(DEVICE_TOKEN_NOT_FOUND_USER_EXCEPTION));
}

@Override
public User getByDeviceTokenNotFiltered(String deviceToken) {
return userJpaRepository.findByDeviceTokenNotFiltered(deviceToken)
.orElseThrow(() -> new UserNotFoundException(DEVICE_TOKEN_NOT_FOUND_USER_EXCEPTION));
}

@Override
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/yello/server/global/common/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public enum ErrorCode {
"이미 CANCELED한 유저에게 CANCELED 요청을 보내어 중복됩니다"),
GOOGLE_INAPP_BAD_REQUEST_EXCEPTION(BAD_REQUEST, "해당 영수증은 취소되었거나, 대기 중인 결제입니다."),
APPLE_IN_APP_BAD_REQUEST_EXCEPTION(BAD_REQUEST, "존재하지 않는 영수증입니다."),
METHOD_ARGUMENT_TYPE_MISMATCH_EXCEPTION(BAD_REQUEST, "입력한 값의 타입이 올바르지 않습니다."),

/**
* 401 UNAUTHORIZED
Expand Down Expand Up @@ -66,6 +67,7 @@ public enum ErrorCode {
* 404 NOT FOUND
*/
YELLOID_NOT_FOUND_USER_EXCEPTION(NOT_FOUND, "탈퇴했거나 존재하지 않는 유저의 yelloId입니다."),
DEVICE_TOKEN_NOT_FOUND_USER_EXCEPTION(NOT_FOUND, "해당 Device Token의 유저가 존재하지 않습니다."),
AUTH_NOT_FOUND_USER_EXCEPTION(NOT_FOUND, "토큰 정보에 해당하는 유저가 존재하지 않습니다."),
AUTH_UUID_NOT_FOUND_USER_EXCEPTION(NOT_FOUND, "토큰 uuid에 해당하는 유저가 존재하지 않습니다."),
GROUPID_NOT_FOUND_GROUP_EXCEPTION(NOT_FOUND, "해당 그룹 id의 그룹이 존재하지 않습니다."),
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/yello/server/global/common/SuccessCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ public enum SuccessCode {
FRIEND_SEARCH_SUCCESS(OK, "친구 검색하기에 성공했습니다."),
VERIFY_RECEIPT_SUCCESS(OK, "인앱결제 검증에 성공했습니다."),
READ_USER_ADMIN_SUCCESS(OK, "어드민 페이지 유저 조회에 성공하였습니다."),
READ_USER_DETAIL_ADMIN_SUCCESS(OK, "어드민 페이지 유저 상세 조회에 성공하였습니다."),
UPDATE_USER_DETAIL_ADMIN_SUCCESS(OK, "어드민 페이지 유저 상세 정보 수정에 성공하였습니다."),
READ_COOLDOWN_ADMIN_SUCCESS(OK, "어드민 페이지 쿨다운 조회에 성공하였습니다."),
DELETE_USER_ADMIN_SUCCESS(OK, "어드민 권환으로 유저 삭제에 성공하였습니다."),
DELETE_COOLDOWN_ADMIN_SUCCESS(OK, "어드민 권환으로 쿨다운 삭제에 성공하였습니다."),
Expand Down
Loading

0 comments on commit 7dcd429

Please sign in to comment.