File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package kr.itn.itnhub.memo;
import kr.itn.itnhub.org.OrgNotFoundException;
import kr.itn.itnhub.org.OrganizationMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 기관관리 상세의 업무메모 탭이 쓰는 서비스. 전화 통화 등 담당자와의 연락 내용을
* 기관별로 남겨두는 단순 CRUD이며, Mattermost와는 무관한 순수 DB 기능이다.
*/
@Service
public class WorkMemoService {
private final WorkMemoMapper memoMapper;
private final OrganizationMapper orgMapper;
public WorkMemoService(WorkMemoMapper memoMapper, OrganizationMapper orgMapper) {
this.memoMapper = memoMapper;
this.orgMapper = orgMapper;
}
public List<WorkMemo> list(Long orgId) {
requireOrg(orgId);
return memoMapper.findByOrg(orgId);
}
/**
* 메모를 남긴다. 작성자는 화면에서 고르지 않고 <b>로그인한 사용자</b>를 그대로 기록한다
* (요청자 확정: "담당자 입력란은 필요없고 로그인한 사람이 자동으로 표출되면 된다").
*/
@Transactional
public WorkMemo create(Long orgId, MemoRequest request, String author) {
requireOrg(orgId);
WorkMemo memo = new WorkMemo();
memo.setOrgId(orgId);
memo.setContactName(author);
memo.setBody(request.body());
memoMapper.insert(memo);
// 방금 넣은 행이 created_at 기준 가장 최신이므로 목록의 첫 행이 곧 이 메모다.
return memoMapper.findByOrg(orgId).get(0);
}
/** 본문만 고친다. 작성자·작성시각은 처음 값을 유지한다. */
@Transactional
public WorkMemo update(Long orgId, Long memoId, MemoRequest request) {
requireOrg(orgId);
int updated = memoMapper.updateBody(orgId, memoId, request.body());
if (updated == 0) {
throw new OrgNotFoundException("메모를 찾을 수 없습니다: " + memoId);
}
return memoMapper.findByOrg(orgId).stream()
.filter(memo -> memo.getId().equals(memoId))
.findFirst()
.orElseThrow(() -> new OrgNotFoundException("메모를 찾을 수 없습니다: " + memoId));
}
@Transactional
public void delete(Long orgId, Long memoId) {
requireOrg(orgId);
int deleted = memoMapper.delete(orgId, memoId);
if (deleted == 0) {
throw new OrgNotFoundException("메모를 찾을 수 없습니다: " + memoId);
}
}
private void requireOrg(Long orgId) {
if (orgMapper.findById(orgId) == null) {
throw new OrgNotFoundException("기관을 찾을 수 없습니다: " + orgId);
}
}
}