Skip to content

Commit 4ff64ad

Browse files
authored
Merge pull request #16 from volo-db/15-add-user-endpoint
feat: add new user endpoint
2 parents 8daa607 + 37f85ae commit 4ff64ad

12 files changed

+209
-213
lines changed

sql/insert_data.sql

Lines changed: 79 additions & 78 deletions
Large diffs are not rendered by default.

sql/volodb.sql

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,12 @@ CREATE TABLE `contact_type` (
5151

5252
DROP TABLE IF EXISTS `user`;
5353
CREATE TABLE `user` (
54-
`username` VARCHAR(50) NOT NULL,
54+
`email` VARCHAR(50) NOT NULL,
5555
`person` INT NOT NULL,
5656
`secret` VARCHAR(100) NOT NULL,
5757
`organisational_role` VARCHAR(50),
58-
PRIMARY KEY (`username`)
58+
`avatar` TEXT,
59+
PRIMARY KEY (`email`)
5960
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
6061

6162
DROP TABLE IF EXISTS `user_role`;
@@ -319,7 +320,7 @@ CREATE TABLE `volunteer_document_type` (
319320

320321
ALTER TABLE `user` ADD FOREIGN KEY (`person`) REFERENCES `person` (`id`);
321322

322-
ALTER TABLE `user_role_mapping` ADD FOREIGN KEY (`user`) REFERENCES `user` (`username`);
323+
ALTER TABLE `user_role_mapping` ADD FOREIGN KEY (`user`) REFERENCES `user` (`email`);
323324

324325
ALTER TABLE `user_role_mapping` ADD FOREIGN KEY (`user_role`) REFERENCES `user_role` (`id`);
325326

@@ -351,7 +352,7 @@ ALTER TABLE `volunteer` ADD FOREIGN KEY (`religion`) REFERENCES `religion` (`id`
351352

352353
ALTER TABLE `editing_history` ADD FOREIGN KEY (`volunteer`) REFERENCES `volunteer` (`id`);
353354

354-
ALTER TABLE `editing_history` ADD FOREIGN KEY (`user`) REFERENCES `user` (`username`);
355+
ALTER TABLE `editing_history` ADD FOREIGN KEY (`user`) REFERENCES `user` (`email`);
355356

356357
ALTER TABLE `editing_history` ADD FOREIGN KEY (`editing_type`) REFERENCES `editing_type` (`id`);
357358

@@ -383,10 +384,10 @@ ALTER TABLE `contract_modification` ADD FOREIGN KEY (`status`) REFERENCES `contr
383384

384385
ALTER TABLE `volunteer_note` ADD FOREIGN KEY (`volunteer`) REFERENCES `volunteer` (`id`);
385386

386-
ALTER TABLE `volunteer_note` ADD FOREIGN KEY (`user`) REFERENCES `user` (`username`);
387+
ALTER TABLE `volunteer_note` ADD FOREIGN KEY (`user`) REFERENCES `user` (`email`);
387388

388389
ALTER TABLE `volunteer_document` ADD FOREIGN KEY (`volunteer`) REFERENCES `volunteer` (`id`);
389390

390391
ALTER TABLE `volunteer_document` ADD FOREIGN KEY (`type`) REFERENCES `volunteer_document_type` (`id`);
391392

392-
ALTER TABLE `volunteer_document` ADD FOREIGN KEY (`user`) REFERENCES `user` (`username`);
393+
ALTER TABLE `volunteer_document` ADD FOREIGN KEY (`user`) REFERENCES `user` (`email`);

src/main/java/dev/urner/volodb/entity/User.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,38 +9,36 @@
99
import lombok.Getter;
1010
import lombok.Setter;
1111

12-
1312
@Entity
14-
@Table(name="User")
13+
@Table(name = "User")
1514
@Getter
1615
@Setter
1716
public class User {
18-
19-
//Username
17+
18+
// Username
2019
@Id
21-
@Column(name = "username")
20+
@Column(name = "email")
2221
private String username;
2322

2423
@OneToOne
25-
@JoinColumn(name = "person") //FK
24+
@JoinColumn(name = "person") // FK
2625
private Person person;
2726

28-
//Secret
27+
// Secret
2928
@JsonIgnore
3029
@Column(name = "secret")
3130
private String secret;
32-
33-
//user_roles
31+
32+
// user_roles
3433
@ManyToMany
35-
@JoinTable(
36-
name = "user_role_mapping",
37-
joinColumns = @JoinColumn(name = "user"),
38-
inverseJoinColumns = @JoinColumn(name = "user_role"))
39-
private List<UserRole> roles;
34+
@JoinTable(name = "user_role_mapping", joinColumns = @JoinColumn(name = "user"), inverseJoinColumns = @JoinColumn(name = "user_role"))
35+
private List<UserRole> roles;
4036

41-
//organisational_role
37+
// organisational_role
4238
@Column(name = "organisationalRole")
4339
private String organisationalRole;
4440

45-
41+
@Column(name = "avatar")
42+
private String avatar;
43+
4644
}

src/main/java/dev/urner/volodb/rest/AuthRestController.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,23 +66,25 @@ public LoginResponse login(@RequestBody @Validated LoginRequest request) {
6666
}
6767

6868
@ExceptionHandler
69-
public ResponseEntity<AuthErrorResponse> handleException(UserNotFoundException exc) {
70-
AuthErrorResponse error = new AuthErrorResponse(
71-
HttpStatus.NOT_FOUND.value(),
69+
public ResponseEntity<VolodbErrorResponse> handleException(UserNotFoundException exc) {
70+
HttpStatus httpStatus = HttpStatus.NOT_FOUND;
71+
VolodbErrorResponse error = new VolodbErrorResponse(
72+
httpStatus.value(),
7273
exc.getMessage(),
7374
System.currentTimeMillis());
7475

75-
return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
76+
return new ResponseEntity<>(error, httpStatus);
7677
}
7778

7879
@ExceptionHandler
79-
public ResponseEntity<AuthErrorResponse> handleException(TokenExpiredException exc) {
80-
AuthErrorResponse error = new AuthErrorResponse(
81-
HttpStatus.UNAUTHORIZED.value(),
80+
public ResponseEntity<VolodbErrorResponse> handleException(TokenExpiredException exc) {
81+
HttpStatus httpStatus = HttpStatus.UNAUTHORIZED;
82+
VolodbErrorResponse error = new VolodbErrorResponse(
83+
httpStatus.value(),
8284
exc.getMessage(),
8385
System.currentTimeMillis());
8486

85-
return new ResponseEntity<>(error, HttpStatus.UNAUTHORIZED);
87+
return new ResponseEntity<>(error, httpStatus);
8688
}
8789

8890
}

src/main/java/dev/urner/volodb/rest/ContractErrorResponse.java

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/main/java/dev/urner/volodb/rest/FileRestController.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,16 @@ public void getTestMethod(@PathVariable("bucket") String bucket, HttpServletRequ
4444
}
4545

4646
@ExceptionHandler
47-
public ResponseEntity<VolunteerErrorResponse> handleException(RuntimeException exc) {
48-
VolunteerErrorResponse error = new VolunteerErrorResponse();
47+
public ResponseEntity<VolodbErrorResponse> handleException(RuntimeException exc) {
4948

50-
HttpStatus status = HttpStatus.BAD_REQUEST;
49+
HttpStatus httpStatus = HttpStatus.BAD_REQUEST;
5150

52-
error.setStatus(status.value());
53-
error.setMessage(exc.getMessage());
54-
error.setTimeStamp(System.currentTimeMillis());
51+
VolodbErrorResponse error = new VolodbErrorResponse(
52+
httpStatus.value(),
53+
exc.getMessage(),
54+
System.currentTimeMillis());
5555

56-
return new ResponseEntity<>(error, status);
56+
return new ResponseEntity<>(error, httpStatus);
5757
}
5858

5959
}

src/main/java/dev/urner/volodb/rest/ProjectErrorResponse.java

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/main/java/dev/urner/volodb/rest/ProjectRestController.java

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import dev.urner.volodb.service.ProjectService;
1414
import lombok.RequiredArgsConstructor;
1515

16-
import java.util.List;
16+
import java.lang.System;
1717
import java.util.Map;
1818

1919
@RestController
@@ -89,53 +89,49 @@ public String deleteProjectById(@PathVariable int projectId) {
8989
// Exception-Hanlder:
9090

9191
@ExceptionHandler
92-
public ResponseEntity<ProjectErrorResponse> handleException(ProjectNotFoundException exc) {
93-
ProjectErrorResponse error = new ProjectErrorResponse();
94-
92+
public ResponseEntity<VolodbErrorResponse> handleException(ProjectNotFoundException exc) {
9593
HttpStatus httpStatus = HttpStatus.NOT_FOUND;
9694

97-
error.setStatus(httpStatus.value());
98-
error.setMessage(exc.getMessage());
99-
error.setTimeStamp(System.currentTimeMillis());
95+
VolodbErrorResponse error = new VolodbErrorResponse(
96+
httpStatus.value(),
97+
exc.getMessage(),
98+
System.currentTimeMillis());
10099

101100
return new ResponseEntity<>(error, httpStatus);
102101
}
103102

104103
@ExceptionHandler
105-
public ResponseEntity<ProjectErrorResponse> handleException(ProjectInvalidFormatException exc) {
106-
ProjectErrorResponse error = new ProjectErrorResponse();
107-
104+
public ResponseEntity<VolodbErrorResponse> handleException(ProjectInvalidFormatException exc) {
108105
HttpStatus httpStatus = HttpStatus.BAD_REQUEST;
109106

110-
error.setStatus(httpStatus.value());
111-
error.setMessage(exc.getMessage());
112-
error.setTimeStamp(System.currentTimeMillis());
107+
VolodbErrorResponse error = new VolodbErrorResponse(
108+
httpStatus.value(),
109+
exc.getMessage(),
110+
System.currentTimeMillis());
113111

114112
return new ResponseEntity<>(error, httpStatus);
115113
}
116114

117115
@ExceptionHandler
118-
public ResponseEntity<ProjectErrorResponse> handleException(CountryNotFoundException exc) {
119-
ProjectErrorResponse error = new ProjectErrorResponse();
120-
116+
public ResponseEntity<VolodbErrorResponse> handleException(CountryNotFoundException exc) {
121117
HttpStatus httpStatus = HttpStatus.NOT_FOUND;
122118

123-
error.setStatus(httpStatus.value());
124-
error.setMessage(exc.getMessage());
125-
error.setTimeStamp(System.currentTimeMillis());
119+
VolodbErrorResponse error = new VolodbErrorResponse(
120+
httpStatus.value(),
121+
exc.getMessage(),
122+
System.currentTimeMillis());
126123

127124
return new ResponseEntity<>(error, httpStatus);
128125
}
129126

130127
@ExceptionHandler
131-
public ResponseEntity<ProjectErrorResponse> handleException(RuntimeException exc) {
132-
ProjectErrorResponse error = new ProjectErrorResponse();
133-
128+
public ResponseEntity<VolodbErrorResponse> handleException(RuntimeException exc) {
134129
HttpStatus httpStatus = HttpStatus.BAD_REQUEST;
135130

136-
error.setStatus(httpStatus.value());
137-
error.setMessage(exc.getMessage());
138-
error.setTimeStamp(System.currentTimeMillis());
131+
VolodbErrorResponse error = new VolodbErrorResponse(
132+
httpStatus.value(),
133+
exc.getMessage(),
134+
System.currentTimeMillis());
139135

140136
return new ResponseEntity<>(error, httpStatus);
141137
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package dev.urner.volodb.rest;
2+
3+
import org.springframework.web.bind.annotation.RestController;
4+
5+
import dev.urner.volodb.entity.User;
6+
import dev.urner.volodb.entity.UserNotFoundException;
7+
import dev.urner.volodb.security.UserPrincipal;
8+
import dev.urner.volodb.service.UserService;
9+
import lombok.RequiredArgsConstructor;
10+
11+
import org.springframework.http.HttpStatus;
12+
import org.springframework.http.ResponseEntity;
13+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
14+
import org.springframework.web.bind.annotation.ExceptionHandler;
15+
import org.springframework.web.bind.annotation.GetMapping;
16+
import org.springframework.web.bind.annotation.RequestMapping;
17+
18+
@RestController
19+
@RequestMapping("/user")
20+
@RequiredArgsConstructor
21+
public class UserRestController {
22+
23+
private final UserService userService;
24+
25+
@GetMapping()
26+
public User getUser(@AuthenticationPrincipal UserPrincipal principal) {
27+
User theUser = userService.findByUsername(principal.getUsername());
28+
29+
if (theUser == null) {
30+
throw new UserNotFoundException("Username not found - " + principal.getUsername());
31+
}
32+
33+
return theUser;
34+
}
35+
36+
@ExceptionHandler
37+
public ResponseEntity<VolodbErrorResponse> handleException(UserNotFoundException exc) {
38+
HttpStatus httpStatus = HttpStatus.NOT_FOUND;
39+
40+
VolodbErrorResponse error = new VolodbErrorResponse(
41+
httpStatus.value(),
42+
exc.getMessage(),
43+
System.currentTimeMillis());
44+
45+
return new ResponseEntity<>(error, httpStatus);
46+
}
47+
48+
}

src/main/java/dev/urner/volodb/rest/AuthErrorResponse.java renamed to src/main/java/dev/urner/volodb/rest/VolodbErrorResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
@RequiredArgsConstructor
88
@Getter
99
@Setter
10-
public class AuthErrorResponse {
10+
public class VolodbErrorResponse {
1111
private final int status;
1212
private final String message;
1313
private final long timeStamp;

src/main/java/dev/urner/volodb/rest/VolunteerErrorResponse.java

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)