Delete unused files

This commit is contained in:
Vincent Guillet
2025-11-25 21:23:38 +01:00
parent 64f00d5b30
commit 21cdb3dc30
34 changed files with 0 additions and 1346 deletions

View File

@@ -1,64 +0,0 @@
package fr.gameovergne.api.controller.app;
import fr.gameovergne.api.dto.app.BrandDTO;
import fr.gameovergne.api.mapper.app.BrandMapper;
import fr.gameovergne.api.model.app.Brand;
import fr.gameovergne.api.service.app.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/app/brands")
public class BrandController {
private final BrandService brandService;
private final BrandMapper brandMapper;
@Autowired
public BrandController(BrandService brandService, BrandMapper brandMapper) {
this.brandService = brandService;
this.brandMapper = brandMapper;
}
@GetMapping
public List<BrandDTO> getAllBrands() {
return brandService.getAllBrands()
.stream()
.map(brandMapper::toDto)
.toList();
}
@GetMapping("/{id}")
public ResponseEntity<Brand> getBrandById(@PathVariable Long id) {
return brandService.getBrandById(id)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
@PostMapping
public void saveBrand(@RequestBody BrandDTO brandDTO) {
brandService.saveBrand(brandMapper.fromDto(brandDTO));
}
@PutMapping("/{id}")
public ResponseEntity<Brand> updateBrand(@PathVariable Long id, @RequestBody BrandDTO brandDTO) {
Brand brand = brandMapper.fromDto(brandDTO);
brand.setId(id);
return brandService.getBrandById(id)
.map(existingBrand -> brandService.updateBrand(brand)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build()))
.orElse(ResponseEntity.notFound().build());
}
@DeleteMapping("/{id}")
public ResponseEntity<Brand> deleteBrandById(@PathVariable Long id) {
return brandService.deleteBrandById(id)
.map(brand -> ResponseEntity.ok().body(brand))
.orElse(ResponseEntity.notFound().build());
}
}

View File

@@ -1,63 +0,0 @@
package fr.gameovergne.api.controller.app;
import fr.gameovergne.api.dto.app.CategoryDTO;
import fr.gameovergne.api.mapper.app.CategoryMapper;
import fr.gameovergne.api.model.app.Category;
import fr.gameovergne.api.service.app.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/app/categories")
public class CategoryController {
private final CategoryService categoryService;
private final CategoryMapper categoryMapper;
@Autowired
public CategoryController(CategoryService categoryService, CategoryMapper categoryMapper) {
this.categoryService = categoryService;
this.categoryMapper = categoryMapper;
}
@GetMapping
public List<CategoryDTO> getAllCategories() {
return categoryService.getAllCategories()
.stream()
.map(categoryMapper::toDto)
.toList();
}
@GetMapping("/{id}")
public ResponseEntity<Category> getCategoryById(@PathVariable Long id) {
return categoryService.getCategoryById(id)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
@PostMapping
public void saveCategory(@RequestBody CategoryDTO categoryDTO) {
categoryService.saveCategory(categoryMapper.fromDto(categoryDTO));
}
@PutMapping("/{id}")
public ResponseEntity<Category> updateCategory(@PathVariable Long id, @RequestBody CategoryDTO categoryDTO) {
Category category = categoryMapper.fromDto(categoryDTO);
category.setId(id);
return categoryService.getCategoryById(id)
.map(existingCategory -> categoryService.updateCategory(category)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build()))
.orElse(ResponseEntity.notFound().build());
}
@DeleteMapping("/{id}")
public ResponseEntity<Category> deleteCategoryById(@PathVariable Long id) {
return categoryService.deleteCategoryById(id)
.map(category -> ResponseEntity.ok().body(category))
.orElse(ResponseEntity.notFound().build());
}
}

View File

