Skip to content

Commit 0d5fb01

Browse files
committed
slight model redesign, handle messaging in repos
1 parent 6d836b2 commit 0d5fb01

15 files changed

Lines changed: 168 additions & 210 deletions

File tree

src/main/java/edu/tamu/app/controller/NoteController.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,20 @@
1212
import org.springframework.data.domain.Page;
1313
import org.springframework.data.domain.Sort;
1414
import org.springframework.data.domain.Sort.Direction;
15-
import org.springframework.messaging.simp.SimpMessagingTemplate;
1615
import org.springframework.transaction.annotation.Transactional;
1716
import org.springframework.web.bind.annotation.RestController;
1817

1918
import com.fasterxml.jackson.databind.JsonNode;
2019
import com.fasterxml.jackson.databind.node.ArrayNode;
2120

2221
import edu.tamu.app.model.Note;
22+
import edu.tamu.app.model.Service;
2323
import edu.tamu.app.model.repo.NoteRepo;
24-
import edu.tamu.app.model.repo.ServiceRepo;
2524
import edu.tamu.app.model.request.FilteredPageRequest;
2625
import edu.tamu.framework.aspect.annotation.ApiCredentials;
2726
import edu.tamu.framework.aspect.annotation.ApiData;
2827
import edu.tamu.framework.aspect.annotation.ApiMapping;
28+
import edu.tamu.framework.aspect.annotation.ApiModel;
2929
import edu.tamu.framework.aspect.annotation.ApiValidatedModel;
3030
import edu.tamu.framework.aspect.annotation.ApiValidation;
3131
import edu.tamu.framework.aspect.annotation.ApiVariable;
@@ -40,19 +40,19 @@ public class NoteController {
4040
@Autowired
4141
private NoteRepo noteRepo;
4242

43-
@Autowired
44-
private ServiceRepo serviceRepo;
45-
46-
@Autowired
47-
private SimpMessagingTemplate simpMessagingTemplate;
48-
4943
@ApiMapping("/all")
5044
@Auth(role = "ROLE_ANONYMOUS")
5145
public ApiResponse getAllNotes() {
5246
return new ApiResponse(SUCCESS, noteRepo.findAll());
5347
}
5448

55-
@ApiMapping("/get/{id}")
49+
@ApiMapping("/by-service")
50+
@Auth(role = "ROLE_ANONYMOUS")
51+
public ApiResponse getAllNotesByService(@ApiModel Service service) {
52+
return new ApiResponse(SUCCESS, noteRepo.findAllByService(service));
53+
}
54+
55+
@ApiMapping("/{id}")
5656
@Auth(role = "ROLE_ANONYMOUS")
5757
public ApiResponse getNote(@ApiVariable Long id) {
5858
return new ApiResponse(SUCCESS, noteRepo.findOne(id));
@@ -63,26 +63,20 @@ public ApiResponse getNote(@ApiVariable Long id) {
6363
@ApiValidation(business = { @ApiValidation.Business(value = CREATE), @ApiValidation.Business(value = EXISTS) })
6464
public ApiResponse create(@ApiValidatedModel Note note, @ApiCredentials Credentials credentials) {
6565
note = noteRepo.create(note, credentials);
66-
ApiResponse response = new ApiResponse(SUCCESS, note);
67-
simpMessagingTemplate.convertAndSend("/channel/note/new", response);
68-
return response;
66+
return new ApiResponse(SUCCESS, note);
6967
}
7068

7169
@ApiMapping("/update")
7270
@Auth(role = "ROLE_SERVICE_MANAGER")
7371
public ApiResponse update(@ApiValidatedModel Note note) {
74-
note = noteRepo.save(note);
75-
ApiResponse response = new ApiResponse(SUCCESS, note);
76-
simpMessagingTemplate.convertAndSend("/channel/note/" + note.getId(), response);
77-
return response;
72+
return new ApiResponse(SUCCESS, noteRepo.update(note));
7873
}
7974

8075
@Transactional
8176
@ApiMapping("/remove")
8277
@Auth(role = "ROLE_SERVICE_MANAGER")
8378
public ApiResponse remove(@ApiValidatedModel Note note) {
8479
noteRepo.delete(note);
85-
simpMessagingTemplate.convertAndSend("/channel/service" + note.getService().getId(), new ApiResponse(SUCCESS, serviceRepo.getOne(note.getService().getId())));
8680
return new ApiResponse(SUCCESS);
8781
}
8882

src/main/java/edu/tamu/app/controller/ServiceController.java

Lines changed: 12 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,12 @@
66
import static edu.tamu.framework.enums.BusinessValidationType.EXISTS;
77
import static edu.tamu.framework.enums.BusinessValidationType.NONEXISTS;
88
import static edu.tamu.framework.enums.BusinessValidationType.UPDATE;
9-
import static edu.tamu.app.enums.AppRole.ROLE_ANONYMOUS;
10-
import static edu.tamu.app.enums.AppRole.ROLE_USER;
119

1210
import org.springframework.beans.factory.annotation.Autowired;
13-
import org.springframework.messaging.simp.SimpMessagingTemplate;
1411
import org.springframework.web.bind.annotation.RestController;
1512

16-
import edu.tamu.app.model.AppUser;
1713
import edu.tamu.app.model.Service;
18-
import edu.tamu.app.model.repo.AppUserRepo;
1914
import edu.tamu.app.model.repo.ServiceRepo;
20-
import edu.tamu.app.service.SystemMonitorService;
2115
import edu.tamu.framework.aspect.annotation.ApiCredentials;
2216
import edu.tamu.framework.aspect.annotation.ApiMapping;
2317
import edu.tamu.framework.aspect.annotation.ApiValidatedModel;
@@ -30,73 +24,51 @@
3024
@RestController
3125
@ApiMapping("/service")
3226
public class ServiceController {
33-
34-
@Autowired
35-
private SimpMessagingTemplate simpMessagingTemplate;
3627

3728
@Autowired
3829
private ServiceRepo serviceRepo;
39-
40-
@Autowired
41-
private SystemMonitorService systemMonitorService;
42-
43-
@Autowired
44-
private AppUserRepo userRepo;
4530

4631
@ApiMapping("/all")
47-
@Auth(role="ROLE_ANONYMOUS")
32+
@Auth(role = "ROLE_ANONYMOUS")
4833
public ApiResponse getAllServices() {
4934
return new ApiResponse(SUCCESS, serviceRepo.findAll());
5035
}
51-
36+
5237
@ApiMapping("/public")
53-
@Auth(role="ROLE_ANONYMOUS")
38+
@Auth(role = "ROLE_ANONYMOUS")
5439
public ApiResponse getPublicServices() {
5540
return new ApiResponse(SUCCESS, serviceRepo.findByIsPublic(true));
5641
}
57-
58-
@ApiMapping("/get/{id}")
42+
43+
@ApiMapping("/{id}")
5944
@Auth(role = "ROLE_ANONYMOUS")
6045
public ApiResponse getService(@ApiVariable Long id) {
61-
Service service = serviceRepo.findOne(id);
62-
return new ApiResponse(SUCCESS, service);
46+
return new ApiResponse(SUCCESS, serviceRepo.findOne(id));
6347
}
64-
48+
6549
@ApiMapping("/create")
6650
@Auth(role = "ROLE_SERVICE_MANAGER")
6751
@ApiValidation(business = { @ApiValidation.Business(value = CREATE), @ApiValidation.Business(value = EXISTS) })
6852
public ApiResponse createService(@ApiValidatedModel Service service, @ApiCredentials Credentials credentials) {
6953
service = serviceRepo.create(service.getName(), service.getStatus(), service.getIsAuto(), service.getIsPublic(), service.getOnShortList(), service.getServiceUrl(), service.getDescription());
70-
simpMessagingTemplate.convertAndSend("/channel/service", new ApiResponse(SUCCESS, serviceRepo.findAll()));
71-
sendStatusUpdate(service, credentials);
54+
serviceRepo.sendStatusUpdate(service, credentials);
7255
return new ApiResponse(SUCCESS, service);
7356
}
74-
57+
7558
@ApiMapping("/update")
7659
@Auth(role = "ROLE_SERVICE_MANAGER")
7760
@ApiValidation(business = { @ApiValidation.Business(value = UPDATE), @ApiValidation.Business(value = NONEXISTS) })
7861
public ApiResponse updateService(@ApiValidatedModel Service service, @ApiCredentials Credentials credentials) {
79-
service = serviceRepo.save(service);
80-
simpMessagingTemplate.convertAndSend("/channel/service/" + service.getId(), new ApiResponse(SUCCESS, service));
81-
sendStatusUpdate(service, credentials);
62+
service = serviceRepo.update(service);
63+
serviceRepo.sendStatusUpdate(service, credentials);
8264
return new ApiResponse(SUCCESS, service);
8365
}
84-
85-
private void sendStatusUpdate(Service service, Credentials credentials) {
86-
AppUser user = userRepo.findByUin(credentials.getUin());
87-
if (user.getRole() == ROLE_ANONYMOUS || user.getRole() == ROLE_USER) {
88-
simpMessagingTemplate.convertAndSend("/channel/status/overall-public", new ApiResponse(SUCCESS, systemMonitorService.getOverallStatusPublic()));
89-
} else {
90-
simpMessagingTemplate.convertAndSend("/channel/status/overall-full", new ApiResponse(SUCCESS, systemMonitorService.getOverallStatus()));
91-
}
92-
}
93-
66+
9467
@ApiMapping("/remove")
9568
@Auth(role = "ROLE_SERVICE_MANAGER")
9669
@ApiValidation(business = { @ApiValidation.Business(value = DELETE), @ApiValidation.Business(value = NONEXISTS) })
9770
public ApiResponse removeService(@ApiValidatedModel Service service) {
9871
serviceRepo.delete(service);
99-
simpMessagingTemplate.convertAndSend("/channel/service", new ApiResponse(SUCCESS, serviceRepo.findAll()));
10072
return new ApiResponse(SUCCESS);
10173
}
10274
}

src/main/java/edu/tamu/app/model/Note.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
package edu.tamu.app.model;
22

3-
import static javax.persistence.CascadeType.MERGE;
43
import static javax.persistence.CascadeType.REFRESH;
54
import static javax.persistence.FetchType.EAGER;
65

76
import java.util.Calendar;
87

98
import javax.persistence.Column;
109
import javax.persistence.Entity;
11-
import javax.persistence.JoinColumn;
12-
import javax.persistence.Lob;
10+
import javax.persistence.EnumType;
11+
import javax.persistence.Enumerated;
1312
import javax.persistence.ManyToOne;
1413
import javax.persistence.Temporal;
1514
import javax.persistence.TemporalType;
16-
import javax.validation.constraints.Size;
1715

1816
import org.hibernate.annotations.UpdateTimestamp;
1917

@@ -24,16 +22,13 @@
2422
@Entity
2523
public class Note extends BaseEntity {
2624

27-
@Size(min = 3)
2825
@Column(nullable = false)
2926
private String title;
3027

31-
@ManyToOne(fetch = EAGER, cascade = MERGE)
32-
private Service service;
33-
28+
@Enumerated(EnumType.STRING)
3429
private NoteType noteType;
3530

36-
@Lob
31+
@Column(columnDefinition = "text", nullable = true)
3732
private String body;
3833

3934
@Temporal(TemporalType.DATE)
@@ -46,8 +41,10 @@ public class Note extends BaseEntity {
4641
@UpdateTimestamp
4742
private Calendar lastModified;
4843

49-
@JoinColumn(nullable = false)
50-
@ManyToOne(cascade = REFRESH)
44+
@ManyToOne(fetch = EAGER)
45+
private Service service;
46+
47+
@ManyToOne(cascade = REFRESH, optional = false)
5148
private AppUser author;
5249

5350
public Note() {

src/main/java/edu/tamu/app/model/Service.java

Lines changed: 3 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package edu.tamu.app.model;
22

3-
import static javax.persistence.CascadeType.DETACH;
4-
import static javax.persistence.CascadeType.PERSIST;
5-
import static javax.persistence.CascadeType.REFRESH;
6-
import static javax.persistence.CascadeType.REMOVE;
73
import static javax.persistence.FetchType.EAGER;
84

95
import java.util.ArrayList;
@@ -12,17 +8,10 @@
128
import javax.persistence.Column;
139
import javax.persistence.ElementCollection;
1410
import javax.persistence.Entity;
15-
import javax.persistence.Lob;
16-
import javax.persistence.OneToMany;
17-
import javax.validation.constraints.Size;
1811

1912
import org.hibernate.annotations.Fetch;
2013
import org.hibernate.annotations.FetchMode;
2114

22-
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
23-
import com.fasterxml.jackson.annotation.JsonIdentityReference;
24-
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
25-
2615
import edu.tamu.app.enums.Status;
2716
import edu.tamu.app.model.validation.ServiceValidator;
2817
import edu.tamu.framework.model.BaseEntity;
@@ -34,15 +23,14 @@
3423
@Entity
3524
public class Service extends BaseEntity {
3625

37-
@Size(min = 3)
3826
@Column(nullable = false, unique = true)
3927
private String name;
4028

41-
@Fetch(FetchMode.SELECT)
4229
@ElementCollection(fetch = EAGER)
30+
@Fetch(FetchMode.SELECT)
4331
private List<String> aliases;
4432

45-
@Column(nullable = false, unique = false)
33+
@Column(nullable = false)
4634
private Status status;
4735

4836
@Column(nullable = false)
@@ -57,19 +45,11 @@ public class Service extends BaseEntity {
5745
@Column(nullable = false)
5846
private Boolean onShortList;
5947

60-
@Lob
61-
@Column(nullable = true)
48+
@Column(columnDefinition = "text", nullable = true)
6249
private String description;
6350

64-
@OneToMany(fetch = EAGER, cascade = { REMOVE, REFRESH }, mappedBy = "service")
65-
@Fetch(FetchMode.SELECT)
66-
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, scope = Note.class, property = "id")
67-
@JsonIdentityReference(alwaysAsId = true)
68-
private List<Note> notes;
69-
7051
public Service() {
7152
setModelValidator(new ServiceValidator());
72-
setNotes(new ArrayList<Note>());
7353
setAliases(new ArrayList<String>());
7454
}
7555

@@ -116,24 +96,6 @@ public void setServiceUrl(String serviceUrl) {
11696
this.serviceUrl = serviceUrl;
11797
}
11898

119-
public List<Note> getNotes() {
120-
return notes;
121-
}
122-
123-
public void setNotes(List<Note> notes) {
124-
this.notes = notes;
125-
}
126-
127-
public void addNote(Note note) {
128-
if (!this.notes.contains(note)) {
129-
this.notes.add(note);
130-
}
131-
}
132-
133-
public void removeNote(Note note) {
134-
this.notes.remove(note);
135-
}
136-
13799
public List<String> getAliases() {
138100
return aliases;
139101
}
Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
package edu.tamu.app.model.repo;
22

3+
import java.util.List;
4+
35
import org.springframework.data.domain.Page;
46
import org.springframework.data.domain.Pageable;
57
import org.springframework.data.jpa.domain.Specification;
68
import org.springframework.data.jpa.repository.JpaRepository;
79
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
810

911
import edu.tamu.app.model.Note;
12+
import edu.tamu.app.model.Service;
1013
import edu.tamu.app.model.repo.custom.NoteRepoCustom;
1114

1215
public interface NoteRepo extends JpaRepository<Note, Long>, NoteRepoCustom, JpaSpecificationExecutor<Note> {
13-
16+
1417
public Page<Note> findAll(Specification<Note> specification, Pageable pageable);
15-
18+
1619
public Page<Note> findAll(Pageable pageable);
1720

21+
public List<Note> findAllByService(Service service);
22+
23+
public void delete(Note note);
24+
1825
}

src/main/java/edu/tamu/app/model/repo/ServiceRepo.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,6 @@ public interface ServiceRepo extends JpaRepository<Service, Long>, ServiceRepoCu
1818

1919
public Long countByStatusAndIsPublic(Status status, Boolean isPublic);
2020

21+
public void delete(Service service);
22+
2123
}

src/main/java/edu/tamu/app/model/repo/custom/NoteRepoCustom.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,8 @@ public interface NoteRepoCustom {
77

88
public Note create(Note note, Credentials credentials);
99

10+
public Note update(Note note);
11+
12+
public void delete(Note note);
13+
1014
}

src/main/java/edu/tamu/app/model/repo/custom/ServiceRepoCustom.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,16 @@
22

33
import edu.tamu.app.enums.Status;
44
import edu.tamu.app.model.Service;
5+
import edu.tamu.framework.model.Credentials;
56

67
public interface ServiceRepoCustom {
78

89
public Service create(String name, Status status, Boolean isAuto, Boolean isPublic, Boolean onShortList, String serviceUrl, String description);
10+
11+
public Service update(Service service);
12+
13+
public void delete(Service service);
14+
15+
public void sendStatusUpdate(Service service, Credentials credentials);
16+
917
}

0 commit comments

Comments
 (0)