From 0fb27f8d13244392561f4a91a71f8ee935458761 Mon Sep 17 00:00:00 2001
From: 1yuee <lisnik79@yandex.ru>
Date: Mon, 19 Jun 2023 19:12:35 +0400
Subject: [PATCH] model

---
 .../lab1/lab34/model/Category.java            |  77 +++++++++++++
 .../webproglabs/lab1/lab34/model/Product.java | 103 ++++++++++++++++++
 .../webproglabs/lab1/lab34/model/Shop.java    |  75 +++++++++++++
 .../webproglabs/lab1/lab34/model/User.java    | 100 +++++++++++++++++
 .../lab1/lab34/model/enums/UserRole.java      |  23 ++++
 5 files changed, 378 insertions(+)
 create mode 100644 src/main/java/com/webproglabs/lab1/lab34/model/Category.java
 create mode 100644 src/main/java/com/webproglabs/lab1/lab34/model/Product.java
 create mode 100644 src/main/java/com/webproglabs/lab1/lab34/model/Shop.java
 create mode 100644 src/main/java/com/webproglabs/lab1/lab34/model/User.java
 create mode 100644 src/main/java/com/webproglabs/lab1/lab34/model/enums/UserRole.java

diff --git a/src/main/java/com/webproglabs/lab1/lab34/model/Category.java b/src/main/java/com/webproglabs/lab1/lab34/model/Category.java
new file mode 100644
index 0000000..89bc830
--- /dev/null
+++ b/src/main/java/com/webproglabs/lab1/lab34/model/Category.java
@@ -0,0 +1,77 @@
+package com.webproglabs.lab1.lab34.model;
+
+import javax.persistence.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@Entity
+public class Category {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long Id;
+
+    @Column(unique = true)
+    private String Name;
+
+    @OneToMany(mappedBy = "Category")
+    private List<Product> Products = new ArrayList<>();
+
+    public Category(String Name) {
+        this.Name = Name;
+    }
+
+    public Category(){}
+
+    public Long getId() {
+        return Id;
+    }
+
+    public String getName() {
+        return Name;
+    }
+
+    public List<Product> getProducts() {
+        return Products;
+    }
+
+    public void setName(String Name) {
+        this.Name = Name;
+    }
+
+    public void addProduct(Product Product) {
+        this.Products.add(Product);
+        Product.setCategory(this);
+    }
+
+    public void removeProduct(Product Product) {
+        this.Products.remove(Product);
+        Product.setCategory(null);
+    }
+
+    public void setProducts (List<Product> Products) {
+        this.Products = Products;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Category category = (Category) o;
+        return Objects.equals(Id, category.Id);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(Id);
+    }
+
+    @Override
+    public String toString() {
+        return "Category{" +
+                "Id=" + Id +
+                ", Name='" + Name +
+                '}';
+    }
+}
diff --git a/src/main/java/com/webproglabs/lab1/lab34/model/Product.java b/src/main/java/com/webproglabs/lab1/lab34/model/Product.java
new file mode 100644
index 0000000..7de7d68
--- /dev/null
+++ b/src/main/java/com/webproglabs/lab1/lab34/model/Product.java
@@ -0,0 +1,103 @@
+package com.webproglabs.lab1.lab34.model;
+
+import javax.persistence.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@Entity
+public class Product {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long Id;
+
+    private String Name;
+
+    public Double Cost;
+
+    @ManyToOne()
+    private Shop Shop;
+
+    @ManyToOne()
+    private Category Category;
+
+    @ManyToMany()
+    private List<User> Users = new ArrayList<>();
+
+    public Product (String Name, Double Cost, Shop Shop, Category Category) {
+        this.Name = Name;
+        this.Shop = Shop;
+        this.Cost = Cost;
+        this.Category = Category;
+    }
+
+    public Product(){}
+
+    public Long getId() {
+        return Id;
+    }
+
+    public String getName() {
+        return Name;
+    }
+
+    public Double getCost(){ return Cost; }
+
+    public Shop getShop() {
+        return Shop;
+    }
+
+    public Category getCategory() {
+        return Category;
+    }
+
+    public List<User> getUsers() {
+        return Users;
+    }
+
+    public void setName(String Name) {
+        this.Name = Name;
+    }
+
+    public void setCost(Double Cost) { this.Cost = Cost; }
+
+    public void setShop(Shop Shop) {
+        this.Shop.removeProduct(this);
+        Shop.addProduct(this);
+    }
+
+    public void setCategory(Category Category) {
+        this.Category.removeProduct(this);
+        Category.addProduct(this);
+    }
+
+    public void addUser(User User) {
+        Users.add(User);
+    }
+
+    public void removeUser(User User) {
+        Users.remove(User);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Product product = (Product) o;
+        return Objects.equals(Id, product.Id);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(Id);
+    }
+
+    @Override
+    public String toString() {
+        return "Product{" +
+                "Id=" + Id +
+                ", name='" + Name +
+                '}';
+    }
+
+}
diff --git a/src/main/java/com/webproglabs/lab1/lab34/model/Shop.java b/src/main/java/com/webproglabs/lab1/lab34/model/Shop.java
new file mode 100644
index 0000000..dec2aa9
--- /dev/null
+++ b/src/main/java/com/webproglabs/lab1/lab34/model/Shop.java
@@ -0,0 +1,75 @@
+package com.webproglabs.lab1.lab34.model;
+
+import javax.persistence.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@Entity
+public class Shop {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long Id;
+    @Column(unique = true)
+    private String Name;
+    @OneToMany(mappedBy = "Shop")
+    private List<Product> Products = new ArrayList<>();
+
+    public Shop(String Name) {
+        this.Name = Name;
+    }
+
+    public Shop(){}
+
+    public Long getId() {
+        return Id;
+    }
+
+    public String getName() {
+        return Name;
+    }
+
+    public List<Product> getProducts() {
+        return Products;
+    }
+
+    public void setName(String Name) {
+        this.Name = Name;
+    }
+
+    public void addProduct(Product Product) {
+        this.Products.add(Product);
+        Product.setShop(this);
+    }
+
+    public void removeProduct(Product Product) {
+        this.Products.remove(Product);
+        Product.setShop(null);
+    }
+
+    public void setProducts (List<Product> Products) {
+        this.Products = Products;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Shop shop = (Shop) o;
+        return Objects.equals(Id, shop.Id);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(Id);
+    }
+
+    @Override
+    public String toString() {
+        return "Shop{" +
+                "Id=" + Id +
+                ", Name='" + Name +
+                '}';
+    }
+
+}
diff --git a/src/main/java/com/webproglabs/lab1/lab34/model/User.java b/src/main/java/com/webproglabs/lab1/lab34/model/User.java
new file mode 100644
index 0000000..63a20bf
--- /dev/null
+++ b/src/main/java/com/webproglabs/lab1/lab34/model/User.java
@@ -0,0 +1,100 @@
+package com.webproglabs.lab1.lab34.model;
+
+import com.webproglabs.lab1.lab34.model.enums.UserRole;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@Entity
+@Table(name = "users")
+public class User {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long Id;
+
+    @Column(nullable = false, unique = true, length = 64)
+    @NotBlank
+    @Size(min = 3, max = 32)
+    private String login;
+
+    @Column(nullable = false, length = 64)
+    @NotBlank
+    @Size(min = 6, max = 32)
+    private String Password;
+
+    @ManyToMany(mappedBy = "Users")
+    private List<Product> Products = new ArrayList<>();
+
+    private UserRole Role;
+
+    public User(String login, String password, UserRole role) {
+        this.login = login;
+        this.Password = password;
+        this.Role = role;
+    }
+
+    public User(String Login, String Password) {
+        this(Login, Password, UserRole.USER);
+    }
+
+    public User() {}
+
+    public Long getId() {
+        return Id;
+    }
+
+    public String getLogin() {
+        return login;
+    }
+
+    public void setLogin(String Login) {
+        this.login = Login;
+    }
+
+    public String getPassword() {
+        return Password;
+    }
+
+    public void setPassword(String Password) {
+        this.Password = Password;
+    }
+
+    public List<Product> getProducts() {
+        return Products;
+    }
+
+    public void addProduct(Product Product) {
+        this.Products.add(Product);
+        Product.addUser(this);
+    }
+
+    public void removeProduct(Product Product) {
+        this.Products.remove(Product);
+        Product.removeUser(this);
+    }
+
+    public UserRole getRole() {
+        return Role;
+    }
+
+    public void setRole(UserRole Role) {
+        this.Role = Role;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        User user = (User) o;
+        return Objects.equals(Id, user.Id) && Objects.equals(login, user.login);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(Id, login);
+    }
+}
diff --git a/src/main/java/com/webproglabs/lab1/lab34/model/enums/UserRole.java b/src/main/java/com/webproglabs/lab1/lab34/model/enums/UserRole.java
new file mode 100644
index 0000000..890b042
--- /dev/null
+++ b/src/main/java/com/webproglabs/lab1/lab34/model/enums/UserRole.java
@@ -0,0 +1,23 @@
+package com.webproglabs.lab1.lab34.model.enums;
+
+import org.springframework.security.core.GrantedAuthority;
+
+public enum UserRole implements GrantedAuthority {
+    ADMIN,
+    USER,
+    ;
+
+    private static final String PREFIX = "ROLE_";
+
+    @Override
+    public String getAuthority() {
+        return PREFIX + this.name();
+    }
+
+    public static final class AsString {
+        public static final String ADMIN = PREFIX + "ADMIN";
+        public static final String USER = PREFIX + "USER";
+    }
+}
+
+