From fc372073f39f58010330698c9f04265c49647ee9 Mon Sep 17 00:00:00 2001 From: j-weissen Date: Tue, 19 Dec 2023 11:23:30 +0100 Subject: [PATCH] rewo --- http-requests/requests.http | 12 ---- http-requests/user.http | 31 ++++++++++ pom.xml | 5 ++ .../aeticket/controller/CartController.java | 21 ++++--- .../controller/CategoryController.java | 60 +++++++++++++++++++ .../aeticket/controller/UserController.java | 2 + .../dto/request/CategoryRequestDto.java | 2 +- .../dto/request/CategoryUpdateRequestDto.java | 4 ++ .../me/jweissen/aeticket/model/Category.java | 8 ++- .../repository/CategoryRepository.java | 2 +- .../aeticket/service/CategoryService.java | 53 ++++++++++++++++ 11 files changed, 176 insertions(+), 24 deletions(-) delete mode 100644 http-requests/requests.http create mode 100644 http-requests/user.http create mode 100644 src/main/java/me/jweissen/aeticket/controller/CategoryController.java create mode 100644 src/main/java/me/jweissen/aeticket/dto/request/CategoryUpdateRequestDto.java diff --git a/http-requests/requests.http b/http-requests/requests.http deleted file mode 100644 index 7def0d1..0000000 --- a/http-requests/requests.http +++ /dev/null @@ -1,12 +0,0 @@ -### signup -POST {{url}}/user/signup -Content-Type: application/json - -{ - "email": "ratp@htl-steyr.ac.at", - "password": "test", - "firstname": "Peter", - "lastname": "Rathgeb" -} - -### \ No newline at end of file diff --git a/http-requests/user.http b/http-requests/user.http new file mode 100644 index 0000000..bed80a3 --- /dev/null +++ b/http-requests/user.http @@ -0,0 +1,31 @@ +### signup +POST {{url}}/user/signup +Content-Type: application/json + +{ + "email": "ratp@htl-steyr.ac.at", + "password": "test", + "firstname": "Peter", + "lastname": "Rathgeb" +} + +### signin +GET {{url}}/user/signin + +### update +PUT {{url}}/user/update + +{ + +} + +### delete +DELETE {{url}}/user/delete/99 + +### list +GET {{url}}/user/list + +### load +GET {{url}}/user/load/1 + +# eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZXRpY2tldCB1c2VyIHRva2VuIiwiZXhwIjoxNzAzMDU4MjczLCJ1c2VySWQiOjEsImlhdCI6MTcwMjk3MTg3M30.hC1N7hKYSIT-fqmaZ9bv3-YXOxQWdp-Sb5rZi4rARc0 diff --git a/pom.xml b/pom.xml index f26c95b..3ac91fc 100644 --- a/pom.xml +++ b/pom.xml @@ -45,6 +45,11 @@ spring-boot-starter-test test + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.2.0 + diff --git a/src/main/java/me/jweissen/aeticket/controller/CartController.java b/src/main/java/me/jweissen/aeticket/controller/CartController.java index 8baf916..c8bcc52 100644 --- a/src/main/java/me/jweissen/aeticket/controller/CartController.java +++ b/src/main/java/me/jweissen/aeticket/controller/CartController.java @@ -1,6 +1,8 @@ package me.jweissen.aeticket.controller; +import me.jweissen.aeticket.dto.request.CartAddRequestDto; import me.jweissen.aeticket.dto.response.CartEntryResponseDto; +import me.jweissen.aeticket.dto.response.CheckoutResponseDto; import me.jweissen.aeticket.service.CartService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -20,16 +22,21 @@ public class CartController { this.cartService = cartService; } - /*@GetMapping("/list") - public ResponseEntity> getCartEntries() { - return cartService.get - }*/ - @PostMapping("/add") - public ResponseEntity addEntry() { - + public ResponseEntity addEntry(CartAddRequestDto dto) { + // TODO return ResponseEntity.noContent().build(); } + @GetMapping("/list") + public ResponseEntity> getCartEntries() { + // TODO + return new ResponseEntity<>(null, HttpStatus.OK); + } + @GetMapping("/checkout") + public ResponseEntity checkout() { + // TODO + return ResponseEntity.badRequest().build(); + } } diff --git a/src/main/java/me/jweissen/aeticket/controller/CategoryController.java b/src/main/java/me/jweissen/aeticket/controller/CategoryController.java new file mode 100644 index 0000000..969e6bb --- /dev/null +++ b/src/main/java/me/jweissen/aeticket/controller/CategoryController.java @@ -0,0 +1,60 @@ +package me.jweissen.aeticket.controller; + +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; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/eventcategory") +public class CategoryController { + private final CategoryService categoryService; + + public CategoryController(CategoryService categoryService) { + this.categoryService = categoryService; + } + + @PostMapping("/create") + public ResponseEntity create(@RequestBody CategoryRequestDto dto) { + // TODO admin only + categoryService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping("/update") + public ResponseEntity update(@RequestBody CategoryUpdateRequestDto dto) { + // TODO admin only + if (!categoryService.update(dto)) { + return ResponseEntity.notFound().build(); + } + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @DeleteMapping("/delete/{id}") + public ResponseEntity delete(@PathVariable Long id) { + // TODO admin only + categoryService.delete(id); + return ResponseEntity.noContent().build(); + } + + @GetMapping("/{id}") + public ResponseEntity getById(@PathVariable Long id) { + return categoryService.getById(id) + .map(categoryResponseDto -> new ResponseEntity<>(categoryResponseDto, HttpStatus.OK)) + .orElseGet(() -> ResponseEntity.notFound().build()); + } + + @GetMapping("/list") + public ResponseEntity> getAll() { + return new ResponseEntity<>(categoryService.getAll(), HttpStatus.OK); + } + +} diff --git a/src/main/java/me/jweissen/aeticket/controller/UserController.java b/src/main/java/me/jweissen/aeticket/controller/UserController.java index 68326c2..577eee6 100644 --- a/src/main/java/me/jweissen/aeticket/controller/UserController.java +++ b/src/main/java/me/jweissen/aeticket/controller/UserController.java @@ -1,5 +1,6 @@ package me.jweissen.aeticket.controller; +import me.jweissen.aeticket.aspect.Permissions; import me.jweissen.aeticket.dto.request.LoginRequestDto; import me.jweissen.aeticket.dto.request.SignupRequestDto; import me.jweissen.aeticket.dto.request.UserUpdateRequestDto; @@ -51,6 +52,7 @@ public class UserController { } @GetMapping("/list") + @Permissions(user = false) public ResponseEntity> getAll() { // TODO admin only return new ResponseEntity<>(userService.getAll(), HttpStatus.OK); diff --git a/src/main/java/me/jweissen/aeticket/dto/request/CategoryRequestDto.java b/src/main/java/me/jweissen/aeticket/dto/request/CategoryRequestDto.java index 9cda0a0..53d0af4 100644 --- a/src/main/java/me/jweissen/aeticket/dto/request/CategoryRequestDto.java +++ b/src/main/java/me/jweissen/aeticket/dto/request/CategoryRequestDto.java @@ -1,4 +1,4 @@ package me.jweissen.aeticket.dto.request; -public record CategoryRequestDto(String name, int price, int stock) { +public record CategoryRequestDto(String name, Double price, Integer stock) { } diff --git a/src/main/java/me/jweissen/aeticket/dto/request/CategoryUpdateRequestDto.java b/src/main/java/me/jweissen/aeticket/dto/request/CategoryUpdateRequestDto.java new file mode 100644 index 0000000..adaa399 --- /dev/null +++ b/src/main/java/me/jweissen/aeticket/dto/request/CategoryUpdateRequestDto.java @@ -0,0 +1,4 @@ +package me.jweissen.aeticket.dto.request; + +public record CategoryUpdateRequestDto(Long id, String name, Double price, Integer stock) { +} diff --git a/src/main/java/me/jweissen/aeticket/model/Category.java b/src/main/java/me/jweissen/aeticket/model/Category.java index 1658cbe..8c454da 100644 --- a/src/main/java/me/jweissen/aeticket/model/Category.java +++ b/src/main/java/me/jweissen/aeticket/model/Category.java @@ -1,9 +1,7 @@ package me.jweissen.aeticket.model; import jakarta.persistence.*; -import lombok.Getter; -import lombok.NonNull; -import lombok.Setter; +import lombok.*; import java.util.List; @@ -11,6 +9,10 @@ import java.util.List; @Table @Getter @Setter +@NoArgsConstructor +@RequiredArgsConstructor +@AllArgsConstructor +@Builder public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/me/jweissen/aeticket/repository/CategoryRepository.java b/src/main/java/me/jweissen/aeticket/repository/CategoryRepository.java index 42afa59..9cca126 100644 --- a/src/main/java/me/jweissen/aeticket/repository/CategoryRepository.java +++ b/src/main/java/me/jweissen/aeticket/repository/CategoryRepository.java @@ -3,5 +3,5 @@ package me.jweissen.aeticket.repository; import me.jweissen.aeticket.model.Category; import org.springframework.data.jpa.repository.JpaRepository; -public interface CategoryRepository extends JpaRepository { +public interface CategoryRepository extends JpaRepository { } diff --git a/src/main/java/me/jweissen/aeticket/service/CategoryService.java b/src/main/java/me/jweissen/aeticket/service/CategoryService.java index 599065c..594f9a2 100644 --- a/src/main/java/me/jweissen/aeticket/service/CategoryService.java +++ b/src/main/java/me/jweissen/aeticket/service/CategoryService.java @@ -1,13 +1,32 @@ package me.jweissen.aeticket.service; +import me.jweissen.aeticket.dto.request.CategoryRequestDto; +import me.jweissen.aeticket.dto.request.CategoryUpdateRequestDto; import me.jweissen.aeticket.dto.response.CategoryResponseDto; +import me.jweissen.aeticket.dto.response.EventResponseDto; import me.jweissen.aeticket.model.Category; +import me.jweissen.aeticket.repository.CategoryRepository; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; @Service public class CategoryService { + private final CategoryRepository categoryRepository; + + public CategoryService(CategoryRepository categoryRepository) { + this.categoryRepository = categoryRepository; + } + + public static Category fromDto(CategoryRequestDto dto) { + return new Category( + dto.name(), + eurosToCents(dto.price()), + dto.stock() + ); + } + public static CategoryResponseDto toDto(Category category) { return new CategoryResponseDto( category.getId(), @@ -24,4 +43,38 @@ public class CategoryService { public static Double centsToEuros(int cents) { return cents / 100.0; } + + public static Integer eurosToCents(Double euros) { + return (Double.valueOf(euros * 100)).intValue(); + } + + public CategoryResponseDto create(CategoryRequestDto dto) { + Category category = categoryRepository.save(fromDto(dto)); + return toDto(category); + } + + public boolean update(CategoryUpdateRequestDto dto) { + return categoryRepository.findById(dto.id()) + .map(category -> { + category.setName(dto.name()); + category.setPrice(eurosToCents(dto.price())); + category.setStock(dto.stock()); + categoryRepository.save(category); + return true; + }) + .orElse(false); + } + + public void delete(Long id) { + categoryRepository.deleteById(id); + } + + + public Optional getById(Long id) { + return categoryRepository.findById(id).map(CategoryService::toDto); + } + + public List getAll() { + return toDtos(categoryRepository.findAll()); + } }