AdminAnnouncementService.java

package com.hwhub.backend.application.service.announcement;

import com.hwhub.backend.domain.enums.ProgramType;
import com.hwhub.backend.domain.model.AnnouncementModel;
import com.hwhub.backend.domain.repository.AnnouncementRepository;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/** アナウンスマスタメンテのアプリケーションサービス。 */
@Service
@RequiredArgsConstructor
public class AdminAnnouncementService {

  private final AnnouncementRepository announcementRepository;

  /**
   * アナウンス全件を取得する。
   *
   * @return アナウンスモデルリスト
   */
  @Transactional(readOnly = true)
  public List<AnnouncementModel> getAll() {
    return announcementRepository.findAll();
  }

  /**
   * 指定IDのアナウンスを取得する。
   *
   * @param id アナウンスID
   * @return アナウンスモデル
   * @throws IllegalArgumentException 存在しないIDを指定した場合
   */
  @Transactional(readOnly = true)
  public AnnouncementModel getById(Long id) {
    return announcementRepository
        .findById(id)
        .orElseThrow(() -> new IllegalArgumentException("Announcement not found"));
  }

  /**
   * アナウンスを新規登録する。
   *
   * @param model アナウンスモデル
   * @param operatorUserId 操作者ユーザーID
   * @return 登録後のアナウンスモデル
   */
  @Transactional
  public AnnouncementModel create(AnnouncementModel model, Long operatorUserId) {
    return announcementRepository.insert(model, operatorUserId, ProgramType.ONL_ADM_ANN.getCode());
  }

  /**
   * アナウンスを更新する。
   *
   * @param model アナウンスモデル
   * @param operatorUserId 操作者ユーザーID
   */
  @Transactional
  public void update(AnnouncementModel model, Long operatorUserId) {
    announcementRepository.update(model, operatorUserId, ProgramType.ONL_ADM_ANN.getCode());
  }

  /**
   * アナウンスを削除する。
   *
   * @param id アナウンスID
   * @param operatorUserId 操作者ユーザーID
   */
  @Transactional
  public void delete(Long id, Long operatorUserId) {
    announcementRepository.delete(id, operatorUserId, ProgramType.ONL_ADM_ANN.getCode());
  }
}