@@ -1,23 +0,0 @@
package fr.gameovergne.api.controller.app;
import fr.gameovergne.api.dto.app.ConditionDTO;
import fr.gameovergne.api.model.app.Condition;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/api/app/conditions")
public class ConditionController {
@GetMapping
public List<ConditionDTO> list() {
return Arrays.stream(Condition.values())
.map(condition -> new ConditionDTO(condition.name(), condition.getDisplayName()))
.collect(Collectors.toList());
}
}

View File

@@ -1,63 +0,0 @@
package fr.gameovergne.api.controller.app;
import fr.gameovergne.api.dto.app.ImageDTO;
import fr.gameovergne.api.mapper.app.ImageMapper;
import fr.gameovergne.api.model.app.Image;
import fr.gameovergne.api.service.app.ImageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/app/images")
public class ImageController {
private final ImageService imageService;
private final ImageMapper imageMapper;
@Autowired
public ImageController(ImageService imageService, ImageMapper imageMapper) {
this.imageService = imageService;
this.imageMapper = imageMapper;
}
@GetMapping
public List<ImageDTO> getAllImages() {
return imageService.getAllImages()
.stream()
.map(imageMapper::toDto)
.toList();
}
@GetMapping("/{id}")
public ResponseEntity<Image> getImageById(@PathVariable Long id) {
return imageService.getImageById(id)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
@PostMapping
public void saveImage(@RequestBody ImageDTO imageDTO) {
imageService.saveImage(imageMapper.fromDto(imageDTO));
}
@PutMapping("/{id}")
public ResponseEntity<Image> updateImage(@PathVariable Long id, @RequestBody ImageDTO imageDTO) {
Image image = imageMapper.fromDto(imageDTO);
image.setId(id);
return imageService.getImageById(id)
.map(existingImage -> imageService.updateImage(image)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build()))
.orElse(ResponseEntity.notFound().build());
}
@DeleteMapping("/{id}")
public ResponseEntity<Image> deleteImageById(@PathVariable Long id) {
return imageService.deleteImageById(id)
.map(image -> ResponseEntity.ok().body(image))
.orElse(ResponseEntity.notFound().build());
}
}

View File

@@ -1,61 +0,0 @@
package fr.gameovergne.api.controller.app;
import fr.gameovergne.api.dto.app.PlatformDTO;
import fr.gameovergne.api.mapper.app.PlatformMapper;
import fr.gameovergne.api.model.app.Platform;
import fr.gameovergne.api.service.app.PlatformService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/app/platforms")
public class PlatformController {
private final PlatformService platformService;
private final PlatformMapper platformMapper;
public PlatformController(PlatformService platformService, PlatformMapper platformMapper) {
this.platformService = platformService;
this.platformMapper = platformMapper;
}
@GetMapping
public List<PlatformDTO> getAllPlatforms() {
return platformService.getAllPlatforms()
.stream()
.map(platformMapper::toDto)
.toList();
}
@GetMapping("/{id}")
public ResponseEntity<Platform> getPlatformById(@PathVariable Long id) {
return platformService.getPlatformById(id)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
@PostMapping
public void savePlatform(@RequestBody PlatformDTO platformDTO) {
platformService.savePlatform(platformMapper.fromDto(platformDTO));
}
@PutMapping("/{id}")
public ResponseEntity<Platform> updatePlatform(@PathVariable Long id, @RequestBody PlatformDTO platformDTO) {
Platform platform = platformMapper.fromDto(platformDTO);
platform.setId(id);
return platformService.getPlatformById(id)
.map(existingPlatform -> platformService.updatePlatform(platform)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build()))
.orElse(ResponseEntity.notFound().build());
}
@DeleteMapping("/{id}")
public ResponseEntity<Platform> deletePlatformById(@PathVariable Long id) {
return platformService.deletePlatformById(id)
.map(platform -> ResponseEntity.ok().body(platform))
.orElse(ResponseEntity.notFound().build());
}
}

View File

