Skip to content

Commit dca52df

Browse files
committed
point service
1 parent 9da4ba7 commit dca52df

17 files changed

+269
-43
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package ru.ifmo.web.SpringWeb.controller;
2+
3+
import org.springframework.boot.autoconfigure.web.servlet.error.AbstractErrorController;
4+
import org.springframework.boot.web.servlet.error.ErrorAttributes;
5+
import org.springframework.http.HttpStatus;
6+
import org.springframework.http.ResponseEntity;
7+
import org.springframework.web.bind.annotation.GetMapping;
8+
import org.springframework.web.bind.annotation.RequestMapping;
9+
import org.springframework.web.bind.annotation.RestController;
10+
11+
import javax.servlet.http.HttpServletRequest;
12+
import java.util.Map;
13+
14+
@RestController
15+
@RequestMapping("/error")
16+
public class JsonErrorController extends AbstractErrorController {
17+
18+
public JsonErrorController(final ErrorAttributes errorAttributes) {
19+
super(errorAttributes);
20+
}
21+
22+
@GetMapping
23+
public ResponseEntity<Map<String, Object>> error(final HttpServletRequest request) {
24+
final Map<String, Object> body = this.getErrorAttributes(request, false);
25+
final HttpStatus status = this.getStatus(request);
26+
return new ResponseEntity<>(body, status);
27+
}
28+
29+
@Override
30+
public String getErrorPath() {
31+
return "/error";
32+
}
33+
34+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package ru.ifmo.web.SpringWeb.controller;
2+
3+
import org.springframework.context.support.DefaultMessageSourceResolvable;
4+
import org.springframework.http.HttpStatus;
5+
import org.springframework.http.ResponseEntity;
6+
import org.springframework.security.core.Authentication;
7+
import org.springframework.validation.FieldError;
8+
import org.springframework.web.bind.MethodArgumentNotValidException;
9+
import org.springframework.web.bind.annotation.*;
10+
import ru.ifmo.web.SpringWeb.model.Point;
11+
import ru.ifmo.web.SpringWeb.model.User;
12+
import ru.ifmo.web.SpringWeb.payload.request.PointAddRequest;
13+
import ru.ifmo.web.SpringWeb.payload.response.ErrorResponse;
14+
import ru.ifmo.web.SpringWeb.payload.response.MessageResponse;
15+
import ru.ifmo.web.SpringWeb.service.PointService;
16+
17+
import javax.validation.Valid;
18+
import java.util.List;
19+
import java.util.Map;
20+
import java.util.stream.Collectors;
21+
22+
@RestController
23+
@CrossOrigin
24+
@RequestMapping("points")
25+
public class PointController {
26+
27+
private final PointService pointService;
28+
29+
public PointController(PointService pointService) {
30+
this.pointService = pointService;
31+
}
32+
33+
@RequestMapping(value = "/get-all", method = RequestMethod.GET)
34+
public ResponseEntity<?> get(Authentication authentication) {
35+
List<Point> pointList = pointService.getPointsByUser((User) authentication.getPrincipal());
36+
if(pointList != null){
37+
return ResponseEntity.ok(pointList);
38+
}
39+
40+
return ResponseEntity
41+
.badRequest()
42+
.body(new ErrorResponse("Have some problems"));
43+
}
44+
45+
46+
@RequestMapping(value = "/remove-all", method = RequestMethod.GET)
47+
public ResponseEntity<?> remove(Authentication authentication) {
48+
pointService.deletePointsByUser((User) authentication.getPrincipal());
49+
return ResponseEntity.ok(new MessageResponse("All points removed"));
50+
}
51+
52+
53+
@RequestMapping(value = "/add", method = RequestMethod.POST)
54+
public ResponseEntity<?> add(@Valid @RequestBody PointAddRequest request, Authentication authentication) {
55+
Point point = new Point(request.getX(), request.getY(), request.getR());
56+
point.setUser((User) authentication.getPrincipal());
57+
pointService.addPoint(point);
58+
59+
return ResponseEntity.ok(new MessageResponse("New point added"));
60+
}
61+
62+
63+
@ExceptionHandler
64+
@ResponseStatus(HttpStatus.BAD_REQUEST)
65+
public ErrorResponse handleException(MethodArgumentNotValidException exception) {
66+
Map<String, String> errorMsg = exception.getFieldErrors().
67+
stream().
68+
collect(
69+
Collectors.toMap(
70+
FieldError::getField,
71+
DefaultMessageSourceResolvable::getDefaultMessage,
72+
(a1, a2) -> a1
73+
));
74+
75+
return ErrorResponse.builder().error(errorMsg).build();
76+
}
77+
78+
}

src/main/java/ru/ifmo/web/SpringWeb/controller/UserController.java

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
package ru.ifmo.web.SpringWeb.controller;
22

3-
import org.springframework.context.support.DefaultMessageSourceResolvable;
4-
import org.springframework.http.HttpStatus;
5-
import org.springframework.http.ResponseEntity;
3+
import javax.validation.Valid;
4+
import java.security.Principal;
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
import java.util.stream.Collectors;
8+
9+
import org.springframework.http.*;
10+
import org.springframework.security.core.Authentication;
11+
import org.springframework.web.bind.annotation.*;
612
import org.springframework.validation.FieldError;
13+
import org.springframework.context.support.DefaultMessageSourceResolvable;
714
import org.springframework.web.bind.MethodArgumentNotValidException;
8-
import org.springframework.web.bind.annotation.*;
15+
916
import ru.ifmo.web.SpringWeb.model.User;
10-
import ru.ifmo.web.SpringWeb.payload.AuthResponse;
11-
import ru.ifmo.web.SpringWeb.payload.ErrorResponse;
1217
import ru.ifmo.web.SpringWeb.security.jwt.JwtProvider;
1318
import ru.ifmo.web.SpringWeb.service.UserService;
14-
15-
import javax.validation.Valid;
16-
import java.util.Map;
17-
import java.util.stream.Collectors;
19+
import ru.ifmo.web.SpringWeb.payload.request.*;
20+
import ru.ifmo.web.SpringWeb.payload.response.*;
1821

1922
@RestController
2023
@CrossOrigin
@@ -29,7 +32,7 @@ public UserController(UserService userService, JwtProvider jwtProvider) {
2932
}
3033

3134
@PostMapping("/login")
32-
public ResponseEntity<?> login(@RequestBody User request) {
35+
public ResponseEntity<?> login(@RequestBody LoginRequest request) {
3336
User user = userService.findUserByUsernameAndPassword(request.getUsername(), request.getPassword());
3437
if(user != null){
3538
String token = jwtProvider.generateToken(request.getUsername());
@@ -42,30 +45,32 @@ public ResponseEntity<?> login(@RequestBody User request) {
4245
}
4346

4447
@RequestMapping(value = "/register", method = RequestMethod.POST)
45-
public ResponseEntity<?> register(@Valid @RequestBody User request){
46-
if(userService.saveUser(request)){
48+
public ResponseEntity<?> register(@Valid @RequestBody RegisterRequest request){
49+
User user = new User();
50+
user.setUsername(request.getUsername());
51+
user.setPassword(request.getPassword());
52+
53+
if(userService.saveUser(user)){
4754
String token = jwtProvider.generateToken(request.getUsername());
4855
return ResponseEntity.ok(new AuthResponse(token));
4956
}
5057

5158
return ResponseEntity
5259
.badRequest()
5360
.body(new ErrorResponse("User already exists"));
61+
}
5462

63+
64+
@RequestMapping(value = "/current", method = RequestMethod.GET)
65+
public ResponseEntity<?> current(Authentication authentication){
66+
return ResponseEntity.ok((User) authentication.getPrincipal());
5567
}
5668

5769

5870

5971
@ExceptionHandler
6072
@ResponseStatus(HttpStatus.BAD_REQUEST)
6173
public ErrorResponse handleException(MethodArgumentNotValidException exception) {
62-
63-
// String errorMsg = exception.getBindingResult().getFieldErrors().stream()
64-
// .map(DefaultMessageSourceResolvable::getDefaultMessage)
65-
// .findFirst()
66-
// .orElse(exception.getMessage());
67-
68-
6974
Map<String, String> errorMsg = exception.getFieldErrors().
7075
stream().
7176
collect(

src/main/java/ru/ifmo/web/SpringWeb/model/Point.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class Point implements Serializable {
1919

2020
private Double y;
2121

22-
private Double r;
22+
private Integer r;
2323

2424
private Boolean hit;
2525

@@ -31,7 +31,7 @@ public class Point implements Serializable {
3131

3232
public Point(){}
3333

34-
public Point(int x, double y, double r){
34+
public Point(int x, double y, int r){
3535
this.x = x;
3636
this.y = y;
3737
this.r = r;

src/main/java/ru/ifmo/web/SpringWeb/model/User.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ru.ifmo.web.SpringWeb.model;
22

33

4+
import com.fasterxml.jackson.annotation.JsonIgnore;
45
import lombok.Data;
56
import lombok.Getter;
67
import lombok.Setter;
@@ -27,13 +28,10 @@ public class User implements Serializable, UserDetails {
2728
private Long id;
2829

2930
@Column(nullable = false, unique = true)
30-
@NotEmpty(message = "Can't be empty")
31-
@Length(min = 6, message = "Must be greater than 6")
3231
private String username;
3332

3433
@Column(nullable = false)
35-
@NotEmpty(message = "Can't be empty")
36-
@Length(min = 6, message = "Must be greater than 6")
34+
@JsonIgnore
3735
private String password;
3836

3937
public User() {
@@ -57,26 +55,31 @@ public String toString() {
5755
'}';
5856
}
5957

58+
@JsonIgnore
6059
@Override
6160
public Collection<? extends GrantedAuthority> getAuthorities() {
6261
return null;
6362
}
6463

64+
@JsonIgnore
6565
@Override
6666
public boolean isAccountNonExpired() {
6767
return true;
6868
}
6969

70+
@JsonIgnore
7071
@Override
7172
public boolean isAccountNonLocked() {
7273
return true;
7374
}
7475

76+
@JsonIgnore
7577
@Override
7678
public boolean isCredentialsNonExpired() {
7779
return true;
7880
}
7981

82+
@JsonIgnore
8083
@Override
8184
public boolean isEnabled() {
8285
return true;

src/main/java/ru/ifmo/web/SpringWeb/payload/MessageResponse.java

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package ru.ifmo.web.SpringWeb.payload.request;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import org.hibernate.validator.constraints.Length;
6+
7+
import javax.validation.constraints.NotEmpty;
8+
9+
@Data
10+
@AllArgsConstructor
11+
public class LoginRequest {
12+
private String username;
13+
private String password;
14+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package ru.ifmo.web.SpringWeb.payload.request;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
6+
import javax.validation.constraints.*;
7+
8+
@Data
9+
@AllArgsConstructor
10+
public class PointAddRequest {
11+
12+
@NotNull(message = "Enter X value")
13+
@Min(value = -4, message = "Must be from -4 to 4") @Max(value = 4, message = "Must be from -4 to 4")
14+
private Integer x;
15+
16+
@NotNull(message = "Enter Y value")
17+
@Min(value = -5, message = "Must be from -5 to 3") @Max(value = 3, message = "Must be from -5 to 3")
18+
private Double y;
19+
20+
@NotNull(message = "Enter R value")
21+
@Min(value = -4, message = "Must be from -4 to 4") @Max(value = 4, message = "Must be from -4 to 4")
22+
private Integer r;
23+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package ru.ifmo.web.SpringWeb.payload.request;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import org.hibernate.validator.constraints.Length;
6+
7+
import javax.validation.constraints.NotEmpty;
8+
9+
@Data
10+
@AllArgsConstructor
11+
public class RegisterRequest {
12+
13+
@NotEmpty(message = "Enter username")
14+
@Length(min = 6, message = "Must be greater than 6")
15+
private String username;
16+
17+
@NotEmpty(message = "Enter password")
18+
@Length(min = 6, message = "Must be greater than 6")
19+
private String password;
20+
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
package ru.ifmo.web.SpringWeb.payload;
1+
package ru.ifmo.web.SpringWeb.payload.response;
22

33
import lombok.AllArgsConstructor;
44
import lombok.Data;
5+
import lombok.RequiredArgsConstructor;
56

67
@Data
78
@AllArgsConstructor
89
public class AuthResponse {
10+
private final boolean result = true;
911
private String token;
1012
}

src/main/java/ru/ifmo/web/SpringWeb/payload/ErrorResponse.java renamed to src/main/java/ru/ifmo/web/SpringWeb/payload/response/ErrorResponse.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package ru.ifmo.web.SpringWeb.payload;
1+
package ru.ifmo.web.SpringWeb.payload.response;
22

33
import lombok.AllArgsConstructor;
44
import lombok.Builder;
@@ -10,5 +10,6 @@
1010
@NoArgsConstructor
1111
@Builder
1212
public class ErrorResponse {
13+
private final boolean result = false;
1314
private Object error;
1415
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package ru.ifmo.web.SpringWeb.payload.response;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
6+
@Data
7+
@AllArgsConstructor
8+
public class MessageResponse {
9+
private final boolean result = true;
10+
private Object message;
11+
}

src/main/java/ru/ifmo/web/SpringWeb/repository/PointRepository.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22

33
import org.springframework.data.jpa.repository.JpaRepository;
44
import ru.ifmo.web.SpringWeb.model.Point;
5+
import ru.ifmo.web.SpringWeb.model.User;
6+
7+
import java.util.List;
58

69
public interface PointRepository extends JpaRepository<Point, Long> {
7-
void deleteAll();
8-
void deleteAllById(Long id);
10+
List<Point> findAllByUser(User user);
11+
void deleteAllByUser(User user);
12+
void deleteById(Long id);
913

1014
}

0 commit comments

Comments
 (0)