This commit is contained in:
j-weissen 2023-12-19 11:23:30 +01:00
parent f4d04f9a04
commit fc372073f3
11 changed files with 176 additions and 24 deletions

View file

@ -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"
}
###

31
http-requests/user.http Normal file
View file

@ -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

View file

@ -45,6 +45,11 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
<build>

View file

@ -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<List<CartEntryResponseDto>> getCartEntries() {
return cartService.get
}*/
@PostMapping("/add")
public ResponseEntity<Void> addEntry() {
public ResponseEntity<Void> addEntry(CartAddRequestDto dto) {
// TODO
return ResponseEntity.noContent().build();
}
@GetMapping("/list")
public ResponseEntity<List<CartEntryResponseDto>> getCartEntries() {
// TODO
return new ResponseEntity<>(null, HttpStatus.OK);
}
@GetMapping("/checkout")
public ResponseEntity<CheckoutResponseDto> checkout() {
// TODO
return ResponseEntity.badRequest().build();
}
}

View file

@ -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<Void> create(@RequestBody CategoryRequestDto dto) {
// TODO admin only
categoryService.create(dto);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping("/update")
public ResponseEntity<Void> 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<Void> delete(@PathVariable Long id) {
// TODO admin only
categoryService.delete(id);
return ResponseEntity.noContent().build();
}
@GetMapping("/{id}")
public ResponseEntity<CategoryResponseDto> getById(@PathVariable Long id) {
return categoryService.getById(id)
.map(categoryResponseDto -> new ResponseEntity<>(categoryResponseDto, HttpStatus.OK))
.orElseGet(() -> ResponseEntity.notFound().build());
}
@GetMapping("/list")
public ResponseEntity<List<CategoryResponseDto>> getAll() {
return new ResponseEntity<>(categoryService.getAll(), HttpStatus.OK);
}
}

View file

@ -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<List<UserResponseDto>> getAll() {
// TODO admin only
return new ResponseEntity<>(userService.getAll(), HttpStatus.OK);

View file

@ -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) {
}

View file

@ -0,0 +1,4 @@
package me.jweissen.aeticket.dto.request;
public record CategoryUpdateRequestDto(Long id, String name, Double price, Integer stock) {
}

View file

@ -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)

View file

@ -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<Category, Integer> {
public interface CategoryRepository extends JpaRepository<Category, Long> {
}

View file

@ -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<CategoryResponseDto> getById(Long id) {
return categoryRepository.findById(id).map(CategoryService::toDto);
}
public List<CategoryResponseDto> getAll() {
return toDtos(categoryRepository.findAll());
}
}