Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
6f86f87
feat: #240 Entity 객체에 재촉하기 관련 신규 기능 추가
kelly6bf Dec 31, 2025
7f5042b
feat: #240 기존 API에 재촉 관련 필드 추가 및 재촉 알림 전송 기능 구현
kelly6bf Dec 31, 2025
d94de28
feat: #240 데일리 투두 인증 관련 Error Code 및 예외 객체 추가
kelly6bf Dec 31, 2025
1e4689d
chore: #240 API 문서 수정
kelly6bf Dec 31, 2025
76a4ab8
Merge pull request #241 from dogether-project/feature/#240-remind-api
kelly6bf Dec 31, 2025
324c7a8
refactor: #242 참여중인 특정 챌린지 그룹 활동 통계 조회 API 리팩토링
Hwangseoeun Jan 11, 2026
a24a568
refactor: #242 참여중인 특정 챌린지 그룹 활동 통계 조회 API v0 제거
Hwangseoeun Jan 11, 2026
b78508f
refactor: #242 memberActivityService 테스트 추가
Hwangseoeun Jan 11, 2026
227db3c
refactor: #242 메서드 네이밍 변경
Hwangseoeun Jan 12, 2026
12e58a7
refactor: #242 사용자의 활동 통계 및 작성한 인증 목록 전체 조회 API 리팩토링
Hwangseoeun Jan 12, 2026
976e935
refactor: #242 사용자의 활동 통계 및 작성한 인증 목록 전체 조회 API v0 제거
Hwangseoeun Jan 12, 2026
faeb3f3
refactor: #242 사용자 프로필 조회 API 리팩토링
Hwangseoeun Jan 12, 2026
b0e9508
Merge pull request #243 from dogether-project/feat/#242-member_activi…
Hwangseoeun Jan 12, 2026
6be86ab
refactor: #244 class를 record로 변경
Hwangseoeun Jan 12, 2026
9402e37
feat: #244 사용자의 인증 목록 전체 조회 API 구현
Hwangseoeun Jan 12, 2026
4a85d4e
feat: #244 투두 인증 작성일 기준으로 정렬했을 시 해당 날짜의 투두를 모두 조회하도록 로직 수정
Hwangseoeun Jan 12, 2026
3f720fc
feat: #244 잘못된 인자값 입력 수정
Hwangseoeun Jan 12, 2026
ad1ba02
Merge pull request #245 from dogether-project/feat/#244-get_group_cer…
Hwangseoeun Jan 12, 2026
5db3972
docs: #244 api 명세 문서 내 path variable 설명 추가
Hwangseoeun Jan 13, 2026
64c7e60
Merge branch 'dev' into feat/#244-get_group_certifications_api
Hwangseoeun Jan 13, 2026
f434794
Merge pull request #246 from dogether-project/feat/#244-get_group_cer…
Hwangseoeun Jan 13, 2026
0a3cd77
docs: #244 api 명세 문서 내 path variable 설명 추가
Hwangseoeun Jan 13, 2026
ebf2645
Merge branch 'dev' into feat/#244-get_group_certifications_api
Hwangseoeun Jan 13, 2026
0a80399
Merge pull request #247 from dogether-project/feat/#244-get_group_cer…
Hwangseoeun Jan 13, 2026
a058da4
feat: #248 참여중인 특정 챌린지 그룹 활동 요약 조회 API V2 구현
Hwangseoeun Jan 17, 2026
6f13e66
docs: #248 참여중인 특정 챌린지 그룹 활동 요약 조회 API V2 명세 문서 추가
Hwangseoeun Jan 17, 2026
55584db
feat: #248 사용자 인증 목록 전체 조회 API V2 구현
Hwangseoeun Jan 24, 2026
023d7b1
docs: #248 사용자 인증 목록 전체 조회 API V2 명세 문서 추가
Hwangseoeun Jan 24, 2026
1ece0bc
feat: #248 사용자 인증 통계 조회 API V2 구현
Hwangseoeun Jan 24, 2026
67ab06d
docs: #248 사용자 인증 통계 조회 API V2 명세 문서 추가
Hwangseoeun Jan 24, 2026
0e97b23
Merge pull request #249 from dogether-project/feature/#248-member_act…
Hwangseoeun Jan 24, 2026
a16b01b
feat: #251 당일 히스토리 조회 API에 내 히스토리 여부를 확인할 수 있는 isMine 응답 필드 추가
kelly6bf Feb 2, 2026
f91c230
Merge pull request #252 from dogether-project/feature/#251-is_mine_re…
kelly6bf Feb 2, 2026
f62e334
feat: #253 controller에 있던 내부 로직을 service 단으로 옮김으로써 LazyInitialization…
Hwangseoeun Feb 2, 2026
c271c17
docs: #253 v2 사용자 인증 목록 전체 조회 API 문서 내 request url 내부 값 변경
Hwangseoeun Feb 2, 2026
ebd1447
Merge pull request #254 from dogether-project/feature/#253-lazy_initi…
Hwangseoeun Feb 2, 2026
dec9ff8
feat: #251 isMine 응답 값 위치 변경
kelly6bf Feb 4, 2026
7312eca
Merge pull request #255 from dogether-project/feature/#251-is_mine_re…
kelly6bf Feb 4, 2026
c50e452
feat: #256 local test를 위한 푸시 알림 객체에 프로필 추가
kelly6bf Feb 4, 2026
a97b0f0
feat: #256 잘못된 로직 수정
kelly6bf Feb 4, 2026
9c9dc38
Merge pull request #257 from dogether-project/feature/#256-reminder_a…
kelly6bf Feb 4, 2026
0020aa2
feat: #256 잘못 들어간 프로필 제거
kelly6bf Feb 4, 2026
02ebb1a
Merge branch 'dev' into feature/#256-reminder_api_error_fix
kelly6bf Feb 4, 2026
de66995
Merge pull request #258 from dogether-project/feature/#256-reminder_a…
kelly6bf Feb 4, 2026
2ba2926
prometheus tomcat thread 옵션 추가
kelly6bf Mar 12, 2026
306f2e2
Merge pull request #259 from dogether-project/feature/prometheus_tomc…
kelly6bf Mar 12, 2026
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
3 changes: 3 additions & 0 deletions src/docs/asciidoc/common/overview.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@
| `DTCF-0001`
| 데일리 투두 인증 기능에 예기치 못한 문제 발생

