Skip to content

Commit de298e3

Browse files
authored
Merge pull request #8 from TAMULib/sprint1-b03239-notes-CRUD
Sprint1 b03239 notes crud
2 parents e34b8ce + 15a91e6 commit de298e3

18 files changed

Lines changed: 291 additions & 161 deletions

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@
3939
<artifactId>weaver-webservice-core</artifactId>
4040
<version>1.2.0-RC2-SNAPSHOT</version>
4141
</dependency>
42+
<dependency>
43+
<groupId>org.postgresql</groupId>
44+
<artifactId>postgresql</artifactId>
45+
<version>9.4.1211</version>
46+
</dependency>
4247
</dependencies>
4348

4449
<build>

src/main/java/edu/tamu/app/aspect/AppControllerAspect.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.aspectj.lang.annotation.Aspect;
1313
import org.springframework.stereotype.Component;
1414

15+
import edu.tamu.app.model.AppUser;
1516
import edu.tamu.framework.aspect.CoreControllerAspect;
1617

1718
/**
@@ -20,6 +21,6 @@
2021
*/
2122
@Component
2223
@Aspect
23-
public class AppControllerAspect extends CoreControllerAspect {
24+
public class AppControllerAspect extends CoreControllerAspect<AppUser> {
2425

2526
}

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

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,65 @@
11
package edu.tamu.app.controller;
22

33
import static edu.tamu.framework.enums.ApiResponseType.SUCCESS;
4+
import static edu.tamu.framework.enums.BusinessValidationType.CREATE;
5+
import static edu.tamu.framework.enums.BusinessValidationType.EXISTS;
46

57
import org.springframework.beans.factory.annotation.Autowired;
68
import org.springframework.messaging.simp.SimpMessagingTemplate;
79
import org.springframework.web.bind.annotation.RestController;
810

911
import edu.tamu.app.model.Note;
1012
import edu.tamu.app.model.repo.NoteRepo;
13+
import edu.tamu.framework.aspect.annotation.ApiCredentials;
1114
import edu.tamu.framework.aspect.annotation.ApiMapping;
1215
import edu.tamu.framework.aspect.annotation.ApiValidatedModel;
16+
import edu.tamu.framework.aspect.annotation.ApiValidation;
1317
import edu.tamu.framework.aspect.annotation.ApiVariable;
1418
import edu.tamu.framework.aspect.annotation.Auth;
1519
import edu.tamu.framework.model.ApiResponse;
20+
import edu.tamu.framework.model.Credentials;
1621

1722
@RestController
1823
@ApiMapping("/note")
1924
public class NoteController {
2025

2126
@Autowired
2227
private NoteRepo noteRepo;
23-
28+
2429
@Autowired
2530
private SimpMessagingTemplate simpMessagingTemplate;
26-
31+
2732
@ApiMapping("/all")
28-
@Auth(role="ROLE_ANONYMOUS")
33+
@Auth(role = "ROLE_ANONYMOUS")
2934
public ApiResponse getAllNotes() {
3035
return new ApiResponse(SUCCESS, noteRepo.findAll());
3136
}
32-
37+
3338
@ApiMapping("/get/{id}")
34-
@Auth(role="ROLE_ANONYMOUS")
39+
@Auth(role = "ROLE_ANONYMOUS")
3540
public ApiResponse getNote(@ApiVariable Long id) {
3641
return new ApiResponse(SUCCESS, noteRepo.findOne(id));
3742
}
38-
43+
3944
@ApiMapping("/create")
40-
@Auth(role="ROLE_SERVICE_MANAGER")
41-
public ApiResponse create(@ApiValidatedModel Note note) {
42-
note = noteRepo.create(note.getTitle(), note.getAuthor());
43-
simpMessagingTemplate.convertAndSend("/channel/note", new ApiResponse(SUCCESS, noteRepo.findOne(note.getId())));
45+
@Auth(role = "ROLE_SERVICE_MANAGER")
46+
@ApiValidation(business = { @ApiValidation.Business(value = CREATE), @ApiValidation.Business(value = EXISTS) })
47+
public ApiResponse create(@ApiValidatedModel Note note, @ApiCredentials Credentials credentials) {
48+
note = noteRepo.create(note, credentials);
49+
simpMessagingTemplate.convertAndSend("/channel/note", new ApiResponse(SUCCESS, noteRepo.findAll()));
4450
return new ApiResponse(SUCCESS, note);
4551
}
46-
52+
4753
@ApiMapping("/update")
48-
@Auth(role="ROLE_SERVICE_MANAGER")
54+
@Auth(role = "ROLE_SERVICE_MANAGER")
4955
public ApiResponse update(@ApiValidatedModel Note note) {
5056
note = noteRepo.save(note);
51-
simpMessagingTemplate.convertAndSend("/channel/note", new ApiResponse(SUCCESS, noteRepo.findOne(note.getId())));
57+
simpMessagingTemplate.convertAndSend("/channel/note", new ApiResponse(SUCCESS, noteRepo.findAll()));
5258
return new ApiResponse(SUCCESS, note);
5359
}
54-
60+
5561
@ApiMapping("/remove")
56-
@Auth(role="ROLE_SERVICE_MANAGER")
62+
@Auth(role = "ROLE_SERVICE_MANAGER")
5763
public ApiResponse remove(@ApiValidatedModel Note note) {
5864
noteRepo.delete(note);
5965
simpMessagingTemplate.convertAndSend("/channel/note", new ApiResponse(SUCCESS, noteRepo.findAll()));

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ public ApiResponse getService(@ApiVariable Long id) {
5353
@Auth(role = "ROLE_SERVICE_MANAGER")
5454
@ApiValidation(business = { @ApiValidation.Business(value = CREATE), @ApiValidation.Business(value = EXISTS) })
5555
public ApiResponse createService(@ApiValidatedModel Service service) {
56-
System.out.println(service.getServiceUrl());
5756
service = serviceRepo.create(service.getName(), service.getStatus(), service.getIsAuto(), service.getIsPublic(), service.getOnShortList(), service.getServiceUrl());
5857
simpMessagingTemplate.convertAndSend("/channel/service", new ApiResponse(SUCCESS, serviceRepo.findAll()));
5958
return new ApiResponse(SUCCESS, service);
@@ -64,7 +63,7 @@ public ApiResponse createService(@ApiValidatedModel Service service) {
6463
@ApiValidation(business = { @ApiValidation.Business(value = UPDATE), @ApiValidation.Business(value = NONEXISTS) })
6564
public ApiResponse updateService(@ApiValidatedModel Service service) {
6665
service = serviceRepo.save(service);
67-
simpMessagingTemplate.convertAndSend("/channel/service", new ApiResponse(SUCCESS, serviceRepo.findAll()));
66+
simpMessagingTemplate.convertAndSend("/channel/service/" + service.getId(), new ApiResponse(SUCCESS, service));
6867
return new ApiResponse(SUCCESS, service);
6968
}
7069

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

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
import static javax.persistence.CascadeType.REFRESH;
55
import static javax.persistence.FetchType.EAGER;
66

7-
import java.util.ArrayList;
87
import java.util.Calendar;
9-
import java.util.List;
8+
import java.util.HashSet;
9+
import java.util.Set;
1010

1111
import javax.persistence.Column;
1212
import javax.persistence.Entity;
@@ -17,69 +17,88 @@
1717
import javax.persistence.TemporalType;
1818
import javax.validation.constraints.Size;
1919

20-
import org.hibernate.annotations.CreationTimestamp;
21-
import org.hibernate.annotations.Fetch;
22-
import org.hibernate.annotations.FetchMode;
2320
import org.hibernate.annotations.UpdateTimestamp;
2421

22+
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
23+
import com.fasterxml.jackson.annotation.JsonIdentityReference;
24+
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
25+
2526
import edu.tamu.app.enums.NoteType;
27+
import edu.tamu.app.model.validation.NoteValidator;
2628
import edu.tamu.framework.model.BaseEntity;
2729

2830
@Entity
2931
public class Note extends BaseEntity {
3032

31-
@Size(min = 1)
33+
@Size(min = 3)
3234
@Column(nullable = false)
3335
private String title;
3436

35-
@Fetch(FetchMode.SELECT)
36-
@ManyToMany(cascade = { REFRESH, MERGE}, fetch = EAGER)
37-
private List<Service> services;
38-
37+
@ManyToMany(fetch = EAGER, cascade = { REFRESH, MERGE })
38+
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, scope = Service.class, property = "id")
39+
@JsonIdentityReference(alwaysAsId = true)
40+
private Set<Service> services;
41+
3942
private NoteType noteType;
4043

4144
private String body;
4245

4346
@Temporal(TemporalType.DATE)
4447
private Calendar scheduledPostingStart;
45-
48+
4649
@Temporal(TemporalType.DATE)
4750
private Calendar scheduledPostingEnd;
48-
51+
4952
@Temporal(TemporalType.TIMESTAMP)
5053
@UpdateTimestamp
5154
private Calendar lastModified;
52-
55+
5356
@JoinColumn(nullable = false)
5457
@ManyToOne(cascade = REFRESH)
5558
private AppUser author;
56-
59+
5760
public Note() {
58-
setServices(new ArrayList<Service>());
61+
setModelValidator(new NoteValidator());
62+
setServices(new HashSet<Service>());
5963
}
60-
61-
public Note(String name, AppUser author) {
64+
65+
public Note(String title, AppUser author) {
6266
this();
63-
setTitle(name);
67+
setTitle(title);
6468
setAuthor(author);
6569
}
66-
70+
71+
public Note(String title, AppUser author, NoteType noteType, String body) {
72+
this(title, author);
73+
setNoteType(noteType);
74+
setBody(body);
75+
}
76+
77+
public Note(String title, AppUser author, NoteType noteType, String body, Set<Service> services) {
78+
this(title, author, noteType, body);
79+
setServices(services);
80+
}
81+
6782
public String getTitle() {
6883
return title;
6984
}
7085

7186
public void setTitle(String title) {
7287
this.title = title;
7388
}
74-
75-
public List<Service> getServices() {
89+
90+
public Set<Service> getServices() {
7691
return services;
7792
}
78-
79-
public void setServices(List<Service> services) {
93+
94+
public void setServices(Set<Service> services) {
8095
this.services = services;
8196
}
82-
97+
98+
public void removeService(Service service) {
99+
this.services.remove(service);
100+
}
101+
83102
public NoteType getNoteType() {
84103
return noteType;
85104
}

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

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

3-
import static javax.persistence.CascadeType.MERGE;
3+
import static javax.persistence.CascadeType.DETACH;
4+
import static javax.persistence.CascadeType.PERSIST;
45
import static javax.persistence.CascadeType.REFRESH;
6+
import static javax.persistence.CascadeType.REMOVE;
57
import static javax.persistence.FetchType.EAGER;
68

79
import java.util.ArrayList;
10+
import java.util.HashSet;
811
import java.util.List;
12+
import java.util.Set;
913

1014
import javax.persistence.Column;
1115
import javax.persistence.ElementCollection;
@@ -27,39 +31,38 @@
2731
@Entity
2832
public class Service extends BaseEntity {
2933

30-
@Size(min = 1)
34+
@Size(min = 3)
3135
@Column(nullable = false, unique = true)
3236
private String name;
33-
37+
3438
@Fetch(FetchMode.SELECT)
3539
@ElementCollection(fetch = EAGER)
3640
private List<String> aliases;
37-
41+
3842
@Column(nullable = false, unique = false)
3943
private Status status;
40-
44+
4145
@Column(nullable = false)
4246
private boolean isAuto;
43-
47+
4448
@Column(nullable = true)
4549
private String serviceUrl;
46-
50+
4751
@Column(nullable = false)
4852
private Boolean isPublic;
49-
53+
5054
@Column(nullable = false)
5155
private Boolean onShortList;
52-
53-
@Fetch(FetchMode.SELECT)
54-
@ManyToMany(cascade = { REFRESH, MERGE }, fetch = EAGER)
55-
private List<Note> notes;
56-
56+
57+
@ManyToMany(fetch = EAGER, cascade = { REFRESH, DETACH, PERSIST, REMOVE })
58+
private Set<Note> notes;
59+
5760
public Service() {
5861
setModelValidator(new ServiceValidator());
59-
setNotes(new ArrayList<Note>());
62+
setNotes(new HashSet<Note>());
6063
setAliases(new ArrayList<String>());
6164
}
62-
65+
6366
public Service(String name, Status status, Boolean isAuto, Boolean isPublic, Boolean onShortList, String serviceUrl) {
6467
this();
6568
setName(name);
@@ -85,15 +88,15 @@ public Status getStatus() {
8588
public void setStatus(Status status) {
8689
this.status = status;
8790
}
88-
91+
8992
public Boolean getIsAuto() {
9093
return isAuto;
9194
}
92-
95+
9396
public void setIsAuto(Boolean isAuto) {
9497
this.isAuto = isAuto;
9598
}
96-
99+
97100
public String getServiceUrl() {
98101
return serviceUrl;
99102
}
@@ -102,14 +105,22 @@ public void setServiceUrl(String serviceUrl) {
102105
this.serviceUrl = serviceUrl;
103106
}
104107

105-
public List<Note> getNotes() {
108+
public Set<Note> getNotes() {
106109
return notes;
107110
}
108111

109-
public void setNotes(List<Note> notes) {
112+
public void setNotes(Set<Note> notes) {
110113
this.notes = notes;
111114
}
112115

116+
public void addNote(Note note) {
117+
this.notes.add(note);
118+
}
119+
120+
public void removeNote(Note note) {
121+
this.notes.remove(note);
122+
}
123+
113124
public List<String> getAliases() {
114125
return aliases;
115126
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,6 @@
77

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

10+
public void delete(Note note);
11+
1012
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111
public interface ServiceRepo extends JpaRepository<Service, Long>, ServiceRepoCustom {
1212

1313
public List<Service> findByIsPublic(Boolean isPublic);
14+
1415
public List<Service> findByIsAuto(Boolean isAuto);
16+
1517
public Long countByStatus(Status status);
18+
1619
public Long countByStatusAndIsPublic(Status status, Boolean isPublic);
20+
1721
}
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package edu.tamu.app.model.repo.custom;
22

3-
import edu.tamu.app.model.AppUser;
43
import edu.tamu.app.model.Note;
4+
import edu.tamu.framework.model.Credentials;
55

66
public interface NoteRepoCustom {
77

8-
public Note create(String title, AppUser author);
9-
8+
public Note create(Note note, Credentials credentials);
9+
10+
public void delete(Note note);
11+
1012
}

0 commit comments

Comments
 (0)