AdminAnnouncementController.java
package com.hwhub.backend.presentation.rest.admin.announcement;
import com.hwhub.backend.application.service.announcement.AdminAnnouncementService;
import com.hwhub.backend.domain.enums.Permission;
import com.hwhub.backend.domain.model.AnnouncementModel;
import com.hwhub.backend.presentation.rest.admin.announcement.dto.AdminAnnouncementRequest;
import com.hwhub.backend.presentation.rest.admin.announcement.dto.AdminAnnouncementResponse;
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;
/** アナウンスマスタメンテのAPIコントローラ。 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/admin/announcements")
public class AdminAnnouncementController {
private final AdminAnnouncementService service;
/** 一覧取得 */
@RequiresPermission(Permission.ANNOUNCEMENT_MANAGEMENT)
@GetMapping
public List<AdminAnnouncementResponse> getAll() {
return service.getAll().stream().map(AdminAnnouncementResponse::from).toList();
}
/** ID指定取得 */
@RequiresPermission(Permission.ANNOUNCEMENT_MANAGEMENT)
@GetMapping("/{id}")
public AdminAnnouncementResponse getById(@PathVariable("id") Long id) {
AnnouncementModel model = service.getById(id);
return AdminAnnouncementResponse.from(model);
}
/** 新規登録 */
@RequiresPermission(Permission.ANNOUNCEMENT_MANAGEMENT)
@PostMapping
public AdminAnnouncementResponse create(
@RequestBody @Valid AdminAnnouncementRequest request, @CurrentUserId Long operatorUserId) {
AnnouncementModel model = request.toModel();
return AdminAnnouncementResponse.from(service.create(model, operatorUserId));
}
/** 更新 */
@RequiresPermission(Permission.ANNOUNCEMENT_MANAGEMENT)
@PutMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void update(
@PathVariable("id") Long id,
@RequestBody @Valid AdminAnnouncementRequest request,
@CurrentUserId Long operatorUserId) {
AnnouncementModel model = request.toModel(id);
service.update(model, operatorUserId);
}
/** 削除 */
@RequiresPermission(Permission.ANNOUNCEMENT_MANAGEMENT)
@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void delete(@PathVariable("id") Long id, @CurrentUserId Long operatorUserId) {
service.delete(id, operatorUserId);
}
}