Skip to content

Commit

Permalink
Merge branch 'main' into feat#20/GetTravelog
Browse files Browse the repository at this point in the history
  • Loading branch information
Seungkiii authored Sep 28, 2024
2 parents 5f9681e + 9e55692 commit b3d288f
Show file tree
Hide file tree
Showing 9 changed files with 95 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
import com.kakaogroom6.server.global.common.BaseEntity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalDateTime;

@Entity
@Getter
@Getter@Setter
@Table(name = "member")
public class MemberEntity extends BaseEntity {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
import com.kakaogroom6.server.domain.profile.dto.res.ProfileResponseDto;
import com.kakaogroom6.server.domain.profile.service.ProfileService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController
@RequiredArgsConstructor
Expand All @@ -16,4 +20,13 @@ public class ProfileController {
public ProfileResponseDto getMember(@CookieValue(name = "email", required = true)String email){
return profileService.getProfile(email);
}

// @PostMapping("/image")
// public ResponseEntity<?> uploadProfileImage(
// @CookieValue(name = "email", required = true)String email,
// MultipartFile multipartFile) throws IOException {
// boolean response = profileService.uploadProfile(email, multipartFile);
// return ResponseEntity.ok(response);
// }

}
Original file line number Diff line number Diff line change
@@ -1,33 +1,37 @@
package com.kakaogroom6.server.domain.profile.service;

import com.kakaogroom6.server.domain.image.service.S3Service;
import com.kakaogroom6.server.domain.member.entity.MemberEntity;
import com.kakaogroom6.server.domain.member.repository.MemberRepository;
import com.kakaogroom6.server.domain.place.entity.PlaceEntity;
import com.kakaogroom6.server.domain.place.repository.PlaceRepository;
import com.kakaogroom6.server.domain.travelog.entity.TravelogEntity;
import com.kakaogroom6.server.domain.profile.dto.res.ProfileResponseDto;
import com.kakaogroom6.server.domain.travelog.dto.response.TravelogSummaryDto;
import com.kakaogroom6.server.domain.travelog.repository.TravelogRepository;
import com.kakaogroom6.server.global.errors.code.CommonErrorCode;
import com.kakaogroom6.server.global.errors.exception.RestApiException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
public class ProfileService {

private final MemberRepository userRepository;
private final TravelogRepository travelogRepository;
private final MemberRepository memberRepository;
private final TravelogRepository travelogRepository;
private final PlaceRepository placeRepository;
private final S3Service s3Service;

@Transactional
public ProfileResponseDto getProfile(String email) {
// 맴버 객체 불러오기(맴버 이름, 맴버 프로필 사진 url)
MemberEntity member = userRepository.findByEmail(email)
.orElseThrow(() -> new RuntimeException("No Member Found"));
MemberEntity member = memberRepository.findByEmail(email)
.orElseThrow(() -> new RestApiException(CommonErrorCode.MEMBER_NOT_FOUND));

// 해당 맴버의 트래블로그들 불러오기(해당 맴버의 아이디를 통해, 그 아이디로 등록되어 있는 트래블로그 불러옴)
List<TravelogEntity> travelogs = travelogRepository.findByMemberId(member.getId())
Expand All @@ -52,16 +56,32 @@ public ProfileResponseDto getProfile(String email) {
);
}

// public boolean uploadProfile(String email, MultipartFile profileImage) throws IOException {
//
// MemberEntity member = memberRepository.findByEmail(email)
// .orElseThrow(() -> new RestApiException(CommonErrorCode.MEMBER_NOT_FOUND));
//
// try{
// String profileImageUrl = s3Service.saveProfileImg(profileImage, member.getId());
// member.setProfileUrl(profileImageUrl);
// memberRepository.save(member);
// }catch(IOException e){
// throw new RestApiException(CommonErrorCode.IO_EXCEPTION_ON_IMAGE_UPLOAD);
// }
//
// return true;
// }

private TravelogSummaryDto convertToSummaryDto(TravelogEntity travelog) {
PlaceEntity firstPlace = placeRepository.findFirstByTravelogId(travelog.getId())
.orElseThrow(null);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formattedDate = travelog.getCreatedAt().format(formatter);

return new TravelogSummaryDto(
travelog.getMember().getName(),
firstPlace != null ? firstPlace.getName() : null, // TODO 대표이미지로 교체
firstPlace != null ? firstPlace.getName() : null,
travelog.getMainImage(),
travelog.getMainPlace(),
travelog.getTitle(),
travelog.getCreatedAt()
formattedDate
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,9 @@
@NoArgsConstructor
@AllArgsConstructor
public class TravelogSummaryDto {
/**
* 트래블로그 요약 정보
* 0) 사용자 이름 -> 검색화면 only
* 1) 메인 이미지 url
* 2) 장소 이름
* 3) 트래블로그 제목
* 4) 트래블로그 생성일
*/

private String userName;
private String imageUrl;
private String placeName;
private String title;
private LocalDateTime createdAt;
private String createdAt;
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ public class TravelogEntity extends BaseEntity {
private Integer likes;
private String imageurl;

private String mainImage;
private String mainPlace;

public void setDetails(String title, LocalDate startDate, LocalDate endDate, MemberEntity member) {
this.title = title;
this.startDate = startDate;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,10 @@
@Repository
public interface TravelogRepository extends JpaRepository<TravelogEntity, Long> {
Optional<List<TravelogEntity>> findByMemberId(Long memberId);
Optional<List<TravelogEntity>> findAllByOrderByCreatedAtDesc();
Optional<List<TravelogEntity>> findAllByOrderByLikesDesc();

List<TravelogEntity> findAllByOrderByCreatedAtDesc();
List<TravelogEntity> findAllByOrderByLikesDesc();
List<TravelogEntity> findByTitleContainingOrderByCreatedAtDesc(String keyword);
List<TravelogEntity> findByTitleContainingOrderByLikesDesc(String keyword);

Optional<List<TravelogEntity>> findByTitleContainingOrderByCreatedAtDesc(String location);
Optional<List<TravelogEntity>> findByTitleContainingOrderByLikesDesc(String location);

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;


import java.time.format.DateTimeFormatter;

import java.io.IOException;


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

Expand All @@ -33,9 +38,11 @@ public class TravelogService {
public TravelogsResponseDto getAllTravelogs(String sortBy) {
List<TravelogEntity> travelogs;
if ("likes".equalsIgnoreCase(sortBy)) {
travelogs = travelogRepository.findAllByOrderByLikesDesc();
travelogs = travelogRepository.findAllByOrderByCreatedAtDesc()
.orElse(List.of());
} else {
travelogs = travelogRepository.findAllByOrderByLikesDesc();
travelogs = travelogRepository.findAllByOrderByLikesDesc()
.orElse(List.of());
}

List<TravelogSummaryDto> travelogSummarys = travelogs.stream()
Expand All @@ -45,12 +52,14 @@ public TravelogsResponseDto getAllTravelogs(String sortBy) {
return new TravelogsResponseDto(travelogSummarys, travelogSummarys.size());
}

public TravelogsResponseDto searchTravelogs(String keyword, String sortBy) {
public TravelogsResponseDto searchTravelogs(String location, String sortBy) {
List<TravelogEntity> travelogs;
if ("likes".equalsIgnoreCase(sortBy)) {
travelogs = travelogRepository.findByTitleContainingOrderByLikesDesc(keyword);
travelogs = travelogRepository.findByTitleContainingOrderByLikesDesc(location)
.orElse(List.of());
} else {
travelogs = travelogRepository.findByTitleContainingOrderByCreatedAtDesc(keyword);
travelogs = travelogRepository.findByTitleContainingOrderByCreatedAtDesc(location)
.orElse(List.of());
}

List<TravelogSummaryDto> travelogSummarys = travelogs.stream()
Expand All @@ -61,12 +70,15 @@ public TravelogsResponseDto searchTravelogs(String keyword, String sortBy) {
}

private TravelogSummaryDto convertToSummaryDto(TravelogEntity travelog) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formattedDate = travelog.getCreatedAt().format(formatter);

return new TravelogSummaryDto(
travelog.getMember().getName(),
"", // 메인 이미지 URL (엔티티에 없음)
"", // 장소 이름 (엔티티에 없음)
travelog.getMainImage(),
travelog.getMainPlace(),
travelog.getTitle(),
travelog.getCreatedAt()
formattedDate
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public enum CommonErrorCode implements ErrorCode {
INVALID_FILE_EXTENTION(HttpStatus.BAD_REQUEST, 400, "The file extension is invalid. Only jpg, jpeg, png, gif are allowed."),
PUT_OBJECT_EXCEPTION(HttpStatus.INTERNAL_SERVER_ERROR, 500, "Failed to upload the image to S3."),
IO_EXCEPTION_ON_IMAGE_DELETE(HttpStatus.INTERNAL_SERVER_ERROR, 500, "An I/O error occurred while deleting the image from S3."),

MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, 404, "Member not found")
;

private final HttpStatus httpStatus;
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/com/kakaogroom6/web/WebConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.kakaogroom6.web;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("Authorization", "Content-Type")
.exposedHeaders("Custom-Header")
.allowCredentials(true)
.maxAge(3600);
}
}

0 comments on commit b3d288f

Please sign in to comment.