63 lines
2.2 KiB
Java
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;
|
|
};
|
|
}
|
|
}
|