Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.example.solidconnection.admin.controller;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.solidconnection.admin.dto.RestrictedUserInfoDetailResponse;
import com.example.solidconnection.admin.dto.RestrictedUserSearchCondition;
import com.example.solidconnection.admin.dto.RestrictedUserSearchResponse;
import com.example.solidconnection.admin.dto.UserInfoDetailResponse;
import com.example.solidconnection.admin.dto.UserSearchCondition;
import com.example.solidconnection.admin.dto.UserSearchResponse;
import com.example.solidconnection.admin.service.AdminUserService;
import com.example.solidconnection.common.response.PageResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@RequestMapping("/admin/users")
@RestController
public class AdminUserController {

private final AdminUserService adminUserService;

@GetMapping
public ResponseEntity<PageResponse<UserSearchResponse>> searchAllUsers(
@Valid @ModelAttribute UserSearchCondition searchCondition,
Pageable pageable
) {
Page<UserSearchResponse> page = adminUserService.searchAllUsers(searchCondition, pageable);
return ResponseEntity.ok(PageResponse.of(page));
}

@GetMapping("/{user-id}")
public ResponseEntity<UserInfoDetailResponse> getUserInfoDetail(
@PathVariable(name = "user-id") long userId
) {
UserInfoDetailResponse response = adminUserService.getUserInfoDetail(userId);
return ResponseEntity.ok(response);
}

@GetMapping("/restricted")
public ResponseEntity<PageResponse<RestrictedUserSearchResponse>> searchRestrictedUsers(
@Valid @ModelAttribute RestrictedUserSearchCondition searchCondition,
Pageable pageable
) {
Page<RestrictedUserSearchResponse> page = adminUserService.searchRestrictedUsers(searchCondition, pageable);
return ResponseEntity.ok(PageResponse.of(page));
}

@GetMapping("/restricted/{user-id}")
public ResponseEntity<RestrictedUserInfoDetailResponse> getRestrictedUserInfoDetail(
@PathVariable(name = "user-id") long userId
) {
RestrictedUserInfoDetailResponse response = adminUserService.getRestrictedUserInfoDetail(userId);
return ResponseEntity.ok(response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.example.solidconnection.admin.dto;

import java.time.ZonedDateTime;

public record BannedHistoryResponse(
ZonedDateTime createdAt
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.solidconnection.admin.dto;

import com.example.solidconnection.siteuser.domain.UserBanDuration;

public record BannedInfoResponse(
boolean isBanned,
UserBanDuration duration
) {
Comment thread
coderabbitai[bot] marked this conversation as resolved.

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.solidconnection.admin.dto;

import java.time.ZonedDateTime;

public record MatchedInfoResponse(
String nickname,
ZonedDateTime matchedDate
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.solidconnection.admin.dto;

import java.util.List;

public record MenteeInfoResponse(
UnivApplyInfoResponse univApplyInfos,
List<MatchedInfoResponse> mentorInfos
) {
Comment thread
coderabbitai[bot] marked this conversation as resolved.

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.example.solidconnection.admin.dto;

import com.example.solidconnection.mentor.domain.MentorApplicationStatus;
import java.time.ZonedDateTime;

public record MentorApplicationHistoryInfoResponse(
MentorApplicationStatus mentorApplicationStatus,
String rejectedReason,
ZonedDateTime createdAt
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.solidconnection.admin.dto;

import java.util.List;

public record MentorInfoResponse(
List<MatchedInfoResponse> menteeInfos,
List<MentorApplicationHistoryInfoResponse> mentorApplicationHistory
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.example.solidconnection.admin.dto;

import java.time.ZonedDateTime;

import com.example.solidconnection.report.domain.ReportType;

public record ReportedHistoryResponse(
ZonedDateTime reportedDate,
ReportType reportType
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.example.solidconnection.admin.dto;

import java.time.ZonedDateTime;

import com.example.solidconnection.report.domain.ReportType;
import com.example.solidconnection.report.domain.TargetType;

public record ReportedInfoResponse(
ZonedDateTime reportedDate,
TargetType targetType,
ReportType reportType
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.solidconnection.admin.dto;

import java.util.List;

public record RestrictedUserInfoDetailResponse(
List<ReportedHistoryResponse> reportedHistoryResponses,
List<BannedHistoryResponse> bannedHistoryResponses
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.example.solidconnection.admin.dto;

import com.example.solidconnection.siteuser.domain.Role;
import com.example.solidconnection.siteuser.domain.UserStatus;

public record RestrictedUserSearchCondition(
Role role,
UserStatus userStatus,
String keyword
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.example.solidconnection.admin.dto;

import com.example.solidconnection.siteuser.domain.Role;
import com.example.solidconnection.siteuser.domain.UserStatus;

public record RestrictedUserSearchResponse(
String nickname,
Role role,
UserStatus userStatus,
ReportedInfoResponse reportedInfoResponse,
BannedInfoResponse bannedInfoResponse
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.example.solidconnection.admin.dto;

public record UnivApplyInfoResponse(
String firstChoiceUnivName,
String secondChoiceUnivName,
String thirdChoiceUnivName
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.example.solidconnection.admin.dto;

import java.util.List;

public record UserInfoDetailResponse(
MentorInfoResponse mentorInfoResponse, // 멘티일 경우 null
MenteeInfoResponse menteeInfoResponse, // 멘토일 경우 null
List<ReportedHistoryResponse> reportedHistoryResponses
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.solidconnection.admin.dto;

import com.example.solidconnection.siteuser.domain.Role;

public record UserSearchCondition(
Role role,
String keyword
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.example.solidconnection.admin.dto;

import com.example.solidconnection.siteuser.domain.Role;
import com.example.solidconnection.siteuser.domain.UserStatus;

public record UserSearchResponse(
String nickname,
String email,
Role role,
UserStatus userStatus
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.example.solidconnection.admin.service;

import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.example.solidconnection.admin.dto.RestrictedUserInfoDetailResponse;
import com.example.solidconnection.admin.dto.RestrictedUserSearchCondition;
import com.example.solidconnection.admin.dto.RestrictedUserSearchResponse;
import com.example.solidconnection.admin.dto.UserInfoDetailResponse;
import com.example.solidconnection.admin.dto.UserSearchCondition;
import com.example.solidconnection.admin.dto.UserSearchResponse;
import com.example.solidconnection.common.exception.CustomException;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.siteuser.repository.custom.SiteUserFilterRepository;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Service
public class AdminUserService {

private final SiteUserRepository siteUserRepository;
private final SiteUserFilterRepository siteUserFilterRepository;
Comment thread
whqtker marked this conversation as resolved.
Outdated

@Transactional(readOnly = true)
public Page<UserSearchResponse> searchAllUsers(UserSearchCondition searchCondition, Pageable pageable) {
return siteUserFilterRepository.searchAllUsers(searchCondition, pageable);
}

@Transactional(readOnly = true)
public Page<RestrictedUserSearchResponse> searchRestrictedUsers(RestrictedUserSearchCondition searchCondition, Pageable pageable) {
return siteUserFilterRepository.searchRestrictedUsers(searchCondition, pageable);
}

@Transactional(readOnly = true)
public UserInfoDetailResponse getUserInfoDetail(long userId) {
SiteUser siteUser = siteUserRepository.findById(userId)
.orElseThrow(() -> new CustomException(USER_NOT_FOUND));
return siteUserFilterRepository.getUserInfoDetailByUserId(siteUser.getId());
}
Comment thread
whqtker marked this conversation as resolved.

@Transactional(readOnly = true)
public RestrictedUserInfoDetailResponse getRestrictedUserInfoDetail(long userId) {
SiteUser siteUser = siteUserRepository.findById(userId)
.orElseThrow(() -> new CustomException(USER_NOT_FOUND));
return siteUserFilterRepository.getRestrictedUserInfoDetail(siteUser.getId());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.example.solidconnection.siteuser.repository.custom;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import com.example.solidconnection.admin.dto.RestrictedUserInfoDetailResponse;
import com.example.solidconnection.admin.dto.RestrictedUserSearchCondition;
import com.example.solidconnection.admin.dto.RestrictedUserSearchResponse;
import com.example.solidconnection.admin.dto.UserInfoDetailResponse;
import com.example.solidconnection.admin.dto.UserSearchCondition;
import com.example.solidconnection.admin.dto.UserSearchResponse;

public interface SiteUserFilterRepository {

Page<UserSearchResponse> searchAllUsers(UserSearchCondition searchCondition, Pageable pageable);

Page<RestrictedUserSearchResponse> searchRestrictedUsers(RestrictedUserSearchCondition searchCondition, Pageable pageable);

UserInfoDetailResponse getUserInfoDetailByUserId(long userId);

RestrictedUserInfoDetailResponse getRestrictedUserInfoDetail(long userId);
}
Loading
Loading