| `DTCF-0002`
| 검사자가 배정되어 있지 않은 투두 인증

| `DTHF-0001`
| 데일리 투두 히스토리 기능에 예기치 못한 문제 발생

Expand Down
70 changes: 70 additions & 0 deletions src/docs/asciidoc/dailytodo/daily-todo-v2.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
[[daily-todo-v2-api]]
== [V2] 데일리 투두 API

[[get-my-daily-todos-v2]]
=== 참여중인 특정 챌린지 그룹에서 내 데일리 투두 전체 조회 (투두 작성 날짜만 입력)

==== 개발 상태
|===
| 환경 | 구현 여부

| 개발
| O

| 운영
| X
|===

==== HTTP Request
include::{snippets}/daily-todo-controller-v2-docs-test/get-my-daily-todos-with-certification-input-date-v2/http-request.adoc[]
include::{snippets}/daily-todo-controller-v2-docs-test/get-my-daily-todos-with-certification-input-date-v2/path-parameters.adoc[]
include::{snippets}/daily-todo-controller-v2-docs-test/get-my-daily-todos-with-certification-input-date-v2/query-parameters.adoc[]

==== HTTP Response
include::{snippets}/daily-todo-controller-v2-docs-test/get-my-daily-todos-with-certification-input-date-v2/http-response.adoc[]
include::{snippets}/daily-todo-controller-v2-docs-test/get-my-daily-todos-with-certification-input-date-v2/response-fields.adoc[]

[[get-my-daily-todos-with-daily-todo-status-v2]]
=== 참여중인 특정 챌린지 그룹에서 내 데일리 투두 전체 조회 (투두 작성 날짜 & 투두 상태 입력)

==== 개발 상태
|===
| 환경 | 구현 여부

| 개발
| O

| 운영
| O
|===

==== HTTP Request
include::{snippets}/daily-todo-controller-v2-docs-test/get-my-daily-todos-with-certification-input-date-and-todo-status-v2/http-request.adoc[]
include::{snippets}/daily-todo-controller-v2-docs-test/get-my-daily-todos-with-certification-input-date-and-todo-status-v2/path-parameters.adoc[]
include::{snippets}/daily-todo-controller-v2-docs-test/get-my-daily-todos-with-certification-input-date-and-todo-status-v2/query-parameters.adoc[]

==== HTTP Response
include::{snippets}/daily-todo-controller-v2-docs-test/get-my-daily-todos-with-certification-input-date-and-todo-status-v2/http-response.adoc[]
include::{snippets}/daily-todo-controller-v2-docs-test/get-my-daily-todos-with-certification-input-date-and-todo-status-v2/response-fields.adoc[]

