Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#20 [FEAT] 5F 템플릿 회고 작성 API #21

Merged
merged 4 commits into from
Jul 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@

@Service
@RequiredArgsConstructor
@Transactional
public class AuthServiceImpl implements AuthService {
private final JwtTokenProvider jwtTokenProvider;
private final KakaoAuthService kakaoAuthService;
private final MemberRepository memberRepository;
private final UserProjectRepository userProjectRepository;

@Override
@Transactional
public AuthResponseDto socialLogin(String socialAccessToken, AuthRequestDto authRequestDto) throws NoSuchAlgorithmException, InvalidKeySpecException {

if (authRequestDto.getSocialPlatform() == null) {
Expand Down Expand Up @@ -72,11 +72,16 @@ public AuthResponseDto socialLogin(String socialAccessToken, AuthRequestDto auth
String name = signedMember.getName();
List<UserProject> userProjectList = userProjectRepository.findByMemberIdOrderByCreatedAtDesc(signedMember.getId());

if (userProjectList.isEmpty()) {
return AuthResponseDto.of(name, signedMember.getId(),null,
accessToken, refreshToken, !isExistUser);
}
return AuthResponseDto.of(name, signedMember.getId(), userProjectList.get(0).getProject().getId(),
accessToken, refreshToken, !isExistUser);
}

@Override
@Transactional
public AuthTokenResponseDto getNewToken(String accessToken, String refreshToken) {
return AuthTokenResponseDto.of(accessToken,refreshToken);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

@RequiredArgsConstructor
@Component
public class KakaoAuthService {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,8 @@ public UserProject(String role, String nickname, Boolean leaderOrNot, Long revie
this.member = member;
this.project = project;
}

public void updatePreviousTemplateId(Long reviewTemplateId) {
this.reviewTemplateId = reviewTemplateId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ public interface UserProjectRepository extends JpaRepository<UserProject, Long>
List<UserProject> findAllByMemberIdOrderByCreatedAtDesc(Long memberId);

List<UserProject> findByMemberIdOrderByCreatedAtDesc(Long memberId);

UserProject findByMemberIdAndProjectId(Long memberId, Long projectId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.puzzling.puzzlingServer.api.review.controller;

import com.puzzling.puzzlingServer.api.review.dto.request.Review5FRequestDto;
import com.puzzling.puzzlingServer.api.review.dto.response.ReviewTemplateGetResponseDto;
import com.puzzling.puzzlingServer.api.review.dto.request.ReviewTILRequestDto;
import com.puzzling.puzzlingServer.api.review.service.ReviewService;
import com.puzzling.puzzlingServer.common.response.ApiResponse;
import com.puzzling.puzzlingServer.common.response.SuccessStatus;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;


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

private final ReviewService reviewService;

@GetMapping("review/template")
public ApiResponse<ReviewTemplateGetResponseDto> getReviewTemplateAll() {
return ApiResponse.success(SuccessStatus.GET_REVIEW_TEMPLATE_SUCCESS,reviewService.getReviewTemplateAll());
}

@PostMapping("member/{memberId}/project/{projectId}/review/TIL")
public ApiResponse createReviewTIL(@PathVariable("memberId") Long memberId,@PathVariable("projectId") Long projectId, @Valid @RequestBody ReviewTILRequestDto reviewTILRequestDto){
reviewService.createReviewTIL(memberId, projectId, reviewTILRequestDto);
return ApiResponse.success(SuccessStatus.POST_REVIEW_SUCCESS.getStatusCode(), SuccessStatus.POST_REVIEW_SUCCESS.getMessage());
}

@PostMapping("member/{memberId}/project/{projectId}/review/5F")
public ApiResponse createReview5F(@PathVariable("memberId") Long memberId,@PathVariable("projectId") Long projectId, @Valid @RequestBody Review5FRequestDto review5FRequestDto){
reviewService.createReview5F(memberId, projectId, review5FRequestDto);
return ApiResponse.success(SuccessStatus.POST_REVIEW_SUCCESS.getStatusCode(), SuccessStatus.POST_REVIEW_SUCCESS.getMessage());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,19 @@ public class Review extends BaseTimeEntity {
@Column(nullable = false, name = "review_date")
private String reviewDate;

@Column(name = "user_id", nullable = false)
private Long userId;
@Column(name = "member_id", nullable = false)
private Long memberId;

@Column(name = "project_id", nullable = false)
private Long projectId;

@Builder
public Review(UserProject userProject, ReviewTemplate reviewTemplate, String reviewDate,
Long userId, Long projectId) {
Long memberId, Long projectId) {
this.userProject = userProject;
this.reviewTemplate = reviewTemplate;
this.reviewDate = reviewDate;
this.userId = userId;
this.memberId = memberId;
this.projectId = projectId;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.puzzling.puzzlingServer.api.review.dto.request;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;

import static lombok.AccessLevel.PROTECTED;

@Getter
@NoArgsConstructor(access = PROTECTED)
@AllArgsConstructor
public class Review5FRequestDto {

private Long reviewTemplateId;
@NotBlank
private String fact;
@NotBlank
private String feeling;
@NotBlank
private String finding;
@NotBlank
private String feedback;
@NotBlank
private String actionPlan;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.puzzling.puzzlingServer.api.review.dto.request;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

import static lombok.AccessLevel.PROTECTED;

@Getter
@NoArgsConstructor(access = PROTECTED)
@AllArgsConstructor
public class ReviewTILRequestDto {

private Long reviewTemplateId;
@NotBlank
private String liked;
@NotBlank
private String lacked;
@NotBlank
private String actionPlan;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.puzzling.puzzlingServer.api.review.dto.response;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import static lombok.AccessLevel.PRIVATE;

@Getter
@NoArgsConstructor(access = PRIVATE)
@AllArgsConstructor
public class ReviewTemplateGetResponseDto {

private Long reviewTemplateId;
private String reviewTemplateName;
private String reviewTemplateMeaning;

public static ReviewTemplateGetResponseDto of(Long reviewTemplateId,String reviewTemplateName,String reviewTemplateMeaning){
return new ReviewTemplateGetResponseDto(reviewTemplateId,reviewTemplateName,reviewTemplateMeaning);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.puzzling.puzzlingServer.api.review.repository;

import com.puzzling.puzzlingServer.api.review.domain.Review;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ReviewRepository extends JpaRepository<Review, Long> {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package com.puzzling.puzzlingServer.api.review.service.Impl;

import com.puzzling.puzzlingServer.api.project.domain.UserProject;
import com.puzzling.puzzlingServer.api.project.repository.UserProjectRepository;
import com.puzzling.puzzlingServer.api.review.domain.Review;
import com.puzzling.puzzlingServer.api.review.dto.request.Review5FRequestDto;
import com.puzzling.puzzlingServer.api.review.dto.response.ReviewTemplateGetResponseDto;
import com.puzzling.puzzlingServer.api.review.dto.request.ReviewTILRequestDto;
import com.puzzling.puzzlingServer.api.review.repository.ReviewRepository;
import com.puzzling.puzzlingServer.api.review.service.ReviewService;
import com.puzzling.puzzlingServer.api.template.Repository.Review5FRepository;
import com.puzzling.puzzlingServer.api.template.Repository.ReviewTILRepository;
import com.puzzling.puzzlingServer.api.template.Repository.ReviewTemplateRepository;
import com.puzzling.puzzlingServer.api.template.domain.Review5F;
import com.puzzling.puzzlingServer.api.template.domain.ReviewTIL;
import com.puzzling.puzzlingServer.api.template.domain.ReviewTemplate;
import com.puzzling.puzzlingServer.common.exception.BadRequestException;
import com.puzzling.puzzlingServer.common.exception.NotFoundException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.stream.Collectors;


@Service
@RequiredArgsConstructor
public class ReviewServiceImpl implements ReviewService {
private final ReviewTemplateRepository reviewTemplateRepository;
private final UserProjectRepository userProjectRepository;
private final ReviewTILRepository reviewTILRepository;
private final Review5FRepository review5FRepository;
private final ReviewRepository reviewRepository;
@Override
@Transactional
public List<ReviewTemplateGetResponseDto> getReviewTemplateAll() {
List<ReviewTemplate> reviewTemplates = reviewTemplateRepository.findAll();
return reviewTemplates.stream()
.map(reviewTemplate -> ReviewTemplateGetResponseDto.of(reviewTemplate.getId(),reviewTemplate.getName(),reviewTemplate.getMeaning()))
.collect(Collectors.toList());
}


@Override
@Transactional
public void createReviewTIL(Long memberId, Long projectId, ReviewTILRequestDto reviewTILRequestDto) {
UserProject userProject = userProjectRepository.findByMemberIdAndProjectId(memberId,projectId);

if ( reviewTILRequestDto.getReviewTemplateId() == null ) {
throw new BadRequestException("공백일 수 없습니다. (reviewTemplateId)");
}
ReviewTemplate reviewTemplate = findReviewTemplateById(reviewTILRequestDto.getReviewTemplateId());

userProject.updatePreviousTemplateId(reviewTILRequestDto.getReviewTemplateId());

Review review = Review.builder()
.userProject(userProject)
.reviewTemplate(reviewTemplate)
.reviewDate("123")
.memberId(memberId)
.projectId(projectId)
.build();
Review savedReview = reviewRepository.save(review);

ReviewTIL reviewTIL = ReviewTIL.builder()
.review(savedReview)
.liked(reviewTILRequestDto.getLiked())
.lacked(reviewTILRequestDto.getLacked())
.actionPlan(reviewTILRequestDto.getActionPlan())
.build();
reviewTILRepository.save(reviewTIL);
}

@Override
@Transactional
public void createReview5F(Long memberId, Long projectId, Review5FRequestDto review5FRequestDto) {
UserProject userProject = userProjectRepository.findByMemberIdAndProjectId(memberId,projectId);

if ( review5FRequestDto.getReviewTemplateId() == null ) {
throw new BadRequestException("공백일 수 없습니다. (reviewTemplateId)");
}
ReviewTemplate reviewTemplate = findReviewTemplateById(review5FRequestDto.getReviewTemplateId());

userProject.updatePreviousTemplateId(review5FRequestDto.getReviewTemplateId());

Review review = Review.builder()
.userProject(userProject)
.reviewTemplate(reviewTemplate)
.reviewDate("123")
.memberId(memberId)
.projectId(projectId)
.build();
Review savedReview = reviewRepository.save(review);

Review5F review5F = Review5F.builder()
.review(savedReview)
.fact(review5FRequestDto.getFact())
.feeling(review5FRequestDto.getFeeling())
.finding(review5FRequestDto.getFinding())
.feedback(review5FRequestDto.getFeedback())
.actionPlan(review5FRequestDto.getActionPlan())
.build();
review5FRepository.save(review5F);
}


private ReviewTemplate findReviewTemplateById (Long reviewTemplateId) {
return reviewTemplateRepository.findById(reviewTemplateId)
.orElseThrow(() -> new NotFoundException("해당하는 회고 팀플릿이 없습니다"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.puzzling.puzzlingServer.api.review.service;

import com.puzzling.puzzlingServer.api.review.dto.request.Review5FRequestDto;
import com.puzzling.puzzlingServer.api.review.dto.response.ReviewTemplateGetResponseDto;
import com.puzzling.puzzlingServer.api.review.dto.request.ReviewTILRequestDto;


import java.util.List;

public interface ReviewService {
List<ReviewTemplateGetResponseDto> getReviewTemplateAll();

void createReviewTIL(Long memberId, Long projectId, ReviewTILRequestDto reviewTILRequestDto);

void createReview5F(Long memberId, Long projectId, Review5FRequestDto review5FRequestDto);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.puzzling.puzzlingServer.api.template.Repository;

import com.puzzling.puzzlingServer.api.template.domain.Review5F;
import org.springframework.data.jpa.repository.JpaRepository;

public interface Review5FRepository extends JpaRepository<Review5F, Long> {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.puzzling.puzzlingServer.api.template.Repository;

import com.puzzling.puzzlingServer.api.template.domain.ReviewTIL;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

public interface ReviewTILRepository extends JpaRepository<ReviewTIL, Long> {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.puzzling.puzzlingServer.api.template.Repository;

import com.puzzling.puzzlingServer.api.template.domain.ReviewTemplate;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.Optional;

public interface ReviewTemplateRepository extends JpaRepository<ReviewTemplate, Long> {
List<ReviewTemplate> findAll();

Optional<ReviewTemplate> findById(Long TemplateId);

}
Loading
Loading