Skip to content

Feature/domain #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Apr 22, 2025
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
HELP.md
.gradle
./gradle
.gradle/*
.ideal/
*.iml
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
Expand Down
34 changes: 34 additions & 0 deletions src/main/java/com/solution/Ongi/domain/meal/Meal.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.solution.Ongi.domain.meal;

import com.solution.Ongi.domain.user.User;
import com.solution.Ongi.domain.user.enums.MealType;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalTime;

@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class Meal {

@Id @GeneratedValue
@Column(name = "meal_id")
private Long id;

@Enumerated(EnumType.STRING)
private MealType meal_type;

private LocalTime meal_time;

@ManyToOne(fetch = FetchType.LAZY)//μ§€μ—° λ‘œλ”©
@JoinColumn(name = "user_id")
private User user;

//일정-달λ ₯ μ‚­μ œ 미반영 -> CASCADE 막기
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.solution.Ongi.domain.meal.controller;

import com.solution.Ongi.domain.meal.dto.CreateMealRequest;
import com.solution.Ongi.domain.meal.Meal;
import com.solution.Ongi.domain.meal.dto.CreateMealResponse;
import com.solution.Ongi.domain.meal.service.MealService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.net.URI;
import java.util.List;

@RestController
@RequestMapping("/meals")
@RequiredArgsConstructor
public class MealController {

private final MealService mealService;

@PostMapping("/post/{userId}/meals")
public ResponseEntity<CreateMealResponse> createMeal(
@PathVariable("userId") Long userId,
@RequestBody CreateMealRequest request) {

Meal meal = mealService.createMeal(userId, request);

//location 헀더 λ¦¬μ†ŒμŠ€
URI location= URI.create("/users/"+userId+"/meals/"+meal.getId());

return ResponseEntity
.created(location)
.body(new CreateMealResponse(meal.getId(),"식사가 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€."));
}

@GetMapping("/users/{userId}/meals")
public ResponseEntity<List<Meal>> getAllMeals(@PathVariable("userId") Long user_id) {
List<Meal> meals = mealService.getAllMeals(user_id);
return ResponseEntity.ok(meals);
}

//Meal μ‚­μ œ μ—”λ“œν¬μΈνŠΈ
@DeleteMapping("/delete/{mealId}")
public ResponseEntity<Void> deleteMeal(@PathVariable Long mealId) {
mealService.deleteMeal(mealId);
return ResponseEntity.noContent().build();//204 no
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.solution.Ongi.domain.meal.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class CreateMealRequest {
private String meal_type;
private String meal_time; //HH:mm ν˜•μ‹
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.solution.Ongi.domain.meal.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class CreateMealResponse {
private Long mealId;
private String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.solution.Ongi.domain.meal.repository;

import com.solution.Ongi.domain.meal.Meal;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface MealRepository extends JpaRepository<Meal,Long> {
List<Meal> findByUserId(Long userId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.solution.Ongi.domain.meal.service;

import com.solution.Ongi.domain.meal.dto.CreateMealRequest;
import com.solution.Ongi.domain.meal.Meal;
import com.solution.Ongi.domain.meal.repository.MealRepository;
import com.solution.Ongi.domain.user.User;
import com.solution.Ongi.domain.user.enums.MealType;
import com.solution.Ongi.domain.user.repository.UserRepository;
import com.solution.Ongi.domain.user.service.UserService;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

@Service
@Transactional
@RequiredArgsConstructor
public class MealService {
private final UserRepository userRepository;
private final UserService userService;
private final MealRepository mealRepository;
private final DateTimeFormatter timeFormatter=DateTimeFormatter.ofPattern("HH:mm");

//Meal 생성
public Meal createMeal(Long userId, CreateMealRequest createMealRequest){
User user=userService.getUserByIdOrThrow(userId);

Meal meal=Meal.builder()
.meal_type(MealType.valueOf(createMealRequest.getMeal_type().toUpperCase()))
.meal_time(LocalTime.parse(createMealRequest.getMeal_time(), timeFormatter))
.user(user)
.build();

return mealRepository.save(meal);
}

//μœ μ €μ˜ Meal 전체 쑰회
public List<Meal> getAllMeals(Long userId){
userService.getUserByIdOrThrow(userId);
return mealRepository.findByUserId(userId);
}

//Meal μ‚­μ œ
public void deleteMeal(Long mealId){
Meal meal=mealRepository.findById(mealId)
.orElseThrow(()->new RuntimeException("식사가 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."));
mealRepository.delete(meal);
}
}
30 changes: 30 additions & 0 deletions src/main/java/com/solution/Ongi/domain/medication/Medication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.solution.Ongi.domain.medication;

import com.solution.Ongi.domain.user.User;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalTime;

@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class Medication {

@Id
@GeneratedValue
@Column(name = "medication_id")
private Long id;

private String medication_title;
private LocalTime medication_time;

@ManyToOne(fetch = FetchType.LAZY)//μ§€μ—° λ‘œλ”©
@JoinColumn(name = "user_id")
private User user;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.solution.Ongi.domain.medication.controller;

import com.solution.Ongi.domain.medication.Medication;
import com.solution.Ongi.domain.medication.dto.CreateMedicationResponse;
import com.solution.Ongi.domain.medication.service.MedicationService;
import com.solution.Ongi.domain.medication.dto.CreateMedicationRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.net.URI;
import java.util.List;

@RestController
@RequestMapping("/medications")
@RequiredArgsConstructor
public class MedicationController {

private final MedicationService medicationService;

@PostMapping("/post/{userId}/medications")
public ResponseEntity<CreateMedicationResponse> createMedication(
@PathVariable("userId") Long userId,
@RequestBody CreateMedicationRequest createMedicationRequest) {

Medication medication=medicationService.createMedication(userId,createMedicationRequest);

URI location= URI.create("/users/"+userId+"/medications/"+medication.getId());

return ResponseEntity
.created(location)
.body(new CreateMedicationResponse(medication.getId(),"볡약이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€."));
}

@GetMapping("/users/{user_id}/medications")
public ResponseEntity<List<Medication>> getAllMedications(@PathVariable("user_id") Long user_id) {
List<Medication> medications = medicationService.getAllMedication(user_id);
return ResponseEntity.ok(medications);
}

// Meal μ‚­μ œ μ—”λ“œν¬μΈνŠΈ
@DeleteMapping("/delete/{medication_id}")
public ResponseEntity<Void> deleteMeal(@PathVariable Long medication_id) {
medicationService.deleteMedication(medication_id);
return ResponseEntity.noContent().build();//204 no
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.solution.Ongi.domain.medication.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@Builder
@RequiredArgsConstructor
@AllArgsConstructor
public class CreateMedicationRequest {
private String medication_title;
private String medication_time; //HH:mm ν˜•μ‹
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.solution.Ongi.domain.medication.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class CreateMedicationResponse {
private Long medicationId;
private String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.solution.Ongi.domain.medication.repository;

import com.solution.Ongi.domain.medication.Medication;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface MedicationRepository extends JpaRepository<Medication,Long> {
List<Medication> findByUserId(Long userId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.solution.Ongi.domain.medication.service;

import com.solution.Ongi.domain.medication.Medication;
import com.solution.Ongi.domain.medication.dto.CreateMedicationRequest;
import com.solution.Ongi.domain.medication.repository.MedicationRepository;
import com.solution.Ongi.domain.user.User;
import com.solution.Ongi.domain.user.repository.UserRepository;
import com.solution.Ongi.domain.user.service.UserService;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

@Service
@Transactional
@RequiredArgsConstructor
public class MedicationService {

private final UserRepository userRepository;
private final UserService userService;
private final MedicationRepository medicationRepository;
private final DateTimeFormatter timeFormatter=DateTimeFormatter.ofPattern("HH:mm");

//Meal 생성
public Medication createMedication(Long userId, CreateMedicationRequest createMedicationRequest){
User user=userService.getUserByIdOrThrow(userId);

Medication medication=Medication.builder()
.medication_title(createMedicationRequest.getMedication_title())
.medication_time(LocalTime.parse(createMedicationRequest.getMedication_time(),timeFormatter))
.user(user)
.build();

return medicationRepository.save(medication);
}

//μœ μ €μ˜ Meal 전체 쑰회
public List<Medication> getAllMedication(Long userId){
userService.getUserByIdOrThrow(userId);
return medicationRepository.findByUserId(userId);
}

//Meal μ‚­μ œ
public void deleteMedication(Long medication_id){
Medication medication=medicationRepository.findById(medication_id)
.orElseThrow(()->new RuntimeException("약이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."));
medicationRepository.delete(medication);
}
}
Loading