feat: added two entities Terminal and Visit

This commit is contained in:
Petr Rudichev 2025-02-18 20:14:30 +03:00
parent 6f49192b40
commit 712f35a2cc
2 changed files with 83 additions and 0 deletions

View File

@ -1,4 +1,48 @@
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.hibernate.annotations.UuidGenerator;
import java.util.List;
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "terminals")
public class Terminal {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "name")
@NotBlank(message = "Название не может быть пустым!")
@Size(max = 100, message = "Максимальная длина названия 100 символов!")
private String name;
// Мне нужна была рандомная генерация кода для терминала, так что я мог сделать кривую реализацию через самописную функцию,
// но боялся, что она будет генерировать не уникальные значения. (я очень смутно представляю, как эта штука работает)
// Код взят отсюда: https://stackoverflow.com/questions/76723290/using-the-new-type-for-uuidgenerator-instead-of-strategy
@UuidGenerator
@NotBlank(message = "Код не может быть пустым!")
@Column(name = "code", nullable = false, unique = true)
private String code;
// todo: Протестировать нужен ли тут каскад тип
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
@JoinColumn(name = "office_id", nullable = false)
private Office office;
@OneToMany(mappedBy = "startTerminal")
private List<Visit> startVisits;
@OneToMany(mappedBy = "endTerminal")
private List<Visit> endVisits;
}

View File

@ -1,4 +1,43 @@
package com.example.nto.domain.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "visits")
public class Visit {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "employee_id", referencedColumnName = "id", nullable = false)
private Employee employee;
@Column(name = "start_visit", columnDefinition = "TIMESTAMP", nullable = false)
private LocalDateTime startVisit;
@Column(name = "end_visit", columnDefinition = "TIMESTAMP")
private LocalDateTime endVisit;
@Column(name = "is_finished", nullable = false)
private boolean isFinished = false;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "start_terminal_id", referencedColumnName = "code", nullable = false)
private Terminal startTerminal;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "end_terminal_id", referencedColumnName = "code")
private Terminal endTerminal;
}