Skip to content

Commit

Permalink
Merge pull request #17 from UMC-HKT-Team-R/feat/6
Browse files Browse the repository at this point in the history
[Feat] 캘린더 등록하기
  • Loading branch information
seoyeon0103 authored Jan 11, 2025
2 parents 29a753a + fb7a203 commit 67e13d9
Show file tree
Hide file tree
Showing 20 changed files with 235 additions and 10 deletions.
2 changes: 1 addition & 1 deletion .idea/dataSources.xml

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

2 changes: 1 addition & 1 deletion .idea/gradle.xml

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

Binary file modified Midnight-Snacker/.gradle/8.11.1/checksums/checksums.lock
Binary file not shown.
Binary file modified Midnight-Snacker/.gradle/8.11.1/checksums/md5-checksums.bin
Binary file not shown.
Binary file modified Midnight-Snacker/.gradle/8.11.1/checksums/sha1-checksums.bin
Binary file not shown.
Binary file modified Midnight-Snacker/.gradle/8.11.1/fileHashes/fileHashes.bin
Binary file not shown.
Binary file modified Midnight-Snacker/.gradle/8.11.1/fileHashes/fileHashes.lock
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ public enum ErrorStatus implements BaseErrorCode {
_BAD_REQUEST(HttpStatus.BAD_REQUEST,"COMMON400","잘못된 요청입니다."),
_UNAUTHORIZED(HttpStatus.UNAUTHORIZED,"COMMON401","인증이 필요합니다."),
_FORBIDDEN(HttpStatus.FORBIDDEN, "COMMON403", "금지된 요청입니다."),
_NOT_FOUND(HttpStatus.NOT_FOUND,"COMMON404", "요청한 리소스를 찾을 수 없습니다."),
_BAD_GATEWAY(HttpStatus.BAD_GATEWAY, "COMMON502", "외부 시스템에 문제가 발생했습니다."),

// S3 관련
S3_OBJECT_NOT_FOUND(HttpStatus.NOT_FOUND, "S3_001", "S3 오브젝트를 찾을 수 없습니다."),
Expand All @@ -37,6 +39,7 @@ public enum ErrorStatus implements BaseErrorCode {
USER_EXISTS(HttpStatus.BAD_REQUEST, "USER_002", "이미 존재하는 아이디입니다."),
USER_DELETE_FAILED(HttpStatus.NOT_FOUND, "USER_003", "회원 탈퇴에 실패했습니다."),


// Post 관련
POST_NOT_FOUND(HttpStatus.NOT_FOUND, "POST_001", "존재하지 않는 게시글입니다"),
;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,17 @@ public enum SuccessStatus implements BaseCode {
MYPAGE_OK(HttpStatus.OK, "AUTH2004", "마이페이지 조회가 완료되었습니다."),

//Post
POST_DELETE_OK(HttpStatus.OK, "POST2001", "게시글이 성공적으로 삭제되었습니다.")
POST_DELETE_OK(HttpStatus.OK, "POST2001", "게시글이 성공적으로 삭제되었습니다."),

//캘린더
ADD_CALENDAR_OK(HttpStatus.OK, "COMMON200", "달력에 기록이 되었습니다."),
INQUERY_MONTH_CALENDAR_OK(HttpStatus.OK, "COMMON200", "달력을 불러왔습니다."),
INQUERY_DATE_CALENDAR_OK(HttpStatus.OK,"COMMON200", "기록을 불러왔습니다."),
DELETE_RECORD_OK(HttpStatus.OK, "COMMON200", "기록이 성공적으로 삭제되었습니다.")

;


private final HttpStatus httpStatus;
private final String code;
private final String message;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.example.Midnight.Snacker.apiPayload.exception;

import com.example.Midnight.Snacker.apiPayload.code.status.ErrorStatus;
import org.springframework.http.HttpStatus;

public class CustomException extends RuntimeException {
private final ErrorStatus errorStatus;

public CustomException(ErrorStatus errorStatus) {
super(errorStatus.getMessage());
this.errorStatus = errorStatus;
}

public HttpStatus getHttpStatus() {
return errorStatus.getHttpStatus();
}

public String getErrorCode() {
return errorStatus.getCode();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.example.Midnight.Snacker.converter;

import com.example.Midnight.Snacker.domain.Calendar;
import com.example.Midnight.Snacker.domain.Member;
import com.example.Midnight.Snacker.domain.enums.Category;
import com.example.Midnight.Snacker.domain.enums.Color;
import com.example.Midnight.Snacker.web.dto.CalendarDTO.RegisterRequestDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

@Component
@RequiredArgsConstructor
public class CalendarConverter {
public Calendar toCalendar(Member member,
RegisterRequestDTO request,
String imageUrl,
Category category,
Color color) {
return Calendar.builder()
.date(request.getDate())
.detailFood(request.getDetailFood())
.color(color)
.category(category)
.imageUrl(imageUrl)
.member(member)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.example.Midnight.Snacker.domain;

import com.example.Midnight.Snacker.domain.common.BaseEntity;
import com.example.Midnight.Snacker.domain.enums.Category;
import com.example.Midnight.Snacker.domain.enums.Color;
import jakarta.persistence.*;
import lombok.*;
Expand All @@ -22,14 +23,17 @@ public class Calendar extends BaseEntity {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id; // id

private String image_url; //이미지
private String imageUrl; //이미지

private LocalDateTime date; //날짜

@Enumerated(EnumType.STRING)
private Color color; //색깔

private String detail_food; //상세 음식
@Enumerated(EnumType.STRING)
private Category category;

private String detailFood; //상세 음식

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.example.Midnight.Snacker.domain.enums;

public enum Category {
한식, 중식, 일식, 양식, 아시안, 패스트푸드, 카페, 고기
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.example.Midnight.Snacker.security.handler.resolver;

import com.example.Midnight.Snacker.apiPayload.exception.AuthException;
import com.example.Midnight.Snacker.security.principal.PrincipalDetails;
import com.example.Midnight.Snacker.service.MemberService.MemberService;
import org.springframework.core.MethodParameter;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
Expand Down Expand Up @@ -50,10 +51,11 @@ public Object resolveArgument(
throw new AuthException(ErrorStatus.USER_NOT_FOUND);
}

UsernamePasswordAuthenticationToken authenticationToken =
(UsernamePasswordAuthenticationToken) authentication;
Long userId = Long.valueOf(authenticationToken.getName());

return memberService.findMemberById(userId);
if (principal instanceof PrincipalDetails) {
PrincipalDetails userDetails = (PrincipalDetails) principal;
Long userId = userDetails.getId();
return memberService.findMemberById(userId);
}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,8 @@ public boolean isCredentialsNonExpired() {
public boolean isEnabled() {
return true;
}

public Long getId() {
return member.getId();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.example.Midnight.Snacker.service.CalendarService;

import com.example.Midnight.Snacker.domain.Member;
import com.example.Midnight.Snacker.domain.enums.Category;
import com.example.Midnight.Snacker.domain.enums.Color;
import com.example.Midnight.Snacker.web.dto.CalendarDTO.RegisterRequestDTO;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDate;
import java.time.LocalDateTime;

public interface CalendarService {
Long addRecord(Member member, Category category, Color color, MultipartFile image, RegisterRequestDTO request);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.example.Midnight.Snacker.service.CalendarService;

import com.example.Midnight.Snacker.apiPayload.exception.CustomException;
import com.example.Midnight.Snacker.converter.CalendarConverter;
import com.example.Midnight.Snacker.domain.Calendar;
import com.example.Midnight.Snacker.domain.Member;
import com.example.Midnight.Snacker.domain.enums.Category;
import com.example.Midnight.Snacker.domain.enums.Color;
import com.example.Midnight.Snacker.repository.CalendarRepository;
import com.example.Midnight.Snacker.service.S3Service.S3ImageService;
import com.example.Midnight.Snacker.web.dto.CalendarDTO.RegisterRequestDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Service
@RequiredArgsConstructor
public class CalendarServiceImpl implements CalendarService {
private final CalendarRepository calendarRepository;
private final S3ImageService s3ImageService;
private final CalendarConverter calendarConverter;

//야식 기록 추가 method
@Override
@Transactional
public Long addRecord(Member member, Category category, Color color, MultipartFile image, RegisterRequestDTO request){
//upload file 하기
String imageUrl = s3ImageService.upload(image);
//Calendar 엔티티 생성

Calendar calendar =
calendarConverter.toCalendar(member,request, imageUrl, category, color);

Calendar savedCalendar = calendarRepository.save(calendar);

return savedCalendar.getId();
}
//월별 기록 조회 method

//일별 기록 조회 method

//기록 삭제 method

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.example.Midnight.Snacker.web.controller;

import com.example.Midnight.Snacker.apiPayload.ApiResponse;
import com.example.Midnight.Snacker.apiPayload.code.status.SuccessStatus;
import com.example.Midnight.Snacker.domain.Member;
import com.example.Midnight.Snacker.domain.enums.Category;
import com.example.Midnight.Snacker.domain.enums.Color;
import com.example.Midnight.Snacker.security.handler.annotation.AuthUser;
import com.example.Midnight.Snacker.service.CalendarService.CalendarService;
import com.example.Midnight.Snacker.service.CalendarService.CalendarServiceImpl;
import com.example.Midnight.Snacker.web.dto.CalendarDTO.CalendarResponseDTO;
import com.example.Midnight.Snacker.web.dto.CalendarDTO.RegisterRequestDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.*;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.awt.*;
import java.time.LocalDate;
import java.time.LocalDateTime;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/calendar")
public class CalendarController {
private final CalendarService calendarService;

@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Operation(summary = "캘린더 등록")
public ApiResponse<Long> registerCalendar(
@Parameter(name = "user", hidden = true) @AuthUser Member member,
@RequestParam(value = "category")Category category,
@RequestParam(value = "colorType")Color color,
@RequestPart("request")RegisterRequestDTO request,
@RequestPart(value = "image") MultipartFile image){
Long calendarId = calendarService.addRecord(member, category,
color, image, request);

return ApiResponse.of(SuccessStatus._OK, calendarId);
}

/*@GetMapping
@Operation
public ApiResponse<CalendarResponseDTO> showCalendar(
@RequestParam(value = "date") LocalDate date){
return ApiResponse.of(SuccessStatus._OK,)
}*/
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.example.Midnight.Snacker.web.dto.CalendarDTO;

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

import java.time.LocalDate;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class CalendarResponseDTO {
private LocalDate date;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.example.Midnight.Snacker.web.dto.CalendarDTO;

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

import java.time.LocalDateTime;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class RegisterRequestDTO {
private LocalDateTime date;
private String detailFood;
}

0 comments on commit 67e13d9

Please sign in to comment.