diff --git a/src/docs/asciidoc/index.adoc b/src/docs/asciidoc/index.adoc index d51d39c7..f5c91a32 100644 --- a/src/docs/asciidoc/index.adoc +++ b/src/docs/asciidoc/index.adoc @@ -17,7 +17,7 @@ * link:find-onboarding-friends.html[가입한 친구 목록 불러오기] -* link:search-school.html[대학교 검색하기] +* link:search-userGroup.html[대학교 검색하기] * link:search-department.html[대학교 학과 검색하기] diff --git a/src/main/java/com/yello/server/domain/admin/controller/AdminController.java b/src/main/java/com/yello/server/domain/admin/controller/AdminController.java index 54f81d07..0fa19c9b 100644 --- a/src/main/java/com/yello/server/domain/admin/controller/AdminController.java +++ b/src/main/java/com/yello/server/domain/admin/controller/AdminController.java @@ -12,6 +12,7 @@ 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 static com.yello.server.global.common.factory.PaginationFactory.createPageable; +import static com.yello.server.global.common.factory.PaginationFactory.createPageableByNameSortDescLimitTen; import static com.yello.server.global.common.factory.PaginationFactory.createPageableLimitTen; import com.yello.server.domain.admin.dto.request.AdminLoginRequest; @@ -28,6 +29,7 @@ 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.infrastructure.firebase.dto.request.NotificationCustomMessage; import com.yello.server.infrastructure.firebase.service.NotificationService; import javax.annotation.Nullable; import lombok.RequiredArgsConstructor; @@ -56,18 +58,21 @@ public BaseResponse postAdminLogin(@RequestBody AdminLoginRe } @GetMapping("/user") - public BaseResponse getUserAdmin(@AccessTokenUser User user, @RequestParam Integer page, + public BaseResponse getUserAdmin(@AccessTokenUser User user, + @RequestParam Integer page, @Nullable @RequestParam String field, @Nullable @RequestParam String value) { - val data = (field == null && value == null) - ? adminService.findUser(user.getId(), createPageableLimitTen(page)) - : adminService.findUserContaining(user.getId(), createPageableLimitTen(page), + val data = (field==null && value==null) + ? adminService.findUser(user.getId(), createPageableByNameSortDescLimitTen(page)) + : adminService.findUserContaining(user.getId(), + createPageableByNameSortDescLimitTen(page), field, value); return BaseResponse.success(READ_USER_ADMIN_SUCCESS, data); } @GetMapping("/user/{id}") - public BaseResponse getUserDetailAdmin(@AccessTokenUser User user, @PathVariable Long id) { + public BaseResponse getUserDetailAdmin(@AccessTokenUser User user, + @PathVariable Long id) { val data = adminService.findUserDetail(user.getId(), id); return BaseResponse.success(READ_USER_DETAIL_ADMIN_SUCCESS, data); } @@ -86,9 +91,10 @@ public BaseResponse deleteUser(@AccessTokenUser User user, @RequestParam Long us } @GetMapping("/cooldown") - public BaseResponse getCooldownAdmin(@AccessTokenUser User user, @RequestParam Integer page, + public BaseResponse getCooldownAdmin(@AccessTokenUser User user, + @RequestParam Integer page, @Nullable @RequestParam String yelloId) { - val data = yelloId == null + val data = yelloId==null ? adminService.findCooldown(user.getId(), createPageableLimitTen(page)) : adminService.findCooldownContaining(user.getId(), createPageableLimitTen(page), yelloId); @@ -109,7 +115,8 @@ public BaseResponse getQuestionAdmin(@AccessTokenUser Use } @GetMapping("/question/{id}") - public BaseResponse getQuestionDetailAdmin(@AccessTokenUser User user, + public BaseResponse getQuestionDetailAdmin( + @AccessTokenUser User user, @PathVariable Long id) { val data = adminService.findQuestionDetail(user.getId(), id); return BaseResponse.success(READ_QUESTION_DETAIL_ADMIN_SUCCESS, data); @@ -129,4 +136,12 @@ public BaseResponse deleteQuestion(@AccessTokenUser User user, @RequestParam Lon adminService.deleteQuestion(user.getId(), questionId); return BaseResponse.success(DELETE_QUESTION_ADMIN_SUCCESS); } + + @PostMapping("/notification") + public BaseResponse postCustomNotificationSendAdmin(@AccessTokenUser User user, + @RequestBody NotificationCustomMessage request) { + val data = notificationService.adminSendCustomNotification(user.getId(), request); + + return BaseResponse.success(CREATE_VOTE_SUCCESS, data); + } } diff --git a/src/main/java/com/yello/server/domain/admin/dto/response/AdminUserContentVO.java b/src/main/java/com/yello/server/domain/admin/dto/response/AdminUserContentVO.java index 62d9fdda..af13691f 100644 --- a/src/main/java/com/yello/server/domain/admin/dto/response/AdminUserContentVO.java +++ b/src/main/java/com/yello/server/domain/admin/dto/response/AdminUserContentVO.java @@ -2,7 +2,7 @@ import static com.yello.server.global.common.factory.TimeFactory.toDateFormattedString; -import com.yello.server.domain.group.entity.School; +import com.yello.server.domain.group.entity.UserGroup; import com.yello.server.domain.user.entity.User; import lombok.Builder; @@ -18,7 +18,7 @@ public record AdminUserContentVO( ) { public static AdminUserContentVO of(User user) { - final School userGroup = user.getGroup(); + final UserGroup userGroup = user.getGroup(); return AdminUserContentVO.builder() .id(user.getId()) diff --git a/src/main/java/com/yello/server/domain/admin/service/AdminService.java b/src/main/java/com/yello/server/domain/admin/service/AdminService.java index 3e6e8db3..5f07c431 100644 --- a/src/main/java/com/yello/server/domain/admin/service/AdminService.java +++ b/src/main/java/com/yello/server/domain/admin/service/AdminService.java @@ -88,7 +88,8 @@ public AdminUserResponse findUser(Long adminId, Pageable page) { return AdminUserResponse.of(totalCount, list); } - public AdminUserResponse findUserContaining(Long adminId, Pageable page, String field, String value) { + public AdminUserResponse findUserContaining(Long adminId, Pageable page, String field, + String value) { // exception final User admin = userRepository.getById(adminId); userAdminRepository.getByUser(admin); @@ -185,16 +186,18 @@ public AdminCooldownResponse findCooldown(Long adminId, Pageable page) { return AdminCooldownResponse.of(totalCount, list); } - public AdminCooldownResponse findCooldownContaining(Long adminId, Pageable page, String yelloId) { + public AdminCooldownResponse findCooldownContaining(Long adminId, Pageable page, + String yelloId) { // exception final User admin = userRepository.getById(adminId); userAdminRepository.getByUser(admin); // logic final Long totalCount = cooldownRepository.countAllByYelloIdContaining(yelloId); - final List list = cooldownRepository.findAllContaining(page, yelloId).stream() - .map(AdminCooldownContentVO::of) - .toList(); + final List list = + cooldownRepository.findAllContaining(page, yelloId).stream() + .map(AdminCooldownContentVO::of) + .toList(); return AdminCooldownResponse.of(totalCount, list); } @@ -245,8 +248,10 @@ public List createVote(Long adminId, Long questionId, AdminQuestionVoteReq // logic final List result = new ArrayList<>(); request.voteContentList().forEach((voteContent -> { - final Optional sender = userRepository.findByIdNotFiltered(voteContent.senderId()); - final Optional receiver = userRepository.findByIdNotFiltered(voteContent.receiverId()); + final Optional sender = + userRepository.findByIdNotFiltered(voteContent.senderId()); + final Optional receiver = + userRepository.findByIdNotFiltered(voteContent.receiverId()); if (sender.isPresent() && receiver.isPresent()) { final Vote vote = Vote.createVote( diff --git a/src/main/java/com/yello/server/domain/authorization/controller/AuthController.java b/src/main/java/com/yello/server/domain/authorization/controller/AuthController.java index 17ae8912..93df7e50 100644 --- a/src/main/java/com/yello/server/domain/authorization/controller/AuthController.java +++ b/src/main/java/com/yello/server/domain/authorization/controller/AuthController.java @@ -5,8 +5,8 @@ import static com.yello.server.global.common.SuccessCode.LOGIN_SUCCESS; import static com.yello.server.global.common.SuccessCode.ONBOARDING_FRIENDS_SUCCESS; import static com.yello.server.global.common.SuccessCode.RE_ISSUE_TOKEN_AUTH_SUCCESS; -import static com.yello.server.global.common.SuccessCode.SCHOOL_NAME_SEARCH_SCHOOL_SUCCESS; import static com.yello.server.global.common.SuccessCode.SIGN_UP_SUCCESS; +import static com.yello.server.global.common.SuccessCode.UNIVERSITY_NAME_SEARCH_USER_GROUP_SUCCESS; import static com.yello.server.global.common.SuccessCode.YELLOID_VALIDATION_SUCCESS; import static com.yello.server.global.common.factory.PaginationFactory.createPageable; @@ -21,6 +21,7 @@ import com.yello.server.domain.authorization.dto.response.OnBoardingFriendResponse; import com.yello.server.domain.authorization.dto.response.SignUpResponse; import com.yello.server.domain.authorization.service.AuthService; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.global.common.annotation.ServiceToken; import com.yello.server.global.common.dto.BaseResponse; import com.yello.server.infrastructure.slack.annotation.SlackSignUpNotification; @@ -72,12 +73,12 @@ public BaseResponse postFriendList( } @GetMapping("/group/univ/name") - public BaseResponse getSchoolList( + public BaseResponse getUniversityList( @NotNull @RequestParam("keyword") String keyword, @NotNull @RequestParam("page") Integer page ) { - val data = authService.findSchoolsByKeyword(keyword, createPageable(page)); - return BaseResponse.success(SCHOOL_NAME_SEARCH_SCHOOL_SUCCESS, data); + val data = authService.findGroupNameContaining(keyword, UserGroupType.UNIVERSITY, createPageable(page)); + return BaseResponse.success(UNIVERSITY_NAME_SEARCH_USER_GROUP_SUCCESS, data); } @GetMapping("/group/univ/department") @@ -86,7 +87,8 @@ public BaseResponse getDepartmentList( @NotNull @RequestParam("keyword") String keyword, @NotNull @RequestParam("page") Integer page ) { - val data = authService.findDepartmentsByKeyword(schoolName, keyword, createPageable(page)); + val data = authService.findGroupDepartmentBySchoolNameContaining(schoolName, keyword, UserGroupType.UNIVERSITY, + createPageable(page)); return BaseResponse.success(DEPARTMENT_NAME_SEARCH_BY_SCHOOL_NAME_SCHOOL_SUCCESS, data); } @@ -101,8 +103,8 @@ public BaseResponse getHighSchoolList( @NotNull @RequestParam("keyword") String keyword, @NotNull @RequestParam("page") Integer page ) { - val data = authService.getHighSchoolList(keyword, createPageable(page)); - return BaseResponse.success(SCHOOL_NAME_SEARCH_SCHOOL_SUCCESS, data); + val data = authService.findGroupNameContaining(keyword, UserGroupType.HIGH_SCHOOL, createPageable(page)); + return BaseResponse.success(UNIVERSITY_NAME_SEARCH_USER_GROUP_SUCCESS, data); } @GetMapping("/group/high/class") @@ -110,7 +112,6 @@ public BaseResponse getHighSchoolClassName( @NotNull @RequestParam("name") String schoolName, @NotNull @RequestParam("keyword") String keyword ) { - System.out.println("sfsdfsdfs"); val data = authService.getHighSchoolClassName(schoolName, keyword); return BaseResponse.success(CLASS_NAME_SEARCH_BY_SCHOOL_NAME_SCHOOL_SUCCESS, data); } diff --git a/src/main/java/com/yello/server/domain/authorization/dto/response/ClassNameSearchResponse.java b/src/main/java/com/yello/server/domain/authorization/dto/response/ClassNameSearchResponse.java index 26e7588a..de7f709a 100644 --- a/src/main/java/com/yello/server/domain/authorization/dto/response/ClassNameSearchResponse.java +++ b/src/main/java/com/yello/server/domain/authorization/dto/response/ClassNameSearchResponse.java @@ -1,6 +1,6 @@ package com.yello.server.domain.authorization.dto.response; -import com.yello.server.domain.group.entity.School; +import com.yello.server.domain.group.entity.UserGroup; import lombok.Builder; @Builder @@ -8,9 +8,9 @@ public record ClassNameSearchResponse( Long groupId ) { - public static ClassNameSearchResponse of(School school) { + public static ClassNameSearchResponse of(UserGroup userGroup) { return ClassNameSearchResponse.builder() - .groupId(school.getId()) + .groupId(userGroup.getId()) .build(); } } diff --git a/src/main/java/com/yello/server/domain/authorization/dto/response/DepartmentInfo.java b/src/main/java/com/yello/server/domain/authorization/dto/response/DepartmentInfo.java index 1052daad..57b9925b 100644 --- a/src/main/java/com/yello/server/domain/authorization/dto/response/DepartmentInfo.java +++ b/src/main/java/com/yello/server/domain/authorization/dto/response/DepartmentInfo.java @@ -1,6 +1,6 @@ package com.yello.server.domain.authorization.dto.response; -import com.yello.server.domain.group.entity.School; +import com.yello.server.domain.group.entity.UserGroup; import lombok.Builder; @Builder @@ -9,10 +9,10 @@ public record DepartmentInfo( String departmentName ) { - public static DepartmentInfo of(School school) { + public static DepartmentInfo of(UserGroup userGroup) { return DepartmentInfo.builder() - .groupId(school.getId()) - .departmentName(school.getDepartmentName()) + .groupId(userGroup.getId()) + .departmentName(userGroup.getSubGroupName()) .build(); } } diff --git a/src/main/java/com/yello/server/domain/authorization/dto/response/DepartmentSearchResponse.java b/src/main/java/com/yello/server/domain/authorization/dto/response/DepartmentSearchResponse.java index 60709890..2c0843c4 100644 --- a/src/main/java/com/yello/server/domain/authorization/dto/response/DepartmentSearchResponse.java +++ b/src/main/java/com/yello/server/domain/authorization/dto/response/DepartmentSearchResponse.java @@ -1,6 +1,6 @@ package com.yello.server.domain.authorization.dto.response; -import com.yello.server.domain.group.entity.School; +import com.yello.server.domain.group.entity.UserGroup; import java.util.List; import lombok.Builder; @@ -10,8 +10,8 @@ public record DepartmentSearchResponse( List groupList ) { - public static DepartmentSearchResponse of(int totalCount, List schoolList) { - List departmentInfoList = schoolList.stream() + public static DepartmentSearchResponse of(int totalCount, List userGroupList) { + List departmentInfoList = userGroupList.stream() .map(DepartmentInfo::of) .toList(); diff --git a/src/main/java/com/yello/server/domain/authorization/service/AuthService.java b/src/main/java/com/yello/server/domain/authorization/service/AuthService.java index 15be436a..f65badfa 100644 --- a/src/main/java/com/yello/server/domain/authorization/service/AuthService.java +++ b/src/main/java/com/yello/server/domain/authorization/service/AuthService.java @@ -3,6 +3,7 @@ import static com.yello.server.global.common.ErrorCode.TOKEN_ALL_EXPIRED_AUTH_EXCEPTION; import static com.yello.server.global.common.ErrorCode.TOKEN_NOT_EXPIRED_AUTH_EXCEPTION; import static com.yello.server.global.common.ErrorCode.YELLOID_REQUIRED_EXCEPTION; +import static com.yello.server.global.common.util.ConstantUtil.RECOMMEND_POINT; import com.yello.server.domain.authorization.dto.ServiceTokenVO; import com.yello.server.domain.authorization.dto.kakao.KakaoTokenInfo; @@ -22,8 +23,9 @@ import com.yello.server.domain.friend.entity.Friend; import com.yello.server.domain.friend.repository.FriendRepository; import com.yello.server.domain.friend.service.FriendManager; -import com.yello.server.domain.group.entity.School; -import com.yello.server.domain.group.repository.SchoolRepository; +import com.yello.server.domain.group.entity.UserGroup; +import com.yello.server.domain.group.entity.UserGroupType; +import com.yello.server.domain.group.repository.UserGroupRepository; import com.yello.server.domain.user.entity.User; import com.yello.server.domain.user.repository.UserRepository; import com.yello.server.domain.vote.service.VoteManager; @@ -50,7 +52,7 @@ public class AuthService { private final UserRepository userRepository; - private final SchoolRepository schoolRepository; + private final UserGroupRepository userGroupRepository; private final FriendRepository friendRepository; private final CooldownRepository cooldownRepository; private final MessageQueueRepository messageQueueRepository; @@ -87,7 +89,7 @@ public Boolean isYelloIdDuplicated(String yelloId) { @Transactional public SignUpResponse signUp(SignUpRequest signUpRequest) { authManager.validateSignupRequest(signUpRequest); - final School group = schoolRepository.getById(signUpRequest.groupId()); + final UserGroup group = userGroupRepository.getById(signUpRequest.groupId()); final User newUser = userRepository.save(User.of(signUpRequest, group)); newUser.setDeviceToken(signUpRequest.deviceToken()); @@ -104,13 +106,13 @@ public SignUpResponse signUp(SignUpRequest signUpRequest) { @Transactional public void recommendUser(String recommendYelloId, String userYelloId) { - if (recommendYelloId!=null && !recommendYelloId.isEmpty()) { + if (recommendYelloId != null && !recommendYelloId.isEmpty()) { User recommendedUser = userRepository.getByYelloId(recommendYelloId); User user = userRepository.getByYelloId(userYelloId); - recommendedUser.increaseRecommendCount(); - recommendedUser.increaseRecommendPoint(); - user.increaseRecommendPoint(); + recommendedUser.addRecommendCount(1L); + recommendedUser.addPoint(RECOMMEND_POINT); + user.addPoint(RECOMMEND_POINT); notificationService.sendRecommendNotification(user, recommendedUser); @@ -148,19 +150,24 @@ public OnBoardingFriendResponse findOnBoardingFriends(OnBoardingFriendRequest fr return OnBoardingFriendResponse.of(kakaoFriends.size(), pageList); } - public GroupNameSearchResponse findSchoolsByKeyword(String keyword, Pageable pageable) { - int totalCount = schoolRepository.countDistinctSchoolNameContaining(keyword); - final List nameList = schoolRepository.findDistinctSchoolNameContaining(keyword, - pageable); + public GroupNameSearchResponse findGroupNameContaining(String keyword, UserGroupType userGroupType, + Pageable pageable) { + int totalCount = userGroupRepository.countDistinctGroupNameContaining(keyword, userGroupType); + final List nameList = userGroupRepository.findDistinctGroupNameContaining(keyword, userGroupType, + pageable) + .stream() + .toList(); + return GroupNameSearchResponse.of(totalCount, nameList); } - public DepartmentSearchResponse findDepartmentsByKeyword(String schoolName, String keyword, - Pageable pageable) { - int totalCount = schoolRepository.countAllBySchoolNameContaining(schoolName, keyword); - final List schoolResult = schoolRepository.findAllBySchoolNameContaining(schoolName, - keyword, pageable); - return DepartmentSearchResponse.of(totalCount, schoolResult); + public DepartmentSearchResponse findGroupDepartmentBySchoolNameContaining(String schoolName, String keyword, + UserGroupType userGroupType, Pageable pageable) { + int totalCount = userGroupRepository.countAllByGroupNameContaining(schoolName, keyword, userGroupType); + final List userGroupResult = userGroupRepository.findAllByGroupNameContaining(schoolName, keyword, + userGroupType, pageable); + + return DepartmentSearchResponse.of(totalCount, userGroupResult); } @Transactional @@ -181,16 +188,9 @@ public ServiceTokenVO reIssueToken(@NotNull ServiceTokenVO tokens) { throw new NotExpiredTokenForbiddenException(TOKEN_NOT_EXPIRED_AUTH_EXCEPTION); } - public GroupNameSearchResponse getHighSchoolList(String keyword, Pageable pageable) { - int totalCount = schoolRepository.countDistinctHighSchoolNameContaining(keyword); - final List nameList = schoolRepository.findDistinctHighSchoolNameContaining(keyword, - pageable); - return GroupNameSearchResponse.of(totalCount, nameList); - } - - public ClassNameSearchResponse getHighSchoolClassName(String schoolName, String keyword) { - School school = - schoolRepository.findHighSchoolIdBySchoolNameAndClassName(schoolName, keyword); - return ClassNameSearchResponse.of(school); + public ClassNameSearchResponse getHighSchoolClassName(String schoolName, String className) { + UserGroup userGroup = + userGroupRepository.getByGroupNameAndSubGroupName(schoolName, className, UserGroupType.HIGH_SCHOOL); + return ClassNameSearchResponse.of(userGroup); } } diff --git a/src/main/java/com/yello/server/domain/friend/dto/response/FriendResponse.java b/src/main/java/com/yello/server/domain/friend/dto/response/FriendResponse.java index fccb2c41..17d8aa0a 100644 --- a/src/main/java/com/yello/server/domain/friend/dto/response/FriendResponse.java +++ b/src/main/java/com/yello/server/domain/friend/dto/response/FriendResponse.java @@ -1,6 +1,5 @@ package com.yello.server.domain.friend.dto.response; -import com.yello.server.domain.group.entity.SchoolType; import com.yello.server.domain.user.entity.User; import lombok.Builder; @@ -16,8 +15,7 @@ public static FriendResponse of(User user) { return FriendResponse.builder() .id(user.getId()) .name(user.getName()) - .group(user.getGroup().getSchoolType()==SchoolType.UNIVERSITY ? user.groupString() - : user.highSchoolString()) + .group(user.toGroupString()) .profileImage(user.getProfileImage()) .build(); } diff --git a/src/main/java/com/yello/server/domain/friend/dto/response/SearchFriendVO.java b/src/main/java/com/yello/server/domain/friend/dto/response/SearchFriendVO.java index f0133cbb..ad522731 100644 --- a/src/main/java/com/yello/server/domain/friend/dto/response/SearchFriendVO.java +++ b/src/main/java/com/yello/server/domain/friend/dto/response/SearchFriendVO.java @@ -1,6 +1,5 @@ package com.yello.server.domain.friend.dto.response; -import com.yello.server.domain.group.entity.SchoolType; import com.yello.server.domain.user.entity.User; import lombok.Builder; @@ -18,8 +17,7 @@ public static SearchFriendVO of(User user, Boolean isFriend) { return SearchFriendVO.builder() .id(user.getId()) .name(user.getName()) - .group(user.getGroup().getSchoolType()==SchoolType.UNIVERSITY ? user.groupString() - : user.highSchoolString()) + .group(user.toGroupString()) .profileImage(user.getProfileImage()) .yelloId(user.getYelloId()) .isFriend(isFriend) diff --git a/src/main/java/com/yello/server/domain/friend/service/FriendService.java b/src/main/java/com/yello/server/domain/friend/service/FriendService.java index 49e595cb..883898ea 100644 --- a/src/main/java/com/yello/server/domain/friend/service/FriendService.java +++ b/src/main/java/com/yello/server/domain/friend/service/FriendService.java @@ -84,7 +84,7 @@ public RecommendFriendResponse findAllRecommendSchoolFriends(Pageable pageable, final User user = userRepository.getById(userId); List recommendFriends = - userRepository.findAllByGroupId(user.getGroup().getSchoolName()) + userRepository.findAllByGroupId(user.getGroup().getId()) .stream() .filter(target -> !userId.equals(target.getId())) .filter(target -> !friendRepository.existsByUserAndTarget(userId, target.getId())) @@ -131,12 +131,12 @@ public RecommendFriendResponse findAllRecommendKakaoFriends(Pageable pageable, L public SearchFriendResponse searchFriend(Long userId, Pageable pageable, String keyword) { final User user = userRepository.getById(userId); - final String groupName = user.getGroup().getSchoolName(); + final String groupName = user.getGroup().getGroupName(); List uuidList = Arrays.asList(YELLO_FEMALE, YELLO_MALE); List friendList = new ArrayList<>(); - if (keyword==null || keyword.trim().isEmpty()) { + if (keyword == null || keyword.trim().isEmpty()) { return SearchFriendResponse.of(0, Collections.emptyList()); } @@ -165,7 +165,7 @@ public SearchFriendResponse searchFriend(Long userId, Pageable pageable, public boolean isEnglish(String keyword) { for (char c : keyword.toCharArray()) { - if (Character.UnicodeBlock.of(c)!=UnicodeBlock.BASIC_LATIN) { + if (Character.UnicodeBlock.of(c) != UnicodeBlock.BASIC_LATIN) { return false; } } diff --git a/src/main/java/com/yello/server/domain/group/entity/School.java b/src/main/java/com/yello/server/domain/group/entity/School.java deleted file mode 100644 index 6cee4f7d..00000000 --- a/src/main/java/com/yello/server/domain/group/entity/School.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.yello.server.domain.group.entity; - -import javax.persistence.Column; -import javax.persistence.Convert; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Index; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.hibernate.annotations.ColumnDefault; - -@Getter -@Entity -@Builder -@AllArgsConstructor -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@Table( - indexes = { - @Index(name = "idx__school_name", columnList = "schoolName") - }, - uniqueConstraints = { - @UniqueConstraint( - name = "school_department_name_unique", - columnNames = {"schoolName", "departmentName"} - ), - } -) -public class School { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Column(nullable = false) - private String schoolName; - - @Column(nullable = false) - private String departmentName; - - @Column(nullable = false) - @Convert(converter = SchoolTypeConverter.class) - @ColumnDefault("UNIVERSITY") - private SchoolType schoolType; - - public static School of(String schoolName, String departmentName) { - return School.builder() - .schoolName(schoolName) - .departmentName(departmentName) - .build(); - } - - @Override - public String toString() { - return String.format("%s %s", schoolName, departmentName); - } -} diff --git a/src/main/java/com/yello/server/domain/group/entity/UserGroup.java b/src/main/java/com/yello/server/domain/group/entity/UserGroup.java new file mode 100644 index 00000000..e795209b --- /dev/null +++ b/src/main/java/com/yello/server/domain/group/entity/UserGroup.java @@ -0,0 +1,69 @@ +package com.yello.server.domain.group.entity; + +import javax.persistence.Column; +import javax.persistence.Convert; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Index; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.ColumnDefault; + +@Getter +@Entity +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table( + indexes = { + @Index(name = "idx__group__name", columnList = "groupName") + }, + uniqueConstraints = { + @UniqueConstraint( + name = "user_group__sub_group_name__unique", + columnNames = {"groupName", "subGroupName"} + ), + } +) +public class UserGroup { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private String groupName; + + @Column(nullable = false) + private String subGroupName; + + @Column(nullable = false) + @Convert(converter = UserGroupTypeConverter.class) + @ColumnDefault("\"UNIVERSITY\"") + private UserGroupType userGroupType; + + public static UserGroup of(String groupName, String subGroupName, UserGroupType userGroupType) { + return UserGroup.builder() + .groupName(groupName) + .subGroupName(subGroupName) + .userGroupType(userGroupType) + .build(); + } + + @Override + public String toString() { + return switch (this.userGroupType) { + case UNIVERSITY -> String.format("%s %s", groupName, subGroupName); + case HIGH_SCHOOL -> String.format("%s %s반", groupName, subGroupName); + case MIDDLE_SCHOOL -> String.format("%s %s반", groupName, subGroupName); + case SOPT -> String.format("%s %s", groupName, subGroupName); + }; + } +} diff --git a/src/main/java/com/yello/server/domain/group/entity/SchoolType.java b/src/main/java/com/yello/server/domain/group/entity/UserGroupType.java similarity index 59% rename from src/main/java/com/yello/server/domain/group/entity/SchoolType.java rename to src/main/java/com/yello/server/domain/group/entity/UserGroupType.java index 8f944f25..6bb26723 100644 --- a/src/main/java/com/yello/server/domain/group/entity/SchoolType.java +++ b/src/main/java/com/yello/server/domain/group/entity/UserGroupType.java @@ -7,18 +7,20 @@ @Getter @RequiredArgsConstructor -public enum SchoolType { +public enum UserGroupType { UNIVERSITY("UNIVERSITY"), - HIGHSCHOOL("HIGH_SCHOOL"); + HIGH_SCHOOL("HIGH_SCHOOL"), + MIDDLE_SCHOOL("MIDDLE_SCHOOL"), + SOPT("SOPT"); private final String intial; - public static SchoolType fromCode(String dbData) { - return Arrays.stream(SchoolType.values()) + public static UserGroupType fromCode(String dbData) { + return Arrays.stream(UserGroupType.values()) .filter(v -> v.getIntial().equals(dbData)) .findAny() .orElseThrow(() -> new IllegalArgumentException( - MessageFormat.format("존재하지 않는 학교타입 입니다. {0}", dbData))); + MessageFormat.format("존재하지 않는 그룹 타입 입니다. {0}", dbData))); } public String intial() { diff --git a/src/main/java/com/yello/server/domain/group/entity/SchoolTypeConverter.java b/src/main/java/com/yello/server/domain/group/entity/UserGroupTypeConverter.java similarity index 56% rename from src/main/java/com/yello/server/domain/group/entity/SchoolTypeConverter.java rename to src/main/java/com/yello/server/domain/group/entity/UserGroupTypeConverter.java index 92f28ad9..09527fc0 100644 --- a/src/main/java/com/yello/server/domain/group/entity/SchoolTypeConverter.java +++ b/src/main/java/com/yello/server/domain/group/entity/UserGroupTypeConverter.java @@ -6,23 +6,23 @@ @Converter @Log4j2 -public class SchoolTypeConverter implements AttributeConverter { +public class UserGroupTypeConverter implements AttributeConverter { @Override - public String convertToDatabaseColumn(SchoolType schoolType) { - if (schoolType==null) { + public String convertToDatabaseColumn(UserGroupType userGroupType) { + if (userGroupType == null) { return null; } - return schoolType.getIntial(); + return userGroupType.getIntial(); } @Override - public SchoolType convertToEntityAttribute(String dbData) { - if (dbData==null) { + public UserGroupType convertToEntityAttribute(String dbData) { + if (dbData == null) { return null; } try { - return SchoolType.fromCode(dbData); + return UserGroupType.fromCode(dbData); } catch (IllegalArgumentException exception) { log.error("failure to convert cause unexpected code" + dbData + exception); throw exception; diff --git a/src/main/java/com/yello/server/domain/group/repository/SchoolJpaRepository.java b/src/main/java/com/yello/server/domain/group/repository/SchoolJpaRepository.java deleted file mode 100644 index f6761ae9..00000000 --- a/src/main/java/com/yello/server/domain/group/repository/SchoolJpaRepository.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.yello.server.domain.group.repository; - -import com.yello.server.domain.group.entity.School; -import java.util.List; -import java.util.Optional; -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; - -public interface SchoolJpaRepository extends JpaRepository { - - @Query("select count (DISTINCT s.schoolName)from School s " + - "where s.schoolName " + - "like CONCAT('%',:schoolName,'%') " + - "and s.schoolType = 'UNIVERSITY'") - Integer countDistinctSchoolNameContaining(@Param("schoolName") String schoolName); - - @Query("select distinct(s.schoolName) from School s " + - "where s.schoolName " + - "like CONCAT('%',:schoolName,'%' )" + - "and s.schoolType = 'UNIVERSITY'") - List findDistinctSchoolNameContaining(@Param("schoolName") String schoolName, - Pageable pageable); - - @Query("select count(s) from School s " + - "where s.schoolName = :schoolName and s.departmentName " + - "like CONCAT('%',:departmentName,'%')") - Integer countAllBySchoolNameContaining(@Param("schoolName") String schoolName, - @Param("departmentName") String departmentName); - - @Query("select s from School s " + - "where s.schoolName = :schoolName and s.departmentName " + - "like CONCAT('%',:departmentName,'%')") - List findAllBySchoolNameContaining(@Param("schoolName") String schoolName, - @Param("departmentName") String departmentName, Pageable pageable); - - @Query("select count (DISTINCT s.schoolName)from School s " + - "where s.schoolName " + - "like CONCAT('%',:schoolName,'%') " + - "and s.schoolType = 'HIGH_SCHOOL'") - Integer countDistinctHighSchoolNameContaining(@Param("schoolName") String schoolName); - - @Query("select distinct(s.schoolName) from School s " + - "where s.schoolName " + - "like CONCAT('%',:schoolName,'%' )" + - "and s.schoolType = 'HIGH_SCHOOL'") - List findDistinctHighSchoolNameContaining(@Param("schoolName") String schoolName, - Pageable pageable); - - @Query("select s from School s " + - "where s.schoolName = :schoolName " + - "and s.departmentName = :className " + - "and s.schoolType = 'HIGH_SCHOOL'") - Optional findHighSchoolIdBySchoolNameAndClassName( - @Param("schoolName") String schoolName, @Param("className") String className); - - -} diff --git a/src/main/java/com/yello/server/domain/group/repository/SchoolRepository.java b/src/main/java/com/yello/server/domain/group/repository/SchoolRepository.java deleted file mode 100644 index c5d0c310..00000000 --- a/src/main/java/com/yello/server/domain/group/repository/SchoolRepository.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.yello.server.domain.group.repository; - -import com.yello.server.domain.group.entity.School; -import java.util.List; -import java.util.Optional; -import org.springframework.data.domain.Pageable; - -public interface SchoolRepository { - - School save(School school); - - School getById(Long id); - - Optional findById(Long id); - - Integer countDistinctSchoolNameContaining(String schoolName); - - List findDistinctSchoolNameContaining(String schoolName, Pageable pageable); - - Integer countAllBySchoolNameContaining(String schoolName, String departmentName); - - List findAllBySchoolNameContaining(String schoolName, String departmentName, - Pageable pageable); - - Integer countDistinctHighSchoolNameContaining(String schoolName); - - List findDistinctHighSchoolNameContaining(String schoolName, Pageable pageable); - - School findHighSchoolIdBySchoolNameAndClassName(String schoolName, String className); -} diff --git a/src/main/java/com/yello/server/domain/group/repository/SchoolRepositoryImpl.java b/src/main/java/com/yello/server/domain/group/repository/SchoolRepositoryImpl.java deleted file mode 100644 index 447a8fc9..00000000 --- a/src/main/java/com/yello/server/domain/group/repository/SchoolRepositoryImpl.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.yello.server.domain.group.repository; - -import static com.yello.server.global.common.ErrorCode.GROUPID_NOT_FOUND_GROUP_EXCEPTION; - -import com.yello.server.domain.group.entity.School; -import com.yello.server.domain.group.exception.GroupNotFoundException; -import java.util.List; -import java.util.Optional; -import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - -@Repository -@RequiredArgsConstructor -@Transactional(readOnly = true) -public class SchoolRepositoryImpl implements SchoolRepository { - - private final SchoolJpaRepository schoolJpaRepository; - - - @Override - public School save(School school) { - return schoolJpaRepository.save(school); - } - - @Override - public School getById(Long id) { - return schoolJpaRepository.findById(id) - .orElseThrow(() -> new GroupNotFoundException(GROUPID_NOT_FOUND_GROUP_EXCEPTION)); - } - - @Override - public Optional findById(Long id) { - return schoolJpaRepository.findById(id); - } - - @Override - public Integer countDistinctSchoolNameContaining(String schoolName) { - return schoolJpaRepository.countDistinctSchoolNameContaining(schoolName); - } - - @Override - public List findDistinctSchoolNameContaining(String schoolName, Pageable pageable) { - return schoolJpaRepository.findDistinctSchoolNameContaining(schoolName, pageable); - } - - @Override - public Integer countAllBySchoolNameContaining(String schoolName, String departmentName) { - return schoolJpaRepository.countAllBySchoolNameContaining(schoolName, departmentName); - } - - @Override - public List findAllBySchoolNameContaining(String schoolName, String departmentName, - Pageable pageable) { - return schoolJpaRepository.findAllBySchoolNameContaining(schoolName, departmentName, - pageable); - } - - @Override - public Integer countDistinctHighSchoolNameContaining(String schoolName) { - return schoolJpaRepository.countDistinctHighSchoolNameContaining(schoolName); - } - - @Override - public List findDistinctHighSchoolNameContaining(String schoolName, Pageable pageable) { - return schoolJpaRepository.findDistinctHighSchoolNameContaining(schoolName, pageable); - } - - @Override - public School findHighSchoolIdBySchoolNameAndClassName(String schoolName, - String className) { - return schoolJpaRepository.findHighSchoolIdBySchoolNameAndClassName(schoolName, className) - .orElseThrow(() -> new GroupNotFoundException(GROUPID_NOT_FOUND_GROUP_EXCEPTION)); - } -} diff --git a/src/main/java/com/yello/server/domain/group/repository/UserGroupJpaRepository.java b/src/main/java/com/yello/server/domain/group/repository/UserGroupJpaRepository.java new file mode 100644 index 00000000..1c154d99 --- /dev/null +++ b/src/main/java/com/yello/server/domain/group/repository/UserGroupJpaRepository.java @@ -0,0 +1,68 @@ +package com.yello.server.domain.group.repository; + +import com.yello.server.domain.group.entity.UserGroup; +import com.yello.server.domain.group.entity.UserGroupType; +import java.util.List; +import java.util.Optional; +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; + +public interface UserGroupJpaRepository extends JpaRepository { + + @Query("select count (distinct(s.groupName)) from UserGroup s " + + "where s.groupName " + + "like CONCAT('%',:groupName,'%' )" + + "and s.userGroupType = :userGroupType") + Integer countDistinctGroupNameContaining(@Param("groupName") String groupName, + @Param("userGroupType") UserGroupType userGroupType); + + @Query("select distinct s.groupName from UserGroup s " + + "where s.groupName " + + "like CONCAT('%',:groupName,'%' )" + + "and s.userGroupType = :userGroupType") + List findDistinctGroupNameContaining(@Param("groupName") String groupName, + @Param("userGroupType") UserGroupType userGroupType, + Pageable pageable); + + @Query("select count (s) from UserGroup s " + + "where s.groupName " + + "like CONCAT('%',:groupName,'%') " + + "and s.userGroupType = :userGroupType") + Integer countAllContaining(@Param("groupName") String groupName, + @Param("userGroupType") UserGroupType userGroupType); + + @Query("select s from UserGroup s " + + "where s.groupName " + + "like CONCAT('%',:groupName,'%' )" + + "and s.userGroupType = :userGroupType") + List findAllContaining(@Param("groupName") String groupName, + @Param("userGroupType") UserGroupType userGroupType, + Pageable pageable); + + @Query("select count (s) from UserGroup s " + + "where s.groupName = :groupName " + + "and s.subGroupName like CONCAT('%',:subGroupName,'%') " + + "and s.userGroupType = :userGroupType") + Integer countAllByGroupNameContaining(@Param("groupName") String groupName, + @Param("subGroupName") String subGroupName, + @Param("userGroupType") UserGroupType userGroupType); + + @Query("select s from UserGroup s " + + "where s.groupName = :groupName " + + "and s.subGroupName like CONCAT('%',:subGroupName,'%') " + + "and s.userGroupType = :userGroupType") + List findAllByGroupNameContaining(@Param("groupName") String groupName, + @Param("subGroupName") String subGroupName, + @Param("userGroupType") UserGroupType userGroupType, + Pageable pageable); + + @Query("select s from UserGroup s " + + "where s.groupName = :groupName " + + "and s.subGroupName = :subGroupName " + + "and s.userGroupType = :userGroupType") + Optional findByGroupNameAndSubGroupName( + @Param("groupName") String groupName, @Param("subGroupName") String subGroupName, + @Param("userGroupType") UserGroupType userGroupType); +} \ No newline at end of file diff --git a/src/main/java/com/yello/server/domain/group/repository/UserGroupRepository.java b/src/main/java/com/yello/server/domain/group/repository/UserGroupRepository.java new file mode 100644 index 00000000..f5d4f504 --- /dev/null +++ b/src/main/java/com/yello/server/domain/group/repository/UserGroupRepository.java @@ -0,0 +1,34 @@ +package com.yello.server.domain.group.repository; + +import com.yello.server.domain.group.entity.UserGroup; +import com.yello.server.domain.group.entity.UserGroupType; +import java.util.List; +import java.util.Optional; +import org.springframework.data.domain.Pageable; + +public interface UserGroupRepository { + + UserGroup save(UserGroup userGroup); + + UserGroup getById(Long id); + + Optional findById(Long id); + + Integer countDistinctGroupNameContaining(String groupName, UserGroupType userGroupType); + + List findDistinctGroupNameContaining(String groupName, UserGroupType userGroupType, Pageable pageable); + + Integer countAllContaining(String groupName, UserGroupType userGroupType); + + List findAllContaining(String groupName, UserGroupType userGroupType, Pageable pageable); + + Integer countAllByGroupNameContaining(String groupName, String subGroupName, UserGroupType userGroupType); + + List findAllByGroupNameContaining(String groupName, String subGroupName, UserGroupType userGroupType, + Pageable pageable); + + Optional findByGroupNameAndSubGroupName(String groupName, String subGroupName, + UserGroupType userGroupType); + + UserGroup getByGroupNameAndSubGroupName(String groupName, String subGroupName, UserGroupType userGroupType); +} diff --git a/src/main/java/com/yello/server/domain/group/repository/UserGroupRepositoryImpl.java b/src/main/java/com/yello/server/domain/group/repository/UserGroupRepositoryImpl.java new file mode 100644 index 00000000..f1612d82 --- /dev/null +++ b/src/main/java/com/yello/server/domain/group/repository/UserGroupRepositoryImpl.java @@ -0,0 +1,82 @@ +package com.yello.server.domain.group.repository; + +import static com.yello.server.global.common.ErrorCode.GROUPID_NOT_FOUND_GROUP_EXCEPTION; + +import com.yello.server.domain.group.entity.UserGroup; +import com.yello.server.domain.group.entity.UserGroupType; +import com.yello.server.domain.group.exception.GroupNotFoundException; +import java.util.List; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +@Repository +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class UserGroupRepositoryImpl implements UserGroupRepository { + + private final UserGroupJpaRepository userGroupJpaRepository; + + + @Override + public UserGroup save(UserGroup userGroup) { + return userGroupJpaRepository.save(userGroup); + } + + @Override + public UserGroup getById(Long id) { + return userGroupJpaRepository.findById(id) + .orElseThrow(() -> new GroupNotFoundException(GROUPID_NOT_FOUND_GROUP_EXCEPTION)); + } + + @Override + public Optional findById(Long id) { + return userGroupJpaRepository.findById(id); + } + + @Override + public Integer countDistinctGroupNameContaining(String groupName, UserGroupType userGroupType) { + return userGroupJpaRepository.countDistinctGroupNameContaining(groupName, userGroupType); + } + + @Override + public List findDistinctGroupNameContaining(String groupName, UserGroupType userGroupType, + Pageable pageable) { + return userGroupJpaRepository.findDistinctGroupNameContaining(groupName, userGroupType, pageable); + } + + @Override + public Integer countAllContaining(String groupName, UserGroupType userGroupType) { + return userGroupJpaRepository.countAllContaining(groupName, userGroupType); + } + + @Override + public List findAllContaining(String groupName, UserGroupType userGroupType, Pageable pageable) { + return userGroupJpaRepository.findAllContaining(groupName, userGroupType, pageable); + } + + @Override + public Integer countAllByGroupNameContaining(String groupName, String subGroupName, UserGroupType userGroupType) { + return userGroupJpaRepository.countAllByGroupNameContaining(groupName, subGroupName, userGroupType); + } + + @Override + public List findAllByGroupNameContaining(String groupName, String subGroupName, + UserGroupType userGroupType, Pageable pageable) { + return userGroupJpaRepository.findAllByGroupNameContaining(groupName, subGroupName, userGroupType, pageable); + } + + @Override + public Optional findByGroupNameAndSubGroupName(String groupName, String subGroupName, + UserGroupType userGroupType) { + return userGroupJpaRepository.findByGroupNameAndSubGroupName(groupName, subGroupName, userGroupType); + } + + @Override + public UserGroup getByGroupNameAndSubGroupName(String groupName, String subGroupName, UserGroupType userGroupType) { + return userGroupJpaRepository.findByGroupNameAndSubGroupName(groupName, subGroupName, userGroupType) + .orElseThrow(() -> new GroupNotFoundException(GROUPID_NOT_FOUND_GROUP_EXCEPTION)); + } +} diff --git a/src/main/java/com/yello/server/domain/purchase/dto/apple/AppleNotificationPayloadVO.java b/src/main/java/com/yello/server/domain/purchase/dto/apple/AppleNotificationPayloadVO.java index 0670e169..2137fade 100644 --- a/src/main/java/com/yello/server/domain/purchase/dto/apple/AppleNotificationPayloadVO.java +++ b/src/main/java/com/yello/server/domain/purchase/dto/apple/AppleNotificationPayloadVO.java @@ -5,17 +5,17 @@ @Builder public record AppleNotificationPayloadVO( String notificationType, - String subType, + String subtype, ApplePayloadDataVO data, String notificationUUID ) { - public static AppleNotificationPayloadVO of(String notificationType, String subType, + public static AppleNotificationPayloadVO of(String notificationType, String subtype, ApplePayloadDataVO data, String notificationUUID) { return AppleNotificationPayloadVO.builder() .notificationType(notificationType) - .subType(subType) + .subtype(subtype) .data(data) .notificationUUID(notificationUUID) .build(); diff --git a/src/main/java/com/yello/server/domain/purchase/service/PurchaseManagerImpl.java b/src/main/java/com/yello/server/domain/purchase/service/PurchaseManagerImpl.java index 7a6e7af7..67353feb 100644 --- a/src/main/java/com/yello/server/domain/purchase/service/PurchaseManagerImpl.java +++ b/src/main/java/com/yello/server/domain/purchase/service/PurchaseManagerImpl.java @@ -75,11 +75,9 @@ public AppleNotificationPayloadVO decodeApplePayload(String signedPayload) { Map jsonPayload = DecodeTokenFactory.decodeToken(signedPayload); ObjectMapper objectMapper = new ObjectMapper(); - System.out.println(jsonPayload + " ??????ddddd"); - String notificationType = jsonPayload.get("notificationType").toString(); - String subType = - (jsonPayload.get("subType")!=null) ? jsonPayload.get("subType").toString() : null; + String subtype = + (jsonPayload.get("subtype")!=null) ? jsonPayload.get("subtype").toString() : null; Map data = (Map) jsonPayload.get("data"); String notificationUUID = @@ -88,7 +86,7 @@ public AppleNotificationPayloadVO decodeApplePayload(String signedPayload) { ApplePayloadDataVO payloadVO = objectMapper.convertValue(data, ApplePayloadDataVO.class); - return AppleNotificationPayloadVO.of(notificationType, subType, payloadVO, + return AppleNotificationPayloadVO.of(notificationType, subtype, payloadVO, notificationUUID); } @@ -114,7 +112,7 @@ public void changeSubscriptionStatus(AppleNotificationPayloadVO payloadVO) { User user = purchase.getUser(); - if (payloadVO.subType().equals(ConstantUtil.APPLE_SUBTYPE_AUTO_RENEW_DISABLED) + if (payloadVO.subtype().equals(ConstantUtil.APPLE_SUBTYPE_AUTO_RENEW_DISABLED) && !user.getSubscribe().equals(Subscribe.NORMAL)) { user.setSubscribe(Subscribe.NORMAL); } @@ -146,9 +144,7 @@ public void refundAppleInApp(AppleNotificationPayloadVO payloadVO) { public void validateTicketCount(int ticketCount, User user) { if (user.getTicketCount() >= ticketCount) { - user.setTicketCount(-Math.abs(ticketCount)); + user.addTicketCount(-Math.abs(ticketCount)); } } - - } diff --git a/src/main/java/com/yello/server/domain/purchase/service/PurchaseService.java b/src/main/java/com/yello/server/domain/purchase/service/PurchaseService.java index 3e49e7eb..69e55106 100644 --- a/src/main/java/com/yello/server/domain/purchase/service/PurchaseService.java +++ b/src/main/java/com/yello/server/domain/purchase/service/PurchaseService.java @@ -84,7 +84,7 @@ public UserSubscribeNeededResponse getUserSubscribe(User user, LocalDateTime tim final Optional mostRecentPurchase = purchaseRepository.findTopByUserAndProductTypeOrderByCreatedAtDesc( user, ProductType.YELLO_PLUS); - final Boolean isSubscribeNeeded = user.getSubscribe()==Subscribe.CANCELED + final Boolean isSubscribeNeeded = user.getSubscribe() == Subscribe.CANCELED && mostRecentPurchase.isPresent() && Duration.between(mostRecentPurchase.get().getCreatedAt(), time).getSeconds() < 1 * 24 * 60 * 60; @@ -101,7 +101,7 @@ public void verifyAppleSubscriptionTransaction(Long userId, purchaseManager.handleAppleTransactionError(verifyReceiptResponse, request.transactionId()); - if (user.getSubscribe()==Subscribe.ACTIVE) { + if (user.getSubscribe() == Subscribe.ACTIVE) { throw new SubscriptionConflictException(SUBSCRIBE_ACTIVE_EXCEPTION); } @@ -110,7 +110,7 @@ public void verifyAppleSubscriptionTransaction(Long userId, } purchaseManager.createSubscribe(user, Gateway.APPLE, request.transactionId()); - user.setTicketCount(3); + user.addTicketCount(3); } @Transactional @@ -126,17 +126,17 @@ public void verifyAppleTicketTransaction(Long userId, AppleTransaction request) case ONE_TICKET_ID: purchaseManager.createTicket(user, ProductType.ONE_TICKET, Gateway.APPLE, request.transactionId()); - user.setTicketCount(1); + user.addTicketCount(1); break; case TWO_TICKET_ID: purchaseManager.createTicket(user, ProductType.TWO_TICKET, Gateway.APPLE, request.transactionId()); - user.setTicketCount(2); + user.addTicketCount(2); break; case FIVE_TICKET_ID: purchaseManager.createTicket(user, ProductType.FIVE_TICKET, Gateway.APPLE, request.transactionId()); - user.setTicketCount(5); + user.addTicketCount(5); break; default: throw new PurchaseException(NOT_FOUND_TRANSACTION_EXCEPTION); @@ -149,7 +149,7 @@ public GoogleSubscriptionGetResponse verifyGoogleSubscriptionTransaction(Long us User user = userRepository.getById(userId); // exception - if (user.getSubscribe()!=Subscribe.NORMAL) { + if (user.getSubscribe() != Subscribe.NORMAL) { throw new PurchaseConflictException(GOOGLE_SUBSCRIPTIONS_FORBIDDEN_EXCEPTION); } @@ -195,7 +195,7 @@ public GoogleSubscriptionGetResponse verifyGoogleSubscriptionTransaction(Long us GOOGLE_SUBSCRIPTION_TRANSACTION_EXPIRED_EXCEPTION); } case ConstantUtil.GOOGLE_PURCHASE_SUBSCRIPTION_CANCELED -> { - if (user.getSubscribe()==Subscribe.CANCELED) { + if (user.getSubscribe() == Subscribe.CANCELED) { throw new GoogleBadRequestException( GOOGLE_SUBSCRIPTION_DUPLICATED_CANCEL_EXCEPTION); } else { @@ -206,7 +206,7 @@ public GoogleSubscriptionGetResponse verifyGoogleSubscriptionTransaction(Long us case ConstantUtil.GOOGLE_PURCHASE_SUBSCRIPTION_ACTIVE -> { final Purchase subscribe = purchaseManager.createSubscribe(user, Gateway.GOOGLE, request.orderId()); - user.setTicketCount(3); + user.addTicketCount(3); subscribe.setTransactionId(request.orderId()); } } @@ -249,7 +249,7 @@ public GoogleTicketGetResponse verifyGoogleTicketTransaction(Long userId, throw new GoogleTokenServerErrorException(GOOGLE_TOKEN_SERVER_EXCEPTION); } - if (inAppResponse.getBody().purchaseState()==0) { + if (inAppResponse.getBody().purchaseState() == 0) { purchaseRepository.findByTransactionId(inAppResponse.getBody().orderId()) .ifPresent(action -> { throw new PurchaseConflictException( @@ -259,7 +259,7 @@ public GoogleTicketGetResponse verifyGoogleTicketTransaction(Long userId, Purchase ticket = purchaseManager.createTicket(user, getProductType(request.productId()), Gateway.GOOGLE, request.orderId()); - user.setTicketCount(getTicketAmount(request.productId()) * request.quantity()); + user.addTicketCount(getTicketAmount(request.productId()) * request.quantity()); ticket.setTransactionId(inAppResponse.getBody().orderId()); } else { throw new GoogleBadRequestException(GOOGLE_INAPP_BAD_REQUEST_EXCEPTION); diff --git a/src/main/java/com/yello/server/domain/user/dto/response/UserDetailResponse.java b/src/main/java/com/yello/server/domain/user/dto/response/UserDetailResponse.java index 1bd4e9b9..f70b9341 100644 --- a/src/main/java/com/yello/server/domain/user/dto/response/UserDetailResponse.java +++ b/src/main/java/com/yello/server/domain/user/dto/response/UserDetailResponse.java @@ -1,6 +1,5 @@ package com.yello.server.domain.user.dto.response; -import com.yello.server.domain.group.entity.SchoolType; import com.yello.server.domain.user.entity.User; import lombok.Builder; @@ -20,8 +19,7 @@ public static UserDetailResponse of(User user, Integer yelloCount, Integer frien return UserDetailResponse.builder() .userId(user.getId()) .name(user.getName()) - .group(user.getGroup().getSchoolType()==SchoolType.UNIVERSITY ? user.groupString() - : user.highSchoolString()) + .group(user.toGroupString()) .profileImageUrl(user.getProfileImage()) .yelloId(user.getYelloId()) .yelloCount(yelloCount) diff --git a/src/main/java/com/yello/server/domain/user/dto/response/UserResponse.java b/src/main/java/com/yello/server/domain/user/dto/response/UserResponse.java index 576c30ee..4377d669 100644 --- a/src/main/java/com/yello/server/domain/user/dto/response/UserResponse.java +++ b/src/main/java/com/yello/server/domain/user/dto/response/UserResponse.java @@ -1,6 +1,5 @@ package com.yello.server.domain.user.dto.response; -import com.yello.server.domain.group.entity.SchoolType; import com.yello.server.domain.user.entity.User; import lombok.Builder; @@ -19,8 +18,7 @@ public static UserResponse of(User user, Integer yelloCount, Integer friendCount return UserResponse.builder() .userId(user.getId()) .name(user.getName()) - .group(user.getGroup().getSchoolType()==SchoolType.UNIVERSITY ? user.groupString() - : user.highSchoolString()) + .group(user.toGroupString()) .profileImageUrl(user.getProfileImage()) .yelloId(user.getYelloId()) .yelloCount(yelloCount) diff --git a/src/main/java/com/yello/server/domain/user/entity/User.java b/src/main/java/com/yello/server/domain/user/entity/User.java index de3d36b3..74aa3dbc 100644 --- a/src/main/java/com/yello/server/domain/user/entity/User.java +++ b/src/main/java/com/yello/server/domain/user/entity/User.java @@ -1,10 +1,8 @@ package com.yello.server.domain.user.entity; -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.domain.group.entity.UserGroup; import com.yello.server.global.common.dto.AuditingTimeEntity; import java.time.LocalDateTime; import java.util.Objects; @@ -87,7 +85,7 @@ public class User extends AuditingTimeEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "groupId") - private School group; + private UserGroup group; @Column(nullable = false) private int groupAdmissionYear; @@ -100,6 +98,7 @@ public class User extends AuditingTimeEntity { @Column(nullable = false) private Integer ticketCount; + @Getter @Column(name = "device_token") private String deviceToken; @@ -108,7 +107,7 @@ public class User extends AuditingTimeEntity { @Convert(converter = SubscribeConverter.class) private Subscribe subscribe; - public static User of(SignUpRequest signUpRequest, School group) { + public static User of(SignUpRequest signUpRequest, UserGroup group) { return User.builder() .recommendCount(0L) .name(signUpRequest.name()) @@ -135,6 +134,10 @@ public void delete() { this.deviceToken = null; } + public void renew() { + this.deletedAt = null; + } + public void update(AdminUserDetailRequest request) { this.recommendCount = request.recommendCount(); this.name = request.name(); @@ -151,41 +154,45 @@ public void update(AdminUserDetailRequest request) { this.subscribe = request.subscribe(); } - public void renew() { - this.deletedAt = null; - } - - public String groupString() { - return this.group.toString() + " " + this.getGroupAdmissionYear() + "학번"; - } - - public String highSchoolString() { - return this.group.getSchoolName() + " " + this.getGroupAdmissionYear() + "학년 " - + this.group.getDepartmentName() + "반"; + public void addPoint(Integer point) { + if (this.getSubscribe() == Subscribe.NORMAL) { + this.point += point; + return; + } + this.point += point * 2; } - public void increaseRecommendCount() { - this.recommendCount += 1; + public void subPoint(Integer point) { + this.point -= point; } - public void increaseRecommendPoint() { - this.point += RECOMMEND_POINT; + public void addRecommendCount(Long recommendCount) { + this.recommendCount += recommendCount; } - public void plusPoint(Integer point) { - if (this.getSubscribe()==Subscribe.NORMAL) { - this.point += point; - return; - } - this.point += point * 2; + public void addTicketCount(int ticketCount) { + this.ticketCount += ticketCount; } - public void minusPoint(Integer point) { - this.point -= point; + public String toGroupString() { + /** + * TODO 고등학교 중학교 처참함. groupAdmissionYear를 '입학년도'로 볼 것이 아닌, + * TODO UserGroup과 종속된 User 하나에게 주어지는 '고유한 값'(1:1 특성)으로 보아야함. + * TODO '학번', '번호', 등은 해당 유저의 각각 대학교, 고등학교이라는 그룹 내에서 가지는 유저만의 (일부 고유 식별 가능한) 특성임. + * */ + + return switch (this.group.getUserGroupType()) { + case UNIVERSITY -> String.format("%s %s학번", this.group.toString(), this.groupAdmissionYear); + case HIGH_SCHOOL -> String.format("%s %s학년 %s반", this.group.getGroupName(), this.groupAdmissionYear, + this.group.getSubGroupName()); + case MIDDLE_SCHOOL -> String.format("%s %s학년 %s반", this.group.getGroupName(), this.groupAdmissionYear, + this.group.getSubGroupName()); + case SOPT -> String.format("%s", this.group.toString()); + }; } - public String getDeviceToken() { - return this.deviceToken; + public void setSubscribe(Subscribe subscribe) { + this.subscribe = subscribe; } public void setDeviceToken(String deviceToken) { @@ -195,13 +202,4 @@ public void setDeviceToken(String deviceToken) { this.deviceToken = deviceToken; } } - - public void setSubscribe(Subscribe subscribe) { - this.subscribe = subscribe; - } - - public void setTicketCount(int ticketCount) { - this.ticketCount += ticketCount; - } - } diff --git a/src/main/java/com/yello/server/domain/user/repository/UserJpaRepository.java b/src/main/java/com/yello/server/domain/user/repository/UserJpaRepository.java index 978af680..2ac60c6a 100644 --- a/src/main/java/com/yello/server/domain/user/repository/UserJpaRepository.java +++ b/src/main/java/com/yello/server/domain/user/repository/UserJpaRepository.java @@ -42,14 +42,14 @@ public interface UserJpaRepository extends JpaRepository { "where u.yelloId = :yelloId") Optional findByYelloIdNotFiltered(@Param("yelloId") String yelloId); - @Query("select u from User u " + - "where u.group.schoolName = :schoolName " + + @Query("select u from User u, UserGroup g " + + "where u.group.id = g.id " + + "and g.id = :groupId " + "and u.deletedAt is null") - List findAllByGroupId(@Param("schoolName") String schoolName); - + List findAllByGroupId(@Param("groupId") Long groupId); @Query("select u from User u " - + "where u.group.schoolName = :groupName " + + "where u.group.groupName = :groupName " + "and u.uuid not in :uuidList " + "and u.name like CONCAT('%', :keyword, '%') " + "and u.deletedAt is null " @@ -58,7 +58,7 @@ List findAllByGroupContainingName(@Param("groupName") String groupName, @Param("keyword") String keyword, @Param("uuidList") List uuidList); @Query("select u from User u " - + "where u.group.schoolName <> :groupName " + + "where u.group.groupName <> :groupName " + "and u.uuid not in :uuidList " + "and u.name like CONCAT('%', :keyword, '%') " + "and u.deletedAt is null " @@ -67,7 +67,7 @@ List findAllByOtherGroupContainingName(@Param("groupName") String groupNam @Param("keyword") String keyword, @Param("uuidList") List uuidList); @Query("select u from User u " - + "where u.group.schoolName = :groupName " + + "where u.group.groupName = :groupName " + "and u.uuid not in :uuidList " + "and LOWER(u.yelloId) like LOWER(CONCAT('%', :keyword, '%')) " + "and u.deletedAt is null " @@ -76,7 +76,7 @@ List findAllByGroupContainingYelloId(@Param("groupName") String groupName, @Param("keyword") String keyword, @Param("uuidList") List uuidList); @Query("select u from User u " - + "where u.group.schoolName <> :groupName " + + "where u.group.groupName <> :groupName " + "and u.uuid not in :uuidList " + "and LOWER(u.yelloId) like LOWER(CONCAT('%', :keyword, '%')) " + "and u.deletedAt is null " diff --git a/src/main/java/com/yello/server/domain/user/repository/UserRepository.java b/src/main/java/com/yello/server/domain/user/repository/UserRepository.java index 415edecf..08ca9317 100644 --- a/src/main/java/com/yello/server/domain/user/repository/UserRepository.java +++ b/src/main/java/com/yello/server/domain/user/repository/UserRepository.java @@ -43,7 +43,7 @@ public interface UserRepository { Optional findByDeviceTokenNotFiltered(String deviceToken); - List findAllByGroupId(String schoolName); + List findAllByGroupId(Long groupId); List findAllByGroupContainingName(String groupName, String keyword, List uuidList); diff --git a/src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java b/src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java index 2c2ee6f4..f138a2bc 100644 --- a/src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java +++ b/src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java @@ -115,8 +115,8 @@ public Optional findByDeviceTokenNotFiltered(String deviceToken) { } @Override - public List findAllByGroupId(String schoolName) { - return userJpaRepository.findAllByGroupId(schoolName); + public List findAllByGroupId(Long groupId) { + return userJpaRepository.findAllByGroupId(groupId); } @Override diff --git a/src/main/java/com/yello/server/domain/vote/service/VoteManagerImpl.java b/src/main/java/com/yello/server/domain/vote/service/VoteManagerImpl.java index d8884ce2..37c79d98 100644 --- a/src/main/java/com/yello/server/domain/vote/service/VoteManagerImpl.java +++ b/src/main/java/com/yello/server/domain/vote/service/VoteManagerImpl.java @@ -123,10 +123,10 @@ public int useNameHint(User sender, Vote vote) { vote.checkNameIndexOf(randomIndex); if (sender.getSubscribe() == Subscribe.NORMAL) { - sender.minusPoint(NAME_HINT_POINT); + sender.subPoint(NAME_HINT_POINT); return randomIndex; } - sender.minusPoint(0); + sender.subPoint(0); return randomIndex; } @@ -136,7 +136,7 @@ public KeywordCheckResponse useKeywordHint(User user, Vote vote) { throw new VoteForbiddenException(LACK_POINT_EXCEPTION); } - user.minusPoint(KEYWORD_HINT_POINT); + user.subPoint(KEYWORD_HINT_POINT); vote.checkKeyword(); return KeywordCheckResponse.of(vote); diff --git a/src/main/java/com/yello/server/domain/vote/service/VoteService.java b/src/main/java/com/yello/server/domain/vote/service/VoteService.java index 8ba3c12c..1e9ea0a3 100644 --- a/src/main/java/com/yello/server/domain/vote/service/VoteService.java +++ b/src/main/java/com/yello/server/domain/vote/service/VoteService.java @@ -105,7 +105,7 @@ public VoteFriendResponse findAllFriendVotes(Long userId, Pageable pageable) { final Integer totalCount = voteRepository.countAllReceivedByFriends(userId); final List list = voteRepository.findAllReceivedByFriends(userId, pageable) .stream() - .filter(vote -> vote.getNameHint()!=-3) + .filter(vote -> vote.getNameHint() != -3) .map(VoteFriendVO::of) .toList(); return VoteFriendResponse.of(totalCount, list); @@ -123,7 +123,7 @@ public List findVoteQuestionList(Long userId) { final User user = userRepository.getById(userId); final List friends = friendRepository.findAllByUserId(user.getId()); - if (friends.size()==NO_FRIEND_COUNT) { + if (friends.size() == NO_FRIEND_COUNT) { throw new FriendException(LACK_USER_EXCEPTION); } @@ -136,6 +136,7 @@ public List findVoteQuestionList(Long userId) { } return true; }) + .filter(question -> !question.getId().equals(102L)) .toList(); return voteManager.generateVoteQuestion(user, questions); } @@ -145,7 +146,7 @@ public VoteAvailableResponse checkVoteAvailable(Long userId) { final String messageId = UUID.randomUUID().toString(); final List friends = friendRepository.findAllByUserId(user.getId()); - if (friends.size()==NO_FRIEND_COUNT) { + if (friends.size() == NO_FRIEND_COUNT) { throw new FriendException(LACK_USER_EXCEPTION); } @@ -172,7 +173,7 @@ public VoteCreateVO createVote(Long userId, CreateVoteRequest request) { cooldown.updateDate(LocalDateTime.now()); producerService.produceVoteAvailableNotification(cooldown); - sender.plusPoint(request.totalPoint()); + sender.addPoint(request.totalPoint()); return VoteCreateVO.of(sender.getPoint(), votes); } @@ -200,7 +201,7 @@ public RevealFullNameResponse revealFullName(Long userId, Long voteId) { } vote.checkNameIndexOf(CHECK_FULL_NAME); - sender.setTicketCount(MINUS_TICKET_COUNT); + sender.addTicketCount(MINUS_TICKET_COUNT); return RevealFullNameResponse.of(vote.getSender()); } diff --git a/src/main/java/com/yello/server/global/common/SuccessCode.java b/src/main/java/com/yello/server/global/common/SuccessCode.java index b7f250f6..ea69fb47 100644 --- a/src/main/java/com/yello/server/global/common/SuccessCode.java +++ b/src/main/java/com/yello/server/global/common/SuccessCode.java @@ -29,7 +29,7 @@ public enum SuccessCode { DELETE_USER_SUCCESS(OK, "유저 탈퇴에 성공했습니다."), DELETE_FRIEND_SUCCESS(OK, "친구 삭제에 성공했습니다."), ONBOARDING_FRIENDS_SUCCESS(OK, "추천 친구 조회에 성공했습니다."), - SCHOOL_NAME_SEARCH_SCHOOL_SUCCESS(OK, "학교 검색에 성공했습니다."), + UNIVERSITY_NAME_SEARCH_USER_GROUP_SUCCESS(OK, "학교 이름 검색에 성공했습니다."), DEPARTMENT_NAME_SEARCH_BY_SCHOOL_NAME_SCHOOL_SUCCESS(OK, "학과 검색에 성공했습니다."), REVEAL_NAME_HINT_SUCCESS(OK, "이름 초성 확인에 성공했습니다."), REVEAL_NAME_SUCCESS(OK, "전체 이름 확인에 성공했습니다."), diff --git a/src/main/java/com/yello/server/global/common/factory/PaginationFactory.java b/src/main/java/com/yello/server/global/common/factory/PaginationFactory.java index 11ebe5a5..6ae0f41e 100644 --- a/src/main/java/com/yello/server/global/common/factory/PaginationFactory.java +++ b/src/main/java/com/yello/server/global/common/factory/PaginationFactory.java @@ -7,6 +7,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.data.domain.Sort.Direction; public class PaginationFactory { @@ -33,6 +34,10 @@ public static Pageable createPageableByNameSort(Integer page) { return PageRequest.of(page, PAGE_LIMIT, Sort.by(Sort.Direction.ASC, "name")); } + public static Pageable createPageableByNameSortDescLimitTen(Integer page) { + return PageRequest.of(page, PAGE_LIMIT_TEN, Sort.by(Direction.DESC, "id")); + } + public static Page getPage(List list, Pageable pageable) { int start = (int) pageable.getOffset(); int end = Math.min((start + pageable.getPageSize()), list.size()); diff --git a/src/main/java/com/yello/server/global/common/factory/TokenFactoryImpl.java b/src/main/java/com/yello/server/global/common/factory/TokenFactoryImpl.java index 7c4f480d..cc0aaf83 100644 --- a/src/main/java/com/yello/server/global/common/factory/TokenFactoryImpl.java +++ b/src/main/java/com/yello/server/global/common/factory/TokenFactoryImpl.java @@ -48,7 +48,7 @@ public String generateAppleToken() { .generatePrivate(new PKCS8EncodedKeySpec(Base64.decodeBase64(sig))) ) .compact(); - System.out.println(compact + " sdsdfsdsdfss"); + return compact; } diff --git a/src/main/java/com/yello/server/infrastructure/firebase/dto/request/NotificationCustomMessage.java b/src/main/java/com/yello/server/infrastructure/firebase/dto/request/NotificationCustomMessage.java new file mode 100644 index 00000000..125f21e5 --- /dev/null +++ b/src/main/java/com/yello/server/infrastructure/firebase/dto/request/NotificationCustomMessage.java @@ -0,0 +1,12 @@ +package com.yello.server.infrastructure.firebase.dto.request; + +import java.util.List; + +public record NotificationCustomMessage( + List userIdList, + String title, + String message + +) { + +} diff --git a/src/main/java/com/yello/server/infrastructure/firebase/dto/request/NotificationMessage.java b/src/main/java/com/yello/server/infrastructure/firebase/dto/request/NotificationMessage.java index 1bdcdd73..07fb6d61 100644 --- a/src/main/java/com/yello/server/infrastructure/firebase/dto/request/NotificationMessage.java +++ b/src/main/java/com/yello/server/infrastructure/firebase/dto/request/NotificationMessage.java @@ -18,7 +18,8 @@ public record NotificationMessage( public static NotificationMessage toRecommendNotificationContent(User user) { return NotificationMessage.builder() .title("40분 대기 초기화 + 100포인트 적립") - .message(MessageFormat.format("{0}님이 나를 추천인으로 가입해 옐로하기 대기 초기화 + 100포인트가 적립되었어요!", user.getName())) + .message(MessageFormat.format("{0}님이 나를 추천인으로 가입해 옐로하기 대기 초기화 + 100포인트가 적립되었어요!", + user.getName())) .type(NotificationType.RECOMMEND) .build(); } @@ -42,7 +43,8 @@ public static NotificationMessage toFriendNotificationContent(User user) { public static NotificationMessage toYelloNotificationContent(Vote vote) { final User sender = vote.getSender(); - final String target = Gender.MALE.getIntial().equals(sender.getGender().getIntial()) ? "남학생" : "여학생"; + final String target = + Gender.MALE.getIntial().equals(sender.getGender().getIntial()) ? "남학생" : "여학생"; return NotificationMessage.builder() .title(MessageFormat.format("{0}이 쪽지를 보냈어요!", target)) .message(vote.getQuestion().toNotificationSentence()) @@ -50,6 +52,16 @@ public static NotificationMessage toYelloNotificationContent(Vote vote) { .build(); } + public static NotificationMessage toYelloNotificationCustomContent( + NotificationCustomMessage message) { + + return NotificationMessage.builder() + .title(message.title()) + .message(message.message()) + .type(NotificationType.NEW_VOTE) + .build(); + } + public Notification toNotification() { return Notification.builder() .setTitle(title) diff --git a/src/main/java/com/yello/server/infrastructure/firebase/service/NotificationFcmService.java b/src/main/java/com/yello/server/infrastructure/firebase/service/NotificationFcmService.java index af282107..c92a36f6 100644 --- a/src/main/java/com/yello/server/infrastructure/firebase/service/NotificationFcmService.java +++ b/src/main/java/com/yello/server/infrastructure/firebase/service/NotificationFcmService.java @@ -1,10 +1,13 @@ package com.yello.server.infrastructure.firebase.service; import com.google.firebase.messaging.Message; +import com.yello.server.domain.admin.repository.UserAdminRepository; import com.yello.server.domain.friend.entity.Friend; import com.yello.server.domain.user.entity.User; import com.yello.server.domain.user.repository.UserRepository; import com.yello.server.domain.vote.entity.Vote; +import com.yello.server.global.common.dto.EmptyObject; +import com.yello.server.infrastructure.firebase.dto.request.NotificationCustomMessage; import com.yello.server.infrastructure.firebase.dto.request.NotificationMessage; import com.yello.server.infrastructure.firebase.manager.FCMManager; import com.yello.server.infrastructure.redis.repository.TokenRepository; @@ -23,13 +26,16 @@ public class NotificationFcmService implements NotificationService { private final UserRepository userRepository; private final TokenRepository tokenRepository; private final FCMManager fcmManager; + private final UserAdminRepository userAdminRepository; @Override public void sendRecommendNotification(User user, User target) { - NotificationMessage notificationMessage = NotificationMessage.toRecommendNotificationContent(user); + NotificationMessage notificationMessage = + NotificationMessage.toRecommendNotificationContent(user); if (target.getDeviceToken() != null && !Objects.equals(target.getDeviceToken(), "")) { - final Message message = fcmManager.createMessage(target.getDeviceToken(), notificationMessage); + final Message message = + fcmManager.createMessage(target.getDeviceToken(), notificationMessage); fcmManager.send(message); } } @@ -38,12 +44,14 @@ public void sendRecommendNotification(User user, User target) { public void sendYelloNotification(Vote vote) { final User receiver = vote.getReceiver(); - NotificationMessage notificationMessage = NotificationMessage.toYelloNotificationContent(vote); + NotificationMessage notificationMessage = + NotificationMessage.toYelloNotificationContent(vote); final String path = "/api/v1/vote/" + vote.getId().toString(); if (receiver.getDeviceToken() != null && !Objects.equals(receiver.getDeviceToken(), "")) { - final Message message = fcmManager.createMessage(receiver.getDeviceToken(), notificationMessage, path); + final Message message = + fcmManager.createMessage(receiver.getDeviceToken(), notificationMessage, path); fcmManager.send(message); } } @@ -53,10 +61,12 @@ public void sendFriendNotification(Friend friend) { final User receiver = friend.getTarget(); final User sender = friend.getUser(); - NotificationMessage notificationMessage = NotificationMessage.toFriendNotificationContent(sender); + NotificationMessage notificationMessage = + NotificationMessage.toFriendNotificationContent(sender); if (receiver.getDeviceToken() != null && !Objects.equals(receiver.getDeviceToken(), "")) { - final Message message = fcmManager.createMessage(receiver.getDeviceToken(), notificationMessage); + final Message message = + fcmManager.createMessage(receiver.getDeviceToken(), notificationMessage); fcmManager.send(message); } } @@ -65,12 +75,47 @@ public void sendFriendNotification(Friend friend) { public void sendVoteAvailableNotification(Long receiverId) { final User receiveUser = userRepository.getById(receiverId); - NotificationMessage notificationMessage = NotificationMessage.toVoteAvailableNotificationContent(); + NotificationMessage notificationMessage = + NotificationMessage.toVoteAvailableNotificationContent(); - if (receiveUser.getDeviceToken() != null && !Objects.equals(receiveUser.getDeviceToken(), "")) { - final Message message = fcmManager.createMessage(receiveUser.getDeviceToken(), notificationMessage); + if (receiveUser.getDeviceToken() != null && !Objects.equals(receiveUser.getDeviceToken(), + "")) { + final Message message = + fcmManager.createMessage(receiveUser.getDeviceToken(), notificationMessage); fcmManager.send(message); log.info("[rabbitmq] successfully send notification!"); } } + + @Override + public void sendCustomNotification(NotificationCustomMessage request) { + + request.userIdList().stream() + .forEach(userId -> { + final User receiver = userRepository.getById(userId); + + NotificationMessage notificationMessage = + NotificationMessage.toYelloNotificationCustomContent(request); + + if (receiver.getDeviceToken() != null && !Objects.equals(receiver.getDeviceToken(), + "")) { + final Message message = + fcmManager.createMessage(receiver.getDeviceToken(), notificationMessage); + fcmManager.send(message); + } + }); + + } + + @Override + public EmptyObject adminSendCustomNotification(Long adminId, NotificationCustomMessage request) { + // exception + final User admin = userRepository.getById(adminId); + userAdminRepository.getByUser(admin); + + // logic + this.sendCustomNotification(request); + + return EmptyObject.builder().build(); + } } diff --git a/src/main/java/com/yello/server/infrastructure/firebase/service/NotificationService.java b/src/main/java/com/yello/server/infrastructure/firebase/service/NotificationService.java index d2e6fbf0..b0d8f687 100644 --- a/src/main/java/com/yello/server/infrastructure/firebase/service/NotificationService.java +++ b/src/main/java/com/yello/server/infrastructure/firebase/service/NotificationService.java @@ -3,6 +3,8 @@ import com.yello.server.domain.friend.entity.Friend; import com.yello.server.domain.user.entity.User; import com.yello.server.domain.vote.entity.Vote; +import com.yello.server.global.common.dto.EmptyObject; +import com.yello.server.infrastructure.firebase.dto.request.NotificationCustomMessage; public interface NotificationService { @@ -13,4 +15,8 @@ public interface NotificationService { void sendFriendNotification(Friend friend); void sendVoteAvailableNotification(Long receiverId); + + void sendCustomNotification(NotificationCustomMessage request); + + EmptyObject adminSendCustomNotification(Long adminId, NotificationCustomMessage request); } diff --git a/src/main/resources/static/docs/find-group-friends.html b/src/main/resources/static/docs/find-group-friends.html index dd2e1b4e..5438fc50 100644 --- a/src/main/resources/static/docs/find-group-friends.html +++ b/src/main/resources/static/docs/find-group-friends.html @@ -1,482 +1,2185 @@ - - - - -그룹 추천 친구 조회하기 - - + + + + + 그룹 추천 친구 조회하기 + +
-
-

그룹 추천 친구 조회하기

-
-
-

요청

-
-
-
GET /api/v1/friend/recommend/school?page=0 HTTP/1.1
+  
+

그룹 추천 친구 조회하기

+
+
+

요청

+
+
+
GET /api/v1/friend/recommend/userGroup?page=0 HTTP/1.1
 Authorization: Bearer your-access-token
-
-
-
-
-

요청 파라미터

- ---- - - - - - - - - - - - - -
ParameterDescription

page

페이지네이션 페이지 번호

-
-
-

응답

-
-
+
+
+
+
+

요청 파라미터

+ + + + + + + + + + + + + + + + + +
ParameterDescription

page +

페이지네이션 페이지 번호

+
+
+
+

응답

+
+
HTTP/1.1 200 OK
 Content-Type: application/json
 
@@ -493,17 +2196,17 @@ 

응답

} ] } }
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file diff --git a/src/main/resources/static/docs/index.html b/src/main/resources/static/docs/index.html index 9601d2ea..8d48ed14 100644 --- a/src/main/resources/static/docs/index.html +++ b/src/main/resources/static/docs/index.html @@ -1,613 +1,2316 @@ - - - - -YELL:O API 문서 - - - + + + + + YELL:O API 문서 + + +
- +
- + diff --git a/src/main/resources/static/docs/search-department.html b/src/main/resources/static/docs/search-department.html index 5ae8c19f..740d483b 100644 --- a/src/main/resources/static/docs/search-department.html +++ b/src/main/resources/static/docs/search-department.html @@ -1,489 +1,2194 @@ - - - - -대학교 학과 검색하기 - - + + + + + 대학교 학과 검색하기 + +
-
-

대학교 학과 검색하기

-
-
-

요청

-
-
-
GET /api/v1/auth/school/department?page=0&school=school+name+here&keyword=keyword+here HTTP/1.1
-
-
-
-
-

요청 파라미터

- ---- - - - - - - - - - - - - - - - - - - - - -
ParameterDescription

page

페이지네이션 페이지 번호

school

학교 이름

keyword

검색할 쿼리

-
-
-

응답

-
-
+
+

대학교 학과 검색하기

+
+
+

요청

+
+
+
GET /api/v1/auth/userGroup/department?page=0&userGroup=userGroup+name+here&keyword=keyword+here HTTP/1.1
+
+
+
+
+

요청 파라미터

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription

page +

페이지네이션 페이지 번호

+

+ userGroup

학교 이름

keyword +

검색할 쿼리

+
+
+

응답

+
+
HTTP/1.1 200 OK
 Content-Type: application/json
 
@@ -498,17 +2203,17 @@ 

응답

} ] } }
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file diff --git a/src/main/resources/static/docs/search-school.html b/src/main/resources/static/docs/search-school.html index 637a5812..bb65a5eb 100644 --- a/src/main/resources/static/docs/search-school.html +++ b/src/main/resources/static/docs/search-school.html @@ -1,485 +1,2189 @@ - - - - -대학교 검색하기 - - + + + + + 대학교 검색하기 + +
-
-

대학교 검색하기

-
-
-

요청

-
-
-
GET /api/v1/auth/school?page=0&keyword=keyword+here HTTP/1.1
-
-
-
-
-

요청 파라미터

- ---- - - - - - - - - - - - - - - - - -
ParameterDescription

page

페이지네이션 페이지 번호

keyword

검색할 쿼리

-
-
-

응답

-
-
+
+

대학교 검색하기

+
+
+

요청

+
+
+
GET /api/v1/auth/userGroup?page=0&keyword=keyword+here HTTP/1.1
+
+
+
+
+

요청 파라미터

+ + + + + + + + + + + + + + + + + + + + + +
ParameterDescription

page +

페이지네이션 페이지 번호

+

keyword +

검색할 쿼리

+
+
+

응답

+
+
HTTP/1.1 200 OK
 Content-Type: application/json
 
@@ -491,17 +2195,17 @@ 

응답

"groupNameList" : [ "groupName" ] } }
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file diff --git a/src/test/java/com/yello/server/domain/authorization/medium/AuthControllerTest.java b/src/test/java/com/yello/server/domain/authorization/medium/AuthControllerTest.java index af442649..c5818f81 100644 --- a/src/test/java/com/yello/server/domain/authorization/medium/AuthControllerTest.java +++ b/src/test/java/com/yello/server/domain/authorization/medium/AuthControllerTest.java @@ -17,6 +17,7 @@ import com.yello.server.domain.authorization.dto.request.OAuthRequest; import com.yello.server.domain.authorization.dto.request.OnBoardingFriendRequest; import com.yello.server.domain.authorization.dto.request.SignUpRequest; +import com.yello.server.domain.authorization.dto.response.ClassNameSearchResponse; import com.yello.server.domain.authorization.dto.response.DepartmentSearchResponse; import com.yello.server.domain.authorization.dto.response.GroupNameSearchResponse; import com.yello.server.domain.authorization.dto.response.OAuthResponse; @@ -25,6 +26,7 @@ import com.yello.server.domain.authorization.filter.JwtExceptionFilter; import com.yello.server.domain.authorization.filter.JwtFilter; import com.yello.server.domain.authorization.service.AuthService; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.user.entity.Gender; import com.yello.server.domain.user.entity.Social; import com.yello.server.domain.user.entity.User; @@ -38,6 +40,7 @@ import org.junit.jupiter.api.DisplayNameGeneration; import org.junit.jupiter.api.DisplayNameGenerator.ReplaceUnderscores; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentMatchers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; @@ -84,8 +87,8 @@ class AuthControllerTest { @BeforeEach void init() { - user = testDataUtil.generateUser(1L, 1L); - target = testDataUtil.generateUser(2L, 1L); + user = testDataUtil.generateUser(1L, 1L, UserGroupType.UNIVERSITY); + target = testDataUtil.generateUser(2L, 1L, UserGroupType.UNIVERSITY); } @Test @@ -228,7 +231,8 @@ void init() { Arrays.asList("groupName") ); - given(authService.findSchoolsByKeyword(anyString(), any(Pageable.class))) + given(authService.findGroupNameContaining(anyString(), ArgumentMatchers.same(UserGroupType.UNIVERSITY), + any(Pageable.class))) .willReturn(groupNameSearchResponse); // when @@ -238,7 +242,7 @@ void init() { .param("keyword", "keyword here") ) .andDo(print()) - .andDo(document("api/v1/auth/findSchoolsByKeyword", + .andDo(document("api/v1/auth/findAllUnivName", Preprocessors.preprocessRequest(prettyPrint(), removeHeaders(excludeRequestHeaders)), Preprocessors.preprocessResponse(prettyPrint(), @@ -255,10 +259,11 @@ void init() { // given final DepartmentSearchResponse departmentSearchResponse = DepartmentSearchResponse.of( 0, - Arrays.asList(testDataUtil.generateSchool(1L)) + Arrays.asList(testDataUtil.generateGroup(1L, UserGroupType.UNIVERSITY)) ); - given(authService.findDepartmentsByKeyword(anyString(), anyString(), any(Pageable.class))) + given(authService.findGroupDepartmentBySchoolNameContaining(anyString(), anyString(), + ArgumentMatchers.same(UserGroupType.UNIVERSITY), any(Pageable.class))) .willReturn(departmentSearchResponse); // when @@ -269,13 +274,73 @@ void init() { .param("keyword", "keyword here") ) .andDo(print()) - .andDo(document("api/v1/auth/findDepartmentsByKeyword", + .andDo(document("api/v1/auth/findAllUnivDepartmentName", + Preprocessors.preprocessRequest(prettyPrint(), + removeHeaders(excludeRequestHeaders)), + Preprocessors.preprocessResponse(prettyPrint(), + removeHeaders(excludeResponseHeaders)), + requestParameters( + parameterWithName("page").description("페이지네이션 페이지 번호"), + parameterWithName("name").description("학교 이름"), + parameterWithName("keyword").description("검색할 쿼리"))) + ) + .andExpect(MockMvcResultMatchers.status().isOk()); + } + + @Test + void 고등학교_이름_검색에_성공합니다() throws Exception { + // given + final GroupNameSearchResponse groupNameSearchResponse = GroupNameSearchResponse.of( + 0, + Arrays.asList("groupName") + ); + + given(authService.findGroupNameContaining(anyString(), ArgumentMatchers.same(UserGroupType.HIGH_SCHOOL), + any(Pageable.class))) + .willReturn(groupNameSearchResponse); + + // when + // then + mockMvc.perform(RestDocumentationRequestBuilders.get("/api/v1/auth/group/high/name") + .param("page", "0") + .param("keyword", "keyword here") + ) + .andDo(print()) + .andDo(document("api/v1/auth/findAllHighSchoolName", Preprocessors.preprocessRequest(prettyPrint(), removeHeaders(excludeRequestHeaders)), Preprocessors.preprocessResponse(prettyPrint(), removeHeaders(excludeResponseHeaders)), requestParameters( parameterWithName("page").description("페이지네이션 페이지 번호"), + parameterWithName("keyword").description("검색할 쿼리"))) + ) + .andExpect(MockMvcResultMatchers.status().isOk()); + } + + @Test + void 고등학교_학반_검색에_성공합니다() throws Exception { + // given + final ClassNameSearchResponse classNameSearchResponse = ClassNameSearchResponse.of( + testDataUtil.generateGroup(1L, UserGroupType.HIGH_SCHOOL) + ); + + given(authService.getHighSchoolClassName(anyString(), anyString())) + .willReturn(classNameSearchResponse); + + // when + // then + mockMvc.perform(RestDocumentationRequestBuilders.get("/api/v1/auth/group/high/class") + .param("name", "school name here") + .param("keyword", "keyword here") + ) + .andDo(print()) + .andDo(document("api/v1/auth/findGroupIdByName", + Preprocessors.preprocessRequest(prettyPrint(), + removeHeaders(excludeRequestHeaders)), + Preprocessors.preprocessResponse(prettyPrint(), + removeHeaders(excludeResponseHeaders)), + requestParameters( parameterWithName("name").description("학교 이름"), parameterWithName("keyword").description("검색할 쿼리"))) ) diff --git a/src/test/java/com/yello/server/domain/authorization/small/AuthManagerTest.java b/src/test/java/com/yello/server/domain/authorization/small/AuthManagerTest.java index c8ac935c..02fb42e6 100644 --- a/src/test/java/com/yello/server/domain/authorization/small/AuthManagerTest.java +++ b/src/test/java/com/yello/server/domain/authorization/small/AuthManagerTest.java @@ -14,6 +14,7 @@ import com.yello.server.domain.cooldown.repository.CooldownRepository; import com.yello.server.domain.friend.FakeFriendRepository; import com.yello.server.domain.friend.repository.FriendRepository; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.question.FakeQuestionRepository; import com.yello.server.domain.question.repository.QuestionRepository; import com.yello.server.domain.user.FakeUserRepository; @@ -67,10 +68,10 @@ void init() { .build(); // soft-deleted User - testDataUtil.generateDeletedUser(0L, 1L); + testDataUtil.generateDeletedUser(0L, 1L, UserGroupType.UNIVERSITY); for (int i = 1; i <= 3; i++) { - testDataUtil.generateUser(i, 1L); + testDataUtil.generateUser(i, 1L, UserGroupType.UNIVERSITY); } } diff --git a/src/test/java/com/yello/server/domain/authorization/small/AuthServiceTest.java b/src/test/java/com/yello/server/domain/authorization/small/AuthServiceTest.java index e2425595..c849d767 100644 --- a/src/test/java/com/yello/server/domain/authorization/small/AuthServiceTest.java +++ b/src/test/java/com/yello/server/domain/authorization/small/AuthServiceTest.java @@ -26,9 +26,10 @@ import com.yello.server.domain.friend.FakeFriendRepository; import com.yello.server.domain.friend.repository.FriendRepository; import com.yello.server.domain.friend.service.FriendManager; -import com.yello.server.domain.group.FakeSchoolRepository; +import com.yello.server.domain.group.FakeUserGroupRepository; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.group.exception.GroupNotFoundException; -import com.yello.server.domain.group.repository.SchoolRepository; +import com.yello.server.domain.group.repository.UserGroupRepository; import com.yello.server.domain.question.FakeQuestionRepository; import com.yello.server.domain.question.repository.QuestionRepository; import com.yello.server.domain.user.FakeUserManager; @@ -74,7 +75,7 @@ public class AuthServiceTest { "keyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTest".getBytes()); private final UserRepository userRepository = new FakeUserRepository(); - private final SchoolRepository schoolRepository = new FakeSchoolRepository(); + private final UserGroupRepository userGroupRepository = new FakeUserGroupRepository(); private final FriendRepository friendRepository = new FakeFriendRepository(); private final CooldownRepository cooldownRepository = new FakeCooldownRepository(); private final TokenRepository tokenRepository = new FakeTokenRepository(); @@ -113,7 +114,7 @@ public class AuthServiceTest { void init() { this.authService = AuthService.builder() .userRepository(userRepository) - .schoolRepository(schoolRepository) + .userGroupRepository(userGroupRepository) .friendRepository(friendRepository) .cooldownRepository(cooldownRepository) .messageQueueRepository(messageQueueRepository) @@ -125,13 +126,13 @@ void init() { .notificationService(notificationService) .build(); - schoolRepository.save(testDataUtil.generateSchool(1L)); + userGroupRepository.save(testDataUtil.generateGroup(1L, UserGroupType.UNIVERSITY)); // soft-deleted User - testDataUtil.generateDeletedUser(0L, 1L); + testDataUtil.generateDeletedUser(0L, 1L, UserGroupType.UNIVERSITY); for (int i = 1; i <= 3; i++) { - testDataUtil.generateUser(i, 1L); + testDataUtil.generateUser(i, 1L, UserGroupType.UNIVERSITY); } } diff --git a/src/test/java/com/yello/server/domain/friend/medium/FriendControllerTest.java b/src/test/java/com/yello/server/domain/friend/medium/FriendControllerTest.java index 998f0c75..042be833 100644 --- a/src/test/java/com/yello/server/domain/friend/medium/FriendControllerTest.java +++ b/src/test/java/com/yello/server/domain/friend/medium/FriendControllerTest.java @@ -28,6 +28,7 @@ import com.yello.server.domain.friend.dto.response.SearchFriendVO; import com.yello.server.domain.friend.entity.Friend; import com.yello.server.domain.friend.service.FriendService; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.user.dto.response.UserResponse; import com.yello.server.domain.user.entity.User; import com.yello.server.global.exception.ControllerExceptionAdvice; @@ -90,8 +91,8 @@ class FriendControllerTest { @BeforeEach void init() { - user = testDataUtil.generateUser(1L, 1L); - target = testDataUtil.generateUser(2L, 1L); + user = testDataUtil.generateUser(1L, 1L, UserGroupType.UNIVERSITY); + target = testDataUtil.generateUser(2L, 1L, UserGroupType.UNIVERSITY); } @Test diff --git a/src/test/java/com/yello/server/domain/friend/small/FriendManagerTest.java b/src/test/java/com/yello/server/domain/friend/small/FriendManagerTest.java index c6ee375c..5bf60287 100644 --- a/src/test/java/com/yello/server/domain/friend/small/FriendManagerTest.java +++ b/src/test/java/com/yello/server/domain/friend/small/FriendManagerTest.java @@ -4,7 +4,7 @@ import com.yello.server.domain.friend.service.FriendManager; import com.yello.server.domain.friend.service.FriendManagerImpl; -import com.yello.server.domain.group.entity.School; +import com.yello.server.domain.group.entity.UserGroup; import com.yello.server.domain.user.FakeUserRepository; import com.yello.server.domain.user.entity.Gender; import com.yello.server.domain.user.entity.Social; @@ -58,9 +58,9 @@ void init() { } private void generateUserForTest(int count) { - School school = School.builder() - .schoolName("Test School") - .departmentName("Testing") + UserGroup userGroup = UserGroup.builder() + .groupName("Test School") + .subGroupName("Testing") .build(); for (long i = 0; i < count; i++) { @@ -75,7 +75,7 @@ private void generateUserForTest(int count) { .profileImage("test image") .uuid("%d".formatted(i)) .deletedAt(null) - .group(school) + .group(userGroup) .groupAdmissionYear(20) .email("test%d@test.com".formatted(i)) .build()); diff --git a/src/test/java/com/yello/server/domain/friend/small/FriendServiceTest.java b/src/test/java/com/yello/server/domain/friend/small/FriendServiceTest.java index 235e82bd..3ad0298d 100644 --- a/src/test/java/com/yello/server/domain/friend/small/FriendServiceTest.java +++ b/src/test/java/com/yello/server/domain/friend/small/FriendServiceTest.java @@ -16,6 +16,7 @@ import com.yello.server.domain.friend.exception.FriendNotFoundException; import com.yello.server.domain.friend.repository.FriendRepository; import com.yello.server.domain.friend.service.FriendService; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.question.FakeQuestionRepository; import com.yello.server.domain.question.repository.QuestionRepository; import com.yello.server.domain.user.FakeUserManager; @@ -73,11 +74,11 @@ void init() { .voteManager(voteManager) .build(); - user1 = testDataUtil.generateUser(1L, 1L); - user2 = testDataUtil.generateUser(2L, 2L); - user3 = testDataUtil.generateUser(3L, 1L); - user4 = testDataUtil.generateUser(4L, 1L); - user5 = testDataUtil.generateUser(5L, 1L); + user1 = testDataUtil.generateUser(1L, 1L, UserGroupType.UNIVERSITY); + user2 = testDataUtil.generateUser(2L, 2L, UserGroupType.UNIVERSITY); + user3 = testDataUtil.generateUser(3L, 1L, UserGroupType.UNIVERSITY); + user4 = testDataUtil.generateUser(4L, 1L, UserGroupType.UNIVERSITY); + user5 = testDataUtil.generateUser(5L, 1L, UserGroupType.UNIVERSITY); testDataUtil.generateFriend(user1, user2); testDataUtil.generateFriend(user2, user1); diff --git a/src/test/java/com/yello/server/domain/group/FakeSchoolRepository.java b/src/test/java/com/yello/server/domain/group/FakeSchoolRepository.java deleted file mode 100644 index a085194d..00000000 --- a/src/test/java/com/yello/server/domain/group/FakeSchoolRepository.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.yello.server.domain.group; - -import static com.yello.server.global.common.ErrorCode.GROUPID_NOT_FOUND_GROUP_EXCEPTION; - -import com.yello.server.domain.group.entity.School; -import com.yello.server.domain.group.exception.GroupNotFoundException; -import com.yello.server.domain.group.repository.SchoolRepository; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import org.springframework.data.domain.Pageable; - -public class FakeSchoolRepository implements SchoolRepository { - - private final List data = new ArrayList<>(); - private Long id = 0L; - - @Override - public School save(School school) { - if (school.getId()!=null && school.getId() > id) { - id = school.getId(); - } - - School newSchool = School.builder() - .id(school.getId()==null ? ++id : school.getId()) - .schoolName(school.getSchoolName()) - .departmentName(school.getDepartmentName()) - .build(); - - data.add(newSchool); - return newSchool; - } - - @Override - public School getById(Long id) { - return data.stream() - .filter(school -> school.getId().equals(id)) - .findFirst() - .orElseThrow(() -> new GroupNotFoundException(GROUPID_NOT_FOUND_GROUP_EXCEPTION)); - } - - @Override - public Optional findById(Long id) { - return data.stream() - .filter(school -> school.getId().equals(id)) - .findFirst(); - } - - @Override - public Integer countDistinctSchoolNameContaining(String schoolName) { - return null; - } - - @Override - public List findDistinctSchoolNameContaining(String schoolName, Pageable pageable) { - return null; - } - - @Override - public Integer countAllBySchoolNameContaining(String schoolName, String departmentName) { - return null; - } - - @Override - public List findAllBySchoolNameContaining(String schoolName, String departmentName, - Pageable pageable) { - return null; - } - - @Override - public Integer countDistinctHighSchoolNameContaining(String schoolName) { - return null; - } - - @Override - public List findDistinctHighSchoolNameContaining(String schoolName, Pageable pageable) { - return null; - } - - @Override - public School findHighSchoolIdBySchoolNameAndClassName(String schoolName, - String className) { - return null; - } -} diff --git a/src/test/java/com/yello/server/domain/group/FakeUserGroupRepository.java b/src/test/java/com/yello/server/domain/group/FakeUserGroupRepository.java new file mode 100644 index 00000000..7e87a23c --- /dev/null +++ b/src/test/java/com/yello/server/domain/group/FakeUserGroupRepository.java @@ -0,0 +1,132 @@ +package com.yello.server.domain.group; + +import static com.yello.server.global.common.ErrorCode.GROUPID_NOT_FOUND_GROUP_EXCEPTION; + +import com.yello.server.domain.group.entity.UserGroup; +import com.yello.server.domain.group.entity.UserGroupType; +import com.yello.server.domain.group.exception.GroupNotFoundException; +import com.yello.server.domain.group.repository.UserGroupRepository; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import org.springframework.data.domain.Pageable; + +public class FakeUserGroupRepository implements UserGroupRepository { + + private final List data = new ArrayList<>(); + private Long id = 0L; + + @Override + public UserGroup save(UserGroup group) { + if (group.getId() != null && group.getId() > id) { + id = group.getId(); + } + + UserGroup newUserGroup = UserGroup.builder() + .id(group.getId() == null ? ++id : group.getId()) + .groupName(group.getGroupName()) + .subGroupName(group.getSubGroupName()) + .build(); + + data.add(newUserGroup); + return newUserGroup; + } + + @Override + public UserGroup getById(Long id) { + return data.stream() + .filter(group -> group.getId().equals(id)) + .findFirst() + .orElseThrow(() -> new GroupNotFoundException(GROUPID_NOT_FOUND_GROUP_EXCEPTION)); + } + + @Override + public Optional findById(Long id) { + return data.stream() + .filter(group -> group.getId().equals(id)) + .findFirst(); + } + + @Override + public Integer countDistinctGroupNameContaining(String groupName, UserGroupType userGroupType) { + return Math.toIntExact(data.stream() + .filter(group -> group.getGroupName().contains(groupName) + && group.getUserGroupType() == userGroupType) + .map(UserGroup::getGroupName) + .count()); + } + + @Override + public List findDistinctGroupNameContaining(String groupName, UserGroupType userGroupType, + Pageable pageable) { + return data.stream() + .filter(group -> group.getGroupName().contains(groupName) + && group.getUserGroupType() == userGroupType) + .map(UserGroup::getGroupName) + .skip(pageable.getOffset()) + .limit(pageable.getPageSize()) + .toList(); + } + + @Override + public Integer countAllContaining(String schoolName, UserGroupType userGroupType) { + return Math.toIntExact(data.stream() + .filter(group -> group.getGroupName().contains(schoolName) + && group.getUserGroupType() == userGroupType) + .count()); + } + + @Override + public List findAllContaining(String schoolName, UserGroupType userGroupType, Pageable pageable) { + return data.stream() + .filter(group -> group.getGroupName().equals(schoolName)) + .filter(group -> group.getUserGroupType() == userGroupType) + .skip(pageable.getOffset()) + .limit(pageable.getPageSize()) + .toList(); + } + + @Override + public Integer countAllByGroupNameContaining(String schoolName, String departmentName, + UserGroupType userGroupType) { + return Math.toIntExact(data.stream() + .filter(group -> group.getGroupName().equals(schoolName)) + .filter(group -> group.getSubGroupName().contains(departmentName)) + .filter(group -> group.getUserGroupType() == userGroupType) + .count()); + } + + @Override + public List findAllByGroupNameContaining(String schoolName, String departmentName, + UserGroupType userGroupType, + Pageable pageable) { + return data.stream() + .filter(group -> group.getGroupName().equals(schoolName)) + .filter(group -> group.getSubGroupName().contains(departmentName)) + .filter(group -> group.getUserGroupType() == userGroupType) + .skip(pageable.getOffset()) + .limit(pageable.getPageSize()) + .toList(); + } + + @Override + public Optional findByGroupNameAndSubGroupName(String schoolName, String departmentName, + UserGroupType userGroupType) { + return data.stream() + .filter(group -> group.getGroupName().equals(schoolName)) + .filter(group -> group.getSubGroupName().equals(departmentName)) + .filter(group -> group.getUserGroupType() == userGroupType) + .findFirst(); + } + + @Override + public UserGroup getByGroupNameAndSubGroupName(String schoolName, String departmentName, + UserGroupType userGroupType) { + return data.stream() + .filter(group -> group.getGroupName().equals(schoolName)) + .filter(group -> group.getSubGroupName().equals(departmentName)) + .filter(group -> group.getUserGroupType() == userGroupType) + .findFirst() + .orElseThrow(() -> new GroupNotFoundException(GROUPID_NOT_FOUND_GROUP_EXCEPTION)); + } +} diff --git a/src/test/java/com/yello/server/domain/purchase/medium/PurchaseControllerTest.java b/src/test/java/com/yello/server/domain/purchase/medium/PurchaseControllerTest.java index 8e7ab3dc..effbd862 100644 --- a/src/test/java/com/yello/server/domain/purchase/medium/PurchaseControllerTest.java +++ b/src/test/java/com/yello/server/domain/purchase/medium/PurchaseControllerTest.java @@ -15,6 +15,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.yello.server.domain.authorization.filter.JwtExceptionFilter; import com.yello.server.domain.authorization.filter.JwtFilter; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.purchase.controller.PurchaseController; import com.yello.server.domain.purchase.dto.apple.AppleTransaction; import com.yello.server.domain.purchase.dto.request.AppleInAppRefundRequest; @@ -80,8 +81,8 @@ class PurchaseControllerTest { @BeforeEach void init() { - user = testDataUtil.generateUser(1L, 1L); - target = testDataUtil.generateUser(2L, 1L); + user = testDataUtil.generateUser(1L, 1L, UserGroupType.UNIVERSITY); + target = testDataUtil.generateUser(2L, 1L, UserGroupType.UNIVERSITY); } @Test diff --git a/src/test/java/com/yello/server/domain/purchase/small/PurchaseServiceTest.java b/src/test/java/com/yello/server/domain/purchase/small/PurchaseServiceTest.java index 321e1f72..813cc309 100644 --- a/src/test/java/com/yello/server/domain/purchase/small/PurchaseServiceTest.java +++ b/src/test/java/com/yello/server/domain/purchase/small/PurchaseServiceTest.java @@ -2,7 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.yello.server.domain.group.entity.School; +import com.yello.server.domain.group.entity.UserGroup; import com.yello.server.domain.purchase.FakeAppleApiWebClient; import com.yello.server.domain.purchase.FakePurchaseManager; import com.yello.server.domain.purchase.FakePurchaseRepository; @@ -50,9 +50,9 @@ void init() { .purchaseManager(purchaseManager) .build(); - School school = School.builder() - .schoolName("Test School") - .departmentName("Testing") + UserGroup userGroup = UserGroup.builder() + .groupName("Test School") + .subGroupName("Testing") .build(); final User user = User.builder() .id(1L) @@ -60,7 +60,7 @@ void init() { .yelloId("yelloworld").gender(Gender.MALE) .point(200).social(Social.KAKAO) .profileImage("test image").uuid("1234") - .deletedAt(null).group(school) + .deletedAt(null).group(userGroup) .groupAdmissionYear(20).email("test@test.com") .subscribe(Subscribe.CANCELED).ticketCount(0) .build(); diff --git a/src/test/java/com/yello/server/domain/user/FakeUserRepository.java b/src/test/java/com/yello/server/domain/user/FakeUserRepository.java index 33c7300e..189cfb7c 100644 --- a/src/test/java/com/yello/server/domain/user/FakeUserRepository.java +++ b/src/test/java/com/yello/server/domain/user/FakeUserRepository.java @@ -170,9 +170,9 @@ public Optional findByDeviceTokenNotFiltered(String deviceToken) { } @Override - public List findAllByGroupId(String schoolName) { + public List findAllByGroupId(Long groupId) { return data.stream() - .filter(user -> user.getGroup().getSchoolName().equals(schoolName)) + .filter(user -> user.getGroup().getId().equals(groupId)) .toList(); } @@ -180,7 +180,7 @@ public List findAllByGroupId(String schoolName) { public List findAllByGroupContainingName(String groupName, String keyword, List uuidList) { return data.stream() - .filter(user -> user.getGroup().getSchoolName().equals(groupName)) + .filter(user -> user.getGroup().getGroupName().equals(groupName)) .filter(user -> user.getName().contains(keyword)) .filter(user -> !user.getId().equals(1L)) .toList(); @@ -190,7 +190,7 @@ public List findAllByGroupContainingName(String groupName, String keyword, public List findAllByOtherGroupContainingName(String groupName, String keyword, List uuidList) { return data.stream() - .filter(user -> !user.getGroup().getSchoolName().equals(groupName)) + .filter(user -> !user.getGroup().getGroupName().equals(groupName)) .filter(user -> user.getName().contains(keyword)) .filter(user -> !user.getId().equals(1L)) .toList(); @@ -200,7 +200,7 @@ public List findAllByOtherGroupContainingName(String groupName, String key public List findAllByGroupContainingYelloId(String groupName, String keyword, List uuidList) { return data.stream() - .filter(user -> user.getGroup().getSchoolName().equals(groupName)) + .filter(user -> user.getGroup().getGroupName().equals(groupName)) .filter(user -> user.getYelloId().contains(keyword)) .filter(user -> !user.getId().equals(1L)) .toList(); @@ -210,7 +210,7 @@ public List findAllByGroupContainingYelloId(String groupName, String keywo public List findAllByOtherGroupContainingYelloId(String groupName, String keyword, List uuidList) { return data.stream() - .filter(user -> !user.getGroup().getSchoolName().equals(groupName)) + .filter(user -> !user.getGroup().getGroupName().equals(groupName)) .filter(user -> user.getYelloId().contains(keyword)) .filter(user -> !user.getId().equals(1L)) .toList(); diff --git a/src/test/java/com/yello/server/domain/user/small/UserManagerTest.java b/src/test/java/com/yello/server/domain/user/small/UserManagerTest.java index 34dc4a15..ebe1c8c2 100644 --- a/src/test/java/com/yello/server/domain/user/small/UserManagerTest.java +++ b/src/test/java/com/yello/server/domain/user/small/UserManagerTest.java @@ -2,7 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.yello.server.domain.group.entity.School; +import com.yello.server.domain.group.entity.UserGroup; import com.yello.server.domain.user.FakeUserRepository; import com.yello.server.domain.user.entity.Gender; import com.yello.server.domain.user.entity.Social; @@ -76,9 +76,9 @@ void init() { private void generateUserForTest() { - School school = School.builder() - .schoolName("Test School") - .departmentName("Testing") + UserGroup userGroup = UserGroup.builder() + .groupName("Test School") + .subGroupName("Testing") .build(); Long[] ids = {1L, 2L}; @@ -98,7 +98,7 @@ private void generateUserForTest() { .profileImage("test image") .uuid(uuids[i]) .deletedAt(null) - .group(school) + .group(userGroup) .groupAdmissionYear(20) .email("test@test.com") .build()); diff --git a/src/test/java/com/yello/server/domain/user/small/UserRepositoryTest.java b/src/test/java/com/yello/server/domain/user/small/UserRepositoryTest.java index 98f544d4..edb9e8e1 100644 --- a/src/test/java/com/yello/server/domain/user/small/UserRepositoryTest.java +++ b/src/test/java/com/yello/server/domain/user/small/UserRepositoryTest.java @@ -4,6 +4,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.user.entity.User; import com.yello.server.domain.user.repository.UserJpaRepository; import com.yello.server.domain.user.repository.UserRepositoryImpl; @@ -23,8 +24,7 @@ @DisplayName("UserRepository 에서") @DisplayNameGeneration(ReplaceUnderscores.class) public class UserRepositoryTest { - - + private final TestDataEntityUtil testDataEntityUtil = new TestDataEntityUtil(); @Mock @@ -41,7 +41,7 @@ public void init() { @Test void save에_성공합니다() { // given - final User user = testDataEntityUtil.generateUser(1L, 1L); + final User user = testDataEntityUtil.generateUser(1L, 1L, UserGroupType.UNIVERSITY); // when given(userRepository.save(any(User.class))) diff --git a/src/test/java/com/yello/server/domain/user/small/UserServiceTest.java b/src/test/java/com/yello/server/domain/user/small/UserServiceTest.java index b8f0a90a..2cf173b5 100644 --- a/src/test/java/com/yello/server/domain/user/small/UserServiceTest.java +++ b/src/test/java/com/yello/server/domain/user/small/UserServiceTest.java @@ -7,6 +7,7 @@ import com.yello.server.domain.cooldown.repository.CooldownRepository; import com.yello.server.domain.friend.FakeFriendRepository; import com.yello.server.domain.friend.repository.FriendRepository; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.question.FakeQuestionRepository; import com.yello.server.domain.question.repository.QuestionRepository; import com.yello.server.domain.user.FakeUserRepository; @@ -58,7 +59,7 @@ void init() { .build(); for (int i = 1; i <= 2; i++) { - testDataUtil.generateUser(i, 1L); + testDataUtil.generateUser(i, 1L, UserGroupType.UNIVERSITY); } } diff --git a/src/test/java/com/yello/server/domain/user/small/UserTest.java b/src/test/java/com/yello/server/domain/user/small/UserTest.java index acc3d969..ceb1446b 100644 --- a/src/test/java/com/yello/server/domain/user/small/UserTest.java +++ b/src/test/java/com/yello/server/domain/user/small/UserTest.java @@ -1,7 +1,9 @@ package com.yello.server.domain.user.small; +import static com.yello.server.global.common.util.ConstantUtil.RECOMMEND_POINT; import static org.assertj.core.api.Assertions.assertThat; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.user.entity.Subscribe; import com.yello.server.domain.user.entity.User; import com.yello.server.util.TestDataEntityUtil; @@ -22,8 +24,8 @@ public class UserTest { @BeforeEach void init() { - user = testDataEntityUtil.generateUser(1L, 1L); - deletedUser = testDataEntityUtil.generateDeletedUser(2L, 1L); + user = testDataEntityUtil.generateUser(1L, 1L, UserGroupType.UNIVERSITY); + deletedUser = testDataEntityUtil.generateDeletedUser(2L, 1L, UserGroupType.UNIVERSITY); } @Test @@ -60,7 +62,7 @@ void init() { // given // when // then - assertThat(user.groupString()).isEqualTo("테스트 대학교 1 테스트 학과 1 20학번"); + assertThat(user.toGroupString()).isEqualTo("테스트 대학교 1 테스트 학과 1 20학번"); } @Test @@ -69,7 +71,7 @@ void init() { assertThat(user.getRecommendCount()).isZero(); // when - user.increaseRecommendCount(); + user.addRecommendCount(1L); // then assertThat(user.getRecommendCount()).isEqualTo(1); @@ -81,7 +83,7 @@ void init() { assertThat(user.getPoint()).isEqualTo(200); // when - user.increaseRecommendPoint(); + user.addPoint(RECOMMEND_POINT); // then assertThat(user.getPoint()).isEqualTo(300); @@ -93,7 +95,7 @@ void init() { assertThat(user.getPoint()).isEqualTo(200); // when - user.minusPoint(100); + user.subPoint(100); // then assertThat(user.getPoint()).isEqualTo(100); @@ -137,7 +139,7 @@ void init() { assertThat(user.getTicketCount()).isZero(); // when - user.setTicketCount(10); + user.addTicketCount(10); // then assertThat(user.getTicketCount()).isEqualTo(10); diff --git a/src/test/java/com/yello/server/domain/vote/FakeVoteManager.java b/src/test/java/com/yello/server/domain/vote/FakeVoteManager.java index 44d9b53a..bccf8c2d 100644 --- a/src/test/java/com/yello/server/domain/vote/FakeVoteManager.java +++ b/src/test/java/com/yello/server/domain/vote/FakeVoteManager.java @@ -121,7 +121,7 @@ public int useNameHint(User sender, Vote vote) { final ThreadLocalRandom random = ThreadLocalRandom.current(); int randomIndex = random.nextInt(2); vote.checkNameIndexOf(randomIndex); - sender.minusPoint(NAME_HINT_POINT); + sender.subPoint(NAME_HINT_POINT); return randomIndex; } @@ -131,7 +131,7 @@ public KeywordCheckResponse useKeywordHint(User user, Vote vote) { throw new VoteForbiddenException(LACK_POINT_EXCEPTION); } - user.minusPoint(KEYWORD_HINT_POINT); + user.subPoint(KEYWORD_HINT_POINT); vote.checkKeyword(); return KeywordCheckResponse.of(vote); } diff --git a/src/test/java/com/yello/server/domain/vote/medium/VoteControllerTest.java b/src/test/java/com/yello/server/domain/vote/medium/VoteControllerTest.java index 7d2f2ffb..ab0f5009 100644 --- a/src/test/java/com/yello/server/domain/vote/medium/VoteControllerTest.java +++ b/src/test/java/com/yello/server/domain/vote/medium/VoteControllerTest.java @@ -20,6 +20,7 @@ import com.yello.server.domain.cooldown.entity.Cooldown; import com.yello.server.domain.friend.dto.response.FriendShuffleResponse; import com.yello.server.domain.friend.entity.Friend; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.keyword.dto.response.KeywordCheckResponse; import com.yello.server.domain.question.dto.response.QuestionForVoteResponse; import com.yello.server.domain.question.dto.response.QuestionVO; @@ -105,8 +106,8 @@ class VoteControllerTest { @BeforeEach void init() { - user = testDataUtil.generateUser(1L, 1L); - target = testDataUtil.generateUser(2L, 1L); + user = testDataUtil.generateUser(1L, 1L, UserGroupType.UNIVERSITY); + target = testDataUtil.generateUser(2L, 1L, UserGroupType.UNIVERSITY); } @Test diff --git a/src/test/java/com/yello/server/domain/vote/small/VoteManagerTest.java b/src/test/java/com/yello/server/domain/vote/small/VoteManagerTest.java index 9ce22a44..4a605a45 100644 --- a/src/test/java/com/yello/server/domain/vote/small/VoteManagerTest.java +++ b/src/test/java/com/yello/server/domain/vote/small/VoteManagerTest.java @@ -5,6 +5,7 @@ import com.yello.server.domain.friend.FakeFriendRepository; import com.yello.server.domain.friend.repository.FriendRepository; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.question.FakeQuestionRepository; import com.yello.server.domain.question.entity.Question; import com.yello.server.domain.question.repository.QuestionRepository; @@ -64,7 +65,7 @@ void init() { } for (long i = 1; i <= 5; i++) { - userData.add(testDataUtil.generateUser(i, 1L)); + userData.add(testDataUtil.generateUser(i, 1L, UserGroupType.UNIVERSITY)); } testDataUtil.generateFriend(userData.get(1), userData.get(0)); diff --git a/src/test/java/com/yello/server/domain/vote/small/VoteServiceTest.java b/src/test/java/com/yello/server/domain/vote/small/VoteServiceTest.java index 25b4c23b..9e8bd2d2 100644 --- a/src/test/java/com/yello/server/domain/vote/small/VoteServiceTest.java +++ b/src/test/java/com/yello/server/domain/vote/small/VoteServiceTest.java @@ -7,6 +7,7 @@ import com.yello.server.domain.cooldown.repository.CooldownRepository; import com.yello.server.domain.friend.FakeFriendRepository; import com.yello.server.domain.friend.repository.FriendRepository; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.keyword.FakeKeywordRepository; import com.yello.server.domain.keyword.dto.response.KeywordCheckResponse; import com.yello.server.domain.keyword.repository.KeywordRepository; @@ -99,7 +100,7 @@ void init() { } for (long i = 1; i <= 5; i++) { - userData.add(testDataUtil.generateUser(i, 1L)); + userData.add(testDataUtil.generateUser(i, 1L, UserGroupType.UNIVERSITY)); } testDataUtil.generateFriend(userData.get(1), userData.get(0)); diff --git a/src/test/java/com/yello/server/infrastructure/firebase/NotificationFcmServiceTest.java b/src/test/java/com/yello/server/infrastructure/firebase/NotificationFcmServiceTest.java index b11f2a90..bf9c8701 100644 --- a/src/test/java/com/yello/server/infrastructure/firebase/NotificationFcmServiceTest.java +++ b/src/test/java/com/yello/server/infrastructure/firebase/NotificationFcmServiceTest.java @@ -3,7 +3,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.yello.server.domain.friend.entity.Friend; -import com.yello.server.domain.group.entity.School; +import com.yello.server.domain.group.entity.UserGroup; import com.yello.server.domain.question.entity.Question; import com.yello.server.domain.user.FakeUserRepository; import com.yello.server.domain.user.entity.Gender; @@ -45,9 +45,9 @@ void init() { .tokenRepository(tokenRepository) .fcmManager(fcmManager) .build(); - School school = School.builder() - .schoolName("Test School") - .departmentName("Testing") + UserGroup userGroup = UserGroup.builder() + .groupName("Test School") + .subGroupName("Testing") .build(); user = userRepository.save(User.builder() .id(1L) @@ -55,7 +55,7 @@ void init() { .yelloId("yelloworld").gender(Gender.MALE) .point(200).social(Social.KAKAO) .profileImage("test image").uuid("1234") - .deletedAt(null).group(school) + .deletedAt(null).group(userGroup) .groupAdmissionYear(20).email("test@test.com") .build()); target = userRepository.save(User.builder() @@ -64,7 +64,7 @@ void init() { .yelloId("helloworld").gender(Gender.MALE) .point(200).social(Social.KAKAO) .profileImage("test image 2").uuid("5678") - .deletedAt(null).group(school) + .deletedAt(null).group(userGroup) .groupAdmissionYear(17).email("hello@test.com") .build()); dummy = User.builder() @@ -73,7 +73,7 @@ void init() { .yelloId("yelloworld").gender(Gender.MALE) .point(200).social(Social.KAKAO) .profileImage("test image 3").uuid("91011") - .deletedAt(null).group(school) + .deletedAt(null).group(userGroup) .groupAdmissionYear(19).email("yello@test.com") .build(); } diff --git a/src/test/java/com/yello/server/infrastructure/firebase/small/FcmManagerTest.java b/src/test/java/com/yello/server/infrastructure/firebase/small/FcmManagerTest.java index 0ba548a7..8567de89 100644 --- a/src/test/java/com/yello/server/infrastructure/firebase/small/FcmManagerTest.java +++ b/src/test/java/com/yello/server/infrastructure/firebase/small/FcmManagerTest.java @@ -2,6 +2,7 @@ import com.yello.server.domain.friend.FakeFriendRepository; import com.yello.server.domain.friend.repository.FriendRepository; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.question.FakeQuestionRepository; import com.yello.server.domain.question.entity.Question; import com.yello.server.domain.question.repository.QuestionRepository; @@ -44,8 +45,8 @@ void init() { .voteRepository(voteRepository) .build(); - User user = testDataUtil.generateUser(1L, 1L); - User target = testDataUtil.generateUser(2L, 1L); + User user = testDataUtil.generateUser(1L, 1L, UserGroupType.UNIVERSITY); + User target = testDataUtil.generateUser(2L, 1L, UserGroupType.UNIVERSITY); Question question = testDataUtil.generateQuestion(1L); testDataUtil.generateVote(1L, user, target, question); } diff --git a/src/test/java/com/yello/server/util/TestDataEntityUtil.java b/src/test/java/com/yello/server/util/TestDataEntityUtil.java index d0275790..0913fac4 100644 --- a/src/test/java/com/yello/server/util/TestDataEntityUtil.java +++ b/src/test/java/com/yello/server/util/TestDataEntityUtil.java @@ -1,7 +1,8 @@ package com.yello.server.util; import com.yello.server.domain.friend.entity.Friend; -import com.yello.server.domain.group.entity.School; +import com.yello.server.domain.group.entity.UserGroup; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.question.entity.Question; import com.yello.server.domain.user.entity.Gender; import com.yello.server.domain.user.entity.Social; @@ -13,11 +14,12 @@ public class TestDataEntityUtil implements TestDataUtil { @Override - public User generateUser(long index, long schoolIndex) { - School school = School.builder() + public User generateUser(long index, long schoolIndex, UserGroupType userGroupType) { + UserGroup userGroup = UserGroup.builder() .id(schoolIndex) - .schoolName("테스트 대학교 %d".formatted(index)) - .departmentName("테스트 학과 %d".formatted(index)) + .groupName("테스트 대학교 %d".formatted(index)) + .subGroupName("테스트 학과 %d".formatted(index)) + .userGroupType(userGroupType) .build(); return User.builder() @@ -31,7 +33,7 @@ public User generateUser(long index, long schoolIndex) { .profileImage("test image") .uuid("%d".formatted(index)) .deletedAt(null) - .group(school) + .group(userGroup) .groupAdmissionYear(20) .deviceToken("deviceToken#%d".formatted(index)) .subscribe(Subscribe.NORMAL) @@ -41,11 +43,12 @@ public User generateUser(long index, long schoolIndex) { } @Override - public User generateDeletedUser(long index, long schoolIndex) { - School school = School.builder() + public User generateDeletedUser(long index, long schoolIndex, UserGroupType userGroupType) { + UserGroup userGroup = UserGroup.builder() .id(schoolIndex) - .schoolName("테스트 대학교 %d".formatted(index)) - .departmentName("테스트 학과 %d".formatted(index)) + .groupName("테스트 대학교 %d".formatted(index)) + .subGroupName("테스트 학과 %d".formatted(index)) + .userGroupType(userGroupType) .build(); return User.builder() @@ -59,7 +62,7 @@ public User generateDeletedUser(long index, long schoolIndex) { .profileImage("test image") .uuid("%d".formatted(index)) .deletedAt(LocalDateTime.now()) - .group(school) + .group(userGroup) .groupAdmissionYear(20) .deviceToken(null) .subscribe(Subscribe.NORMAL) @@ -99,11 +102,12 @@ public Question generateQuestion(long index) { } @Override - public School generateSchool(long index) { - return School.builder() + public UserGroup generateGroup(long index, UserGroupType userGroupType) { + return UserGroup.builder() .id(index) - .schoolName("테스트 대학교 %d".formatted(index)) - .departmentName("테스트 학과 %d".formatted(index)) + .groupName("테스트 그룹 %d".formatted(index)) + .subGroupName("테스트 하위 그룹 %d".formatted(index)) + .userGroupType(userGroupType) .build(); } } diff --git a/src/test/java/com/yello/server/util/TestDataRepositoryUtil.java b/src/test/java/com/yello/server/util/TestDataRepositoryUtil.java index a36c6873..3d20ecef 100644 --- a/src/test/java/com/yello/server/util/TestDataRepositoryUtil.java +++ b/src/test/java/com/yello/server/util/TestDataRepositoryUtil.java @@ -2,7 +2,8 @@ import com.yello.server.domain.friend.entity.Friend; import com.yello.server.domain.friend.repository.FriendRepository; -import com.yello.server.domain.group.entity.School; +import com.yello.server.domain.group.entity.UserGroup; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.question.entity.Question; import com.yello.server.domain.question.repository.QuestionRepository; import com.yello.server.domain.user.entity.Gender; @@ -31,8 +32,8 @@ public TestDataRepositoryUtil(UserRepository userRepository, VoteRepository vote } @Override - public User generateUser(long index, long schoolIndex) { - School school = generateSchool(schoolIndex); + public User generateUser(long index, long schoolIndex, UserGroupType userGroupType) { + UserGroup userGroup = generateGroup(schoolIndex, userGroupType); return userRepository.save(User.builder() .id((index)) @@ -45,7 +46,7 @@ public User generateUser(long index, long schoolIndex) { .profileImage("test image") .uuid("%d".formatted(index)) .deletedAt(null) - .group(school) + .group(userGroup) .groupAdmissionYear(20) .deviceToken("deviceToken#%d".formatted(index)) .subscribe(Subscribe.NORMAL) @@ -55,8 +56,8 @@ public User generateUser(long index, long schoolIndex) { } @Override - public User generateDeletedUser(long index, long schoolIndex) { - School school = generateSchool(schoolIndex); + public User generateDeletedUser(long index, long schoolIndex, UserGroupType userGroupType) { + UserGroup userGroup = generateGroup(schoolIndex, userGroupType); return userRepository.save(User.builder() .id(index) @@ -69,7 +70,7 @@ public User generateDeletedUser(long index, long schoolIndex) { .profileImage("test image") .uuid("%d".formatted(index)) .deletedAt(LocalDateTime.now()) - .group(school) + .group(userGroup) .groupAdmissionYear(20) .deviceToken(null) .subscribe(Subscribe.NORMAL) @@ -113,12 +114,12 @@ public Question generateQuestion(long index) { } @Override - public School generateSchool(long index) { - return School.builder() + public UserGroup generateGroup(long index, UserGroupType userGroupType) { + return UserGroup.builder() .id(index) - .schoolName("테스트 대학교 %d".formatted(index)) - .departmentName("테스트 학과 %d".formatted(index)) + .groupName("테스트 그룹 %d".formatted(index)) + .subGroupName("테스트 하위 그룹 %d".formatted(index)) + .userGroupType(userGroupType) .build(); } - } diff --git a/src/test/java/com/yello/server/util/TestDataUtil.java b/src/test/java/com/yello/server/util/TestDataUtil.java index 0c7ca96c..5bdf6981 100644 --- a/src/test/java/com/yello/server/util/TestDataUtil.java +++ b/src/test/java/com/yello/server/util/TestDataUtil.java @@ -1,16 +1,17 @@ package com.yello.server.util; import com.yello.server.domain.friend.entity.Friend; -import com.yello.server.domain.group.entity.School; +import com.yello.server.domain.group.entity.UserGroup; +import com.yello.server.domain.group.entity.UserGroupType; import com.yello.server.domain.question.entity.Question; import com.yello.server.domain.user.entity.User; import com.yello.server.domain.vote.entity.Vote; public interface TestDataUtil { - User generateUser(long index, long schoolIndex); + User generateUser(long index, long groupIndex, UserGroupType userGroupType); - User generateDeletedUser(long index, long schoolIndex); + User generateDeletedUser(long index, long groupIndex, UserGroupType userGroupType); Friend generateFriend(User user, User target); @@ -18,6 +19,6 @@ public interface TestDataUtil { Question generateQuestion(long index); - School generateSchool(long index); + UserGroup generateGroup(long index, UserGroupType userGroupType); } diff --git a/src/test/java/com/yello/server/util/WithAccessTokenUserSecurityFactory.java b/src/test/java/com/yello/server/util/WithAccessTokenUserSecurityFactory.java index d242458e..f1bbb85f 100644 --- a/src/test/java/com/yello/server/util/WithAccessTokenUserSecurityFactory.java +++ b/src/test/java/com/yello/server/util/WithAccessTokenUserSecurityFactory.java @@ -1,6 +1,6 @@ package com.yello.server.util; -import com.yello.server.domain.group.entity.School; +import com.yello.server.domain.group.entity.UserGroup; import com.yello.server.domain.user.entity.Gender; import com.yello.server.domain.user.entity.Social; import com.yello.server.domain.user.entity.Subscribe; @@ -18,9 +18,9 @@ public class WithAccessTokenUserSecurityFactory implements WithSecurityContextFa public SecurityContext createSecurityContext(WithAccessTokenUser annotation) { SecurityContext context = SecurityContextHolder.createEmptyContext(); - School school = School.builder() - .schoolName("school") - .departmentName("department") + UserGroup userGroup = UserGroup.builder() + .groupName("school") + .subGroupName("department") .build(); User user = User.builder() @@ -34,7 +34,7 @@ public SecurityContext createSecurityContext(WithAccessTokenUser annotation) { .profileImage("profileImage") .uuid("uuid") .deletedAt(null) - .group(school) + .group(userGroup) .deviceToken("deviceToken") .subscribe(Subscribe.NORMAL) .ticketCount(0)