Skip to content
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
25 changes: 16 additions & 9 deletions apps/timo-web/api/generated/endpoints/timer/timer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import type {
BaseResponseTimerStartResponse,
BaseResponseTimerStatusResponse,
ErrorDto,
StartTimerParams,
TimerActionRequest,
TimerExtendRequest,
} from "../../models";
Expand Down Expand Up @@ -59,17 +60,23 @@ const withQueryKey = <T extends object, K>(
* 투두의 타이머를 시작합니다.
* 한 번에 한 개의 타이머만 실행 가능하며, 이미 실행/일시정지 중인 타이머가 있으면 409를 반환합니다.
*
* 응답의 date는 타이머가 귀속되는 날짜(사용자 시간대 기준 시작일)입니다.
* 반복 투두는 여러 날짜에 같은 todoId로 노출되므로, 실행중 표시는 todoId가 아닌 (todoId, date) 조합으로 구분해야 합니다.
* 쿼리 파라미터 date로 타이머가 상태를 반영할 대상 날짜를 지정할 수 있으며(미래/과거 포함), 미지정 시 사용자 타임존 기준 오늘로 처리됩니다. 이후 일시정지/재개/완료/중지는 이 날짜를 그대로 사용합니다.
* @summary 타이머 시작
*/
export const startTimer = (
todoId: number,
params?: StartTimerParams,
options?: SecondParameter<typeof customInstance>,
signal?: AbortSignal,
) => {
return customInstance<BaseResponseTimerStartResponse>(
{ url: `/api/v1/todos/${todoId}/timers/start`, method: "POST", signal },
{
url: `/api/v1/todos/${todoId}/timers/start`,
method: "POST",
params,
signal,
},
options,
);
};
Expand All @@ -81,14 +88,14 @@ export const getStartTimerMutationOptions = <
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof startTimer>>,
TError,
{ todoId: number },
{ todoId: number; params?: StartTimerParams },
TContext
>;
request?: SecondParameter<typeof customInstance>;
}): UseMutationOptions<
Awaited<ReturnType<typeof startTimer>>,
TError,
{ todoId: number },
{ todoId: number; params?: StartTimerParams },
TContext
> => {
const mutationKey = ["startTimer"];
Expand All @@ -102,11 +109,11 @@ export const getStartTimerMutationOptions = <

const mutationFn: MutationFunction<
Awaited<ReturnType<typeof startTimer>>,
{ todoId: number }
{ todoId: number; params?: StartTimerParams }
> = (props) => {
const { todoId } = props ?? {};
const { todoId, params } = props ?? {};

return startTimer(todoId, requestOptions);
return startTimer(todoId, params, requestOptions);
};

return { mutationFn, ...mutationOptions };
Expand All @@ -126,7 +133,7 @@ export const useStartTimer = <TError = ErrorType<ErrorDto>, TContext = unknown>(
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof startTimer>>,
TError,
{ todoId: number },
{ todoId: number; params?: StartTimerParams },
TContext
>;
request?: SecondParameter<typeof customInstance>;
Expand All @@ -135,7 +142,7 @@ export const useStartTimer = <TError = ErrorType<ErrorDto>, TContext = unknown>(
): UseMutationResult<
Awaited<ReturnType<typeof startTimer>>,
TError,
{ todoId: number },
{ todoId: number; params?: StartTimerParams },
TContext
> => {
return useMutation(getStartTimerMutationOptions(options), queryClient);
Expand Down
9 changes: 8 additions & 1 deletion apps/timo-web/api/generated/endpoints/timer/timer.zod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,21 @@ import * as zod from "zod";
* 투두의 타이머를 시작합니다.
* 한 번에 한 개의 타이머만 실행 가능하며, 이미 실행/일시정지 중인 타이머가 있으면 409를 반환합니다.
*
* 응답의 date는 타이머가 귀속되는 날짜(사용자 시간대 기준 시작일)입니다.
* 반복 투두는 여러 날짜에 같은 todoId로 노출되므로, 실행중 표시는 todoId가 아닌 (todoId, date) 조합으로 구분해야 합니다.
* 쿼리 파라미터 date로 타이머가 상태를 반영할 대상 날짜를 지정할 수 있으며(미래/과거 포함), 미지정 시 사용자 타임존 기준 오늘로 처리됩니다. 이후 일시정지/재개/완료/중지는 이 날짜를 그대로 사용합니다.
* @summary 타이머 시작
*/
export const StartTimerParams = zod.object({
todoId: zod.number().describe("타이머를 시작할 투두 ID"),
});

export const StartTimerQueryParams = zod.object({
date: zod.iso
.date()
.optional()
.describe("타이머가 상태를 반영할 대상 날짜(미지정 시 오늘). ISO 형식"),
});

export const StartTimerResponse = zod.object({
status: zod.number().optional(),
message: zod.string().optional(),
Expand Down
1 change: 1 addition & 0 deletions apps/timo-web/api/generated/models/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ export * from "./recommendDurationRequest";
export * from "./recommendDurationResponse";
export * from "./repeatResponse";
export * from "./repeatResponseWeekdaysItem";
export * from "./startTimerParams";
export * from "./statisticsCalendarResponse";
export * from "./statisticsDailyResponse";
export * from "./statisticsSummaryResponse";
Expand Down
14 changes: 14 additions & 0 deletions apps/timo-web/api/generated/models/startTimerParams.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/**
* Generated by orval v8.20.0 🍺
* Do not edit manually.
* Timo API
* Timo 서버 API 명세서
* OpenAPI spec version: v1
*/

export interface StartTimerParams {
/**
* 타이머가 상태를 반영할 대상 날짜(미지정 시 오늘). ISO 형식
*/
date?: string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ export const useHomeTodosByDate = (
}

startTimer(
{ todoId },
{ todoId, params: { date: dateKey } },
{
onSuccess: () => invalidateTodoDetail(dateKey, todoId),
onError: (error: ApiError) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ export const useTodayTodoList = (
}

startTimer(
{ todoId },
{ todoId, params: { date: dateKey } },
{
onSuccess: () => invalidateTodoDetail(todoId, dateKey),
onError: (error: ErrorType<ErrorDto>) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,9 @@ export const useFocusSession = ({
stopTimer,
changeTodoStatus,
onNoTimer: () => {
if (todo) startTimer({ todoId: todo.todoId });
if (todo) {
startTimer({ todoId: todo.todoId, params: { date: focusView.date } });
}
},
});

Expand Down
Loading