@@ -1,66 +0,0 @@
package fr.gameovergne.api.controller.app;
import fr.gameovergne.api.dto.app.ProductDTO;
import fr.gameovergne.api.mapper.app.ProductMapper;
import fr.gameovergne.api.model.app.Product;
import fr.gameovergne.api.service.app.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/app/products")
public class ProductController {
private final ProductService productService;
private final ProductMapper productMapper;
@Autowired
public ProductController(ProductService productService, ProductMapper productMapper) {
this.productService = productService;
this.productMapper = productMapper;
}
@GetMapping
public List<ProductDTO> getAllProducts() {
return productService.getAllProducts()
.stream()
.map(productMapper::toDto)
.toList();
}
@GetMapping("/{id}")
public ResponseEntity<ProductDTO> getProductById(@PathVariable Long id) {
return productService.getProductById(id)
.stream()
.map(productMapper::toDto)
.findFirst()
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
@PostMapping
public void saveProduct(@RequestBody ProductDTO productDTO) {
productService.saveProduct(productMapper.fromDto(productDTO));
}
@PutMapping("/{id}")
public ResponseEntity<Product> updateProduct(@PathVariable Long id, @RequestBody ProductDTO productDTO) {
Product product = productMapper.fromDto(productDTO);
product.setId(id);
return productService.getProductById(id)
.map(existingProduct -> productService.updateProduct(product)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build()))
.orElse(ResponseEntity.notFound().build());
}
@DeleteMapping("/{id}")
public ResponseEntity<Product> deleteProductById(@PathVariable Long id) {
return productService.deleteProductById(id)
.map(product -> ResponseEntity.ok().body(product))
.orElse(ResponseEntity.notFound().build());
}
}

View File

@@ -1,11 +0,0 @@
package fr.gameovergne.api.controller.app;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/app/products_images")
public class ProductImageController {
}

View File

@@ -1,18 +0,0 @@
package fr.gameovergne.api.dto.app;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BrandDTO {
@JsonProperty("id")
private Long id;
@JsonProperty("name")
private String name;
}

View File

@@ -1,18 +0,0 @@
package fr.gameovergne.api.dto.app;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CategoryDTO {
@JsonProperty("id")
private Long id;
@JsonProperty("name")
private String name;
}

View File

@@ -1,16 +0,0 @@
package fr.gameovergne.api.dto.app;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public class ConditionDTO {
@JsonProperty("name")
private final String name;
@JsonProperty("displayName")
private final String displayName;
}

View File

@@ -1,21 +0,0 @@
package fr.gameovergne.api.dto.app;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ImageDTO {
@JsonProperty("id")
private Long id;
@JsonProperty("name")
private String name;
@JsonProperty("url")
private String url;
}

View File

@@ -1,21 +0,0 @@
package fr.gameovergne.api.dto.app;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PlatformDTO {
@JsonProperty("id")
private Long id;
@JsonProperty("name")
private String name;
@JsonProperty("brand")
private BrandDTO brandDTO;
}

View File

@@ -1,42 +0,0 @@
package fr.gameovergne.api.dto.app;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductDTO {
@JsonProperty("id")
private Long id;
@JsonProperty("title")
private String title;
@JsonProperty("description")
private String description;
@JsonProperty("price")
private double price;
@JsonProperty("quantity")
private int quantity;
@JsonProperty("complete")
private boolean complete = false;
@JsonProperty("manualIncluded")
private boolean manualIncluded = false;
@JsonProperty("category")
private CategoryDTO categoryDTO;
@JsonProperty("platform")
private PlatformDTO platformDTO;
@JsonProperty("condition")
private ConditionDTO conditionDTO;
}

View File

