diff --git a/src/main/java/com/hobak/happinessql/domain/activity/api/ActivityController.java b/src/main/java/com/hobak/happinessql/domain/activity/api/ActivityController.java index 77d5907..a9169ae 100644 --- a/src/main/java/com/hobak/happinessql/domain/activity/api/ActivityController.java +++ b/src/main/java/com/hobak/happinessql/domain/activity/api/ActivityController.java @@ -1,13 +1,13 @@ package com.hobak.happinessql.domain.activity.api; +import com.hobak.happinessql.domain.activity.application.ActivityCreateService; +import com.hobak.happinessql.domain.activity.dto.ActivityCreateRequestDto; +import com.hobak.happinessql.domain.activity.dto.ActivityCreateResponseDto; import com.hobak.happinessql.domain.activity.dto.ActivityListResponseDto; import com.hobak.happinessql.domain.activity.application.ActivityListService; import com.hobak.happinessql.global.response.DataResponseDto; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/activities") @@ -15,10 +15,16 @@ public class ActivityController { private final ActivityListService activityListService; + private final ActivityCreateService activityCreateService; @GetMapping public DataResponseDto getActivitiesByUserId(@RequestParam Long userId) { ActivityListResponseDto response = activityListService.getActivitiesByUserId(userId); return DataResponseDto.of(response, "사용자의 모든 카테고리별 활동을 성공적으로 조회했습니다."); } + @PostMapping + public DataResponseDto createActivity(@RequestBody ActivityCreateRequestDto request, @RequestParam Long userId){ + ActivityCreateResponseDto response = activityCreateService.createActivity(request,userId); + return DataResponseDto.of(response,"활동을 성공적으로 추가했습니다."); + } } \ No newline at end of file diff --git a/src/main/java/com/hobak/happinessql/domain/activity/application/ActivityCreateService.java b/src/main/java/com/hobak/happinessql/domain/activity/application/ActivityCreateService.java new file mode 100644 index 0000000..f8d123c --- /dev/null +++ b/src/main/java/com/hobak/happinessql/domain/activity/application/ActivityCreateService.java @@ -0,0 +1,32 @@ +package com.hobak.happinessql.domain.activity.application; + +import com.hobak.happinessql.domain.activity.converter.ActivityConverter; +import com.hobak.happinessql.domain.activity.domain.Activity; +import com.hobak.happinessql.domain.activity.domain.Category; +import com.hobak.happinessql.domain.activity.dto.ActivityCreateRequestDto; +import com.hobak.happinessql.domain.activity.dto.ActivityCreateResponseDto; +import com.hobak.happinessql.domain.activity.repository.ActivityRepository; +import com.hobak.happinessql.domain.activity.repository.CategoryRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + + +@Service +@Transactional +@RequiredArgsConstructor +public class ActivityCreateService { + + private final ActivityRepository activityRepository; + private final CategoryRepository categoryRepository; + public ActivityCreateResponseDto createActivity(ActivityCreateRequestDto requestDto,Long userId) { + Category category = categoryRepository.findByUserId(userId); + + Long nextActivityId = activityRepository.findNextActivityId(); + Activity activity = new Activity(nextActivityId, requestDto.getActivityName(), category); + + Activity savedActivity = activityRepository.save(activity); + return ActivityConverter.toActivityCreateResponseDto(savedActivity.getActivityId()); + + } +} \ No newline at end of file diff --git a/src/main/java/com/hobak/happinessql/domain/activity/converter/ActivityConverter.java b/src/main/java/com/hobak/happinessql/domain/activity/converter/ActivityConverter.java index 480fbf9..6c42350 100644 --- a/src/main/java/com/hobak/happinessql/domain/activity/converter/ActivityConverter.java +++ b/src/main/java/com/hobak/happinessql/domain/activity/converter/ActivityConverter.java @@ -2,6 +2,7 @@ import com.hobak.happinessql.domain.activity.domain.Activity; import com.hobak.happinessql.domain.activity.domain.Category; +import com.hobak.happinessql.domain.activity.dto.ActivityCreateResponseDto; import com.hobak.happinessql.domain.activity.dto.ActivityDto; import com.hobak.happinessql.domain.activity.dto.CategoryDto; @@ -32,11 +33,9 @@ public static CategoryDto toCategoryDto(Category category, List ac .build(); } - public static CategoryDto toCategoryDtoWithActivities(Category category, List activities) { - return CategoryDto.builder() - .id(category.getCategoryId()) - .name(category.getName()) - .activities(toActivityDtoList(activities)) + public static ActivityCreateResponseDto toActivityCreateResponseDto(Long activityId){ + return ActivityCreateResponseDto.builder() + .activityId(activityId) .build(); } } \ No newline at end of file diff --git a/src/main/java/com/hobak/happinessql/domain/activity/domain/Activity.java b/src/main/java/com/hobak/happinessql/domain/activity/domain/Activity.java index f91303f..3560dc7 100644 --- a/src/main/java/com/hobak/happinessql/domain/activity/domain/Activity.java +++ b/src/main/java/com/hobak/happinessql/domain/activity/domain/Activity.java @@ -27,7 +27,7 @@ public class Activity extends BaseTimeEntity { @Column private String emoji; - @OneToMany(mappedBy = "activity", cascade = CascadeType.ALL, orphanRemoval = true) + @OneToMany(mappedBy = "activity", cascade = CascadeType.ALL/*, orphanRemoval = true*/) private List records; @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/com/hobak/happinessql/domain/activity/dto/ActivityCreateRequestDto.java b/src/main/java/com/hobak/happinessql/domain/activity/dto/ActivityCreateRequestDto.java new file mode 100644 index 0000000..ae0d7f6 --- /dev/null +++ b/src/main/java/com/hobak/happinessql/domain/activity/dto/ActivityCreateRequestDto.java @@ -0,0 +1,18 @@ +package com.hobak.happinessql.domain.activity.dto; + +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class ActivityCreateRequestDto { + private String category; + private String activityName; + @Builder + ActivityCreateRequestDto(String category, String activityName){ + this.category = category; + this.activityName = activityName; + } +} diff --git a/src/main/java/com/hobak/happinessql/domain/activity/dto/ActivityCreateResponseDto.java b/src/main/java/com/hobak/happinessql/domain/activity/dto/ActivityCreateResponseDto.java new file mode 100644 index 0000000..c7657fd --- /dev/null +++ b/src/main/java/com/hobak/happinessql/domain/activity/dto/ActivityCreateResponseDto.java @@ -0,0 +1,16 @@ +package com.hobak.happinessql.domain.activity.dto; + +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class ActivityCreateResponseDto { + private Long activityId; + @Builder + ActivityCreateResponseDto(Long activityId){ + this.activityId = activityId; + } +} diff --git a/src/main/java/com/hobak/happinessql/domain/activity/repository/ActivityRepository.java b/src/main/java/com/hobak/happinessql/domain/activity/repository/ActivityRepository.java index ccf6094..434f4fb 100644 --- a/src/main/java/com/hobak/happinessql/domain/activity/repository/ActivityRepository.java +++ b/src/main/java/com/hobak/happinessql/domain/activity/repository/ActivityRepository.java @@ -2,7 +2,6 @@ import com.hobak.happinessql.domain.activity.domain.Activity; import com.hobak.happinessql.domain.activity.domain.Category; -import com.hobak.happinessql.domain.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -10,6 +9,6 @@ public interface ActivityRepository extends JpaRepository { List findByCategory(Category category); - @Query("SELECT MAX(a.activityId) FROM Activity a") - Long findMaxActivityId(); + @Query(value = "SELECT MAX(a.activityId) + 1 FROM Activity a") + Long findNextActivityId(); }