Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 4 additions & 19 deletions src/main/java/edu/tamu/app/controller/NoteController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,15 @@
import static edu.tamu.framework.enums.BusinessValidationType.EXISTS;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RestController;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import edu.tamu.app.model.Note;
import edu.tamu.app.model.Service;
import edu.tamu.app.model.repo.NoteRepo;
import edu.tamu.app.model.request.FilteredPageRequest;
import edu.tamu.framework.aspect.annotation.ApiCredentials;
import edu.tamu.framework.aspect.annotation.ApiData;
import edu.tamu.framework.aspect.annotation.ApiMapping;
import edu.tamu.framework.aspect.annotation.ApiModel;
import edu.tamu.framework.aspect.annotation.ApiValidatedModel;
import edu.tamu.framework.aspect.annotation.ApiValidation;
import edu.tamu.framework.aspect.annotation.ApiVariable;
Expand All @@ -34,19 +28,10 @@ public class NoteController {
@Autowired
private NoteRepo noteRepo;

@Autowired
private ObjectMapper objectMapper;

@ApiMapping("/all")
@Auth(role = "ROLE_ANONYMOUS")
public ApiResponse getAllNotes() {
return new ApiResponse(SUCCESS, noteRepo.findAll());
}

@ApiMapping("/by-service")
@ApiMapping("/query")
@Auth(role = "ROLE_ANONYMOUS")
public ApiResponse getAllNotesByService(@ApiModel Service service) {
return new ApiResponse(SUCCESS, noteRepo.findAllByService(service));
public ApiResponse getAllNotesByService(@ApiData FilteredPageRequest filteredPageRequest) {
return new ApiResponse(SUCCESS, noteRepo.findAll(filteredPageRequest.getSpecification(), filteredPageRequest.getPageRequest()));
}

@ApiMapping("/{id}")
Expand Down Expand Up @@ -80,7 +65,7 @@ public ApiResponse remove(@ApiValidatedModel Note note) {
@ApiMapping("/page")
@Auth(role = "ROLE_ANONYMOUS")
public ApiResponse page(@ApiData FilteredPageRequest filteredPageRequest) {
return new ApiResponse(SUCCESS, noteRepo.findAll(filteredPageRequest.toPageRequest()));
return new ApiResponse(SUCCESS, noteRepo.findAll(filteredPageRequest.getPageRequest()));
}

}
12 changes: 12 additions & 0 deletions src/main/java/edu/tamu/app/model/Note.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ public class Note extends BaseEntity {
@Column(columnDefinition = "text", nullable = true)
private String body;

@Column(nullable = false)
private boolean pinned;

@Temporal(TemporalType.DATE)
private Calendar scheduledPostingStart;

Expand All @@ -49,6 +52,7 @@ public class Note extends BaseEntity {
private AppUser author;

public Note() {
setPinned(false);
setModelValidator(new NoteValidator());
setService(new Service());
}
Expand Down Expand Up @@ -102,6 +106,14 @@ public void setBody(String body) {
this.body = body;
}

public boolean isPinned() {
return pinned;
}

public void setPinned(boolean pinned) {
this.pinned = pinned;
}

public Calendar getScheduledPostingStart() {
return scheduledPostingStart;
}
Expand Down
7 changes: 5 additions & 2 deletions src/main/java/edu/tamu/app/model/repo/NoteRepo.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,19 @@
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import edu.tamu.app.model.Note;
import edu.tamu.app.model.Service;
import edu.tamu.app.model.repo.custom.NoteRepoCustom;

public interface NoteRepo extends JpaRepository<Note, Long>, NoteRepoCustom, JpaSpecificationExecutor<Note> {

public Page<Note> findAll(Specification<Note> specification, Pageable pageable);

public List<Note> findAll(Specification<Note> specification);

public Page<Note> findAll(Pageable pageable);

public List<Note> findAllByService(Service service);
public List<Note> findAllByServiceId(Long id);

public List<Note> findAllByServiceIdAndPinnedTrue(Long id);

public void delete(Note note);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public Service update(Service service) {

@Override
public void delete(Service service) {
noteRepo.findAllByService(service).parallelStream().forEach(note -> {
noteRepo.findAllByServiceId(service.getId()).parallelStream().forEach(note -> {
noteRepo.delete(note);
});
serviceRepo.delete(service.getId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

public class NoteSpecification<E> implements Specification<E> {

@SuppressWarnings("unused")
private Map<String, String[]> filters;

public NoteSpecification(Map<String, String[]> filters) {
Expand All @@ -22,8 +21,32 @@ public NoteSpecification(Map<String, String[]> filters) {

@Override
public Predicate toPredicate(Root<E> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> datePredicates = new ArrayList<Predicate>();
return cb.and(datePredicates.toArray(new Predicate[datePredicates.size()]));

List<Predicate> pinnedPredicates = new ArrayList<Predicate>();
List<Predicate> servicePredicates = new ArrayList<Predicate>();

for (Map.Entry<String, String[]> entry : filters.entrySet()) {
String key = entry.getKey();
String[] values = entry.getValue();

switch (key) {
case "pinned":
for (String value : values) {
pinnedPredicates.add(cb.like(cb.lower(root.get(key).as(String.class)), "%" + value.toLowerCase() + "%"));
}
break;
case "service":
for (String value : values) {
servicePredicates.add(cb.like(cb.lower(root.get(key).get("id").as(String.class)), "%" + value.toLowerCase() + "%"));
}
break;
default:
break;
}

}

return cb.and(cb.and(pinnedPredicates.toArray(new Predicate[pinnedPredicates.size()])), cb.and(servicePredicates.toArray(new Predicate[servicePredicates.size()])));
}

}
15 changes: 13 additions & 2 deletions src/main/java/edu/tamu/app/model/request/FilteredPageRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;

import com.fasterxml.jackson.annotation.JsonIgnore;

import edu.tamu.app.model.Note;
import edu.tamu.app.model.repo.specification.NoteSpecification;

public class FilteredPageRequest {

private int pageNumber;
Expand All @@ -22,8 +27,14 @@ public FilteredPageRequest() {

}

public PageRequest toPageRequest() {
return new PageRequest(pageNumber, pageSize, new Sort(Sort.Direction.fromString(direction), properties));
@JsonIgnore
public NoteSpecification<Note> getSpecification() {
return new NoteSpecification<Note>(filters);
}

@JsonIgnore
public PageRequest getPageRequest() {
return new PageRequest(pageNumber - 1, pageSize, new Sort(Sort.Direction.fromString(direction), properties));
}

public int getPageNumber() {
Expand Down