Spring/[P] AI 기반 사용자 맞춤형 메뉴와 맛집 추천

[Springboot] 식사 기록 등록 개발하기 - controller, service, dto

alsruds 2024. 8. 30. 14:25

📂 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