Skip to content

Commit

Permalink
feat : 활동 추가 API 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
KkomSang committed May 5, 2024
1 parent eed151d commit 7e251e4
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -1,24 +1,30 @@
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")
@RequiredArgsConstructor
public class ActivityController {

private final ActivityListService activityListService;
private final ActivityCreateService activityCreateService;

@GetMapping
public DataResponseDto<ActivityListResponseDto> getActivitiesByUserId(@RequestParam Long userId) {
ActivityListResponseDto response = activityListService.getActivitiesByUserId(userId);
return DataResponseDto.of(response, "사용자의 모든 카테고리별 활동을 성공적으로 조회했습니다.");
}
@PostMapping
public DataResponseDto<ActivityCreateResponseDto> createActivity(@RequestBody ActivityCreateRequestDto request, @RequestParam Long userId){
ActivityCreateResponseDto response = activityCreateService.createActivity(request,userId);
return DataResponseDto.of(response,"활동을 성공적으로 추가했습니다.");
}
}
Original file line number Diff line number Diff line change
@@ -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());

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -32,11 +33,9 @@ public static CategoryDto toCategoryDto(Category category, List<ActivityDto> ac
.build();
}

public static CategoryDto toCategoryDtoWithActivities(Category category, List<Activity> 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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Record> records;

@ManyToOne(fetch = FetchType.LAZY)
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@

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;

import java.util.List;

public interface ActivityRepository extends JpaRepository<Activity, Long> {
List<Activity> 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();
}

0 comments on commit 7e251e4

Please sign in to comment.