[[get-challenge-group-member-today-todos-v2]]
=== 참여중인 특정 챌린지 그룹에 속한 특정 그룹원의 당일 데일리 투두 히스토리 전체 조회

==== 개발 상태
|===
| 환경 | 구현 여부

| 개발
| O

| 운영
| X
|===

==== HTTP Request
include::{snippets}/daily-todo-controller-v2-docs-test/get-challenge-group-member-today-todo-history-v2/http-request.adoc[]
include::{snippets}/daily-todo-controller-v2-docs-test/get-challenge-group-member-today-todo-history-v2/path-parameters.adoc[]

==== HTTP Response
include::{snippets}/daily-todo-controller-v2-docs-test/get-challenge-group-member-today-todo-history-v2/http-response.adoc[]
include::{snippets}/daily-todo-controller-v2-docs-test/get-challenge-group-member-today-todo-history-v2/response-fields.adoc[]
3 changes: 3 additions & 0 deletions src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ include::common/overview.adoc[]
include::auth/auth-v1.adoc[]
include::challengegroup/challenge-group-v1.adoc[]
include::dailytodo/daily-todo-v1.adoc[]
include::dailytodo/daily-todo-v2.adoc[]
include::dailytodocertification/daily-todo-certification-v1.adoc[]
include::memberactivity/member-activity-v1.adoc[]
include::memberactivity/member-activity-v2.adoc[]
include::reminder/reminder-v1.adoc[]
include::notification/notification-v1.adoc[]
include::s3/s3-v1.adoc[]
include::appinfo/app-info-v1.adoc[]
27 changes: 25 additions & 2 deletions src/docs/asciidoc/memberactivity/member-activity-v1.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ include::{snippets}/member-activity-controller-v1-docs-test/get-group-activity-s
include::{snippets}/member-activity-controller-v1-docs-test/get-group-activity-stat-v1/http-response.adoc[]
include::{snippets}/member-activity-controller-v1-docs-test/get-group-activity-stat-v1/response-fields.adoc[]

[[get-member-all-stats-sorted-by-todo-completed-at-v1]]
[[get-my-activity-stats-and-certifications-sorted-by-certificated-at-v1]]
=== 사용자의 활동 통계 및 작성한 인증 목록 전체 조회 (투두 완료일 순)

==== 개발 상태
Expand All @@ -45,7 +45,7 @@ include::{snippets}/member-activity-controller-v1-docs-test/get-member-all-stats
include::{snippets}/member-activity-controller-v1-docs-test/get-member-all-stats-sorted-by-todo-completed-at-v1/http-response.adoc[]
include::{snippets}/member-activity-controller-v1-docs-test/get-member-all-stats-sorted-by-todo-completed-at-v1/response-fields.adoc[]

[[get-member-all-stats-sorted-by-group-created-at-v1]]
[[get-my-activity-stats-and-certifications-sorted-by-group-created-at-v1]]
=== 사용자의 활동 통계 및 작성한 인증 목록 전체 조회 (그룹 생성일 순)

==== 개발 상태
Expand All @@ -67,6 +67,29 @@ include::{snippets}/member-activity-controller-v1-docs-test/get-member-all-stats
include::{snippets}/member-activity-controller-v1-docs-test/get-member-all-stats-sorted-by-group-created-at-v1/http-response.adoc[]
include::{snippets}/member-activity-controller-v1-docs-test/get-member-all-stats-sorted-by-group-created-at-v1/response-fields.adoc[]

[[get-my-group-certifications-v1]]
=== 사용자의 인증 목록 전체 조회 (페이징 X)

==== 개발 상태
|===
| 환경 | 구현 여부

| 개발
| O

| 운영
| X
|===

==== HTTP Request
include::{snippets}/member-activity-controller-v1-docs-test/get-my-group-certifications-v1/http-request.adoc[]
include::{snippets}/member-activity-controller-v1-docs-test/get-my-group-certifications-v1/path-parameters.adoc[]
include::{snippets}/member-activity-controller-v1-docs-test/get-my-group-certifications-v1/query-parameters.adoc[]

==== HTTP Response
include::{snippets}/member-activity-controller-v1-docs-test/get-my-group-certifications-v1/http-response.adoc[]
include::{snippets}/member-activity-controller-v1-docs-test/get-my-group-certifications-v1/response-fields.adoc[]

[[get-my-profile-v1]]
=== 사용자 프로필 조회

Expand Down
68 changes: 68 additions & 0 deletions src/docs/asciidoc/memberactivity/member-activity-v2.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
[[member-activity-v2-api]]
== [V2] 사용자 활동 API

