Skip to content

Commit

Permalink
Merge pull request #861 from peer-42seoul/release-1.0.3
Browse files Browse the repository at this point in the history
Release-1.0.3
  • Loading branch information
wochae authored Feb 14, 2024
2 parents bef3d09 + 27e26bc commit 0fecc1c
Show file tree
Hide file tree
Showing 47 changed files with 1,712 additions and 779 deletions.
2 changes: 1 addition & 1 deletion private-resources
12 changes: 12 additions & 0 deletions src/main/java/peer/backend/annotation/ValidUserId.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package peer.backend.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ValidUserId {

}
21 changes: 9 additions & 12 deletions src/main/java/peer/backend/aspect/RequestLoggingAspect.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ private String getRequestInfo(ProceedingJoinPoint pjp, HttpServletRequest reques
.append(" ")
.append(request.getRequestURI())
.append(" ")
.append(request.getRemoteAddr())
.append(" ")
.append(params)
.toString();
}
Expand All @@ -61,24 +63,19 @@ public Object loggingApi(ProceedingJoinPoint pjp) throws Throwable {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
String requestInfo = this.getRequestInfo(pjp, request);

long start = System.currentTimeMillis();
try {
long start = System.currentTimeMillis();
log.info("[Request] {}", requestInfo);
Object result = pjp.proceed();
long end = System.currentTimeMillis();
log.info("[Response] {}: {} < ({}ms)", requestInfo,
mapper.writeValueAsString(result), end - start);
return result;
return pjp.proceed();
} catch (Exception e) {
StringBuilder message = new StringBuilder();

for (StackTraceElement stackTraceElement : e.getStackTrace()) {
message.append(System.lineSeparator()).append(stackTraceElement.toString());
}

log.error("[Error] {} {} {}", requestInfo, e, message.toString());
log.error("[Error] {} {} {}", requestInfo, e, message);
throw e;
} finally {
long end = System.currentTimeMillis();
log.info("[Request] {} < ({}ms)", requestInfo, end - start);
}
}
}
}
37 changes: 37 additions & 0 deletions src/main/java/peer/backend/aspect/ValidUserIdAspect.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package peer.backend.aspect;

import java.lang.reflect.Method;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import peer.backend.exception.BadRequestException;

@Aspect
@Component
public class ValidUserIdAspect {

@Pointcut("@annotation(peer.backend.annotation.ValidUserId)")
public void validUserId() {
}

@Before("validUserId()")
public void validUserId(JoinPoint joinPoint) {
Object[] args = joinPoint.getArgs();

MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();

for (int i = 0; i < method.getParameters().length; i++) {
String parameterName = method.getParameters()[i].getName();
if (parameterName.equals("userId")) {
Long userId = (Long) args[i];
if (userId < 0) {
throw new BadRequestException("임시 혹은 탈퇴한 유저입니다!");
}
}
}
}
}
10 changes: 10 additions & 0 deletions src/main/java/peer/backend/comparator/LongComparator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package peer.backend.comparator;

