📂 apiPayload
📂 config
📂 controller
L MainController
📂 domain
L 📂 common
L 📂 enums
L FoodCategoryName
L Mealtime
L UserGender
L UserRole
L User
L Food
📂 dto
L 📂 request
L AddMealDto
L 📂 response
📂 jwt
📂 repository
L UserRepository
L FoodRepository
📂 service
L MainService
L MainServiceImpl
데이터베이스에 입력 받은 식사 정보를 기록하자 ❕🤍
① AddMealDto : 전달받은 식사 정보 데이터
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class AddMealDto {
private Mealtime mealtime;
private int carbohydrate;
private int protein;
private int fat;
private String foodName;
@Builder
public Food toEntity(User user) {
return Food.builder()
.user(user)
.mealtime(mealtime)
.name(foodName)
.carbohydrate(carbohydrate)
.protein(protein)
.fat(fat)
.build();
}
}
② MainController : jwt 토큰으로 사용자 정보 확인
@RestController
@RequiredArgsConstructor
@RequestMapping("/main")
public class MainController {
private final MainService mainService;
@PostMapping("/history") // 식사 기록 등록
public ApiResponse<SuccessStatus> addHistory(@RequestHeader("Authorization") String token,
@Valid @RequestBody AddMealDto dto) {
return ApiResponse.onSuccess(mainService.addHistory(extractUserEmail(token), dto));
}
public String extractUserEmail(String token) {
String jwtToken = token.substring(7);
String userEmail = JwtUtil.getEmail(jwtToken);
return userEmail;
}
}
③ MainServiceImpl : Food 객체 등록하기
@Service
@Transactional
@RequiredArgsConstructor
public class MainServiceImpl implements MainService {
private final UserRepository userRepository;
private final FoodRepository foodRepository;
@Override
public SuccessStatus addHistory(String userEmail, AddMealDto dto) {
// 사용자 존재 여부 확인
User user = checkUser(userEmail);
// 저장
foodRepository.save(dto.toEntity(user));
return SuccessStatus._OK;
}
public User checkUser(String userEmail) {
return userRepository.findByEmail(userEmail)
.orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND));
}
}
2024.08.29 - [Spring/[P] AI 기반 사용자 맞춤형 메뉴와 맛집 추천] - [Springboot] 식사 기록 등록 설계하기
[Springboot] 식사 기록 등록 설계하기
📂 /main L 기록 조회 L 기록 등록 ⬅️⬅️⬅️ L 통계 조회 🔧 디자인 🔧 필요한 데이터 (AI 로 인식할 예정이다) L 식사 시간 (아침/점심/저녁) L 탄수화물량 L 단백질량 L 지방
alsrudalsrudalsrud.tistory.com
'Spring > [P] AI 기반 사용자 맞춤형 메뉴와 맛집 추천' 카테고리의 다른 글
[Springboot] 식사 통계 조회 설계하기 (0) | 2024.09.03 |
---|---|
[Springboot] 식사 기록 등록 개발하기 - entity, enums (6) | 2024.09.02 |
[Springboot] 식사 기록 등록 설계하기 (0) | 2024.08.29 |
[Springboot] 식사 기록 조회 개발하기 (0) | 2024.08.28 |
[Springboot] 식사 기록 조회 설계하기 (0) | 2024.08.27 |