@@ -1,25 +0,0 @@
package fr.gameovergne.api.mapper.app;
import fr.gameovergne.api.dto.app.BrandDTO;
import fr.gameovergne.api.model.app.Brand;
import org.springframework.stereotype.Component;
@Component
public class BrandMapper {
public Brand fromDto(BrandDTO brandDTO) {
if (brandDTO == null) return null;
Brand brand = new Brand();
brand.setId(brandDTO.getId());
brand.setName(brandDTO.getName());
return brand;
}
public BrandDTO toDto(Brand brand) {
if (brand == null) return null;
BrandDTO brandDTO = new BrandDTO();
brandDTO.setId(brand.getId());
brandDTO.setName(brand.getName());
return brandDTO;
}
}

View File

@@ -1,25 +0,0 @@
package fr.gameovergne.api.mapper.app;
import fr.gameovergne.api.dto.app.CategoryDTO;
import fr.gameovergne.api.model.app.Category;
import org.springframework.stereotype.Component;
@Component
public class CategoryMapper {
public Category fromDto(CategoryDTO categoryDTO) {
if (categoryDTO == null) return null;
Category category = new Category();
category.setId(categoryDTO.getId());
category.setName(categoryDTO.getName());
return category;
}
public CategoryDTO toDto(Category category) {
if (category == null) return null;
CategoryDTO categoryDTO = new CategoryDTO();
categoryDTO.setId(category.getId());
categoryDTO.setName(category.getName());
return categoryDTO;
}
}

View File

@@ -1,27 +0,0 @@
package fr.gameovergne.api.mapper.app;
import fr.gameovergne.api.dto.app.ImageDTO;
import fr.gameovergne.api.model.app.Image;
import org.springframework.stereotype.Component;
@Component
public class ImageMapper {
public Image fromDto(ImageDTO imageDTO) {
if (imageDTO == null) return null;
Image image = new Image();
image.setId(imageDTO.getId());
image.setName(imageDTO.getName());
image.setUrl(imageDTO.getUrl());
return image;
}
public ImageDTO toDto(Image image) {
if (image == null) return null;
ImageDTO imageDTO = new ImageDTO();
imageDTO.setId(image.getId());
imageDTO.setName(image.getName());
imageDTO.setUrl(image.getUrl());
return imageDTO;
}
}

View File

@@ -1,44 +0,0 @@
package fr.gameovergne.api.mapper.app;
import fr.gameovergne.api.dto.app.BrandDTO;
import fr.gameovergne.api.dto.app.PlatformDTO;
import fr.gameovergne.api.model.app.Platform;
import fr.gameovergne.api.service.app.BrandService;
import org.springframework.stereotype.Component;
@Component
public class PlatformMapper {
private final BrandService brandService;
public PlatformMapper(BrandService brandService) {
this.brandService = brandService;
}
public Platform fromDto(PlatformDTO platformDTO) {
if (platformDTO == null) return null;
Platform platform = new Platform();
platform.setId(platformDTO.getId());
platform.setName(platformDTO.getName());
if (platformDTO.getBrandDTO() != null && platformDTO.getBrandDTO().getName() != null) {
platform.setBrand(this.brandService.getBrandByName(platformDTO.getBrandDTO().getName()).orElse(null));
} else {
platform.setBrand(null);
}
return platform;
}
public PlatformDTO toDto(Platform platform) {
if (platform == null) return null;
PlatformDTO platformDTO = new PlatformDTO();
platformDTO.setId(platform.getId());
platformDTO.setName(platform.getName());
if (platform.getBrand() != null) {
platformDTO.setBrandDTO(new BrandDTO(platform.getBrand().getId(), platform.getBrand().getName()));
} else {
platformDTO.setBrandDTO(null);
}
return platformDTO;
}
}

View File

