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());
+ }
}