浏览代码

Finished lab

Anthony Jordan 8 年前
父节点
当前提交
e93c539bc9

+ 5
- 0
pom.xml 查看文件

@@ -37,6 +37,11 @@
37 37
             <artifactId>hsqldb</artifactId>
38 38
             <scope>runtime</scope>
39 39
         </dependency>
40
+        <dependency>
41
+            <groupId>com.h2database</groupId>
42
+            <artifactId>h2</artifactId>
43
+            <scope>runtime</scope>
44
+        </dependency>
40 45
 
41 46
         <dependency>
42 47
             <groupId>javax.inject</groupId>

+ 9
- 9
src/main/java/dtos/error/RestExceptionHandler.java 查看文件

@@ -38,6 +38,15 @@ public class RestExceptionHandler {
38 38
     public ResponseEntity<?> handleValidationError(  MethodArgumentNotValidException manve, HttpServletRequest request){
39 39
         ErrorDetail errorDetail = new ErrorDetail();
40 40
         List<FieldError> fieldErrors =  manve.getBindingResult().getFieldErrors();
41
+        errorDetail.setTimeStamp(new Date().getTime());
42
+        errorDetail.setStatus(HttpStatus.BAD_REQUEST.value());
43
+        String requestPath = (String) request.getAttribute("javax.servlet.error. request_uri");
44
+        if(requestPath == null) {
45
+            requestPath = request.getRequestURI();
46
+        }
47
+        errorDetail.setTitle("Validation Failed");
48
+        errorDetail.setDetail("Input validation failed");
49
+        errorDetail.setDeveloperMessage(manve.getClass().getName());
41 50
         for(FieldError fe : fieldErrors) {
42 51
 
43 52
             List<ValidationError> validationErrorList = errorDetail.getErrors().get(fe.getField());
@@ -50,15 +59,6 @@ public class RestExceptionHandler {
50 59
             validationError.setMessage(messageSource.getMessage(fe,null));
51 60
             validationErrorList.add(validationError);
52 61
         }
53
-        errorDetail.setTimeStamp(new Date().getTime());
54
-        errorDetail.setStatus(HttpStatus.BAD_REQUEST.value());
55
-        String requestPath = (String) request.getAttribute("javax.servlet.error. request_uri");
56
-        if(requestPath == null) {
57
-            requestPath = request.getRequestURI();
58
-        }
59
-        errorDetail.setTitle("Validation Failed");
60
-        errorDetail.setDetail("Input validation failed");
61
-        errorDetail.setDeveloperMessage(manve.getClass().getName());
62 62
 
63 63
         return new ResponseEntity<>(errorDetail, HttpStatus.BAD_REQUEST);
64 64
     }

+ 6
- 0
src/main/java/io/zipcoder/tc_spring_poll_application/controller/PollController.java 查看文件

@@ -3,6 +3,7 @@ package io.zipcoder.tc_spring_poll_application.controller;
3 3
 import io.zipcoder.tc_spring_poll_application.domain.Poll;
4 4
 import io.zipcoder.tc_spring_poll_application.exception.ResourceNotFoundException;
5 5
 import io.zipcoder.tc_spring_poll_application.repositories.PollRepository;
6
+import org.springframework.beans.factory.annotation.Autowired;
6 7
 import org.springframework.http.HttpHeaders;
7 8
 import org.springframework.http.HttpStatus;
8 9
 import org.springframework.http.ResponseEntity;
@@ -19,6 +20,11 @@ public class PollController {
19 20
     @Inject
20 21
     private PollRepository pollRepository;
21 22
 
23
+    @Autowired
24
+    PollController(PollRepository pollRepository){
25
+        this.pollRepository = pollRepository;
26
+    }
27
+
22 28
     @RequestMapping(value="/polls", method= RequestMethod.GET)
23 29
     public ResponseEntity<Iterable<Poll>> getAllPolls() {
24 30
         Iterable<Poll> allPolls = pollRepository.findAll();

+ 6
- 0
src/main/java/io/zipcoder/tc_spring_poll_application/controller/VoteController.java 查看文件

@@ -2,6 +2,7 @@ package io.zipcoder.tc_spring_poll_application.controller;
2 2
 
3 3
 import io.zipcoder.tc_spring_poll_application.domain.Vote;
4 4
 import io.zipcoder.tc_spring_poll_application.repositories.VoteRepository;
5
+import org.springframework.beans.factory.annotation.Autowired;
5 6
 import org.springframework.http.HttpHeaders;
6 7
 import org.springframework.http.HttpStatus;
7 8
 import org.springframework.http.ResponseEntity;
@@ -16,6 +17,11 @@ public class VoteController {
16 17
     @Inject
17 18
     private VoteRepository voteRepository;
18 19
 
20
+    @Autowired
21
+    public VoteController(VoteRepository voteRepository) {
22
+        this.voteRepository = voteRepository;
23
+    }
24
+
19 25
     @Valid
20 26
     @RequestMapping(value = "/polls/{pollId}/votes", method = RequestMethod.POST)
21 27
     public ResponseEntity<?> createVote(@PathVariable Long pollId, @RequestBody Vote

+ 4
- 5
src/main/java/io/zipcoder/tc_spring_poll_application/domain/Option.java 查看文件

@@ -1,13 +1,9 @@
1 1
 package io.zipcoder.tc_spring_poll_application.domain;
2 2
 
3
-import javax.persistence.Column;
4
-import javax.persistence.Entity;
5
-import javax.persistence.GeneratedValue;
6
-import javax.persistence.Id;
3
+import javax.persistence.*;
7 4
 
8 5
 @Entity
9 6
 public class Option {
10
-
11 7
     @Id
12 8
     @GeneratedValue
13 9
     @Column(name = "OPTION_ID")
@@ -16,6 +12,9 @@ public class Option {
16 12
     @Column(name = "OPTION_VALUE")
17 13
     private String value;
18 14
 
15
+    @Column(name = "POLL_ID")
16
+    private Long pollId;
17
+
19 18
     public long getId() {
20 19
         return id;
21 20
     }

+ 1
- 1
src/main/java/io/zipcoder/tc_spring_poll_application/domain/Poll.java 查看文件

@@ -19,7 +19,7 @@ public class Poll {
19 19
     private String question;
20 20
 
21 21
     @OneToMany(cascade = CascadeType.ALL)
22
-    @JoinColumn(name = "OPTION_ID")
22
+    @JoinColumn(name = "POLL_ID")
23 23
     @OrderBy
24 24
     @Size(min=2, max = 6)
25 25
     private Set<Option> options;

+ 2
- 2
src/main/java/io/zipcoder/tc_spring_poll_application/repositories/PollRepository.java 查看文件

@@ -1,7 +1,7 @@
1 1
 package io.zipcoder.tc_spring_poll_application.repositories;
2 2
 
3 3
 import io.zipcoder.tc_spring_poll_application.domain.Poll;
4
-import org.springframework.data.repository.CrudRepository;
4
+import org.springframework.data.repository.PagingAndSortingRepository;
5 5
 
6
-public interface PollRepository extends CrudRepository<Poll, Long>{
6
+public interface PollRepository extends PagingAndSortingRepository<Poll, Long> {
7 7
 }

+ 2
- 0
src/main/resources/application.properties 查看文件

@@ -0,0 +1,2 @@
1
+spring.h2.console.enabled=true
2
+spring.h2.console.path=/h2-console

+ 88
- 0
src/main/resources/import.sql 查看文件

@@ -0,0 +1,88 @@
1
+insert into poll (poll_id, question) values (1, 'What is your favorite color?');
2
+insert into option (option_id, option_value, poll_id) values (1, 'Red', 1);
3
+insert into option (option_id, option_value, poll_id) values (2, 'Black', 1);
4
+insert into option (option_id, option_value, poll_id) values (3, 'Green', 1);
5
+
6
+
7
+insert into poll (poll_id, question) values (2, 'What is your favorite band?');
8
+insert into option (option_id, option_value, poll_id) values (4, 'Tool', 2);
9
+insert into option (option_id, option_value, poll_id) values (5, 'Carpenter Brut', 2);
10
+insert into option (option_id, option_value, poll_id) values (6, 'Fleetwood Mac', 2);
11
+
12
+
13
+insert into poll (poll_id, question) values (3, 'What is your favorite tv show?');
14
+insert into option (option_id, option_value, poll_id) values (7, 'Altered Carbon', 3);
15
+insert into option (option_id, option_value, poll_id) values (8, 'My Little Pony', 3);
16
+insert into option (option_id, option_value, poll_id) values (9, 'Game of Thrones', 3);
17
+
18
+
19
+insert into poll (poll_id, question) values (4, 'What is your favorite flower?');
20
+insert into option (option_id, option_value, poll_id) values (10, 'Lilly', 4);
21
+insert into option (option_id, option_value, poll_id) values (11, 'Rose', 4);
22
+insert into option (option_id, option_value, poll_id) values (12, 'Tulip', 4);
23
+
24
+
25
+insert into poll (poll_id, question) values (5, 'What is your favorite type of tree?');
26
+insert into option (option_id, option_value, poll_id) values (13, 'Oak', 5);
27
+insert into option (option_id, option_value, poll_id) values (14, 'Birch', 5);
28
+insert into option (option_id, option_value, poll_id) values (15, 'Willow', 5);
29
+
30
+
31
+insert into poll (poll_id, question) values (6, 'What is your favorite type of alcohol?');
32
+insert into option (option_id, option_value, poll_id) values (16, 'Whiskey', 6);
33
+insert into option (option_id, option_value, poll_id) values (17, 'Vodka', 6);
34
+insert into option (option_id, option_value, poll_id) values (18, 'Gin', 6);
35
+
36
+
37
+insert into poll (poll_id, question) values (7, 'What is your favorite pizza topping?');
38
+insert into option (option_id, option_value, poll_id) values (19, 'Pineapple', 7);
39
+insert into option (option_id, option_value, poll_id) values (20, 'Pepperoni', 7);
40
+insert into option (option_id, option_value, poll_id) values (21, 'Chicken', 7);
41
+
42
+
43
+insert into poll (poll_id, question) values (8, 'What is your favorite cheese?');
44
+insert into option (option_id, option_value, poll_id) values (22, 'Brie', 8);
45
+insert into option (option_id, option_value, poll_id) values (23, 'Pepper Jack', 8);
46
+insert into option (option_id, option_value, poll_id) values (24, 'American', 8);
47
+
48
+
49
+insert into poll (poll_id, question) values (9, 'What is your favorite snimsl?');
50
+insert into option (option_id, option_value, poll_id) values (25, 'Cat', 9);
51
+insert into option (option_id, option_value, poll_id) values (26, 'Tiger', 9);
52
+insert into option (option_id, option_value, poll_id) values (27, 'Pony', 9);
53
+
54
+
55
+insert into poll (poll_id, question) values (10, 'What is your favorite Lovecraft monster?');
56
+insert into option (option_id, option_value, poll_id) values (28, 'Cthulu', 10);
57
+insert into option (option_id, option_value, poll_id) values (29, 'Azathoth', 10);
58
+insert into option (option_id, option_value, poll_id) values (30, 'Dagon', 10);
59
+
60
+
61
+insert into poll (poll_id, question) values (11, 'What is your favorite Roman Emperor?');
62
+insert into option (option_id, option_value, poll_id) values (31, 'Tiberius', 11);
63
+insert into option (option_id, option_value, poll_id) values (32, 'Caligula', 11);
64
+insert into option (option_id, option_value, poll_id) values (33, 'Nero', 11);
65
+
66
+
67
+insert into poll (poll_id, question) values (12, 'What is your favorite Batman villian?');
68
+insert into option (option_id, option_value, poll_id) values (34, 'Joker', 12);
69
+insert into option (option_id, option_value, poll_id) values (35, 'Bane', 12);
70
+insert into option (option_id, option_value, poll_id) values (36, 'Clayface', 12);
71
+
72
+
73
+insert into poll (poll_id, question) values (13, 'What is your favorite American President?');
74
+insert into option (option_id, option_value, poll_id) values (37, 'Donald Trumo', 13);
75
+insert into option (option_id, option_value, poll_id) values (38, 'William Taft', 13);
76
+insert into option (option_id, option_value, poll_id) values (39, 'William Henry Harrison', 13);
77
+
78
+
79
+insert into poll (poll_id, question) values (14, 'What is your favorite phone brand?');
80
+insert into option (option_id, option_value, poll_id) values (40, 'iPhone', 14);
81
+insert into option (option_id, option_value, poll_id) values (41, 'Android', 14);
82
+insert into option (option_id, option_value, poll_id) values (42, 'Windows', 14);
83
+
84
+
85
+insert into poll (poll_id, question) values (15, 'What is your favorite landmark?');
86
+insert into option (option_id, option_value, poll_id) values (43, 'Pyramids', 15);
87
+insert into option (option_id, option_value, poll_id) values (44, 'Hanging Gardens', 15);
88
+insert into option (option_id, option_value, poll_id) values (45, 'Colossus of Rhodes', 15);