add entities for Brand, Category, Condition, Image, Platform, and Product with relationships
This commit is contained in:
30
api/src/main/java/fr/gameovergne/api/model/app/Brand.java
Normal file
30
api/src/main/java/fr/gameovergne/api/model/app/Brand.java
Normal file
@@ -0,0 +1,30 @@
|
||||
package fr.gameovergne.api.model.app;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
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
|
||||
@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)
|
||||
@JsonManagedReference
|
||||
private List<Platform> platforms;
|
||||
}
|
||||
31
api/src/main/java/fr/gameovergne/api/model/app/Category.java
Normal file
31
api/src/main/java/fr/gameovergne/api/model/app/Category.java
Normal file
@@ -0,0 +1,31 @@
|
||||
package fr.gameovergne.api.model.app;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
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
|
||||
@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)
|
||||
@JsonManagedReference
|
||||
private List<Product> products;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
48
api/src/main/java/fr/gameovergne/api/model/app/Image.java
Normal file
48
api/src/main/java/fr/gameovergne/api/model/app/Image.java
Normal file
@@ -0,0 +1,48 @@
|
||||
package fr.gameovergne.api.model.app;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
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
|
||||
@Table(name = "images")
|
||||
public class Image {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@Column(length = 120, unique = true, nullable = false)
|
||||
@NotBlank
|
||||
private String title;
|
||||
|
||||
@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 = "user_images",
|
||||
joinColumns = @JoinColumn(name = "image_id"),
|
||||
inverseJoinColumns = @JoinColumn(name = "user_id")
|
||||
)
|
||||
@JsonBackReference
|
||||
private List<User> users;
|
||||
|
||||
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
|
||||
@JoinTable(
|
||||
name = "product_images",
|
||||
joinColumns = @JoinColumn(name = "image_id"),
|
||||
inverseJoinColumns = @JoinColumn(name = "product_id")
|
||||
)
|
||||
private List<Product> products;
|
||||
}
|
||||
34
api/src/main/java/fr/gameovergne/api/model/app/Platform.java
Normal file
34
api/src/main/java/fr/gameovergne/api/model/app/Platform.java
Normal file
@@ -0,0 +1,34 @@
|
||||
package fr.gameovergne.api.model.app;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
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
|
||||
@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)
|
||||
@JsonManagedReference
|
||||
private List<Product> products;
|
||||
}
|
||||
62
api/src/main/java/fr/gameovergne/api/model/app/Product.java
Normal file
62
api/src/main/java/fr/gameovergne/api/model/app/Product.java
Normal file
@@ -0,0 +1,62 @@
|
||||
package fr.gameovergne.api.model.app;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
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
|
||||
@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_complete")
|
||||
private boolean complete = false;
|
||||
|
||||
@NotNull
|
||||
@Column(name = "product_manual")
|
||||
private boolean manual = false; // Notice
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "category_id")
|
||||
@JsonBackReference
|
||||
private Category category;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "platform_id")
|
||||
@JsonBackReference
|
||||
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 = "product_images",
|
||||
joinColumns = @JoinColumn(name = "image_id"),
|
||||
inverseJoinColumns = @JoinColumn(name = "product_id")
|
||||
)
|
||||
private List<Image> images;
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
package fr.gameovergne.api.model.user;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import fr.gameovergne.api.model.app.Image;
|
||||
import jakarta.validation.constraints.Email;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
@@ -28,26 +30,34 @@ public class User implements UserDetails {
|
||||
private Long id;
|
||||
|
||||
@NotBlank
|
||||
@Column(length = 50, nullable = false)
|
||||
@Column(length = 30, nullable = false)
|
||||
private String firstName;
|
||||
|
||||
@NotBlank
|
||||
@Column(length = 50, nullable = false)
|
||||
@Column(length = 30, nullable = false)
|
||||
private String lastName;
|
||||
|
||||
@NotBlank
|
||||
@Column(length = 50, unique = true, nullable = false)
|
||||
@Column(length = 0)
|
||||
private String username;
|
||||
|
||||
@Email
|
||||
@NotBlank
|
||||
@Column(length = 100, unique = true, nullable = false)
|
||||
@Column(length = 120, unique = true, nullable = false)
|
||||
private String email;
|
||||
|
||||
@NotBlank
|
||||
@Column(length = 120, nullable = false)
|
||||
private String password;
|
||||
|
||||
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
|
||||
@JoinTable(
|
||||
name = "user_images",
|
||||
joinColumns = @JoinColumn(name = "image_id"),
|
||||
inverseJoinColumns = @JoinColumn(name = "user_id")
|
||||
)
|
||||
@JsonBackReference
|
||||
private List<Image> images;
|
||||
|
||||
@NotNull
|
||||
@Enumerated(EnumType.STRING)
|
||||
private Role role = Role.USER;
|
||||
|
||||
Reference in New Issue
Block a user