@@ -1,122 +0,0 @@
package fr.gameovergne.api.mapper.app;
import fr.gameovergne.api.dto.app.*;
import fr.gameovergne.api.model.app.Brand;
import fr.gameovergne.api.model.app.Condition;
import fr.gameovergne.api.model.app.Platform;
import fr.gameovergne.api.model.app.Product;
import fr.gameovergne.api.service.app.BrandService;
import fr.gameovergne.api.service.app.CategoryService;
import fr.gameovergne.api.service.app.PlatformService;
import org.springframework.stereotype.Component;
@Component
public class ProductMapper {
private final CategoryService categoryService;
private final BrandService brandService;
private final PlatformService platformService;
public ProductMapper(CategoryService categoryService, BrandService brandService, PlatformService platformService) {
this.categoryService = categoryService;
this.brandService = brandService;
this.platformService = platformService;
}
public Product fromDto(ProductDTO productDTO) {
if (productDTO == null) return null;
Product product = new Product();
product.setId(productDTO.getId());
product.setTitle(productDTO.getTitle());
product.setDescription(productDTO.getDescription());
product.setPrice(productDTO.getPrice());
product.setQuantity(productDTO.getQuantity());
product.setComplete(productDTO.isComplete());
product.setManualIncluded(productDTO.isManualIncluded());
if (productDTO.getCategoryDTO() != null && productDTO.getCategoryDTO().getName() != null) {
product.setCategory(this.categoryService.getCategoryByName(productDTO.getCategoryDTO().getName()).orElse(null));
} else {
product.setCategory(null);
}
if (productDTO.getPlatformDTO() != null && productDTO.getPlatformDTO().getName() != null) {
String platformName = productDTO.getPlatformDTO().getName();
Platform platform = this.platformService.getPlatformByName(platformName)
.orElseGet(() -> {
Platform p = new Platform();
p.setName(platformName);
return p;
});
if (productDTO.getPlatformDTO().getBrandDTO() != null && productDTO.getPlatformDTO().getBrandDTO().getName() != null) {
String brandName = productDTO.getPlatformDTO().getBrandDTO().getName();
Brand brand = this.brandService.getBrandByName(brandName)
.orElseGet(() -> {
Brand b = new Brand();
b.setName(brandName);
return b;
});
platform.setBrand(brand);
}
product.setPlatform(platform);
} else {
product.setPlatform(null);
}
if (productDTO.getConditionDTO() != null && productDTO.getConditionDTO().getName() != null) {
try {
product.setCondition(Condition.valueOf(productDTO.getConditionDTO().getName()));
} catch (IllegalArgumentException e) {
product.setCondition(null);
}
} else {
product.setCondition(null);
}
return product;
}
public ProductDTO toDto(Product product) {
if (product == null) return null;
ProductDTO productDTO = new ProductDTO();
productDTO.setId(product.getId());
productDTO.setTitle(product.getTitle());
productDTO.setDescription(product.getDescription());
productDTO.setPrice(product.getPrice());
productDTO.setQuantity(product.getQuantity());
productDTO.setComplete(product.isComplete());
productDTO.setManualIncluded(product.isManualIncluded());
if (product.getCategory() != null) {
productDTO.setCategoryDTO(new CategoryDTO(product.getCategory().getId(), product.getCategory().getName()));
} else {
productDTO.setCategoryDTO(null);
}
if (product.getPlatform() != null) {
Platform platform = product.getPlatform();
PlatformDTO platformDTO = new PlatformDTO();
platformDTO.setId(platform.getId());
platformDTO.setName(platform.getName());
if (platform.getBrand() != null) {
platformDTO.setBrandDTO(new BrandDTO(platform.getBrand().getId(), platform.getBrand().getName()));
} else {
platformDTO.setBrandDTO(null);
}
productDTO.setPlatformDTO(platformDTO);
} else {
productDTO.setPlatformDTO(null);
}
if (product.getCondition() != null) {
productDTO.setConditionDTO(new ConditionDTO(product.getCondition().name(), product.getCondition().getDisplayName()));
} else {
productDTO.setConditionDTO(null);
}
return productDTO;
}
}

View File

