Skip to content
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
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import EatPic.spring.domain.card.repository.CardRepository;
import EatPic.spring.domain.card.service.CardService;
import EatPic.spring.domain.comment.dto.CommentResponseDTO;
import EatPic.spring.domain.user.dto.response.UserResponseDTO;
import EatPic.spring.domain.user.entity.User;
import EatPic.spring.domain.user.service.UserService;
import EatPic.spring.global.common.ApiResponse;
Expand All @@ -21,6 +22,8 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.ExampleObject;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
Expand All @@ -30,10 +33,13 @@
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@Controller
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/cards")
Expand All @@ -44,27 +50,15 @@ public class CardController {

//픽카드 생성하기 부분에서 같은 날짜에, 같은 mealtype으로 픽카드 등록되지 않도록 수정해야함
@PostMapping(value = "", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Operation(summary = "픽카드 생성하기 (픽카드 기록 작성)", description = "픽카드를 생성할 때 호출되는 api")
public ApiResponse<CreateCardResponse> createCard(
@Operation(summary = "픽카드 생성하기 (픽카드 기록 + 이미지 작성)", description = "기록 부분 string으로 받아서 JSON 파싱을 합니다.")
public ApiResponse<CardResponse.CreateCardResponse> createCard(
HttpServletRequest req,
@RequestParam("request") String requestJson,
@RequestPart(value = "cardImageFile", required = false) MultipartFile cardImageFile) {

CardCreateRequest.CreateCardRequest request;
try {
ObjectMapper objectMapper = new ObjectMapper();
request = objectMapper.readValue(requestJson, CardCreateRequest.CreateCardRequest.class);
} catch (JsonProcessingException e) {
throw new GeneralException(ErrorStatus.REQUEST_BODY_INVALID);
}

//Long userId = 1L;
User user = userService.getLoginUser(req);
@RequestPart(value = "cardImageFile", required = false) MultipartFile cardImageFile,
@Valid @RequestPart(value = "request") CardCreateRequest.CreateCardRequest request
) {
User user = userService.getLoginUser(req);

if (cardImageFile == null || cardImageFile.isEmpty()) {
throw new GeneralException(ErrorStatus.IMAGE_REQUIRED);
}
CardResponse.CreateCardResponse response = cardService.createNewCard(request, user, cardImageFile);
CardResponse.CreateCardResponse response = cardService.createNewCard(req, request, user, cardImageFile);
return ApiResponse.onSuccess(response);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,32 +24,36 @@ public class CardCreateRequest {
public static class CreateCardRequest {

@JsonProperty("isShared")
@Schema(description = "피드 공개 여부 (true = 공개, false = 비공개)", example = "true")
private Boolean isShared;

@JsonProperty("latitude")
@JsonProperty("locationText")
@Schema(description = "장소 이름 텍스트", example = "서울특별시 성북구 정릉동")
private String locationText;

@Schema(description = "위도", example = "37.5665")
private BigDecimal latitude;

@JsonProperty("longitude")
@Schema(description = "경도", example = "126.9780")
private BigDecimal longitude;

// 파일(cardImageFile)을 별도로
// @JsonProperty("cardImageUrl")
// private String cardImageUrl;
@Schema(description = "레시피 내용", example = "야채, 아보카도, 소스 조합으로 구성된 샐러드입니다.")
private String recipe;

@JsonProperty("recipeUrl")
@Schema(description = "레시피 링크 URL", example = "https://example.com/recipe/123")
private String recipeUrl;

@JsonProperty("memo")
@Schema(description = "나의 메모", example = "오늘은 샐러드를 먹었습니다~ 아보카도를 많이 넣었어요")
private String memo;

@JsonProperty("recipe")
private String recipe;

@JsonProperty("meal")
@JsonFormat(shape = JsonFormat.Shape.STRING)
@Schema(description = "식사 유형 (Enum: BREAKFAST, LUNCH, DINNER 등)", example = "LUNCH")
private Meal meal; // Enum 매핑 시 대소문자 주의

private List<String> hashtags; // 사용자가 선택/생성한 해시태그 목록 (이름 기준)
@JsonProperty("hashtags")
@Schema(description = "사용자가 선택/생성한 해시태그 목록 (이름 기준)", example = "[\"샐러드\", \"건강식\"]")
private List<String> hashtags; // 해시태그 목록
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
import EatPic.spring.domain.card.dto.response.CardResponse.TodayCardResponse;
import EatPic.spring.domain.user.entity.User;
import jakarta.servlet.http.HttpServletRequest;
import org.apache.http.protocol.HTTP;
import org.springframework.web.multipart.MultipartFile;


import java.util.List;

public interface CardService {
CardResponse.CreateCardResponse createNewCard(CardCreateRequest.CreateCardRequest request, User user, MultipartFile cardImageFile);
CardResponse.CreateCardResponse createNewCard(HttpServletRequest req, CardCreateRequest.CreateCardRequest request, User user, MultipartFile cardImageFile);
CardDetailResponse getCardDetail(Long cardId, Long userId);
CardFeedResponse getCardFeed(Long cardId, Long userId);
void deleteCard(Long cardId, Long userId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import EatPic.spring.domain.hashtag.entity.Hashtag;
import EatPic.spring.domain.reaction.entity.Reaction;
import EatPic.spring.domain.reaction.repository.ReactionRepository;
import EatPic.spring.domain.user.dto.response.UserResponseDTO;
import EatPic.spring.domain.user.entity.User;
import EatPic.spring.domain.user.repository.UserRepository;
import EatPic.spring.domain.user.service.UserBadgeService;
Expand Down Expand Up @@ -95,10 +96,9 @@ private void connectHashtagsToCard(Card card, List<String> hashtags, User user)
// s3 설정
private final AmazonS3Manager s3Manager;


@Override
@Transactional
public CardResponse.CreateCardResponse createNewCard(CardCreateRequest.CreateCardRequest request, User user, MultipartFile cardImageFile) {
public CardResponse.CreateCardResponse createNewCard(HttpServletRequest req, CardCreateRequest.CreateCardRequest request, User user, MultipartFile cardImageFile) {

Long userId = user.getId();

Expand Down
Loading