Skip to content

Commit 8605b7a

Browse files
authored
Merge pull request #7 from PatternAtlas/masterthesis/patternauthoringAPI
Masterthesis/patternauthoring api
2 parents a3414d3 + 14f246b commit 8605b7a

27 files changed

+1105
-49
lines changed

.gitignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,11 @@ build/
2929

3030
### VS Code ###
3131
.vscode/
32+
33+
### TexRendering ###
34+
*.png
35+
*.tex
36+
*.pdf
37+
*.log
38+
*.aux
39+
*.svg

pom.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,15 @@
134134
<version>1.10.7</version>
135135
<scope>test</scope>
136136
</dependency>
137+
<dependency>
138+
<groupId>org.springframework</groupId>
139+
<artifactId>spring-test</artifactId>
140+
</dependency>
141+
<dependency>
142+
<groupId>com.fasterxml.jackson.core</groupId>
143+
<artifactId>jackson-databind</artifactId>
144+
<version>2.10.0</version>
145+
</dependency>
137146
</dependencies>
138147

139148
<build>
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.patternpedia.api.entities;
2+
3+
4+
import com.fasterxml.jackson.annotation.JsonIgnore;
5+
import lombok.*;
6+
import org.hibernate.annotations.GenericGenerator;
7+
8+
import javax.persistence.*;
9+
import java.util.Date;
10+
import java.util.UUID;
11+
12+
13+
14+
@Entity
15+
@Data
16+
@NoArgsConstructor
17+
@Getter
18+
@Setter
19+
public class DiscussionComment {
20+
@Id
21+
@GeneratedValue(generator = "uuid")
22+
@GenericGenerator(name = "uuid", strategy = "uuid2")
23+
private UUID id;
24+
private String text;
25+
private UUID replyTo;
26+
private Date date;
27+
28+
@JsonIgnore
29+
@ToString.Exclude
30+
@ManyToOne
31+
private DiscussionTopic discussionTopic;
32+
33+
34+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.patternpedia.api.entities;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import com.patternpedia.api.rest.model.Status;
5+
import lombok.Data;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
import lombok.Setter;
9+
import org.hibernate.annotations.GenericGenerator;
10+
11+
import javax.persistence.*;
12+
import java.util.Date;
13+
import java.util.List;
14+
import java.util.UUID;
15+
16+
@Entity
17+
@Data
18+
@Getter
19+
@Setter
20+
@NoArgsConstructor
21+
public class DiscussionTopic {
22+
@Id
23+
@GeneratedValue(generator = "uuid")
24+
@GenericGenerator(name = "uuid", strategy = "uuid2")
25+
private UUID id;
26+
private String title;
27+
private String description;
28+
private Status status;
29+
private Date date;
30+
private Double x;
31+
private Double y;
32+
private Double width;
33+
private Double height;
34+
private String fill;
35+
private UUID imageId;
36+
37+
@JsonIgnore
38+
@OneToMany(mappedBy = "discussionTopic", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
39+
private List<DiscussionComment> discussionComments;
40+
}
41+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.patternpedia.api.entities;
2+
3+
import lombok.*;
4+
5+
import org.hibernate.annotations.GenericGenerator;
6+
7+
8+
import javax.persistence.*;
9+
import java.util.UUID;
10+
11+
@Entity
12+
@Data
13+
@NoArgsConstructor
14+
@Getter
15+
@Setter
16+
public class Image {
17+
18+
@Id
19+
@GeneratedValue(generator = "uuid")
20+
@GenericGenerator(name = "uuid", strategy = "uuid2")
21+
private UUID id;
22+
23+
private String fileName;
24+
25+
private String fileType;
26+
27+
@Lob
28+
private byte[] data;
29+
}

src/main/java/com/patternpedia/api/entities/Pattern.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,8 @@ public class Pattern extends EntityWithURI {
3838
@Column(columnDefinition = "jsonb")
3939
@NotNull
4040
private Object content;
41+
42+
@Type(type = "jsonb")
43+
@Column(columnDefinition = "jsonb")
44+
private Object renderedContent;
4145
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.patternpedia.api.repositories;
2+
3+
import com.patternpedia.api.entities.DiscussionComment;
4+
import com.patternpedia.api.entities.DiscussionTopic;
5+
import org.springframework.data.repository.CrudRepository;
6+
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
7+
8+
import java.util.List;
9+
import java.util.UUID;
10+
11+
@RepositoryRestResource(exported = false)
12+
public interface DiscussionCommentRepository extends CrudRepository<DiscussionComment, UUID> {
13+
List<DiscussionComment> findDiscussionCommentByDiscussionTopic(DiscussionTopic discussionTopic);
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.patternpedia.api.repositories;
2+
3+
import com.patternpedia.api.entities.DiscussionTopic;
4+
import org.springframework.data.repository.CrudRepository;
5+
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
6+
7+
import java.util.List;
8+
import java.util.UUID;
9+
10+
@RepositoryRestResource(exported = false)
11+
public interface DiscussionTopicRepository extends CrudRepository<DiscussionTopic, UUID> {
12+
List<DiscussionTopic> findDiscussionTopicsByImageId(UUID imageId);
13+
}
14+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.patternpedia.api.repositories;
2+
3+
import com.patternpedia.api.entities.Image;
4+
import org.springframework.data.repository.CrudRepository;
5+
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
6+
import java.util.UUID;
7+
8+
@RepositoryRestResource(exported = false)
9+
public interface ImageRepository extends CrudRepository<Image, UUID> {
10+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package com.patternpedia.api.rest.controller;
2+
3+
import com.patternpedia.api.entities.DiscussionComment;
4+
import com.patternpedia.api.entities.DiscussionTopic;
5+
import com.patternpedia.api.rest.model.DiscussionTopicModel;
6+
import com.patternpedia.api.service.DiscussionService;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.http.HttpStatus;
9+
import org.springframework.http.ResponseEntity;
10+
import org.springframework.web.bind.annotation.*;
11+
12+
import java.util.List;
13+
import java.util.UUID;
14+
15+
16+
@RestController
17+
@CrossOrigin(allowedHeaders = "*", origins = "*")
18+
public class DiscussionController {
19+
20+
private DiscussionService discussionService;
21+
22+
@Autowired
23+
public DiscussionController(DiscussionService discussionService) {
24+
this.discussionService = discussionService;
25+
}
26+
27+
@ResponseStatus(HttpStatus.CREATED)
28+
@PostMapping(
29+
value = "/add-topic"
30+
)
31+
public @ResponseBody
32+
DiscussionTopic addDiscussionTopic(@RequestBody DiscussionTopic topic){
33+
// deepcode ignore XSS: <please specify a reason of ignoring this>
34+
return this.discussionService.createTopic(topic);
35+
}
36+
37+
@DeleteMapping(
38+
value = "/delete-topic/{topicId}"
39+
)
40+
public @ResponseBody
41+
ResponseEntity<?> deleteDiscussionTopic(@PathVariable UUID topicId){
42+
this.discussionService.deleteTopicById(topicId);
43+
return ResponseEntity.noContent().build();
44+
}
45+
46+
@ResponseStatus(HttpStatus.CREATED)
47+
@PostMapping(
48+
value = "/add-comment/{topicId}"
49+
)
50+
public @ResponseBody
51+
DiscussionComment addDiscussionComment(@PathVariable UUID topicId, @RequestBody DiscussionComment comment){
52+
comment.setDiscussionTopic(this.discussionService.getTopicById(topicId));
53+
// deepcode ignore XSS: <please specify a reason of ignoring this>
54+
return this.discussionService.createComment(comment);
55+
}
56+
57+
@GetMapping(
58+
value = "/get-comments-by-topic/{topicId}"
59+
)
60+
public @ResponseBody
61+
List<DiscussionComment> getCommentsByTopic(@PathVariable UUID topicId){
62+
// deepcode ignore XSS: <please specify a reason of ignoring this>
63+
return this.discussionService.getCommentsByTopicId(topicId);
64+
}
65+
66+
@GetMapping(
67+
value = "/get-topic-by-image/{imageId}"
68+
)
69+
public @ResponseBody
70+
List<DiscussionTopic> getTopicsByImageId(@PathVariable UUID imageId){
71+
// deepcode ignore XSS: <please specify a reason of ignoring this>
72+
return this.discussionService.getTopicsByImageId(imageId);
73+
}
74+
75+
@GetMapping(
76+
value = "/get-topics-and-comments-by-image/{imageId}"
77+
)
78+
public @ResponseBody
79+
List<DiscussionTopicModel> getTopicsAndCommentsByImageId(@PathVariable UUID imageId){
80+
// deepcode ignore XSS: <please specify a reason of ignoring this>
81+
return this.discussionService.getTopicsAndCommentsByImageId(imageId);
82+
}
83+
}

0 commit comments

Comments
 (0)