Skip to content

Commit

Permalink
Merge pull request #122 from ttakkeun/feat/121
Browse files Browse the repository at this point in the history
[Feat] todo 및 tips 수정
  • Loading branch information
riadan710 authored Aug 21, 2024
2 parents e30f219 + b3148b8 commit d4b11ab
Show file tree
Hide file tree
Showing 13 changed files with 99 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@ public class CalendarController {
@GetMapping("/{year}/{month}/{date}")
public ApiResponse<CalendarResponseDto> getCalendarData(
// @RequestHeader("Authorization") String accessToken,
@RequestParam Long petId,
@PathVariable int year,
@PathVariable int month,
@PathVariable int date) {
CalendarResponseDto result = calendarService.getCalendarData(year, month, date);
CalendarResponseDto result = calendarService.getCalendarData(petId, year, month, date);
return ApiResponse.onSuccess(result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,28 +61,31 @@ public ApiResponse<List<String>> uploadTipImages(
@Operation(summary = "팁 조회 API")
@GetMapping
public ApiResponse<List<TipResponseDTO>> getTips(
@AuthenticationPrincipal Member member,
@RequestParam("category") Category category,
@RequestParam(name = "page", defaultValue = "0") int page) {

List<TipResponseDTO> result = tipService.getTipsByCategory(category, page, 21);
List<TipResponseDTO> result = tipService.getTipsByCategory(category, page, 21, member);
return ApiResponse.onSuccess(result);
}


@Operation(summary = "전체 팁 조회 API")
@GetMapping("/all")
public ApiResponse<List<TipResponseDTO>> getAllTips(
@AuthenticationPrincipal Member member,
@RequestParam(name = "page", defaultValue = "0") int page) {

List<TipResponseDTO> result = tipService.getAllTips(page, 21);
List<TipResponseDTO> result = tipService.getAllTips(page, 21, member);
return ApiResponse.onSuccess(result);
}

@Operation(summary = "Best 팁 조회 API")
@GetMapping("/best")
public ApiResponse<List<TipResponseDTO>> getBestTips(
@AuthenticationPrincipal Member member
) {
List<TipResponseDTO> result = tipService.getBestTips();
List<TipResponseDTO> result = tipService.getBestTips(member);
return ApiResponse.onSuccess(result);
}
}
15 changes: 15 additions & 0 deletions src/main/java/ttakkeun/ttakkeun_server/dto/tip/TipResponseDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,19 @@ public class TipResponseDTO {
private LocalDateTime createdAt;
private List<String> imageUrls;
private String authorName;
private Boolean isLike;
private Boolean isPopular;

public TipResponseDTO(Long tipId, Category category, String title, String content, Integer recommendCount,
LocalDateTime createdAt, List<String> imageUrls, String authorName, Boolean isPopular) {
this.tipId = tipId;
this.category = category;
this.title = title;
this.content = content;
this.recommendCount = recommendCount;
this.createdAt = createdAt;
this.imageUrls = imageUrls;
this.authorName = authorName;
this.isPopular = isPopular;
}
}
3 changes: 2 additions & 1 deletion src/main/java/ttakkeun/ttakkeun_server/dto/todo/TodoDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import software.amazon.awssdk.services.s3.endpoints.internal.Value;
import ttakkeun.ttakkeun_server.entity.enums.TodoStatus;

@Getter
Expand All @@ -14,6 +15,6 @@ public class TodoDto {

private Long todoId;
private String todoName;
private TodoStatus todoStatus;
private Boolean todoStatus;

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@

import java.time.LocalDate;


@Getter
@Setter
@AllArgsConstructor
public class TodoResponseDto {
private Long todoId;
private LocalDate todoDate;
private boolean todoStatus;

}
2 changes: 1 addition & 1 deletion src/main/java/ttakkeun/ttakkeun_server/entity/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public String getPassword() {

@Override
public String getUsername() {
return "";
return this.userName;
}

@Override
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/ttakkeun/ttakkeun_server/entity/Tip.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ public class Tip extends BaseEntity {
@Builder.Default
private LocalDateTime createdAt = LocalDateTime.now();

@Builder.Default
private boolean isPopular = false;

public void addImage(TipImage image) {
image.setTip(this);
this.images.add(image);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,6 @@ public interface LikeTipRepository extends JpaRepository<LikeTip, Long> {
int countByTip(Tip tip);

boolean existsByTipAndMember(Tip tip, Member member);

//boolean existsIsLike(Tip tip, Member member);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,11 @@
public interface TipRepository extends JpaRepository<Tip, Long> {
Page<Tip> findByCategory(Category category, Pageable pageable);


@Query("SELECT t FROM Tip t WHERE t.recommendCount <> 0 ORDER BY t.recommendCount DESC, t.createdAt DESC LIMIT 10")
List<Tip> findByIsPopularTrue();

// 최신 10개 팁 조회
List<Tip> findTop10ByOrderByCreatedAt();
}

Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

@Repository
public interface TodoRepository extends JpaRepository<Todo, Long> {
List<Todo> findByTodoDate(LocalDate selectDate);
List<Todo> findByTodoDateAndPet(LocalDate selectDate, Pet pet);

long countByTodoCategoryAndPet(Category todoCategory, Pet pet);
long countByTodoCategoryAndPetAndTodoStatus(Category todoCategory, Pet pet, TodoStatus todoStatus);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@
import org.springframework.stereotype.Service;
import ttakkeun.ttakkeun_server.dto.todo.CalendarResponseDto;
import ttakkeun.ttakkeun_server.dto.todo.TodoDto;
import ttakkeun.ttakkeun_server.entity.Pet;
import ttakkeun.ttakkeun_server.entity.Todo;
import ttakkeun.ttakkeun_server.entity.enums.Category;
import ttakkeun.ttakkeun_server.repository.PetRepository;
import ttakkeun.ttakkeun_server.repository.TodoRepository;
import ttakkeun.ttakkeun_server.entity.enums.TodoStatus;


import java.time.LocalDate;
import java.util.List;
Expand All @@ -15,16 +19,21 @@
public class CalendarService {

private final TodoRepository todoRepository;
private final PetRepository petRepository;

public CalendarService(TodoRepository todoRepository) {
public CalendarService(TodoRepository todoRepository, PetRepository petRepository) {

this.todoRepository = todoRepository;
this.petRepository = petRepository;
}

public CalendarResponseDto getCalendarData(int year, int month, int date) {
public CalendarResponseDto getCalendarData(Long petId, int year, int month, int date) {
LocalDate selectDate = LocalDate.of(year, month, date);
Pet pet = petRepository.findById(petId)
.orElseThrow(() -> new IllegalArgumentException("Pet not found with id: " + petId));


List<Todo> todos = todoRepository.findByTodoDate(selectDate);
List<Todo> todos = todoRepository.findByTodoDateAndPet(selectDate, pet);

// 투두 항목별로 분류하기
List<TodoDto> earTodos = filterTodosByCategory(todos, Category.EAR);
Expand All @@ -39,11 +48,15 @@ public CalendarResponseDto getCalendarData(int year, int month, int date) {
);
}

private boolean convertStatusToBoolean(TodoStatus status) {
return status == TodoStatus.DONE;
}

private List<TodoDto> convertToDto(List<Todo> todos) {
return todos.stream().map(todo -> new TodoDto(
todo.getTodoId(),
todo.getTodoName(),
todo.getTodoStatus()
convertStatusToBoolean(todo.getTodoStatus())
)).collect(Collectors.toList());
}

Expand All @@ -53,7 +66,7 @@ private List<TodoDto> filterTodosByCategory(List<Todo> todos, Category todoCateg
.map(todo -> new TodoDto(
todo.getTodoId(),
todo.getTodoName(),
todo.getTodoStatus()
convertStatusToBoolean(todo.getTodoStatus())
))
.collect(Collectors.toList());
}
Expand Down
39 changes: 32 additions & 7 deletions src/main/java/ttakkeun/ttakkeun_server/service/TipService.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import ttakkeun.ttakkeun_server.entity.TipImage;
import ttakkeun.ttakkeun_server.entity.enums.Category;
import ttakkeun.ttakkeun_server.repository.LikeTipRepository;
import ttakkeun.ttakkeun_server.repository.MemberRepository;
import ttakkeun.ttakkeun_server.repository.TipRepository;

Expand All @@ -31,6 +32,7 @@ public class TipService {
private final MemberService memberService;
private final S3ImageService s3ImageService;
private final MemberRepository memberRepository;
private final LikeTipRepository likeTipRepository;

// 팁 생성
@Transactional
Expand Down Expand Up @@ -59,10 +61,27 @@ public TipResponseDTO createTip(TipCreateRequestDTO request, Long memberId, List
tip.getImages().stream()
.map(TipImage::getTipImageUrl)
.collect(Collectors.toList()),
member.getUsername()
tip.getMember().getUsername(),
false,
tip.isPopular()
);
}

// 베스트 팁 업데이트
@Transactional
public void updateBestTips() {
// 기존 베스트 팁들을 모두 일반 팁으로 변경
List<Tip> currentBestTips = tipRepository.findByIsPopularTrue();
currentBestTips.forEach(tip -> tip.setPopular(false));

// 최신 10개의 팁을 베스트 팁으로 설정
List<Tip> latestTips = tipRepository.findTop10ByOrderByCreatedAt();
latestTips.forEach(tip -> tip.setPopular(true));

tipRepository.saveAll(currentBestTips);
tipRepository.saveAll(latestTips);
}


// 팁 생성시 이미지 업로드
@Transactional
Expand Down Expand Up @@ -95,7 +114,7 @@ public List<TipImage> uploadTipImages(Long tipId, Long memberId, List<MultipartF

// 카테고리별 팁 조회
@Transactional(readOnly = true)
public List<TipResponseDTO> getTipsByCategory(Category category, int page, int size) {
public List<TipResponseDTO> getTipsByCategory(Category category, int page, int size, Member member) {
Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "createdAt"));
Page<Tip> tipsPage = tipRepository.findByCategory(category, pageable);

Expand All @@ -108,15 +127,17 @@ public List<TipResponseDTO> getTipsByCategory(Category category, int page, int s
tip.getRecommendCount(),
tip.getCreatedAt(),
tip.getImages().stream().map(TipImage::getTipImageUrl).collect(Collectors.toList()),
tip.getMember().getUsername()
tip.getMember().getUsername(),
likeTipRepository.existsByTipAndMember(tip, member),
tip.isPopular()
))
.collect(Collectors.toList());
}


// 전체 카테고리 조회
@Transactional(readOnly = true)
public List<TipResponseDTO> getAllTips(int page, int size) {
public List<TipResponseDTO> getAllTips(int page, int size, Member member) {
Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "createdAt"));
Page<Tip> tipsPage = tipRepository.findAll(pageable);

Expand All @@ -129,15 +150,17 @@ public List<TipResponseDTO> getAllTips(int page, int size) {
tip.getRecommendCount(),
tip.getCreatedAt(),
tip.getImages().stream().map(TipImage::getTipImageUrl).collect(Collectors.toList()),
tip.getMember().getUsername()
tip.getMember().getUsername(),
likeTipRepository.existsByTipAndMember(tip, member),
tip.isPopular()
))
.collect(Collectors.toList());
}


// Best 카테고리 조회
@Transactional(readOnly = true)
public List<TipResponseDTO> getBestTips() {
public List<TipResponseDTO> getBestTips(Member member) {
List<Tip> topTips = tipRepository.findByIsPopularTrue();

return topTips.stream()
Expand All @@ -149,7 +172,9 @@ public List<TipResponseDTO> getBestTips() {
tip.getRecommendCount(),
tip.getCreatedAt(),
tip.getImages().stream().map(TipImage::getTipImageUrl).collect(Collectors.toList()),
tip.getMember().getUsername()
tip.getMember().getUsername(),
likeTipRepository.existsByTipAndMember(tip, member),
tip.isPopular()
))
.collect(Collectors.toList());
}
Expand Down
19 changes: 12 additions & 7 deletions src/main/java/ttakkeun/ttakkeun_server/service/TodoService.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,13 @@ public TodoResponseDto createTodo(TodoCreateRequestDto request) {
.todoName(request.getTodoName())
.todoCategory(request.getTodoCategory())
.todoDate(LocalDate.now())
.todoStatus(TodoStatus.ONPROGRESS)
.pet(pet)
.build();

todoRepository.save(todo);

return new TodoResponseDto(todo.getTodoId(), todo.getTodoDate());
return new TodoResponseDto(todo.getTodoId(), todo.getTodoDate(),convertStatusToBoolean(todo.getTodoStatus()));
}

@Transactional
Expand All @@ -52,7 +53,7 @@ public TodoResponseDto updateTodoStatus(Long todoId) {

todoRepository.save(todo);

return new TodoResponseDto(todo.getTodoId(), todo.getTodoDate());
return new TodoResponseDto(todo.getTodoId(), todo.getTodoDate(), convertStatusToBoolean(todo.getTodoStatus()));
}

@Transactional
Expand All @@ -65,7 +66,11 @@ public TodoResponseDto updateTodoContent(Long todoId, TodoContentUpdateRequestDt
todo.setTodoStatus(request.getTodoStatus());
todoRepository.save(todo);

return new TodoResponseDto(todo.getTodoId(), todo.getTodoDate());
return new TodoResponseDto(todo.getTodoId(), todo.getTodoDate(), convertStatusToBoolean(todo.getTodoStatus()));
}

private boolean convertStatusToBoolean(TodoStatus status) {
return status == TodoStatus.DONE;
}

@Transactional
Expand Down Expand Up @@ -97,7 +102,7 @@ public TodoResponseDto repeatTodoTomorrow(Long todoId) {

todoRepository.save(newTodo);

return new TodoResponseDto(newTodo.getTodoId(), newTodo.getTodoDate());
return new TodoResponseDto(newTodo.getTodoId(), newTodo.getTodoDate(), convertStatusToBoolean(newTodo.getTodoStatus()));
}

@Transactional
Expand All @@ -113,7 +118,7 @@ public TodoResponseDto doTomorrow(Long todoId) {

todoRepository.save(todo);

return new TodoResponseDto(todo.getTodoId(), todo.getTodoDate());
return new TodoResponseDto(todo.getTodoId(), todo.getTodoDate(), convertStatusToBoolean(todo.getTodoStatus()));
}

@Transactional
Expand All @@ -137,7 +142,7 @@ public TodoResponseDto repeatAnotherDay(Long todoId, RepeatAnotherDayRequestDto

todoRepository.save(newTodo);

return new TodoResponseDto(newTodo.getTodoId(), newTodo.getTodoDate());
return new TodoResponseDto(newTodo.getTodoId(), newTodo.getTodoDate(), convertStatusToBoolean(newTodo.getTodoStatus()));
}

@Transactional
Expand All @@ -153,6 +158,6 @@ public TodoResponseDto changeDate(Long todoId, ChangeDateRequestDto requestDto)
todo.setTodoDate(newDate);
todoRepository.save(todo);

return new TodoResponseDto(todo.getTodoId(), todo.getTodoDate());
return new TodoResponseDto(todo.getTodoId(), todo.getTodoDate(), convertStatusToBoolean(todo.getTodoStatus()));
}
}

0 comments on commit d4b11ab

Please sign in to comment.