diff --git a/src/main/java/com/example/nto/domain/entity/Employee.java b/src/main/java/com/example/nto/domain/entity/Employee.java new file mode 100644 index 0000000..f667855 --- /dev/null +++ b/src/main/java/com/example/nto/domain/entity/Employee.java @@ -0,0 +1,122 @@ +package com.example.nto.domain.entity; + +import jakarta.persistence.*; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +@Data +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "employees") +public class Employee implements UserDetails { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @Column(name = "name") + @NotBlank(message = "Имя пользователя не может быть пустым!") + @Size(max = 100, message = "Максимальная длина имени 100 символов!") + private String name; + + @Column(name = "surname") + @NotBlank(message = "Фамилия пользователя не может быть пустой!") + @Size(max = 100, message = "Максимальная длина фамилии 100 символов!") + private String surname; + + @Column(name = "patronymic") + @Size(max = 100, message = "Максимальная длина отчества 100 символов!") + private String patronymic; + + @Column(name = "about_me") + @Size(max = 300, message = "Максимальная длина поля 'О себе' 300 символов!") + private String aboutMe; + + @Column(name = "telephone", unique = true) + @NotBlank(message = "Телефон не может быть пустым!") + @Size(max = 20, message = "Максимальная длина телефонного номера 20 символов!") + private String telephone; + + @Column(name = "email", unique = true) + @NotBlank(message = "Email не может быть пустым!") + @Size(max = 255, message = "Максимальная длина email 255 символов") + @Email(message = "Email адрес должен быть в формате user@example.com!") + private String email; + + @Column(name = "password") + @NotBlank(message = "Пароль не может быть пустым!") + @Size(max = 300, message = "Максимальная длина пароля 300 символов!") + private String password; + + // @ManyToOne(fetch = FetchType.EAGER) + // @JoinColumn(name = "office_id", referencedColumnName = "id", nullable = false) + // private Office office; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "pos_id", referencedColumnName = "id", nullable = false) + private Position position; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "role_id", referencedColumnName = "id", nullable = false) + private Role role; + + @Column(name = "profile_image_url", nullable = false) + @Size(max = 300, message = "Максимальная длина адреса изображения 300 символов!") + private String profileImageUrl; + + @CreatedDate + @Column(name = "created_at", columnDefinition = "TIMESTAMP", nullable = false) + private LocalDateTime createdAt; + + // @OneToMany(mappedBy = "employee") + // private List visits = new ArrayList<>(); + + @Override + public Collection getAuthorities() { + return List.of(this.role); + } + + @Override + public String getPassword() { + return ""; + } + + @Override + public String getUsername() { + return this.email; + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } +} diff --git a/src/main/java/com/example/nto/domain/entity/Office.java b/src/main/java/com/example/nto/domain/entity/Office.java new file mode 100644 index 0000000..9d1f7f6 --- /dev/null +++ b/src/main/java/com/example/nto/domain/entity/Office.java @@ -0,0 +1,4 @@ +package com.example.nto.domain.entity; + +public class Office { +} diff --git a/src/main/java/com/example/nto/domain/entity/Position.java b/src/main/java/com/example/nto/domain/entity/Position.java new file mode 100644 index 0000000..3d25e99 --- /dev/null +++ b/src/main/java/com/example/nto/domain/entity/Position.java @@ -0,0 +1,4 @@ +package com.example.nto.domain.entity; + +public class Position { +} diff --git a/src/main/java/com/example/nto/domain/entity/Role.java b/src/main/java/com/example/nto/domain/entity/Role.java new file mode 100644 index 0000000..73c2b81 --- /dev/null +++ b/src/main/java/com/example/nto/domain/entity/Role.java @@ -0,0 +1,37 @@ +package com.example.nto.domain.entity; + +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.security.core.GrantedAuthority; + +import java.util.List; + +@Data +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "roles") +public class Role implements GrantedAuthority { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long id; + + @Column(name = "role_name", unique = true) + @NotBlank(message = "Название роли не может быть пустой!") + @Size(max = 100, message = "Максимальная длина роли 100 символов!") + private String roleName; + + @OneToMany(mappedBy = "role") + private List employees; + + @Override + public String getAuthority() { + return this.roleName; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/nto/domain/entity/Terminal.java b/src/main/java/com/example/nto/domain/entity/Terminal.java new file mode 100644 index 0000000..05503aa --- /dev/null +++ b/src/main/java/com/example/nto/domain/entity/Terminal.java @@ -0,0 +1,4 @@ +package com.example.nto.domain.entity; + +public class Terminal { +} diff --git a/src/main/java/com/example/nto/domain/entity/Visit.java b/src/main/java/com/example/nto/domain/entity/Visit.java new file mode 100644 index 0000000..0f3ad96 --- /dev/null +++ b/src/main/java/com/example/nto/domain/entity/Visit.java @@ -0,0 +1,4 @@ +package com.example.nto.domain.entity; + +public class Visit { +}