HouseworkTaskController.java
package com.hwhub.backend.presentation.rest.housework;
import com.hwhub.backend.application.service.HouseworkTaskService;
import com.hwhub.backend.domain.enums.TaskStatus;
import com.hwhub.backend.domain.model.HouseworkTask4AssignModel;
import com.hwhub.backend.presentation.rest.housework.dto.BulkUpdateStatusRequest;
import com.hwhub.backend.presentation.rest.housework.dto.HouseworkTaskResponse;
import com.hwhub.backend.presentation.rest.housework.dto.UpdateAssigneeRequest;
import com.hwhub.backend.presentation.rest.housework.dto.UpdateStatusRequest;
import com.hwhub.backend.security.CurrentUserId;
import com.hwhub.backend.validation.annotation.EnumValue;
import jakarta.validation.Valid;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/housework-tasks")
@RequiredArgsConstructor
@Validated
public class HouseworkTaskController {
private final HouseworkTaskService houseworkTaskService;
/**
* 指定された世帯の家事タスク一覧を取得します。(割り当て画面などでの利用を想定)。
*
* @param householdId 家事タスクを検索する世帯ID
* @param status 検索対象とするタスクの状態(例: 0=未完了)。デフォルトは未完了。
* @param userId 認証済みユーザーID
* @return 該当する家事タスクのレスポンスオブジェクトのリスト
*/
@GetMapping
public List<HouseworkTaskResponse> getTasks(
@RequestParam("householdId") Long householdId,
@RequestParam(name = "status", defaultValue = "0") @EnumValue(enumClass = TaskStatus.class)
String status,
@CurrentUserId Long userId) {
List<HouseworkTask4AssignModel> models =
houseworkTaskService.findForAssign(householdId, status, userId);
return models.stream().map(HouseworkTaskResponse::fromModel).toList();
}
/**
* 指定された家事タスクIDのタスクの担当者を変更します。
*
* @param taskId 担当者を変更する対象の家事タスクID
* @param request 担当者として割り当てるユーザーIDと、割り当て理由を含むリクエストボディ
* @param loginUserId 認証済みユーザーID
*/
@PatchMapping("/{taskId}/assign")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void updateAssignee(
@PathVariable("taskId") Long taskId,
@Valid @RequestBody UpdateAssigneeRequest request,
@CurrentUserId Long loginUserId) {
houseworkTaskService.updateAssignee(
taskId, request.assigneeUserId(), request.assignReasonType(), loginUserId);
}
/**
* 指定された家事タスクIDのタスクのステータスを更新します。
*
* @param taskId 状態を更新する対象の家事タスクID
* @param request 変更するステータスと、スキップの場合の理由を含むリクエストボディ
* @param loginUserId 認証済みユーザーID
*/
@PatchMapping("/{taskId}/status")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void updateStatus(
@PathVariable("taskId") Long taskId,
@Valid @RequestBody UpdateStatusRequest request,
@CurrentUserId Long loginUserId) {
houseworkTaskService.updateStatus(
taskId, request.status(), request.skippedReason(), loginUserId);
}
/**
* 指定された家事タスクIDリストのタスクのステータスを一括で更新します。
*
* @param request タスクIDリスト、変更するステータス、スキップ理由を含むリクエストボディ
* @param loginUserId 認証済みユーザーID
*/
@PatchMapping("/bulk-status")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void bulkUpdateStatus(
@Valid @RequestBody BulkUpdateStatusRequest request, @CurrentUserId Long loginUserId) {
houseworkTaskService.bulkUpdateStatus(
request.taskIds(), request.status(), request.skippedReason(), loginUserId);
}
}