バリテーション追加

This commit is contained in:
2026-10-27 14:25:06 +09:00
parent 309b2a2b79
commit adf3ece0d2
2 changed files with 73 additions and 66 deletions

View File

@@ -18,76 +18,84 @@ import com.example.demo.repository.BookCollectionRepository;
@Service @Service
public class BookAdminService { public class BookAdminService {
private final BookCollectionRepository bookRepository; private final BookCollectionRepository bookRepository;
public BookAdminService(BookCollectionRepository bookRepository) { public BookAdminService(BookCollectionRepository bookRepository) {
this.bookRepository = bookRepository; this.bookRepository = bookRepository;
} }
/** 入力チェック(ISBN必須13文字以内、書籍名必須50、よみ100、出版社50)。※ISBNを数字13桁に限定するかは要確認 */ /** 入力チェック(ISBN必須13文字以内、書籍名必須50、よみ100、出版社50)。※ISBNを数字13桁に限定するかは要確認 */
public List<String> validate(BookForm f) { public List<String> validate(BookForm f) {
f.trim(); f.trim();
List<String> e = new ArrayList<>(); List<String> e = new ArrayList<>();
if (f.getIsbn().isEmpty()) e.add("ISBNを入力してください。"); if (f.getIsbn().isEmpty())
else if (f.getIsbn().length() > 13) e.add("ISBNは13文字以内で入力してください。"); e.add("ISBNを入力してください。");
if (f.getNmBook().isEmpty()) e.add("書籍名を入力してください。"); else if (f.getIsbn().length() > 13)
else if (f.getNmBook().length() > 50) e.add("書籍名は50文字以内で入力してください。"); e.add("ISBNは13文字以内で入力してください。");
if (f.getKnBook().length() > 100) e.add("書籍名よみは100文字以内で入力してください。"); if (f.getNmBook().isEmpty())
if (f.getPublisher().length() > 50) e.add("出版社は50文字以内で入力してください。"); e.add("書籍名を入力してください。");
return e; else if (f.getNmBook().length() > 50)
} e.add("書籍名は50文字以内で入力してください。");
if (f.getKnBook().length() > 100)
e.add("書籍名よみは100文字以内で入力してください。");
else if (!f.getKnBook().matches("^[\\u3040-\\u309F]+$"))
e.add("書籍名よみはひらがなで入力してください");
if (f.getPublisher().length() > 50)
e.add("出版社は50文字以内で入力してください。");
return e;
}
@Transactional(readOnly = true) @Transactional(readOnly = true)
public BookCollection find(Integer idBook) { public BookCollection find(Integer idBook) {
return bookRepository.findById(idBook) return bookRepository.findById(idBook)
.orElseThrow(() -> new BusinessException("対象の書籍が見つかりません。")); .orElseThrow(() -> new BusinessException("対象の書籍が見つかりません。"));
} }
public BookForm toForm(BookCollection b) { public BookForm toForm(BookCollection b) {
BookForm f = new BookForm(); BookForm f = new BookForm();
f.setIdBook(b.getIdBook()); f.setIdBook(b.getIdBook());
f.setIsbn(b.getIsbn()); f.setIsbn(b.getIsbn());
f.setNmBook(b.getNmBook()); f.setNmBook(b.getNmBook());
f.setKnBook(b.getKnBook() == null ? "" : b.getKnBook()); f.setKnBook(b.getKnBook() == null ? "" : b.getKnBook());
f.setPublisher(b.getPublisher() == null ? "" : b.getPublisher()); f.setPublisher(b.getPublisher() == null ? "" : b.getPublisher());
f.setNote(b.getNote() == null ? "" : b.getNote()); f.setNote(b.getNote() == null ? "" : b.getNote());
return f; return f;
} }
/** 新規登録:貸出可として登録する。 */ /** 新規登録:貸出可として登録する。 */
@Transactional @Transactional
public Integer register(BookForm f, LoginUser admin) { public Integer register(BookForm f, LoginUser admin) {
check(f); check(f);
BookCollection b = new BookCollection(); BookCollection b = new BookCollection();
apply(b, f); apply(b, f);
b.setFlgLending(Const.LENDING_OK); b.setFlgLending(Const.LENDING_OK);
b.setIdUpdate(admin.getIdEmployee()); b.setIdUpdate(admin.getIdEmployee());
b.setDateUpdate(LocalDateTime.now()); b.setDateUpdate(LocalDateTime.now());
return bookRepository.save(b).getIdBook(); return bookRepository.save(b).getIdBook();
} }
/** 編集:書籍情報のみ更新する(貸出フラグは変更しない)。 */ /** 編集:書籍情報のみ更新する(貸出フラグは変更しない)。 */
@Transactional @Transactional
public void update(BookForm f, LoginUser admin) { public void update(BookForm f, LoginUser admin) {
check(f); check(f);
BookCollection b = find(f.getIdBook()); BookCollection b = find(f.getIdBook());
apply(b, f); apply(b, f);
b.setIdUpdate(admin.getIdEmployee()); b.setIdUpdate(admin.getIdEmployee());
b.setDateUpdate(LocalDateTime.now()); b.setDateUpdate(LocalDateTime.now());
} }
private void check(BookForm f) { private void check(BookForm f) {
List<String> errors = validate(f); List<String> errors = validate(f);
if (!errors.isEmpty()) throw new BusinessException(String.join(" ", errors)); if (!errors.isEmpty())
} throw new BusinessException(String.join(" ", errors));
}
private static void apply(BookCollection b, BookForm f) {
private static void apply(BookCollection b, BookForm f) { b.setIsbn(f.getIsbn());
b.setIsbn(f.getIsbn()); b.setNmBook(f.getNmBook());
b.setNmBook(f.getNmBook()); b.setKnBook(f.getKnBook().isEmpty() ? null : f.getKnBook());
b.setKnBook(f.getKnBook().isEmpty() ? null : f.getKnBook()); b.setPublisher(f.getPublisher().isEmpty() ? null : f.getPublisher());
b.setPublisher(f.getPublisher().isEmpty() ? null : f.getPublisher()); b.setNote(f.getNote().isEmpty() ? null : f.getNote());
b.setNote(f.getNote().isEmpty() ? null : f.getNote()); }
}
} }

View File

@@ -18,9 +18,6 @@ import com.example.demo.entity.Employee;
import com.example.demo.form.EmployeeForm; import com.example.demo.form.EmployeeForm;
import com.example.demo.repository.EmployeeRepository; import com.example.demo.repository.EmployeeRepository;
/** EMP-01:社員登録、EMP-02:社員編集 */ /** EMP-01:社員登録、EMP-02:社員編集 */
@Service @Service
public class EmployeeService { public class EmployeeService {
@@ -110,6 +107,8 @@ public class EmployeeService {
e.add("社員名よみを入力してください。"); e.add("社員名よみを入力してください。");
else if (f.getKnEmployee().length() > 100) else if (f.getKnEmployee().length() > 100)
e.add("社員名よみは100文字以内で入力してください。"); e.add("社員名よみは100文字以内で入力してください。");
else if (!f.getKnEmployee().matches("^[\\u3040-\\u309F]+$"))
e.add("社員名よみはひらがなで入力してください");
} }
private void checkMail(EmployeeForm f, Integer selfId, List<String> e) { private void checkMail(EmployeeForm f, Integer selfId, List<String> e) {