2025-02-13 17:58:37 +08:00

63 lines
2.2 KiB
Java

package com.devassistant.note.service;
import cn.hutool.core.util.StrUtil;
import com.devassistant.note.model.NoteRecord;
import com.devassistant.note.repository.NoteRecordRepository;
import com.devassistant.util.IpUtil;
import jakarta.persistence.criteria.Predicate;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
@RequiredArgsConstructor
public class NoteService {
private final NoteRecordRepository noteRecordRepository;
public NoteRecord addNote(String content, HttpServletRequest request) {
NoteRecord noteRecord = new NoteRecord();
noteRecord.setContent(content);
noteRecord.setUpdateIp(IpUtil.getIpAddr(request));
noteRecord.setCreateTime(new Date());
noteRecord.setUpdateTime(new Date());
noteRecordRepository.save(noteRecord);
return noteRecord;
}
public void updateNote(Integer id, String content, HttpServletRequest request) {
NoteRecord noteRecord = noteRecordRepository.findById(id).orElseThrow();
noteRecord.setContent(content);
noteRecord.setUpdateIp(IpUtil.getIpAddr(request));
noteRecord.setUpdateTime(new Date());
noteRecordRepository.save(noteRecord);
}
public void delNote(Integer id) {
noteRecordRepository.deleteById(id);
}
public List<NoteRecord> getNoteList(String searchText) {
Specification<NoteRecord> specification = getNoteListSpecification(searchText);
return noteRecordRepository.findAll(specification);
}
public Specification<NoteRecord> getNoteListSpecification(String searchText) {
return (root, query, cb) -> {
Predicate predicate = cb.conjunction();
if (StrUtil.isNotBlank(searchText)) {
predicate = cb.and(predicate, cb.or(cb.like(root.get("content"), "%" + searchText + "%"), cb.like(root.get("updateIp"), "%" + searchText + "%")));
}
Objects.requireNonNull(query).orderBy(cb.desc(root.get("updateTime")));
return predicate;
};
}
}