Skip to content

Commit 9b6d82c

Browse files
authored
Merge pull request #9 from TAMULib/sprint1-onetomany-services
Converted service/note relation from ManyToMany to OneToMany
2 parents de298e3 + 24ded3a commit 9b6d82c

6 files changed

Lines changed: 27 additions & 48 deletions

File tree

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

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,17 @@
55
import static javax.persistence.FetchType.EAGER;
66

77
import java.util.Calendar;
8-
import java.util.HashSet;
9-
import java.util.Set;
108

119
import javax.persistence.Column;
1210
import javax.persistence.Entity;
1311
import javax.persistence.JoinColumn;
14-
import javax.persistence.ManyToMany;
1512
import javax.persistence.ManyToOne;
1613
import javax.persistence.Temporal;
1714
import javax.persistence.TemporalType;
1815
import javax.validation.constraints.Size;
1916

2017
import org.hibernate.annotations.UpdateTimestamp;
2118

22-
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
23-
import com.fasterxml.jackson.annotation.JsonIdentityReference;
24-
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
25-
2619
import edu.tamu.app.enums.NoteType;
2720
import edu.tamu.app.model.validation.NoteValidator;
2821
import edu.tamu.framework.model.BaseEntity;
@@ -34,10 +27,8 @@ public class Note extends BaseEntity {
3427
@Column(nullable = false)
3528
private String title;
3629

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;
30+
@ManyToOne(fetch = EAGER, cascade = MERGE)
31+
private Service service;
4132

4233
private NoteType noteType;
4334

@@ -59,7 +50,7 @@ public class Note extends BaseEntity {
5950

6051
public Note() {
6152
setModelValidator(new NoteValidator());
62-
setServices(new HashSet<Service>());
53+
setService(new Service());
6354
}
6455

6556
public Note(String title, AppUser author) {
@@ -74,9 +65,9 @@ public Note(String title, AppUser author, NoteType noteType, String body) {
7465
setBody(body);
7566
}
7667

77-
public Note(String title, AppUser author, NoteType noteType, String body, Set<Service> services) {
68+
public Note(String title, AppUser author, NoteType noteType, String body, Service service) {
7869
this(title, author, noteType, body);
79-
setServices(services);
70+
setService(service);
8071
}
8172

8273
public String getTitle() {
@@ -87,16 +78,12 @@ public void setTitle(String title) {
8778
this.title = title;
8879
}
8980

90-
public Set<Service> getServices() {
91-
return services;
92-
}
93-
94-
public void setServices(Set<Service> services) {
95-
this.services = services;
81+
public Service getService() {
82+
return service;
9683
}
9784

98-
public void removeService(Service service) {
99-
this.services.remove(service);
85+
public void setService(Service service) {
86+
this.service = service;
10087
}
10188

10289
public NoteType getNoteType() {

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

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

3-
import static javax.persistence.CascadeType.DETACH;
4-
import static javax.persistence.CascadeType.PERSIST;
53
import static javax.persistence.CascadeType.REFRESH;
64
import static javax.persistence.CascadeType.REMOVE;
75
import static javax.persistence.FetchType.EAGER;
@@ -14,12 +12,16 @@
1412
import javax.persistence.Column;
1513
import javax.persistence.ElementCollection;
1614
import javax.persistence.Entity;
17-
import javax.persistence.ManyToMany;
15+
import javax.persistence.OneToMany;
1816
import javax.validation.constraints.Size;
1917

2018
import org.hibernate.annotations.Fetch;
2119
import org.hibernate.annotations.FetchMode;
2220

21+
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
22+
import com.fasterxml.jackson.annotation.JsonIdentityReference;
23+
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
24+
2325
import edu.tamu.app.enums.Status;
2426
import edu.tamu.app.model.validation.ServiceValidator;
2527
import edu.tamu.framework.model.BaseEntity;
@@ -54,7 +56,9 @@ public class Service extends BaseEntity {
5456
@Column(nullable = false)
5557
private Boolean onShortList;
5658

57-
@ManyToMany(fetch = EAGER, cascade = { REFRESH, DETACH, PERSIST, REMOVE })
59+
@OneToMany(fetch = EAGER, cascade = { REFRESH, REMOVE }, mappedBy = "service")
60+
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, scope = Note.class, property = "id")
61+
@JsonIdentityReference(alwaysAsId = true)
5862
private Set<Note> notes;
5963

6064
public Service() {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import edu.tamu.app.model.repo.custom.NoteRepoCustom;
77

88
public interface NoteRepo extends JpaRepository<Note, Long>, NoteRepoCustom {
9-
10-
public void delete(Note note);
9+
10+
// public void delete(Note note);
1111

1212
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
public interface NoteRepoCustom {
77

88
public Note create(Note note, Credentials credentials);
9-
10-
public void delete(Note note);
9+
10+
// public void delete(Note note);
1111

1212
}

src/main/java/edu/tamu/app/model/repo/impl/NoteRepoImpl.java

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,10 @@ public class NoteRepoImpl implements NoteRepoCustom {
3232
public Note create(Note note, Credentials credentials) {
3333
note.setAuthor(userRepo.findByUin(credentials.getUin()));
3434
note = noteRepo.save(note);
35-
for (Service service : note.getServices()) {
36-
service.addNote(note);
37-
service = serviceRepo.save(service);
38-
simpMessagingTemplate.convertAndSend("/channel/service/" + service.getId(), new ApiResponse(SUCCESS, service));
39-
}
35+
Service service = note.getService();
36+
service.addNote(note);
37+
serviceRepo.saveAndFlush(service);
38+
simpMessagingTemplate.convertAndSend("/channel/service/" + note.getService().getId(), new ApiResponse(SUCCESS, note.getService()));
4039
return note;
4140
}
42-
43-
@Override
44-
public void delete(Note note) {
45-
for (Service service : note.getServices()) {
46-
service.removeNote(note);
47-
service = serviceRepo.save(service);
48-
simpMessagingTemplate.convertAndSend("/channel/service/" + service.getId(), new ApiResponse(SUCCESS, service));
49-
}
50-
noteRepo.delete(note.getId());
51-
}
52-
5341
}

src/main/java/edu/tamu/app/model/validation/NoteValidator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ public NoteValidator() {
1111
this.addInputValidator(new InputValidator(InputValidationType.required, "Notes require a title", titleProperty, true));
1212
this.addInputValidator(new InputValidator(InputValidationType.minlength, "Note title must be at least 3 characters", titleProperty, 3));
1313

14-
String servicesProperty = "services";
15-
this.addInputValidator(new InputValidator(InputValidationType.required, "Notes require at least one Service", servicesProperty, true));
14+
String serviceProperty = "service";
15+
this.addInputValidator(new InputValidator(InputValidationType.required, "Notes require a Service", serviceProperty, true));
1616

1717
String noteTypeProperty = "noteType";
1818
this.addInputValidator(new InputValidator(InputValidationType.required, "Notes require a type", noteTypeProperty, true));

0 commit comments

Comments
 (0)