Skip to content

Commit

Permalink
Merge branch 'main' into docs/#155
Browse files Browse the repository at this point in the history
  • Loading branch information
khyojun authored Jan 24, 2025
2 parents 7b6d456 + 4657aa3 commit 8913590
Show file tree
Hide file tree
Showing 56 changed files with 640 additions and 153 deletions.
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ dependencies {

// valid
implementation 'org.springframework.boot:spring-boot-starter-validation'

//aop
implementation 'org.springframework.boot:spring-boot-starter-aop'
}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.ggang.be.api.comment.facade.CommentFacade;
import com.ggang.be.api.common.ApiResponse;
import com.ggang.be.api.common.ResponseBuilder;
import com.ggang.be.domain.constant.GroupType;
import com.ggang.be.global.jwt.JwtService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
Expand All @@ -21,14 +22,24 @@ public class CommentController {
private final JwtService jwtService;

@PostMapping("/comment")
public ResponseEntity<ApiResponse<WriteCommentResponse>> writeComment(@RequestHeader("Authorization") final String token, @RequestBody @Valid final WriteCommentRequest dto){
public ResponseEntity<ApiResponse<WriteCommentResponse>> writeComment(
@RequestHeader("Authorization") final String token,
@RequestBody @Valid final WriteCommentRequest dto
) {
Long userId = jwtService.parseTokenAndGetUserId(token);
return ResponseBuilder.created(commentFacade.writeComment(userId, dto));
}

@GetMapping("/comments")
public ResponseEntity<ApiResponse<ReadCommentResponse>> getComments(@RequestHeader("Authorization") final String token, @RequestParam boolean isPublic, @RequestBody final ReadCommentRequest dto){
public ResponseEntity<ApiResponse<ReadCommentResponse>> getComments(
@RequestHeader("Authorization") final String token,
@RequestParam boolean isPublic,
@RequestParam("groupId") long groupId,
@RequestParam("groupType") GroupType groupType
) {
Long userId = jwtService.parseTokenAndGetUserId(token);
ReadCommentRequest dto = new ReadCommentRequest(groupId, groupType);

return ResponseBuilder.ok(commentFacade.readComment(userId, isPublic, dto));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,14 @@ public class GroupRequestFacade {
private final UserService userService;
private final LocationValidator locationValidator;
private final TitleValidator titleValidator;
private final IntroductionValidator introductionValidator;

public void validateRegisterRequest(Long userId, RegisterGongbaekRequest dto) {
TimeValidator.isTimeValid(dto.startTime(), dto.endTime());
isDateValid(dto);
isWeekDateRight(dto);
titleValidator.isGroupTitleValid(dto.groupTitle());
locationValidator.isLocationValid(dto.location());
introductionValidator.isIntroductionValid(dto.introduction());
IntroductionValidator.isIntroductionValid(dto.introduction());
isValidCoverImg(dto);
isValidMaxPeople(dto);

Expand All @@ -57,9 +56,7 @@ private void isValidCoverImg(RegisterGongbaekRequest dto) {
private void isDateValid(RegisterGongbaekRequest dto) {
if(dto.groupType() == GroupType.ONCE) {
TimeValidator.isDateBeforeNow(dto.weekDate());
TimeValidator.isSameDate(dto.dueDate(), dto.weekDate());
}
TimeValidator.isDateBeforeNow(dto.dueDate());
}

private void isWeekDateRight(RegisterGongbaekRequest dto) {
Expand Down
14 changes: 3 additions & 11 deletions src/main/java/com/ggang/be/api/facade/SignupFacade.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,18 @@
import com.ggang.be.api.exception.GongBaekException;
import com.ggang.be.api.lectureTimeSlot.service.LectureTimeSlotService;
import com.ggang.be.api.school.service.SchoolService;
import com.ggang.be.api.user.NicknameValidator;
import com.ggang.be.api.user.dto.SignupRequest;
import com.ggang.be.api.user.dto.SignupResponse;
import com.ggang.be.api.user.service.UserService;
import com.ggang.be.api.user.vo.TimeTableVo;
import com.ggang.be.domain.group.IntroductionValidator;
import com.ggang.be.domain.school.SchoolEntity;
import com.ggang.be.domain.timslot.lectureTimeSlot.vo.LectureTimeSlotVo;
import com.ggang.be.domain.user.UserEntity;
import com.ggang.be.domain.user.dto.SaveUserSignUp;
import com.ggang.be.global.jwt.JwtService;
import com.ggang.be.global.util.TimeValidator;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -34,9 +37,6 @@ public void duplicateCheckNickname(final String nickname) {

@Transactional
public SignupResponse signup(SignupRequest request) {

duplicateUserCheck(request);

SchoolEntity schoolEntityByName = schoolService.findSchoolEntityByName(request.schoolName());

SaveUserSignUp saveUserSignUp = SignupRequest.toSaveUserSignUp(request, schoolEntityByName);
Expand All @@ -52,14 +52,6 @@ public SignupResponse signup(SignupRequest request) {
return madeSignupResponse(userEntity);
}

private void duplicateUserCheck(SignupRequest request) {
try{
duplicateCheckNickname(request.nickname());
} catch (GongBaekException e) {
throw new GongBaekException(ResponseError.USERNAME_ALREADY_EXISTS);
}
}

private SignupResponse madeSignupResponse(final UserEntity userEntity) {
Long userId = userEntity.getId();
String accessToken = jwtService.createAccessToken(userId);
Expand Down
37 changes: 37 additions & 0 deletions src/main/java/com/ggang/be/api/facade/SignupRequestFacade.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.ggang.be.api.facade;

import com.ggang.be.api.common.ResponseError;
import com.ggang.be.api.exception.GongBaekException;
import com.ggang.be.api.user.NicknameValidator;
import com.ggang.be.api.user.dto.SignupRequest;
import com.ggang.be.api.user.service.UserService;
import com.ggang.be.domain.group.IntroductionValidator;
import com.ggang.be.global.annotation.Facade;
import com.ggang.be.global.util.TimeValidator;
import lombok.RequiredArgsConstructor;

@Facade
@RequiredArgsConstructor
public class SignupRequestFacade {

private final UserService userService;

public void validateSignupRequest(SignupRequest request) {
userService.duplicateCheckNickname(request.nickname());
IntroductionValidator.isIntroductionValid(request.introduction());
NicknameValidator.validate(request.nickname());
TimeValidator.hasDuplicateInfo(request.timeTable());
TimeValidator.isTimeVoValidTime(request.timeTable());

isValidSchoolGrade(request.schoolGrade());
TimeValidator.isYearAfterNow(request.enterYear());
}

private void isValidSchoolGrade(Integer schoolGrade) {
if (schoolGrade < 1 || schoolGrade > 4) {
throw new GongBaekException(ResponseError.BAD_REQUEST);
}
}


}
3 changes: 1 addition & 2 deletions src/main/java/com/ggang/be/api/facade/TimeTableFacade.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,11 @@
public class TimeTableFacade {
private final LectureTimeSlotService lectureTimeSlotService;
private final UserService userService;
private final ReadCommonInvalidTimeVoMaker voMaker;

public ReadInvalidTimeResponse readMyInvalidTime(final long userId) {
UserEntity findUserEntity = userService.getUserById(userId);
List<LectureTimeSlotEntity> lectureTimeSlotEntities = lectureTimeSlotService.readUserTime(findUserEntity);

return ReadInvalidTimeResponse.fromVo(voMaker.convertToCommonResponse(lectureTimeSlotEntities));
return ReadInvalidTimeResponse.fromVo(ReadCommonInvalidTimeVoMaker.convertToCommonResponse(lectureTimeSlotEntities));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ public class GroupController {
@GetMapping("/fill/info")
public ResponseEntity<ApiResponse<GroupResponse>> getGroupInfo(
@RequestHeader("Authorization") final String accessToken,
@RequestBody final GroupRequest groupRequestDto
@RequestParam("groupId") long groupId,
@RequestParam("groupType") GroupType groupType
) {
Long userId = jwtService.parseTokenAndGetUserId(accessToken);
GroupRequest groupRequestDto = new GroupRequest(groupId, groupType);

GroupResponse groupResponseDto = groupFacade.getGroupInfo(
groupRequestDto.groupType(), groupRequestDto.groupId(), userId
Expand All @@ -42,9 +44,11 @@ public ResponseEntity<ApiResponse<GroupResponse>> getGroupInfo(
@GetMapping("/fill/user/info")
public ResponseEntity<ApiResponse<GroupUserInfoResponseDto>> getGroupUserInfo(
@RequestHeader("Authorization") final String accessToken,
@RequestBody final GroupRequest groupRequestDto
@RequestParam("groupId") long groupId,
@RequestParam("groupType") GroupType groupType
){
jwtService.isValidToken(accessToken);
GroupRequest groupRequestDto = new GroupRequest(groupId, groupType);

GroupUserInfoResponseDto groupUserInfoResponseDto = GroupUserInfoResponseDto.of(
groupFacade.getGroupUserInfo(groupRequestDto.groupType(), groupRequestDto.groupId()));
Expand All @@ -67,24 +71,32 @@ public ResponseEntity<ApiResponse<RegisterGroupResponse>> registerGongbaek(
@GetMapping("/fill/members")
public ResponseEntity<ApiResponse<ReadFillMembersResponse>> getGroupMembers(
@RequestHeader("Authorization") String token,
@RequestBody ReadFillMembersRequest dto
@RequestParam("groupId") long groupId,
@RequestParam("groupType") GroupType groupType
) {
Long userId = jwtService.parseTokenAndGetUserId(token);
ReadFillMembersRequest dto = new ReadFillMembersRequest(groupId, groupType);

return ResponseBuilder.ok(groupFacade.getGroupUsersInfo(userId, dto));
}

@GetMapping("/my/groups")
public ResponseEntity<ApiResponse<List<MyGroupResponse>>> getMyGroups(
public ResponseEntity<ApiResponse<FinalMyGroupResponse>> getMyGroups(
@RequestHeader("Authorization") final String accessToken,
@RequestBody final FillGroupFilterRequest groupFilterRequest
@RequestParam(value = "category") FillGroupType category,
@RequestParam(value = "status") boolean status
) {
Long userId = jwtService.parseTokenAndGetUserId(accessToken);

if (!FillGroupType.isValidCategory(groupFilterRequest.category())) {
if (!FillGroupType.isValidCategory(category)) {
throw new GongBaekException(ResponseError.BAD_REQUEST);
}

return ResponseBuilder.ok(groupFacade.getMyGroups(userId, groupFilterRequest));
FinalMyGroupResponse finalResponse = new FinalMyGroupResponse(
groupFacade.getMyGroups(userId, category, status)
);

return ResponseBuilder.ok(finalResponse);
}

@GetMapping("/fill/groups")
Expand All @@ -98,7 +110,7 @@ public ResponseEntity<ApiResponse<List<ActiveGroupsResponse>>> getFillGroups(
}

@GetMapping("/group/latest")
public ResponseEntity<ApiResponse<List<ActiveGroupsResponse>>> getLatestGroups(
public ResponseEntity<ApiResponse<List<LatestResponse>>> getLatestGroups(
@RequestHeader("Authorization") final String accessToken,
@RequestParam("groupType") final GroupType groupType
) {
Expand Down Expand Up @@ -137,4 +149,15 @@ public ResponseEntity<ApiResponse<Void>> cancelMyApplication(

return ResponseBuilder.ok(null);
}

@DeleteMapping("/my/groups")
public ResponseEntity<ApiResponse<Void>> deleteMyGroup(
@RequestHeader("Authorization") String accessToken,
@RequestBody final GroupRequest requestDto
) {
Long userId = jwtService.parseTokenAndGetUserId(accessToken);
groupFacade.deleteMyGroup(userId, requestDto);

return ResponseBuilder.ok(null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.ggang.be.domain.constant.Category;
import com.ggang.be.domain.constant.GroupType;
import com.ggang.be.domain.constant.WeekDate;
import com.ggang.be.domain.constant.WeekDay;
import com.ggang.be.domain.group.dto.GroupVo;

import java.time.LocalDate;
Expand All @@ -14,8 +14,8 @@ public record ActiveGroupsResponse(
int profileImg,
GroupType groupType,
String groupTitle,
WeekDate weekDate,
LocalDate groupDate,
WeekDay weekDay,
LocalDate weekDate,
double startTime,
double endTime,
String location
Expand All @@ -28,8 +28,8 @@ public static ActiveGroupsResponse fromGroupVo(GroupVo groupVo) {
groupVo.profileImg(),
groupVo.groupType(),
groupVo.groupTitle(),
groupVo.weekDay(),
groupVo.weekDate(),
groupVo.groupDate(),
groupVo.startTime(),
groupVo.endTime(),
groupVo.location()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.ggang.be.api.group.dto;

import java.util.List;

public record FinalMyGroupResponse(
List<MyGroupResponse> groups
) {
}
4 changes: 2 additions & 2 deletions src/main/java/com/ggang/be/api/group/dto/GroupResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.ggang.be.domain.constant.Category;
import com.ggang.be.domain.constant.Status;
import com.ggang.be.domain.constant.WeekDate;
import com.ggang.be.domain.constant.WeekDay;

public record GroupResponse(
long groupId,
Expand All @@ -18,7 +18,7 @@ public record GroupResponse(
String introduction,
Category category,
int coverImg,
WeekDate weekDay,
WeekDay weekDay,
String weekDate,
double startTime,
double endTime
Expand Down
40 changes: 40 additions & 0 deletions src/main/java/com/ggang/be/api/group/dto/LatestResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.ggang.be.api.group.dto;

import com.ggang.be.domain.constant.Category;
import com.ggang.be.domain.constant.GroupType;
import com.ggang.be.domain.constant.WeekDay;
import com.ggang.be.domain.group.dto.GroupVo;

import java.time.LocalDate;

public record LatestResponse(
long groupId,
Category category,
int coverImg,
int profileImg,
String nickname,
GroupType groupType,
String groupTitle,
WeekDay weekDay,
LocalDate weekDate,
double startTime,
double endTime,
String location
) {
public static LatestResponse fromGroupVo(GroupVo groupVo) {
return new LatestResponse(
groupVo.groupId(),
groupVo.category(),
groupVo.coverImg(),
groupVo.profileImg(),
groupVo.nickname(),
groupVo.groupType(),
groupVo.groupTitle(),
groupVo.weekDay(),
groupVo.weekDate(),
groupVo.startTime(),
groupVo.endTime(),
groupVo.location()
);
}
}
8 changes: 4 additions & 4 deletions src/main/java/com/ggang/be/api/group/dto/MyGroupResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
import com.ggang.be.domain.constant.Category;
import com.ggang.be.domain.constant.GroupType;
import com.ggang.be.domain.constant.Status;
import com.ggang.be.domain.constant.WeekDate;
import com.ggang.be.domain.constant.WeekDay;
import com.ggang.be.domain.group.dto.GroupVo;

import java.time.LocalDate;

public record MyGroupResponse(
long groupId, Status status, Category category, int coverImg, GroupType groupType,
String groupTitle, WeekDate weekDay, LocalDate weekDate, double startTime, double endTime, String location
long groupId, Status status, Category category, int coverImg, GroupType groupType,
String groupTitle, WeekDay weekDay, LocalDate weekDate, double startTime, double endTime, String location
) {
public static MyGroupResponse fromGroupVo(GroupVo groupVo) {
return new MyGroupResponse(
Expand All @@ -20,8 +20,8 @@ public static MyGroupResponse fromGroupVo(GroupVo groupVo) {
groupVo.coverImg(),
groupVo.groupType(),
groupVo.groupTitle(),
groupVo.weekDay(),
groupVo.weekDate(),
groupVo.groupDate(),
groupVo.startTime(),
groupVo.endTime(),
groupVo.location()
Expand Down
Loading

0 comments on commit 8913590

Please sign in to comment.