@@ -1,32 +0,0 @@
package fr.gameovergne.api.model.app;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@Table(name = "brands")
public class Brand {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
@Column(name = "brand_name", length = 30, unique = true)
private String name;
@OneToMany(mappedBy = "brand", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Platform> platforms;
}

View File

@@ -1,33 +0,0 @@
package fr.gameovergne.api.model.app;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@Table(name = "categories")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
@Column(name = "category_name", length = 30, unique = true, nullable = false)
private String name;
@OneToMany(mappedBy = "category", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Product> products;
}

View File

@@ -1,18 +0,0 @@
package fr.gameovergne.api.model.app;
import lombok.Getter;
@Getter
public enum Condition {
NEW("Neuf"),
VERY_GOOD("Très bon état"),
GOOD("Bon état"),
POOR("Mauvais état"),
VERY_POOR("Très mauvais état");
private final String displayName;
Condition(String displayName) {
this.displayName = displayName;
}
}

View File

@@ -1,49 +0,0 @@
package fr.gameovergne.api.model.app;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import fr.gameovergne.api.model.user.User;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@Table(name = "images")
public class Image {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 120, unique = true, nullable = false)
@NotBlank
private String name;
@Column(length = 255, unique = true, nullable = false)
@NotBlank
private String url;
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinTable(
name = "users_images",
joinColumns = @JoinColumn(name = "image_id"),
inverseJoinColumns = @JoinColumn(name = "user_id")
)
private List<User> users;
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinTable(
name = "products_images",
joinColumns = @JoinColumn(name = "image_id"),
inverseJoinColumns = @JoinColumn(name = "product_id")
)
private List<Product> products;
}

View File

@@ -1,37 +0,0 @@
package fr.gameovergne.api.model.app;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@Table(name = "platforms")
public class Platform {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
@Column(name = "platform_name", length = 30, unique = true, nullable = false)
private String name;
@ManyToOne
@JoinColumn(name = "brand_id")
private Brand brand;
@OneToMany(mappedBy = "platform", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Product> products;
}

View File

@@ -1,71 +0,0 @@
package fr.gameovergne.api.model.app;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
@Column(name = "product_title", length = 120, unique = true, nullable = false)
private String title;
@Column(name = "product_description", length = 500)
private String description;
@NotNull
@Column(name = "product_price")
private double price;
@NotNull
@Column(name = "product_quantity")
private int quantity;
@NotNull
@Column(name = "product_complete")
private boolean complete = false;
@NotNull
@Column(name = "product_manual")
private boolean manualIncluded = false; // Notice
@ManyToOne
@JoinColumn(name = "category_id")
private Category category;
@ManyToOne
@JoinColumn(name = "platform_id")
private Platform platform;
@NotNull
@Enumerated(EnumType.STRING)
@Column(name = "product_condition")
private Condition condition;
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinTable(
name = "products_images",
joinColumns = @JoinColumn(name = "image_id"),
inverseJoinColumns = @JoinColumn(name = "product_id")
)
private List<Image> images;
}

View File

@@ -1,10 +0,0 @@
package fr.gameovergne.api.repository.app;
import fr.gameovergne.api.model.app.Brand;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface BrandRepository extends JpaRepository<Brand, Long> {
Optional<Brand> findByName(String name);
}

View File

@@ -1,10 +0,0 @@
package fr.gameovergne.api.repository.app;
import fr.gameovergne.api.model.app.Category;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface CategoryRepository extends JpaRepository<Category, Long> {
Optional<Category> findByName(String name);
}

View File

@@ -1,11 +0,0 @@
package fr.gameovergne.api.repository.app;
import fr.gameovergne.api.model.app.Image;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface ImageRepository extends JpaRepository<Image, Long> {
Optional<Image> findByName(String name);
Optional<Image> findByUrl(String url);
}

View File

@@ -1,10 +0,0 @@
package fr.gameovergne.api.repository.app;
import fr.gameovergne.api.model.app.Platform;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface PlatformRepository extends JpaRepository<Platform, Long> {
Optional<Platform> findByName(String name);
}

View File

