Skip to content

Commit

Permalink
Merge pull request #49 from TripComeTrue/#42-triprecord-mainpage-dev
Browse files Browse the repository at this point in the history
[feat] 여행후기 관련 엔티티 & 예외 구현
  • Loading branch information
junmo95 authored Jan 8, 2024
2 parents aa5962d + 36c05f6 commit c8f8a3f
Show file tree
Hide file tree
Showing 24 changed files with 536 additions and 29 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.haejwo.tripcometrue.domain.member.controller;

import com.haejwo.tripcometrue.domain.member.exception.EmailDuplicateException;
import com.haejwo.tripcometrue.domain.member.exception.UserInvalidAccessException;
import com.haejwo.tripcometrue.domain.triprecord.exception.TripRecordNotFoundException;
import com.haejwo.tripcometrue.global.util.ResponseDTO;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand All @@ -23,5 +25,17 @@ public ResponseEntity<ResponseDTO<Void>> handleUserControllerExceptions(
return ResponseEntity.status(status).body(
ResponseDTO.errorWithMessage(status, exception.getMessage()));
}

@ExceptionHandler(UserInvalidAccessException.class)
public ResponseEntity<ResponseDTO<Void>> userInvalidAccessException(
UserInvalidAccessException e
) {
HttpStatus status = e.getErrorCode().getHttpStatus();

return ResponseEntity
.status(status)
.body(ResponseDTO.errorWithMessage(status, e.getMessage()));
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.haejwo.tripcometrue.domain.member.exception;


import com.haejwo.tripcometrue.global.exception.ApplicationException;
import com.haejwo.tripcometrue.global.exception.ErrorCode;

public class UserInvalidAccessException extends ApplicationException {

private static final ErrorCode ERROR_CODE = ErrorCode.USER_INVALID_ACCESS;

public UserInvalidAccessException() {
super(ERROR_CODE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.haejwo.tripcometrue.global.exception.ErrorCode;

public class PlaceNotFoundException extends ApplicationException {
private static final ErrorCode ERROR_CODE = ErrorCode.PLCAE_NOT_FOUND;
private static final ErrorCode ERROR_CODE = ErrorCode.PLACE_NOT_FOUND;

public PlaceNotFoundException() {
super(ERROR_CODE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import com.haejwo.tripcometrue.domain.triprecord.dto.request.TripRecordRequestDto;
import com.haejwo.tripcometrue.domain.triprecord.dto.response.TripRecordResponseDto;
import com.haejwo.tripcometrue.domain.triprecord.service.TripRecordService;
import com.haejwo.tripcometrue.global.springsecurity.PrincipalDetails;
import com.haejwo.tripcometrue.global.util.ResponseDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
Expand All @@ -24,10 +26,11 @@ public class TripRecordController {

@PostMapping
public ResponseEntity<ResponseDTO<TripRecordResponseDto>> tripRecordAdd(
@AuthenticationPrincipal PrincipalDetails principalDetails,
@RequestBody TripRecordRequestDto requestDto
) {

TripRecordResponseDto responseDto = tripRecordService.addTripRecord(requestDto);
TripRecordResponseDto responseDto = tripRecordService.addTripRecord(principalDetails, requestDto);
ResponseDTO<TripRecordResponseDto> responseBody = ResponseDTO.okWithData(responseDto);

return ResponseEntity
Expand All @@ -50,11 +53,12 @@ public ResponseEntity<ResponseDTO<TripRecordResponseDto>> tripRecordDetails(

@PutMapping("/{tripRecordId}")
public ResponseEntity<ResponseDTO<TripRecordResponseDto>> tripRecordModify(
@AuthenticationPrincipal PrincipalDetails principalDetails,
@PathVariable Long tripRecordId,
@RequestBody TripRecordRequestDto requestDto
) {

TripRecordResponseDto responseDto = tripRecordService.modifyTripRecord(tripRecordId, requestDto);
TripRecordResponseDto responseDto = tripRecordService.modifyTripRecord(principalDetails, tripRecordId, requestDto);
ResponseDTO<TripRecordResponseDto> responseBody = ResponseDTO.okWithData(responseDto);

return ResponseEntity
Expand All @@ -65,10 +69,11 @@ public ResponseEntity<ResponseDTO<TripRecordResponseDto>> tripRecordModify(

@DeleteMapping("/{tripRecordId}")
public ResponseEntity<ResponseDTO> tripRecordRemove(
@AuthenticationPrincipal PrincipalDetails principalDetails,
@PathVariable Long tripRecordId
) {

tripRecordService.removeTripRecord(tripRecordId);
tripRecordService.removeTripRecord(principalDetails, tripRecordId);
ResponseDTO responseBody = ResponseDTO.ok();

return ResponseEntity
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.haejwo.tripcometrue.domain.triprecord.controller;

import com.haejwo.tripcometrue.domain.triprecord.exception.ExpenseRangeTypeNotFoundException;
import com.haejwo.tripcometrue.domain.triprecord.exception.TripRecordNotFoundException;
import com.haejwo.tripcometrue.global.util.ResponseDTO;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class TripRecordControllerAdvice {

@ExceptionHandler(TripRecordNotFoundException.class)
public ResponseEntity<ResponseDTO<Void>> tripRecordNotFoundException(
TripRecordNotFoundException e
) {
HttpStatus status = e.getErrorCode().getHttpStatus();

return ResponseEntity
.status(status)
.body(ResponseDTO.errorWithMessage(status, e.getMessage()));
}

@ExceptionHandler(ExpenseRangeTypeNotFoundException.class)
public ResponseEntity<ResponseDTO<Void>> expenseRangeTypeNotFoundException(
ExpenseRangeTypeNotFoundException e
) {
HttpStatus status = e.getErrorCode().getHttpStatus();

return ResponseEntity
.status(status)
.body(ResponseDTO.errorWithMessage(status, e.getMessage()));
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.haejwo.tripcometrue.domain.triprecord.dto.request;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.haejwo.tripcometrue.domain.triprecord.entity.ExpenseRangeType;
import com.haejwo.tripcometrue.domain.member.entity.Member;
import com.haejwo.tripcometrue.domain.triprecord.entity.type.ExpenseRangeType;
import com.haejwo.tripcometrue.domain.triprecord.entity.TripRecord;
import java.time.LocalDate;
import lombok.Builder;
Expand All @@ -12,18 +13,20 @@ public record TripRecordRequestDto(
ExpenseRangeType expenseRangeType,
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") LocalDate tripStartDay,
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") LocalDate tripEndDay,
String countries
String countries,
Member member
) {

@Builder
public TripRecordRequestDto(String title, String content, ExpenseRangeType expenseRangeType,
LocalDate tripStartDay, LocalDate tripEndDay, String countries) {
LocalDate tripStartDay, LocalDate tripEndDay, String countries, Member member) {
this.title = title;
this.content = content;
this.expenseRangeType = expenseRangeType;
this.tripStartDay = tripStartDay;
this.tripEndDay = tripEndDay;
this.countries = countries;
this.member = member;
}

public TripRecord toEntity() {
Expand All @@ -37,4 +40,16 @@ public TripRecord toEntity() {
.build();
}

public TripRecord toEntity(Member member) {
return TripRecord.builder()
.title(this.title)
.content(this.content)
.expenseRangeType(this.expenseRangeType)
.tripStartDay(this.tripStartDay)
.tripEndDay(this.tripEndDay)
.countries(this.countries)
.member(member)
.build();
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.haejwo.tripcometrue.domain.triprecord.dto.response;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.haejwo.tripcometrue.domain.triprecord.entity.ExpenseRangeType;
import com.haejwo.tripcometrue.domain.triprecord.entity.type.ExpenseRangeType;
import com.haejwo.tripcometrue.domain.triprecord.entity.TripRecord;
import java.time.LocalDate;
import lombok.Builder;
Expand All @@ -16,14 +16,15 @@ public record TripRecordResponseDto(
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") LocalDate tripEndDay,
Integer totalDays,
String countries,
Integer viewCount
Integer viewCount,
Long memberId

) {

@Builder
public TripRecordResponseDto(Long id, String title, String content, Integer average_rating,
ExpenseRangeType expenseRangeType, LocalDate tripStartDay, LocalDate tripEndDay, Integer totalDays,
String countries, Integer viewCount) {
String countries, Integer viewCount, Long memberId) {
this.id = id;
this.title = title;
this.content = content;
Expand All @@ -34,6 +35,7 @@ public TripRecordResponseDto(Long id, String title, String content, Integer aver
this.totalDays = totalDays;
this.countries = countries;
this.viewCount = viewCount;
this.memberId = memberId;
}


Expand All @@ -49,6 +51,7 @@ public static TripRecordResponseDto fromEntity(TripRecord entity) {
.totalDays(entity.getTotalDays())
.countries(entity.getCountries())
.viewCount(entity.getViewCount())
.memberId(entity.getMember().getId())
.build();

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.haejwo.tripcometrue.domain.triprecord.entity;

import com.haejwo.tripcometrue.domain.member.entity.Member;
import com.haejwo.tripcometrue.domain.triprecord.dto.request.TripRecordRequestDto;
import com.haejwo.tripcometrue.domain.triprecord.entity.type.ExpenseRangeType;
import com.haejwo.tripcometrue.global.entity.BaseTimeEntity;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand All @@ -10,6 +13,8 @@
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.PrePersist;
import jakarta.persistence.PreUpdate;
Expand All @@ -25,7 +30,7 @@
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class TripRecord {
public class TripRecord extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand All @@ -50,25 +55,39 @@ public class TripRecord {


@OneToMany(mappedBy = "tripRecord", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
private List<TripRecordSchedule> tripRecordSchedules =new ArrayList<>();
private List<TripRecordSchedule> tripRecordSchedules = new ArrayList<>();

@OneToMany(mappedBy = "tripRecord", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
private List<TripRecordTag> tripRecordTags = new ArrayList<>();

@OneToMany(mappedBy = "tripRecord", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
private List<TripRecordImage> tripRecordImages = new ArrayList<>();

@ManyToOne
@JoinColumn(name = "member_id")
private Member member;

@Builder
public TripRecord(Long id, String title, String content, Integer averageRating,
ExpenseRangeType expenseRangeType, LocalDate tripStartDay, LocalDate tripEndDay, Integer totalDays,
String countries, Integer viewCount) {
public TripRecord(Long id, String title, String content, ExpenseRangeType expenseRangeType,
String countries, LocalDate tripStartDay, LocalDate tripEndDay, Integer totalDays,
Integer averageRating, Integer viewCount, List<TripRecordSchedule> tripRecordSchedules,
List<TripRecordTag> tripRecordTags, List<TripRecordImage> tripRecordImages, Member member) {
this.id = id;
this.title = title;
this.content = content;
this.averageRating = averageRating;
this.expenseRangeType = expenseRangeType;
this.countries = countries;
this.tripStartDay = tripStartDay;
this.tripEndDay = tripEndDay;
this.totalDays = totalDays;
this.countries = countries;
this.averageRating = averageRating;
this.viewCount = viewCount;
this.tripRecordSchedules = tripRecordSchedules;
this.tripRecordTags = tripRecordTags;
this.tripRecordImages = tripRecordImages;
this.member = member;
}

// TODO: update 함수
public void update(TripRecordRequestDto requestDto) {
this.title = requestDto.title();
this.content = requestDto.content();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.haejwo.tripcometrue.domain.triprecord.entity;

import com.haejwo.tripcometrue.domain.triprecord.entity.type.ExternalLinkTagType;
import com.haejwo.tripcometrue.domain.triprecord.entity.type.TripRecordImageType;
import com.haejwo.tripcometrue.global.entity.BaseTimeEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class TripRecordImage extends BaseTimeEntity {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "trip_record_image_id")
private Long id;

private TripRecordImageType imageType;
private String imageUrl;

@Enumerated(EnumType.STRING)
private ExternalLinkTagType tagType;
private String tagUrl;

@ManyToOne
@JoinColumn(name = "trip_record_id")
private TripRecord tripRecord;

@Builder
public TripRecordImage(Long id, TripRecordImageType imageType, String imageUrl,
ExternalLinkTagType tagType, String tagUrl, TripRecord tripRecord) {
this.id = id;
this.imageType = imageType;
this.imageUrl = imageUrl;
this.tagType = tagType;
this.tagUrl = tagUrl;
this.tripRecord = tripRecord;
}
}
Loading

0 comments on commit c8f8a3f

Please sign in to comment.