[[get-my-challenge-group-activity-summary-v2]]
=== 참여중인 특정 챌린지 그룹 활동 요약 조회 API

==== 개발 상태
|===
| 환경 | 구현 여부

| 개발
| O

| 운영
| X
|===

==== HTTP Request
include::{snippets}/member-activity-controller-v2-docs-test/get-my-challenge-group-activity-summary-v2/http-request.adoc[]
include::{snippets}/member-activity-controller-v2-docs-test/get-my-challenge-group-activity-summary-v2/path-parameters.adoc[]

==== HTTP Response
include::{snippets}/member-activity-controller-v2-docs-test/get-my-challenge-group-activity-summary-v2/http-response.adoc[]
include::{snippets}/member-activity-controller-v2-docs-test/get-my-challenge-group-activity-summary-v2/response-fields.adoc[]

[[get-my-certifications-v2]]
=== 사용자 인증 목록 전체 조회 API

==== 개발 상태
|===
| 환경 | 구현 여부

| 개발
| O

| 운영
| X
|===

==== HTTP Request
include::{snippets}/member-activity-controller-v2-docs-test/get-my-certifications-v2/http-request.adoc[]
include::{snippets}/member-activity-controller-v2-docs-test/get-my-certifications-v2/query-parameters.adoc[]

==== HTTP Response
include::{snippets}/member-activity-controller-v2-docs-test/get-my-certifications-v2/http-response.adoc[]
include::{snippets}/member-activity-controller-v2-docs-test/get-my-certifications-v2/response-fields.adoc[]

[[get-my-certification-stats-v2]]
=== 사용자 인증 통계 조회 API

==== 개발 상태
|===
| 환경 | 구현 여부

| 개발
| O

| 운영
| X
|===

==== HTTP Request
include::{snippets}/member-activity-controller-v2-docs-test/get-my-certification-stats-v2/http-request.adoc[]
include::{snippets}/member-activity-controller-v2-docs-test/get-my-certification-stats-v2/query-parameters.adoc[]

==== HTTP Response
include::{snippets}/member-activity-controller-v2-docs-test/get-my-certification-stats-v2/http-response.adoc[]
include::{snippets}/member-activity-controller-v2-docs-test/get-my-certification-stats-v2/response-fields.adoc[]
25 changes: 25 additions & 0 deletions src/docs/asciidoc/reminder/reminder-v1.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
[[reminder-v1-api]]
== [V1] 투두 활동 재촉 API

[[send-todo-activity-reminder-v1]]
=== 투두 활동 재촉 알림 전송

==== 개발 상태
|===
| 환경 | 구현 여부

| 개발
| O

| 운영
| X
|===

==== HTTP Request
include::{snippets}/todo-activity-reminder-controller-v1-docs-test/send-todo-activity-reminder-v1/http-request.adoc[]
include::{snippets}/todo-activity-reminder-controller-v1-docs-test/send-todo-activity-reminder-v1/path-parameters.adoc[]
include::{snippets}/todo-activity-reminder-controller-v1-docs-test/send-todo-activity-reminder-v1/request-fields.adoc[]

==== HTTP Response
include::{snippets}/todo-activity-reminder-controller-v1-docs-test/send-todo-activity-reminder-v1/http-response.adoc[]
include::{snippets}/todo-activity-reminder-controller-v1-docs-test/send-todo-activity-reminder-v1/response-fields.adoc[]
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package site.dogether.dailytodo.controller.v2;

import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import site.dogether.auth.resolver.Authenticated;
import site.dogether.common.controller.dto.response.ApiResponse;
import site.dogether.dailytodo.controller.v2.dto.response.GetChallengeGroupMemberTodayTodoHistoryApiResponseV2;
import site.dogether.dailytodo.controller.v2.dto.response.GetMyDailyTodosApiResponseV2;
import site.dogether.dailytodo.service.DailyTodoService;
import site.dogether.dailytodo.service.dto.DailyTodoDto;
import site.dogether.dailytodo.service.dto.FindMyDailyTodosConditionDto;
import site.dogether.dailytodohistory.service.DailyTodoHistoryService;
import site.dogether.dailytodohistory.service.dto.FindTargetMemberTodayTodoHistoriesDto;

import java.time.LocalDate;
import java.util.List;

import static site.dogether.common.controller.dto.response.ApiResponse.success;

