Skip to content
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

[#38] 활동 추가 API 구현 #54

Merged
merged 1 commit into from
May 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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();
}
Loading