AdminHouseworkTemplateController.java

package com.hwhub.backend.presentation.rest.admin;

import com.hwhub.backend.application.service.HouseworkTemplateService;
import com.hwhub.backend.domain.enums.Permission;
import com.hwhub.backend.domain.model.houseworktemplate.HouseworkTemplateId;
import com.hwhub.backend.domain.model.houseworktemplate.HouseworkTemplateModel;
import com.hwhub.backend.presentation.rest.admin.dto.AdminHouseworkTemplateRequest;
import com.hwhub.backend.presentation.rest.admin.dto.AdminHouseworkTemplateResponse;
import com.hwhub.backend.security.CurrentUserId;
import com.hwhub.backend.security.RequiresPermission;
import jakarta.validation.Valid;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/admin/housework-templates")
public class AdminHouseworkTemplateController {

  private final HouseworkTemplateService service;

  /** 一覧取得 */
  @RequiresPermission(Permission.SYSTEM_TEMPLATE_MANAGEMENT)
  @GetMapping
  public List<AdminHouseworkTemplateResponse> getAll() {
    return service.findAll().stream().map(AdminHouseworkTemplateResponse::from).toList();
  }

  /** 新規登録 */
  @RequiresPermission(Permission.SYSTEM_TEMPLATE_MANAGEMENT)
  @PostMapping
  public AdminHouseworkTemplateResponse create(
      @RequestBody @Valid AdminHouseworkTemplateRequest request,
      @CurrentUserId Long operatorUserId) {
    HouseworkTemplateModel model = request.toModel();
    return AdminHouseworkTemplateResponse.from(service.create(model, operatorUserId));
  }

  /** 更新 */
  @RequiresPermission(Permission.SYSTEM_TEMPLATE_MANAGEMENT)
  @PutMapping("/{id}")
  public void update(
      @PathVariable("id") Long id,
      @RequestBody @Valid AdminHouseworkTemplateRequest request,
      @CurrentUserId Long operatorUserId) {
    HouseworkTemplateModel model = request.toModel(new HouseworkTemplateId(id));
    service.update(model, operatorUserId);
  }

  /** 削除 */
  @RequiresPermission(Permission.SYSTEM_TEMPLATE_MANAGEMENT)
  @DeleteMapping("/{id}")
  @ResponseStatus(HttpStatus.NO_CONTENT)
  public void delete(@PathVariable("id") Long id, @CurrentUserId Long operatorUserId) {
    service.delete(new HouseworkTemplateId(id), operatorUserId);
  }
}