@@ -1,13 +0,0 @@
package fr.gameovergne.api.repository.app;
import fr.gameovergne.api.model.app.*;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface ProductRepository extends JpaRepository<Product, Long> {
Optional<Product> findByTitle(String title);
Optional<Product> findByCategory(Category category);
Optional<Product> findByPlatform(Platform platform);
Optional<Product> findByCondition(Condition condition);
}

View File

@@ -1,71 +0,0 @@
package fr.gameovergne.api.service.app;
import fr.gameovergne.api.model.app.Brand;
import fr.gameovergne.api.model.app.Platform;
import fr.gameovergne.api.repository.app.BrandRepository;
import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Service
public class BrandService {
private final BrandRepository brandRepository;
@Autowired
public BrandService(BrandRepository brandRepository) {
this.brandRepository = brandRepository;
}
@Transactional
public void saveBrand(Brand brand) {
if (brand.getId() == null) {
brandRepository.save(brand);
}
}
public List<Brand> getAllBrands() {
return brandRepository.findAll();
}
public Optional<Brand> getBrandById(Long id) {
return brandRepository.findById(id);
}
public Optional<Brand> getBrandByName(String name) {
return brandRepository.findByName(name);
}
@Transactional
public Optional<Brand> updateBrand(Brand brand) {
return brandRepository.findById(brand.getId()).map(existingBrand -> {
existingBrand.setName(brand.getName());
List<Platform> newPlatforms = brand.getPlatforms();
if (newPlatforms != null) {
if (existingBrand.getPlatforms() == null) {
existingBrand.setPlatforms(new ArrayList<>());
} else {
existingBrand.getPlatforms().clear();
}
for (Platform p : newPlatforms) {
p.setBrand(existingBrand);
existingBrand.getPlatforms().add(p);
}
}
return brandRepository.save(existingBrand);
});
}
@Transactional
public Optional<Brand> deleteBrandById(Long id) {
Optional<Brand> brand = brandRepository.findById(id);
brand.ifPresent(brandRepository::delete);
return brand;
}
}

View File

@@ -1,55 +0,0 @@
package fr.gameovergne.api.service.app;
import fr.gameovergne.api.model.app.Category;
import fr.gameovergne.api.repository.app.CategoryRepository;
import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class CategoryService {
private final CategoryRepository categoryRepository;
@Autowired
public CategoryService(CategoryRepository categoryRepository) {
this.categoryRepository = categoryRepository;
}
@Transactional
public void saveCategory(Category category) {
if (category.getId() == null) {
categoryRepository.save(category);
}
}
public List<Category> getAllCategories() {
return categoryRepository.findAll();
}
public Optional<Category> getCategoryById(Long id) {
return categoryRepository.findById(id);
}
public Optional<Category> getCategoryByName(String name) {
return categoryRepository.findByName(name);
}
@Transactional
public Optional<Category> updateCategory(Category category) {
return categoryRepository.findById(category.getId()).map(existingCategory -> {
existingCategory.setName(category.getName());
return categoryRepository.save(existingCategory);
});
}
@Transactional
public Optional<Category> deleteCategoryById(Long id) {
Optional<Category> category = categoryRepository.findById(id);
category.ifPresent(categoryRepository::delete);
return category;
}
}

View File

@@ -1,60 +0,0 @@
package fr.gameovergne.api.service.app;
import fr.gameovergne.api.model.app.Image;
import fr.gameovergne.api.repository.app.ImageRepository;
import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class ImageService {
private final ImageRepository imageRepository;
@Autowired
public ImageService(ImageRepository imageRepository) {
this.imageRepository = imageRepository;
}
@Transactional
public void saveImage(Image image) {
if (image.getId() == null) {
imageRepository.save(image);
}
}
public List<Image> getAllImages() {
return imageRepository.findAll();
}
public Optional<Image> getImageById(Long id) {
return imageRepository.findById(id);
}
public Optional<Image> getImageByName(String name) {
return imageRepository.findByName(name);
}
public Optional<Image> getImageByUrl(String url) {
return imageRepository.findByUrl(url);
}
@Transactional
public Optional<Image> updateImage(Image image) {
return imageRepository.findById(image.getId()).map(existingImage -> {
existingImage.setName(image.getName());
existingImage.setUrl(image.getUrl());
return imageRepository.save(existingImage);
});
}
@Transactional
public Optional<Image> deleteImageById(Long id) {
Optional<Image> image = imageRepository.findById(id);
image.ifPresent(imageRepository::delete);
return image;
}
}