@RequiredArgsConstructor
@RestController
public class DailyTodoControllerV2 {

private final DailyTodoService dailyTodoService;
private final DailyTodoHistoryService dailyTodoHistoryService;

@GetMapping("/api/v2/challenge-groups/{groupId}/my-todos")
public ResponseEntity<ApiResponse<GetMyDailyTodosApiResponseV2>> getMyDailyTodos(
@Authenticated final Long memberId,
@PathVariable final Long groupId,
@RequestParam final LocalDate date,
@RequestParam(required = false) final String status
) {
final FindMyDailyTodosConditionDto findMyDailyTodosConditionDto = new FindMyDailyTodosConditionDto(memberId, groupId, date, status);
final List<DailyTodoDto> myDailyTodos = dailyTodoService.findMyDailyTodos(findMyDailyTodosConditionDto);
return ResponseEntity.ok(success(GetMyDailyTodosApiResponseV2.of(myDailyTodos)));
}

@GetMapping("/api/v2/challenge-groups/{groupId}/challenge-group-members/{targetMemberId}/today-todo-history")
public ResponseEntity<ApiResponse<GetChallengeGroupMemberTodayTodoHistoryApiResponseV2>> getChallengeGroupMemberTodayTodoHistory(
@Authenticated final Long memberId,
@PathVariable final Long groupId,
@PathVariable final Long targetMemberId
) {
final FindTargetMemberTodayTodoHistoriesDto targetMemberTodayTodoHistories = dailyTodoHistoryService.findAllTodayTodoHistories(memberId, groupId, targetMemberId);
final GetChallengeGroupMemberTodayTodoHistoryApiResponseV2 response = GetChallengeGroupMemberTodayTodoHistoryApiResponseV2.from(targetMemberTodayTodoHistories);
return ResponseEntity.ok(success(response));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package site.dogether.dailytodo.controller.v2.dto.response;

import com.fasterxml.jackson.annotation.JsonInclude;
import site.dogether.dailytodohistory.service.dto.FindTargetMemberTodayTodoHistoriesDto;
import site.dogether.dailytodohistory.service.dto.TodoHistoryDto;

import java.util.List;

public record GetChallengeGroupMemberTodayTodoHistoryApiResponseV2(
boolean isMine,
int currentTodoHistoryToReadIndex,
List<TodoData> todos
) {
public static GetChallengeGroupMemberTodayTodoHistoryApiResponseV2 from(final FindTargetMemberTodayTodoHistoriesDto dto) {
final List<TodoData> todos = dto.todoHistories().stream().map(TodoData::from).toList();
return new GetChallengeGroupMemberTodayTodoHistoryApiResponseV2(dto.isMine(), dto.currentTodoHistoryToReadIndex(), todos);
}

public record TodoData(
Long historyId,
Long todoId,
String content,
String status,
boolean canRequestCertification,
boolean canRequestCertificationReview,
@JsonInclude(JsonInclude.Include.NON_NULL)
String certificationContent,
@JsonInclude(JsonInclude.Include.NON_NULL)
String certificationMediaUrl,
boolean isRead,
@JsonInclude(JsonInclude.Include.NON_NULL)
String reviewFeedback
) {
public static TodoData from(final TodoHistoryDto dto) {
return new TodoData(
dto.id(),
dto.todoId(),
dto.content(),
dto.status(),
dto.canRequestCertification(),
dto.canRequestCertificationReview(),
dto.certificationContent(),
dto.certificationMediaUrl(),
dto.isRead(),
dto.reviewFeedback()
);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package site.dogether.dailytodo.controller.v2.dto.response;

import com.fasterxml.jackson.annotation.JsonInclude;
import site.dogether.dailytodo.service.dto.DailyTodoDto;

import java.util.List;

import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toList;

public record GetMyDailyTodosApiResponseV2(List<Data> todos) {

public static GetMyDailyTodosApiResponseV2 of(List<DailyTodoDto> todos) {
return todos.stream()
.map(Data::from)
.collect(collectingAndThen(toList(), GetMyDailyTodosApiResponseV2::new));
}

record Data(
Long id,
String content,
String status,
boolean canRequestCertificationReview,
@JsonInclude(JsonInclude.Include.NON_NULL)
String certificationContent,
@JsonInclude(JsonInclude.Include.NON_NULL)
String certificationMediaUrl,
@JsonInclude(JsonInclude.Include.NON_NULL)
String reviewFeedback
) {
public static Data from(final DailyTodoDto dailyTodo) {
return new Data(
dailyTodo.getId(),
dailyTodo.getContent(),
dailyTodo.getStatus(),
dailyTodo.canRequestCertificationReview(),
dailyTodo.findCertificationContent().orElse(null),
dailyTodo.findCertificationMediaUrl().orElse(null),
dailyTodo.findReviewFeedback().orElse(null)
);
}
}
}
Loading
Loading