Skip to content

Commit

Permalink
Merge pull request #61 from Happy-HOBAK/feat/#60
Browse files Browse the repository at this point in the history
  • Loading branch information
yel-m authored May 7, 2024
2 parents e6ae131 + 0527f7e commit c2a4661
Show file tree
Hide file tree
Showing 8 changed files with 116 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package com.hobak.happinessql.domain.activity.api;

import com.hobak.happinessql.domain.activity.application.ActivityCreateService;
import com.hobak.happinessql.domain.activity.application.ActivityDeleteService;
import com.hobak.happinessql.domain.activity.application.ActivityUpdateService;
import com.hobak.happinessql.domain.activity.application.*;
import com.hobak.happinessql.domain.activity.dto.*;
import com.hobak.happinessql.domain.activity.application.ActivityListService;
import com.hobak.happinessql.global.response.DataResponseDto;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
Expand All @@ -18,6 +15,7 @@ public class ActivityController {
private final ActivityCreateService activityCreateService;
private final ActivityDeleteService activityDeleteService;
private final ActivityUpdateService activityUpdateService;
private final ActivitySearchService activitySearchService;
@GetMapping
public DataResponseDto<ActivityListResponseDto> getActivitiesByUserId(@RequestParam Long userId) {
ActivityListResponseDto response = activityListService.getActivitiesByUserId(userId);
Expand All @@ -38,4 +36,9 @@ public DataResponseDto<ActivityUpdateResponseDto> updateActicity(@PathVariable L
ActivityUpdateResponseDto responseDto = activityUpdateService.updateActivity(activityId,requestDto);
return DataResponseDto.of(responseDto,"ํ™œ๋™์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.");
}
@PostMapping("/search")
public DataResponseDto<ActivitySearchResponseDto> searchActivities(@RequestBody ActivitySearchRequestDto requestDto, @RequestParam Long userId) {
ActivitySearchResponseDto responseDto = activitySearchService.searchActivities(requestDto.getSearch(), userId);
return DataResponseDto.of(responseDto, "ํ™œ๋™์„ ์„ฑ๊ณต์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
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.ActivityDto;
import com.hobak.happinessql.domain.activity.dto.ActivitySearchResponseDto;
import com.hobak.happinessql.domain.activity.dto.CategoryDto;
import com.hobak.happinessql.domain.activity.repository.ActivityRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class ActivitySearchService {
private final ActivityRepository activityRepository;

public ActivitySearchResponseDto searchActivities(String keyword, Long userId) {
List<Activity> activitiesByCategory = activityRepository.findByCategoryNameContaining(keyword);
List<Activity> activitiesByName = activityRepository.findByNameContaining(keyword);

Map<Long, CategoryDto> categoryDtoMap = new HashMap<>();

for (Activity activity : activitiesByCategory) {
Category category = activity.getCategory();
if(category.getUserId() == null || category.getUserId().equals(userId)){
CategoryDto categoryDto = categoryDtoMap.getOrDefault(category.getCategoryId(), ActivityConverter.toCategoryDto(category));
categoryDto.getActivities().add(ActivityConverter.toActivityDto(activity));
categoryDtoMap.put(category.getCategoryId(), categoryDto);
}
}

for (Activity activity : activitiesByName) {
Category category = activity.getCategory();
if(categoryDtoMap.containsKey(category.getCategoryId())){
continue;
}
if(category.getUserId() == null || category.getUserId().equals(userId)){
CategoryDto categoryDto = categoryDtoMap.getOrDefault(category.getCategoryId(), ActivityConverter.toCategoryDto(category));
ActivityDto activityDto = ActivityConverter.toActivityDto(activity);
if (!categoryDto.getActivities().contains(activityDto)) {
categoryDto.getActivities().add(activityDto);
}
categoryDtoMap.put(category.getCategoryId(), categoryDto);
}
}

return ActivityConverter
.toActivitySearchResponseDto(new ArrayList<>(categoryDtoMap.values()));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@

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.ActivityUpdateResponseDto;
import com.hobak.happinessql.domain.activity.dto.CategoryDto;
import com.hobak.happinessql.domain.activity.dto.*;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

Expand All @@ -19,7 +17,6 @@ public static ActivityDto toActivityDto(Activity activity) {
.build();
}


public static List<ActivityDto> toActivityDtoList(List<Activity> activities) {
return activities.stream()
.map(ActivityConverter::toActivityDto)
Expand All @@ -33,6 +30,14 @@ public static CategoryDto toCategoryDto(Category category, List<ActivityDto> ac
.activities(activityDtos)
.build();
}
public static CategoryDto toCategoryDto(Category category) {
return CategoryDto.builder()
.id(category.getCategoryId())
.name(category.getName())
.activities(new ArrayList<>())
.build();
}


public static ActivityCreateResponseDto toActivityCreateResponseDto(Long activityId){
return ActivityCreateResponseDto.builder()
Expand All @@ -47,4 +52,10 @@ public static ActivityUpdateResponseDto toActivityUpdateResponseDto(Activity act
.activityName(activity.getName())
.build();
}

public static ActivitySearchResponseDto toActivitySearchResponseDto(List<CategoryDto> categories){
return ActivitySearchResponseDto.builder()
.categories(categories)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.hobak.happinessql.domain.activity.dto;

import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

Expand All @@ -10,9 +9,4 @@
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,11 @@
package com.hobak.happinessql.domain.activity.dto;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class ActivitySearchRequestDto {
private String search;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.hobak.happinessql.domain.activity.dto;

import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.List;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class ActivitySearchResponseDto {
private List<CategoryDto> categories;

@Builder
public ActivitySearchResponseDto(List<CategoryDto> categories) {
this.categories = categories;
}

}
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
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 ActivityUpdateRequestDto {
String name;
@Builder
ActivityUpdateRequestDto(String name){
this.name = name;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,7 @@ public interface ActivityRepository extends JpaRepository<Activity, Long> {
List<Activity> findByCategory(Category category);
@Query(value = "SELECT MAX(a.activityId) + 1 FROM Activity a")
Long findNextActivityId();

List<Activity> findByCategoryNameContaining(String keyword);
List<Activity> findByNameContaining(String keyword);
}

0 comments on commit c2a4661

Please sign in to comment.