View File

@@ -1,71 +0,0 @@
package fr.gameovergne.api.service.app;
import fr.gameovergne.api.model.app.Platform;
import fr.gameovergne.api.model.app.Product;
import fr.gameovergne.api.repository.app.PlatformRepository;
import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Service
public class PlatformService {
private final PlatformRepository platformRepository;
@Autowired
public PlatformService(PlatformRepository platformRepository) {
this.platformRepository = platformRepository;
}
@Transactional
public void savePlatform(Platform platform) {
if (platform.getId() == null) {
platformRepository.save(platform);
}
}
public List<Platform> getAllPlatforms() {
return platformRepository.findAll();
}
public Optional<Platform> getPlatformById(Long id) {
return platformRepository.findById(id);
}
public Optional<Platform> getPlatformByName(String name) {
return platformRepository.findByName(name);
}
@Transactional
public Optional<Platform> updatePlatform(Platform platform) {
return platformRepository.findById(platform.getId()).map(existingPlatform -> {
existingPlatform.setName(platform.getName());
existingPlatform.setBrand(platform.getBrand());
List<Product> newProducts = platform.getProducts();
if (newProducts != null) {
if (existingPlatform.getProducts() == null) {
existingPlatform.setProducts(new ArrayList<>());
} else {
existingPlatform.getProducts().clear();
}
for (Product p : newProducts) {
p.setPlatform(existingPlatform);
existingPlatform.getProducts().add(p);
}
}
return platformRepository.save(existingPlatform);
});
}
@Transactional
public Optional<Platform> deletePlatformById(Long id) {
Optional<Platform> platform = platformRepository.findById(id);
platform.ifPresent(platformRepository::delete);
return platform;
}
}

View File

@@ -1,65 +0,0 @@
package fr.gameovergne.api.service.app;
import fr.gameovergne.api.model.app.Product;
import fr.gameovergne.api.model.app.Platform;
import fr.gameovergne.api.repository.app.ProductRepository;
import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Service
public class ProductService {
private final ProductRepository productRepository;
@Autowired
public ProductService(ProductRepository productRepository) {
this.productRepository = productRepository;
}
@Transactional
public void saveProduct(Product product) {
if (product.getId() == null) {
productRepository.save(product);
}
}
public List<Product> getAllProducts() {
return productRepository.findAll();
}
public Optional<Product> getProductById(Long id) {
return productRepository.findById(id);
}
public Optional<Product> getProductByName(String name) {
return productRepository.findByTitle(name);
}
@Transactional
public Optional<Product> updateProduct(Product product) {
return productRepository.findById(product.getId()).map(existingProduct -> {
existingProduct.setTitle(product.getTitle());
existingProduct.setDescription(product.getDescription());
existingProduct.setPrice(product.getPrice());
existingProduct.setQuantity(product.getQuantity());
existingProduct.setComplete(product.isComplete());
existingProduct.setManualIncluded(product.isManualIncluded());
existingProduct.setCategory(product.getCategory());
existingProduct.setPlatform(product.getPlatform());
existingProduct.setCondition(product.getCondition());
return productRepository.save(existingProduct);
});
}
@Transactional
public Optional<Product> deleteProductById(Long id) {
Optional<Product> product = productRepository.findById(id);
product.ifPresent(productRepository::delete);
return product;
}
}