Skip to content

Commit

Permalink
feat : 날짜별 퍼센티지 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
doolysmile committed Jan 7, 2023
1 parent 8eb2fb5 commit 8419c99
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package com.cmc.selfdevelopment.domain.improvement.controller;

import com.cmc.selfdevelopment.domain.improvement.dto.ChangeDoneDto;
import com.cmc.selfdevelopment.domain.improvement.dto.CreateTodoDto;
import com.cmc.selfdevelopment.domain.improvement.dto.ImprovementDto;
import com.cmc.selfdevelopment.domain.improvement.dto.TodoDto;
import com.cmc.selfdevelopment.domain.improvement.dto.*;
import com.cmc.selfdevelopment.domain.improvement.service.ImprovementService;
import com.cmc.selfdevelopment.domain.improvement.service.TodoService;
import com.cmc.selfdevelopment.domain.user.UserTempService;
Expand Down Expand Up @@ -83,4 +80,10 @@ public ResponseEntity<ApiResponse<List<TodoDto>>> showTodo(@RequestParam("date")
return ResponseEntity.status(HttpStatus.CREATED).body(new ApiResponse(ResponseCode.TODO_LIST, todoService.findAllTodo(date)));
}

@Operation(summary = "특정 월에 해당하는 퍼센트", description = "특정 월에 해당하는 모든 날짜의 완성도 퍼센티지를 리턴")
@GetMapping("/todo/month")
public ResponseEntity<ApiResponse<List<TodoPercentDto>>> showTodoPercent(@RequestParam("date") Date date){

return ResponseEntity.status(HttpStatus.CREATED).body(new ApiResponse(ResponseCode.TODO_MONTH_PERCENT, todoService.findMonthPercent(date)));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.cmc.selfdevelopment.domain.improvement.dto;

import lombok.*;

import java.sql.Date;

@Getter
@Builder
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class TodoPercentDto {
private int percent;
private Date date;
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package com.cmc.selfdevelopment.domain.improvement.service;

import com.cmc.selfdevelopment.domain.improvement.dto.ChangeDoneDto;
import com.cmc.selfdevelopment.domain.improvement.dto.CreateTodoDto;
import com.cmc.selfdevelopment.domain.improvement.dto.ImprovementDto;
import com.cmc.selfdevelopment.domain.improvement.dto.TodoDto;
import com.cmc.selfdevelopment.domain.improvement.dto.*;
import com.cmc.selfdevelopment.domain.improvement.entity.Improvement;
import com.cmc.selfdevelopment.domain.improvement.entity.Todo;
import com.cmc.selfdevelopment.domain.improvement.repository.TodoRepository;
Expand All @@ -15,6 +12,8 @@
import org.springframework.stereotype.Service;

import java.sql.Date;
import java.time.Month;
import java.time.Year;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -86,4 +85,34 @@ public List<TodoDto> findAllTodo(Date date) {
.build())
.collect(Collectors.toList());
}

public List<TodoPercentDto> findMonthPercent(Date date) {
Year year = Year.of(date.getYear());
Month month = Month.of(date.getMonth() + 1);
int lastDay = month.length(year.isLeap());
List<TodoPercentDto> todoPercentDtos = new ArrayList<>();
System.out.println(year.getValue());
System.out.println(month.getValue());
System.out.println(lastDay);
for(int i = 1; i <= lastDay; i++){
Date eachDate = new Date(year.getValue(), month.getValue() - 1, i);
List<TodoDto> todos = findAllTodo(eachDate);
todoPercentDtos.add(TodoPercentDto.builder()
.percent(todos.size() == 0 ? 0 : countDone(todos)*100/todos.size())
.date(eachDate)
.build());
}

return todoPercentDtos;
}

public int countDone(List<TodoDto> todoDtos){
int cnt = 0;
for(TodoDto todoDto : todoDtos){
if(todoDto.isDone()){
cnt++;
}
}
return cnt;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ public enum ResponseCode {
GET_DIARY(HttpStatus.OK, "회고 조회에 성공하였습니다."),
DIARY_DELETED(HttpStatus.OK, "회고 삭제에 성공하였습니다." ),
TODO_CHANGE(HttpStatus.OK, "isDone 변경에 성공했습니다."),
TODO_LIST(HttpStatus.OK, "해당 날짜의 Todo 리스트입니다")
TODO_LIST(HttpStatus.OK, "해당 날짜의 Todo 리스트입니다"),
TODO_MONTH_PERCENT(HttpStatus.OK, "특정 달의 TODO 성취도 입니다")
;
private final HttpStatus status;
private final String message;
Expand Down

0 comments on commit 8419c99

Please sign in to comment.