import java.util.Comparator;
public class LongComparator implements Comparator<Long> {

@Override
public int compare(Long o1, Long o2) {
return o1.compareTo(o2);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import peer.backend.exception.BadRequestException;
import peer.backend.service.PrivateInfoWrappingService;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@RestController
Expand Down
23 changes: 21 additions & 2 deletions src/main/java/peer/backend/controller/board/BoardController.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,21 @@
import peer.backend.dto.board.team.PostCommentUpdateRequest;
import peer.backend.dto.board.team.PostCreateRequest;
import peer.backend.dto.board.team.PostUpdateRequest;
import peer.backend.dto.noti.enums.NotificationPriority;
import peer.backend.dto.noti.enums.NotificationType;
import peer.backend.entity.board.team.Post;
import peer.backend.entity.board.team.enums.BoardType;
import peer.backend.entity.user.User;
import peer.backend.service.board.team.BoardService;
import peer.backend.service.noti.NotificationCreationService;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/team")
public class BoardController {

private final BoardService boardService;
private final NotificationCreationService notificationCreationService;

@PostMapping("/board/create")
public void createBoard(@RequestBody BoardCreateRequest request, Authentication auth) {
Expand Down Expand Up @@ -71,11 +76,25 @@ public void deletePost(@PathVariable("postId") Long postId, Authentication auth)

@PostMapping("/post/comment")
public void createComment(@RequestBody @Valid PostCommentRequest request, Authentication auth) {
boardService.createComment(
User user = User.authenticationToUser(auth);
Post post = boardService.createComment(
request.getPostId(),
request.getContent(),
User.authenticationToUser(auth),
user,
BoardType.NORMAL);

Long writer = post.getUser().getId();

this.notificationCreationService.makeNotificationForUser(
null,
user.getNickname() + " 님께서 댓글을 다셨습니다 : " + request.getContent(),
null,
NotificationPriority.IMMEDIATE,
NotificationType.SYSTEM,
null,
writer,
null
);
}

@PutMapping("/post/comment/{commentId}")
Expand Down
14 changes: 10 additions & 4 deletions src/main/java/peer/backend/controller/board/RecruitController.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.*;
import peer.backend.annotation.AuthorCheck;
import peer.backend.dto.board.recruit.*;
import peer.backend.entity.board.recruit.Recruit;
import peer.backend.entity.board.recruit.enums.RecruitFavoriteEnum;
import peer.backend.entity.user.User;
import peer.backend.exception.NotFoundException;
import peer.backend.repository.board.recruit.RecruitRepository;
import peer.backend.exception.BadRequestException;
import peer.backend.service.board.recruit.RecruitService;

import javax.validation.Valid;
Expand Down Expand Up @@ -66,8 +66,14 @@ public Long updateRecruit(@PathVariable Long recruit_id,

@ApiOperation(value = "", notes = "모집글을 삭제한다.")
@DeleteMapping("/{recruit_id}")
public void deleteRecruit(@PathVariable Long recruit_id) {
recruitService.deleteRecruit(recruit_id);
@AuthorCheck
public ResponseEntity<?> deleteRecruit(@PathVariable Long recruit_id, Authentication auth) {
try {
recruitService.deleteRecruit(recruit_id, User.authenticationToUser(auth));
} catch (BadRequestException e) {
return ResponseEntity.badRequest().body(e);
}
return ResponseEntity.ok().build();
}

@ApiOperation(value = "", notes = "모집에 지원한다.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.*;
import peer.backend.dto.board.team.*;
import peer.backend.dto.noti.enums.NotificationPriority;
import peer.backend.dto.noti.enums.NotificationType;
import peer.backend.entity.board.team.enums.BoardType;
import peer.backend.entity.user.User;
import peer.backend.service.board.team.BoardService;
import peer.backend.service.board.team.ShowcaseService;
import peer.backend.service.noti.NotificationCreationService;
import peer.backend.service.profile.UserPortfolioService;

import javax.validation.Valid;
Expand All @@ -26,6 +29,8 @@ public class ShowcaseController {
private final UserPortfolioService userPortfolioService;
private final BoardService boardService;

private final NotificationCreationService notificationCreationService;

@GetMapping("")
public Page<ShowcaseListResponse> getShowcaseList(@RequestParam int page, @RequestParam int pageSize, Authentication auth){
return showcaseService.getShowCaseList(page - 1, pageSize, auth);
Expand Down Expand Up @@ -91,11 +96,22 @@ public List<PostCommentListResponse> getShowcaseComments(@PathVariable Long show

@PostMapping("/comment")
public void createShowcaseComment(@RequestBody @Valid PostCommentRequest request, Authentication auth){
User user = User.authenticationToUser(auth);
boardService.createComment(
request.getPostId(),
request.getContent(),
User.authenticationToUser(auth),
user,
BoardType.SHOWCASE);
this.notificationCreationService.makeNotificationForTeam(
null,
user.getNickname() + "님께서 코멘트를 다셨습니다. : " + request.getContent(),
"/showcase/detail/" + request.getPostId(),
NotificationPriority.IMMEDIATE,
NotificationType.SYSTEM,
null,
request.getTeamId(),
null
);
}

@DeleteMapping("/comment/{commentId}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,39 +10,99 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import peer.backend.dto.noti.NotificationDTO;
import peer.backend.dto.noti.enums.NotificationType;
import peer.backend.dto.user.UserAlarmSettingDTO;
import peer.backend.entity.user.User;
import peer.backend.exception.BadRequestException;
import peer.backend.repository.user.UserRepository;
import peer.backend.service.noti.NotificationMainService;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping(NotificationController.MAPPING_URL)
@Slf4j
public class NotificationController {
public static final String MAPPING_URL = "/api/v1/noti/spring";
public static final String MAPPING_URL = "api/v1/noti";
private final NotificationMainService notificationMainService;

private final UserRepository userRepository;

///api/v1/noti/spring?type=${}&pgIdx=${number}&pgSize={number}
@GetMapping()
@GetMapping("/spring")
public ResponseEntity<?> getAlarmList(Authentication auth,
@Param("type") NotificationType type,
@Param("pgIdx") Long pageIndex,
@Param("pgIdx") Long pgIdx,
@Param("Size") Long size) {
//TODO : making code logic
return new ResponseEntity<>(HttpStatus.OK);
List<NotificationDTO> result = new ArrayList<>();
try {
result = this.notificationMainService.getNotificationList(User.authenticationToUser(auth), type, pgIdx, size);
} catch (BadRequestException e) {
return ResponseEntity.badRequest().build();
}
return ResponseEntity.ok().body(result);
}

///api/v1/noti/spring/delete-all?type=${}
@DeleteMapping("/delete-all")
public ResponseEntity<?> deleteAlarmAll(Authentication auth,
@DeleteMapping("/spring/delete-all")
public ResponseEntity<Void> deleteAlarmAll(Authentication auth,
@Param("type") NotificationType type) {
//TODO : making code logic
return new ResponseEntity<>(HttpStatus.OK);
this.notificationMainService.deleteNotificationAll(
User.authenticationToUser(auth),
type);
return ResponseEntity.ok().build();
}

///api/v1/noti/spring/delete-taget?targetId=${alarmId}
@DeleteMapping("delete-target")
@DeleteMapping("/spring/delete-target")
public ResponseEntity<?> deleteAlarmTarget(Authentication auth,
@Param("targetId") Long alarmId) {
//TODO : making code logic
@Param("notificationId") Long notificationId) {
try {
this.notificationMainService.deleteNotification(
User.authenticationToUser(auth),
notificationId
);
} catch (BadRequestException e) {
return ResponseEntity.badRequest().body(e);
}
return ResponseEntity.ok().build();
}


@GetMapping("/get-my-alarm")
public ResponseEntity<UserAlarmSettingDTO> getUserAlarmSettings(Authentication auth) {
User user = User.authenticationToUser(auth);
UserAlarmSettingDTO result = UserAlarmSettingDTO.builder()
.keyword(user.isKeywordRecommendAlarm())
.team(user.isTeamAlarm())
.message(user.isMessageAlarm())
.nightAlarm(user.isNightAlarm())
.build();
return ResponseEntity.ok(result);
}

@GetMapping("/alarm-setting")
public ResponseEntity<Void> setUserAlarmSettings(Authentication auth,
@Param("alarmType") String type,
@Param("value") boolean value) {
try {
this.notificationMainService.setAlarmForUser(User.authenticationToUser(auth),
type,
value);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.FORBIDDEN);
}
return new ResponseEntity<>(HttpStatus.OK);
}

@GetMapping("/summary")
public ResponseEntity<?> summarizeYourAlarm(Authentication auth) {
User user = this.userRepository.findById(User.authenticationToUser(auth).getId()).orElseThrow(() -> new BadRequestException("잘못된 요청입니다."));
Integer newAlarm = user.getNewAlarmCounter();
if(newAlarm.equals(0))
return ResponseEntity.noContent().build();
else
return ResponseEntity.ok(newAlarm);
}
}
Loading

0 comments on commit 0fecc1c

Please sign in to comment.