pfeifn duats heast
This commit is contained in:
parent
85d7162419
commit
7dbbdef6c2
12 changed files with 57 additions and 34 deletions
|
|
@ -1,21 +1,23 @@
|
|||
### add
|
||||
POST {{url}}/cart/add
|
||||
Authorization: Bearer {{token}}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"id": 9999999,
|
||||
"cartEntries": [
|
||||
{
|
||||
"id": 2,
|
||||
"amount": 20
|
||||
"id": 3,
|
||||
"amount": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
### list
|
||||
GET {{url}}/user/signin
|
||||
|
||||
### list
|
||||
GET {{url}}/cart/list
|
||||
Authorization: Bearer {{token}}
|
||||
|
||||
### checkout
|
||||
GET {{url}}/user/update
|
||||
GET {{url}}/cart/checkout
|
||||
Authorization: Bearer {{token}}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
### create
|
||||
POST {{url}}/event/create
|
||||
# Authorization: Bearer {{token}}
|
||||
Authorization: Bearer {{token}}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"dev": {
|
||||
"url": "http://localhost:8080/api/v1",
|
||||
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZXRpY2tldCB1c2VyIHRva2VuIiwiZXhwIjoxNzAzMTAwNzQyLCJ1c2VySWQiOjIsImlhdCI6MTcwMzAxNDM0Mn0.D9HBxWy1vIP82XOh_ocjLO9HB0lK_rQGjgD3a7KQrOE"
|
||||
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZXRpY2tldCB1c2VyIHRva2VuIiwidXNlcklkIjoxfQ.vcZslqzkJgh8t7hokvwpVaJ-8c0_BnCeHrsBJOGC6qU"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package me.jweissen.aeticket.controller;
|
||||
|
||||
import me.jweissen.aeticket.aspect.UserOnly;
|
||||
import me.jweissen.aeticket.dto.request.CartAddRequestDto;
|
||||
import me.jweissen.aeticket.dto.response.CartEventResponseDto;
|
||||
import me.jweissen.aeticket.dto.response.CheckoutResponseDto;
|
||||
|
|
@ -23,20 +24,24 @@ public class CartController {
|
|||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
@UserOnly
|
||||
public ResponseEntity<Void> addEntry(@RequestBody CartAddRequestDto dto) {
|
||||
System.out.println(authService.getCurrentUser());
|
||||
if (!cartService.add(dto, authService.getCurrentUser().getCurrentCart())) {
|
||||
// user gave invalid category id(s)
|
||||
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
|
||||
// user gave invalid category id(s) or wanted more tickets than available
|
||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
|
||||
}
|
||||
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@UserOnly
|
||||
public ResponseEntity<List<CartEventResponseDto>> getCartEntries() {
|
||||
return new ResponseEntity<>(cartService.toDto(authService.getCurrentUser().getCurrentCart()), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/checkout")
|
||||
@UserOnly
|
||||
public ResponseEntity<CheckoutResponseDto> checkout() {
|
||||
return new ResponseEntity<>(cartService.checkout(authService.getCurrentUser().getCurrentCart()), HttpStatus.OK);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
package me.jweissen.aeticket.controller;
|
||||
|
||||
import me.jweissen.aeticket.aspect.AdminOnly;
|
||||
import me.jweissen.aeticket.aspect.UserOnly;
|
||||
import me.jweissen.aeticket.dto.request.CategoryRequestDto;
|
||||
import me.jweissen.aeticket.dto.request.CategoryUpdateRequestDto;
|
||||
import me.jweissen.aeticket.dto.request.EventRequestDto;
|
||||
import me.jweissen.aeticket.dto.request.EventUpdateRequestDto;
|
||||
import me.jweissen.aeticket.dto.response.CategoryResponseDto;
|
||||
import me.jweissen.aeticket.dto.response.EventResponseDto;
|
||||
import me.jweissen.aeticket.service.CategoryService;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
|
@ -23,16 +22,15 @@ public class CategoryController {
|
|||
}
|
||||
|
||||
@PostMapping("/create")
|
||||
@AdminOnly
|
||||
public ResponseEntity<Void> create(@RequestBody CategoryRequestDto dto) {
|
||||
// TODO admin only
|
||||
categoryService.create(dto);
|
||||
return ResponseEntity.status(HttpStatus.CREATED).build();
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@AdminOnly
|
||||
public ResponseEntity<Void> update(@RequestBody CategoryUpdateRequestDto dto) {
|
||||
// TODO admin only
|
||||
System.out.println(dto);
|
||||
if (!categoryService.update(dto)) {
|
||||
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
|
||||
}
|
||||
|
|
@ -40,13 +38,14 @@ public class CategoryController {
|
|||
}
|
||||
|
||||
@DeleteMapping("/delete/{id}")
|
||||
@AdminOnly
|
||||
public ResponseEntity<Void> delete(@PathVariable Long id) {
|
||||
// TODO admin only
|
||||
categoryService.delete(id);
|
||||
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
@UserOnly
|
||||
public ResponseEntity<CategoryResponseDto> getById(@PathVariable Long id) {
|
||||
return categoryService.getById(id)
|
||||
.map(categoryResponseDto -> new ResponseEntity<>(categoryResponseDto, HttpStatus.OK))
|
||||
|
|
@ -54,6 +53,7 @@ public class CategoryController {
|
|||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@UserOnly
|
||||
public ResponseEntity<List<CategoryResponseDto>> getAll() {
|
||||
return new ResponseEntity<>(categoryService.getAll(), HttpStatus.OK);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package me.jweissen.aeticket.controller;
|
||||
|
||||
import me.jweissen.aeticket.aspect.AdminOnly;
|
||||
import me.jweissen.aeticket.aspect.UserOnly;
|
||||
import me.jweissen.aeticket.dto.request.EventRequestDto;
|
||||
import me.jweissen.aeticket.dto.request.EventUpdateRequestDto;
|
||||
import me.jweissen.aeticket.dto.response.EventResponseDto;
|
||||
|
|
@ -20,27 +22,28 @@ public class EventController {
|
|||
}
|
||||
|
||||
@PostMapping("/create")
|
||||
@AdminOnly
|
||||
public ResponseEntity<Void> create(@RequestBody EventRequestDto event) {
|
||||
// TODO admin only
|
||||
eventService.create(event);
|
||||
return ResponseEntity.status(HttpStatus.CREATED).build();
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@AdminOnly
|
||||
public ResponseEntity<Void> update(@RequestBody EventUpdateRequestDto event) {
|
||||
// TODO admin only
|
||||
eventService.update(event);
|
||||
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete/{id}")
|
||||
@AdminOnly
|
||||
public ResponseEntity<Void> delete(@PathVariable Long id) {
|
||||
// TODO admin only
|
||||
eventService.delete(id);
|
||||
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
@UserOnly
|
||||
public ResponseEntity<EventResponseDto> getById(@PathVariable Long id) {
|
||||
return eventService.getById(id)
|
||||
.map(eventResponseDto -> new ResponseEntity<>(eventResponseDto, HttpStatus.OK))
|
||||
|
|
@ -48,6 +51,7 @@ public class EventController {
|
|||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@UserOnly
|
||||
public ResponseEntity<List<EventResponseDto>> getAllFuture() {
|
||||
return new ResponseEntity<>(eventService.getAllFuture(), HttpStatus.OK);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package me.jweissen.aeticket.controller;
|
||||
|
||||
import me.jweissen.aeticket.aspect.AdminOnly;
|
||||
import me.jweissen.aeticket.dto.request.LoginRequestDto;
|
||||
import me.jweissen.aeticket.dto.request.SignupRequestDto;
|
||||
import me.jweissen.aeticket.dto.request.UserUpdateRequestDto;
|
||||
|
|
@ -11,7 +12,6 @@ import org.springframework.http.ResponseEntity;
|
|||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/user")
|
||||
|
|
@ -35,8 +35,8 @@ public class UserController {
|
|||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@AdminOnly
|
||||
public ResponseEntity<Void> update(@RequestBody UserUpdateRequestDto user) {
|
||||
// TODO admin only
|
||||
if (!userService.update(user)) {
|
||||
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
|
||||
}
|
||||
|
|
@ -44,21 +44,21 @@ public class UserController {
|
|||
}
|
||||
|
||||
@DeleteMapping("/delete/{id}")
|
||||
@AdminOnly
|
||||
public ResponseEntity<Void> delete(@PathVariable Long id) {
|
||||
// TODO admin only
|
||||
userService.delete(id);
|
||||
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@AdminOnly
|
||||
public ResponseEntity<List<UserResponseDto>> getAll() {
|
||||
// TODO admin only
|
||||
return new ResponseEntity<>(userService.getAll(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/load/{id}")
|
||||
@AdminOnly
|
||||
public ResponseEntity<UserResponseDto> getById(@PathVariable Long id) {
|
||||
// TODO admin only
|
||||
return userService.getById(id)
|
||||
.map(userResponseDto -> new ResponseEntity<>(userResponseDto, HttpStatus.OK))
|
||||
.orElseGet(() -> ResponseEntity.status(HttpStatus.NOT_FOUND).build());
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ public class Cart {
|
|||
private Boolean checkedOut = false;
|
||||
|
||||
@OneToMany(mappedBy = "cart")
|
||||
@Column(nullable = false)
|
||||
@Column
|
||||
private List<CartEntry> cartEntries;
|
||||
|
||||
@ManyToOne
|
||||
|
|
|
|||
|
|
@ -45,8 +45,6 @@ public class User {
|
|||
private Role role;
|
||||
|
||||
@OneToOne
|
||||
@JoinColumn(nullable = false)
|
||||
@NonNull
|
||||
private Cart currentCart;
|
||||
|
||||
@OneToMany(mappedBy = "user")
|
||||
|
|
|
|||
|
|
@ -6,6 +6,6 @@ import org.springframework.data.jpa.repository.Query;
|
|||
import org.springframework.data.repository.query.Param;
|
||||
|
||||
public interface CategoryRepository extends JpaRepository<Category, Long> {
|
||||
@Query("SELECT c.stock - sum(ce.amount) FROM Category c INNER JOIN CartEntry ce ON c = ce.category WHERE c = :category GROUP BY c")
|
||||
Integer availableTickets(@Param("category") Category category);
|
||||
@Query("SELECT COALESCE(sum(ce.amount), 0) FROM CartEntry ce WHERE ce.category = :category")
|
||||
Integer unavailableTickets(@Param("category") Category category);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,11 +57,13 @@ public class CartService {
|
|||
return false;
|
||||
}
|
||||
Category category = categoryOptional.get();
|
||||
if (cartEntryDto.amount() > categoryRepository.availableTickets(category)) {
|
||||
if (cartEntryDto.amount() > (category.getStock() - categoryRepository.unavailableTickets(category))) {
|
||||
// wants to order more tickets than available
|
||||
return false;
|
||||
}
|
||||
cart.getCartEntries().add(new CartEntry(cart, category, cartEntryDto.amount()));
|
||||
CartEntry cartEntry = new CartEntry(cart, category, cartEntryDto.amount());
|
||||
cartEntry = cartEntryRepository.save(cartEntry);
|
||||
cart.getCartEntries().add(cartEntry);
|
||||
}
|
||||
cartRepository.save(cart);
|
||||
return true;
|
||||
|
|
@ -72,6 +74,7 @@ public class CartService {
|
|||
cartRepository.save(cart);
|
||||
// reset current cart
|
||||
Cart newCart = new Cart();
|
||||
newCart.setUser(cart.getUser());
|
||||
newCart = cartRepository.save(newCart);
|
||||
cart.getUser().setCurrentCart(newCart);
|
||||
userRepository.save(cart.getUser());
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import me.jweissen.aeticket.dto.response.UserResponseDto;
|
|||
import me.jweissen.aeticket.model.Cart;
|
||||
import me.jweissen.aeticket.model.Role;
|
||||
import me.jweissen.aeticket.model.User;
|
||||
import me.jweissen.aeticket.repository.CartRepository;
|
||||
import me.jweissen.aeticket.repository.UserRepository;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
|
|
@ -18,10 +19,15 @@ import java.util.Optional;
|
|||
public class UserService {
|
||||
private final UserRepository userRepository;
|
||||
private final JwtService jwtService;
|
||||
private final AuthService authService;
|
||||
private final CartRepository cartRepository;
|
||||
|
||||
public UserService(UserRepository userRepository, JwtService jwtService) {
|
||||
public UserService(UserRepository userRepository, JwtService jwtService, AuthService authService,
|
||||
CartRepository cartRepository) {
|
||||
this.userRepository = userRepository;
|
||||
this.jwtService = jwtService;
|
||||
this.authService = authService;
|
||||
this.cartRepository = cartRepository;
|
||||
}
|
||||
|
||||
public static UserResponseDto toDto(User user) {
|
||||
|
|
@ -39,8 +45,7 @@ public class UserService {
|
|||
dto.lastname(),
|
||||
dto.email(),
|
||||
dto.password(),
|
||||
Role.USER,
|
||||
new Cart()
|
||||
Role.USER
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -54,6 +59,7 @@ public class UserService {
|
|||
|
||||
public String generateToken(User user) {
|
||||
user.setToken(jwtService.generateToken(user.getId()));
|
||||
authService.extendToken(user);
|
||||
userRepository.save(user);
|
||||
return user.getToken();
|
||||
}
|
||||
|
|
@ -61,6 +67,11 @@ public class UserService {
|
|||
public TokenResponseDto create(SignupRequestDto dto) {
|
||||
var user = UserService.fromDto(dto);
|
||||
user = userRepository.save(user);
|
||||
Cart newCart = new Cart();
|
||||
newCart.setUser(user);
|
||||
cartRepository.save(newCart);
|
||||
user.setCurrentCart(newCart);
|
||||
userRepository.save(user);
|
||||
return new TokenResponseDto(generateToken(user));
|
||||
}
|
||||
|
||||
|
|
|
|||
Reference in a new issue