From e8eeb0676c598dd5f3bf8c489f1d4e64da21b4fd Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Tue, 18 Feb 2025 19:45:43 +0300 Subject: [PATCH 01/12] docs: add bd architecture --- readme.md => README.md | 3 +++ static/bd.png | Bin 0 -> 138267 bytes 2 files changed, 3 insertions(+) rename readme.md => README.md (98%) create mode 100644 static/bd.png diff --git a/readme.md b/README.md similarity index 98% rename from readme.md rename to README.md index a393468..5765439 100644 --- a/readme.md +++ b/README.md @@ -1,5 +1,8 @@ # НТО 2024. II отборочный этап. Командные задания — серверная часть +## Схема базы данных +https://www.drawdb.app/editor?shareId=92ab675631181485a028270c35276710 + ## 📖 Предыстория В компании S контроль доступа в офис осуществляется с помощью СКУД (системы контроля управления доступом). На данный момент у каждого сотрудника компании есть карта-пропуск с NFC меткой. А у каждой входной двери есть считыватель с обеих сторон. При поднесении карты к считывателю, дверь открывается, а информация о времени входа или выхода сотрудника фиксируется в базе данных. diff --git a/static/bd.png b/static/bd.png new file mode 100644 index 0000000000000000000000000000000000000000..ac5384f6503b996974049528f345081f3f81c030 GIT binary patch literal 138267 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 Date: Tue, 18 Feb 2025 19:46:56 +0300 Subject: [PATCH 02/12] feat: add period, time and name file utils --- .../com/example/nto/utils/DataFormatType.java | 5 ++ .../java/com/example/nto/utils/Utils.java | 52 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/main/java/com/example/nto/utils/DataFormatType.java create mode 100644 src/main/java/com/example/nto/utils/Utils.java diff --git a/src/main/java/com/example/nto/utils/DataFormatType.java b/src/main/java/com/example/nto/utils/DataFormatType.java new file mode 100644 index 0000000..0c3e92d --- /dev/null +++ b/src/main/java/com/example/nto/utils/DataFormatType.java @@ -0,0 +1,5 @@ +package com.example.nto.utils; + +public enum DataFormatType { + DATE_TIME, DATE, TIME +} diff --git a/src/main/java/com/example/nto/utils/Utils.java b/src/main/java/com/example/nto/utils/Utils.java new file mode 100644 index 0000000..dc7162e --- /dev/null +++ b/src/main/java/com/example/nto/utils/Utils.java @@ -0,0 +1,52 @@ +package com.example.nto.utils; + +import lombok.experimental.UtilityClass; + +import java.time.*; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.UUID; + +@UtilityClass +public class Utils { + private static final DateTimeFormatter DATE_TIME_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + private static final DateTimeFormatter TIME_FORMAT = DateTimeFormatter.ofPattern("HH:mm:ss"); + + public static String profileFileName(long userId) { + return "profile--" + userId; + } + + public static String generateUniqueName() { + return UUID.randomUUID().toString(); + } + + public static String nowTime(DataFormatType type) { + switch (type) { + case DATE_TIME: return LocalDateTime.now().format(DATE_TIME_FORMAT); + case DATE: return LocalDateTime.now().format(DATE_FORMAT); + case TIME: return LocalDateTime.now().format(TIME_FORMAT); + default: return "Произошла ошибка при форматировании даты или времени."; + } + } + public static LocalDateTime period(LocalDateTime dtStart, LocalDateTime dtEnd) { + // Возвращает разницу между двумя LocalDateTime + Period period = Period.between(dtStart.toLocalDate(), dtEnd.toLocalDate()); + Duration duration = Duration.between(dtStart.toLocalTime(), dtEnd.toLocalTime()); + + LocalDate localDate = LocalDate.of(period.getYears(), period.getMonths(), period.getDays()); + LocalTime localTime = LocalTime.of(duration.toHoursPart(), duration.toMinutesPart(), duration.toSecondsPart()); + + return LocalDateTime.of(localDate, localTime); + } + + public static long periods(List> periods) { + // Количество часов за определенные периоды. + long hours = 0; + for (List period : periods) { + if (period.size() != 2) throw new IllegalStateException("Список с периодом должен содержать 2 элемента!"); + hours += Duration.between(period.get(0), period.get(1)).toHours(); + } + return hours; + } +} -- 2.47.1 From acafb78d8720a4e67543a861c66fffa165f053b2 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Tue, 18 Feb 2025 19:47:58 +0300 Subject: [PATCH 03/12] feat: add method convertDistance in Utils --- src/main/java/com/example/nto/utils/Utils.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/example/nto/utils/Utils.java b/src/main/java/com/example/nto/utils/Utils.java index dc7162e..b8bf742 100644 --- a/src/main/java/com/example/nto/utils/Utils.java +++ b/src/main/java/com/example/nto/utils/Utils.java @@ -4,6 +4,8 @@ import lombok.experimental.UtilityClass; import java.time.*; import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -49,4 +51,9 @@ public class Utils { } return hours; } + + public static String convertDistance(float distance) { + if (distance > 1000) return String.format("%.1f", distance / 1000) + " км"; + else return String.format("%.1f", distance) + " м"; + } } -- 2.47.1 From c689526021bd73f8db0ddaf5456b8526e87cced3 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Tue, 18 Feb 2025 20:00:51 +0300 Subject: [PATCH 04/12] move: exception move /domain --- .../nto/{ => domain}/exception/CodeNotFoundException.java | 2 +- .../{ => domain}/exception/EmployeeNotFoundException.java | 2 +- .../exception/SomethingWentWrongException.java | 2 +- .../exception/advice/GlobalExceptionalHandler.java | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) rename src/main/java/com/example/nto/{ => domain}/exception/CodeNotFoundException.java (86%) rename src/main/java/com/example/nto/{ => domain}/exception/EmployeeNotFoundException.java (87%) rename src/main/java/com/example/nto/{ => domain}/exception/SomethingWentWrongException.java (87%) rename src/main/java/com/example/nto/{ => domain}/exception/advice/GlobalExceptionalHandler.java (83%) diff --git a/src/main/java/com/example/nto/exception/CodeNotFoundException.java b/src/main/java/com/example/nto/domain/exception/CodeNotFoundException.java similarity index 86% rename from src/main/java/com/example/nto/exception/CodeNotFoundException.java rename to src/main/java/com/example/nto/domain/exception/CodeNotFoundException.java index 4261e45..4dd9d0b 100644 --- a/src/main/java/com/example/nto/exception/CodeNotFoundException.java +++ b/src/main/java/com/example/nto/domain/exception/CodeNotFoundException.java @@ -1,4 +1,4 @@ -package com.example.nto.exception; +package com.example.nto.domain.exception; public class CodeNotFoundException extends RuntimeException { // Выдаётся, когда код не найден. Нужна, чтобы возвращать клиенту код 401. diff --git a/src/main/java/com/example/nto/exception/EmployeeNotFoundException.java b/src/main/java/com/example/nto/domain/exception/EmployeeNotFoundException.java similarity index 87% rename from src/main/java/com/example/nto/exception/EmployeeNotFoundException.java rename to src/main/java/com/example/nto/domain/exception/EmployeeNotFoundException.java index e8302e8..e65df2b 100644 --- a/src/main/java/com/example/nto/exception/EmployeeNotFoundException.java +++ b/src/main/java/com/example/nto/domain/exception/EmployeeNotFoundException.java @@ -1,4 +1,4 @@ -package com.example.nto.exception; +package com.example.nto.domain.exception; public class EmployeeNotFoundException extends RuntimeException { // Выдаётся, когда работник не найден. Нужна, чтобы возвращать клиенту код 401. diff --git a/src/main/java/com/example/nto/exception/SomethingWentWrongException.java b/src/main/java/com/example/nto/domain/exception/SomethingWentWrongException.java similarity index 87% rename from src/main/java/com/example/nto/exception/SomethingWentWrongException.java rename to src/main/java/com/example/nto/domain/exception/SomethingWentWrongException.java index f295a6a..1971702 100644 --- a/src/main/java/com/example/nto/exception/SomethingWentWrongException.java +++ b/src/main/java/com/example/nto/domain/exception/SomethingWentWrongException.java @@ -1,4 +1,4 @@ -package com.example.nto.exception; +package com.example.nto.domain.exception; public class SomethingWentWrongException extends RuntimeException { // Выдаётся, при непредвиденной ошибке. Нужна, чтобы возвращать клиенту код 400. diff --git a/src/main/java/com/example/nto/exception/advice/GlobalExceptionalHandler.java b/src/main/java/com/example/nto/domain/exception/advice/GlobalExceptionalHandler.java similarity index 83% rename from src/main/java/com/example/nto/exception/advice/GlobalExceptionalHandler.java rename to src/main/java/com/example/nto/domain/exception/advice/GlobalExceptionalHandler.java index c542d49..cbe6965 100644 --- a/src/main/java/com/example/nto/exception/advice/GlobalExceptionalHandler.java +++ b/src/main/java/com/example/nto/domain/exception/advice/GlobalExceptionalHandler.java @@ -1,8 +1,8 @@ -package com.example.nto.exception.advice; +package com.example.nto.domain.exception.advice; -import com.example.nto.exception.CodeNotFoundException; -import com.example.nto.exception.EmployeeNotFoundException; -import com.example.nto.exception.SomethingWentWrongException; +import com.example.nto.domain.exception.CodeNotFoundException; +import com.example.nto.domain.exception.EmployeeNotFoundException; +import com.example.nto.domain.exception.SomethingWentWrongException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ControllerAdvice; -- 2.47.1 From da4fe5439ef3113a3c58700a1e6a25ca416b3268 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Tue, 18 Feb 2025 20:01:18 +0300 Subject: [PATCH 05/12] docs: add bd image in README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5765439..d0d880b 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ ## Схема базы данных https://www.drawdb.app/editor?shareId=92ab675631181485a028270c35276710 +[Архитектура базы данных](static/bd.png) + ## 📖 Предыстория -- 2.47.1 From 6f49192b40cc40281d668f0146b2b0804befd34a Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Tue, 18 Feb 2025 20:02:51 +0300 Subject: [PATCH 06/12] feat: added entity files and create Employee, Role entity (please, sorry for my English gays) --- .../example/nto/domain/entity/Employee.java | 122 ++++++++++++++++++ .../com/example/nto/domain/entity/Office.java | 4 + .../example/nto/domain/entity/Position.java | 4 + .../com/example/nto/domain/entity/Role.java | 37 ++++++ .../example/nto/domain/entity/Terminal.java | 4 + .../com/example/nto/domain/entity/Visit.java | 4 + 6 files changed, 175 insertions(+) create mode 100644 src/main/java/com/example/nto/domain/entity/Employee.java create mode 100644 src/main/java/com/example/nto/domain/entity/Office.java create mode 100644 src/main/java/com/example/nto/domain/entity/Position.java create mode 100644 src/main/java/com/example/nto/domain/entity/Role.java create mode 100644 src/main/java/com/example/nto/domain/entity/Terminal.java create mode 100644 src/main/java/com/example/nto/domain/entity/Visit.java 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 { +} -- 2.47.1 From 712f35a2ccd5eef0e6c5546fb687ce21c4d84094 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Tue, 18 Feb 2025 20:14:30 +0300 Subject: [PATCH 07/12] feat: added two entities Terminal and Visit --- .../example/nto/domain/entity/Terminal.java | 44 +++++++++++++++++++ .../com/example/nto/domain/entity/Visit.java | 39 ++++++++++++++++ 2 files changed, 83 insertions(+) diff --git a/src/main/java/com/example/nto/domain/entity/Terminal.java b/src/main/java/com/example/nto/domain/entity/Terminal.java index 05503aa..d1ff6aa 100644 --- a/src/main/java/com/example/nto/domain/entity/Terminal.java +++ b/src/main/java/com/example/nto/domain/entity/Terminal.java @@ -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 startVisits; + + @OneToMany(mappedBy = "endTerminal") + private List endVisits; } diff --git a/src/main/java/com/example/nto/domain/entity/Visit.java b/src/main/java/com/example/nto/domain/entity/Visit.java index 0f3ad96..58d2f3b 100644 --- a/src/main/java/com/example/nto/domain/entity/Visit.java +++ b/src/main/java/com/example/nto/domain/entity/Visit.java @@ -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; } + -- 2.47.1 From 60023f90c5cc6af5015eef29b48a4d72340934ba Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Tue, 18 Feb 2025 20:17:32 +0300 Subject: [PATCH 08/12] feat: added two entities Office and Position --- .../com/example/nto/domain/entity/Office.java | 64 +++++++++++++++++++ .../example/nto/domain/entity/Position.java | 29 ++++++++- 2 files changed, 92 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/nto/domain/entity/Office.java b/src/main/java/com/example/nto/domain/entity/Office.java index 9d1f7f6..cee9e88 100644 --- a/src/main/java/com/example/nto/domain/entity/Office.java +++ b/src/main/java/com/example/nto/domain/entity/Office.java @@ -1,4 +1,68 @@ package com.example.nto.domain.entity; +import jakarta.persistence.*; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "offices") public class Office { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @Column(name = "name", unique = true) + @NotBlank(message = "Название не может быть пустым!") + @Size(max = 100, message = "Максимальная длина названия 100 символов!") + private String name; + + @Column(name = "description") + @NotBlank(message = "Описание не может быть пустым!") + @Size(max = 300, message = "Максимальная длина описания 300 символов!") + private String description; + + @Column(name = "address") + @NotBlank(message = "Адрес не может быть пустым!") + @Size(max = 200, message = "Максимальный размер адреса 200 символов!") + private String address; + + @Column(name = "latitude") + @NotNull(message = "Широта не может быть пустой!") + private Double latitude; + + @Column(name = "longitude") + @NotNull(message = "Долгота не может быть пустой!") + private Double longitude; + + @Column(name = "logo_image_url") + @NotBlank(message = "Путь к логотипу не может быть пустой!") + @Size(max = 200, message = "Максимальный размер пути к логотипу 200 символов!") + private String linkLogo; + + @Column(name = "telephone") + @Size(max = 20, message = "Максимальная длина телефонного номера 20 символов!") + private String telephone; + + @Column(name = "email") + @Size(max = 255, message = "Максимальная длина email 255 символов") + @Email(message = "Email адрес должен быть в формате user@example.com!") + private String email; + + @OneToMany(mappedBy = "office") + private List employeeList; + + @OneToMany(mappedBy = "office") + private List terminals; } diff --git a/src/main/java/com/example/nto/domain/entity/Position.java b/src/main/java/com/example/nto/domain/entity/Position.java index 3d25e99..61d900e 100644 --- a/src/main/java/com/example/nto/domain/entity/Position.java +++ b/src/main/java/com/example/nto/domain/entity/Position.java @@ -1,4 +1,31 @@ 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 java.util.List; + +@Data +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "positions") public class Position { -} + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @Column(name = "name", unique = true) + @NotBlank(message = "Название не может быть пустым!") + @Size(max = 100, message = "Максимальная длина названия 100 символов!") + private String name; + + @OneToMany(mappedBy = "position") + private List employees; +} \ No newline at end of file -- 2.47.1 From d523be9a7cd583e2d16f554bf62f08edf0084922 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Tue, 18 Feb 2025 20:27:55 +0300 Subject: [PATCH 09/12] feat: added files DTO --- .../java/com/example/nto/dto/entity/OfficeDTO.java | 14 ++++++++++++++ .../com/example/nto/dto/entity/PositionDTO.java | 14 ++++++++++++++ .../com/example/nto/dto/entity/TerminalDTO.java | 14 ++++++++++++++ .../java/com/example/nto/dto/entity/VisitDTO.java | 14 ++++++++++++++ .../nto/dto/entity/employee/EmployeeCreateDTO.java | 13 +++++++++++++ .../nto/dto/entity/employee/EmployeeDTO.java | 14 ++++++++++++++ .../nto/dto/entity/employee/EmployeeItemDTO.java | 14 ++++++++++++++ 7 files changed, 97 insertions(+) create mode 100644 src/main/java/com/example/nto/dto/entity/OfficeDTO.java create mode 100644 src/main/java/com/example/nto/dto/entity/PositionDTO.java create mode 100644 src/main/java/com/example/nto/dto/entity/TerminalDTO.java create mode 100644 src/main/java/com/example/nto/dto/entity/VisitDTO.java create mode 100644 src/main/java/com/example/nto/dto/entity/employee/EmployeeCreateDTO.java create mode 100644 src/main/java/com/example/nto/dto/entity/employee/EmployeeDTO.java create mode 100644 src/main/java/com/example/nto/dto/entity/employee/EmployeeItemDTO.java diff --git a/src/main/java/com/example/nto/dto/entity/OfficeDTO.java b/src/main/java/com/example/nto/dto/entity/OfficeDTO.java new file mode 100644 index 0000000..9bf6ae6 --- /dev/null +++ b/src/main/java/com/example/nto/dto/entity/OfficeDTO.java @@ -0,0 +1,14 @@ +package com.example.nto.dto.entity; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OfficeDTO { +} diff --git a/src/main/java/com/example/nto/dto/entity/PositionDTO.java b/src/main/java/com/example/nto/dto/entity/PositionDTO.java new file mode 100644 index 0000000..b9fe7ba --- /dev/null +++ b/src/main/java/com/example/nto/dto/entity/PositionDTO.java @@ -0,0 +1,14 @@ +package com.example.nto.dto.entity; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PositionDTO { +} diff --git a/src/main/java/com/example/nto/dto/entity/TerminalDTO.java b/src/main/java/com/example/nto/dto/entity/TerminalDTO.java new file mode 100644 index 0000000..ee12cc4 --- /dev/null +++ b/src/main/java/com/example/nto/dto/entity/TerminalDTO.java @@ -0,0 +1,14 @@ +package com.example.nto.dto.entity; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TerminalDTO { +} diff --git a/src/main/java/com/example/nto/dto/entity/VisitDTO.java b/src/main/java/com/example/nto/dto/entity/VisitDTO.java new file mode 100644 index 0000000..688a799 --- /dev/null +++ b/src/main/java/com/example/nto/dto/entity/VisitDTO.java @@ -0,0 +1,14 @@ +package com.example.nto.dto.entity; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class VisitDTO { +} diff --git a/src/main/java/com/example/nto/dto/entity/employee/EmployeeCreateDTO.java b/src/main/java/com/example/nto/dto/entity/employee/EmployeeCreateDTO.java new file mode 100644 index 0000000..f196024 --- /dev/null +++ b/src/main/java/com/example/nto/dto/entity/employee/EmployeeCreateDTO.java @@ -0,0 +1,13 @@ +package com.example.nto.dto.entity.employee; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EmployeeCreateDTO { +} diff --git a/src/main/java/com/example/nto/dto/entity/employee/EmployeeDTO.java b/src/main/java/com/example/nto/dto/entity/employee/EmployeeDTO.java new file mode 100644 index 0000000..2816926 --- /dev/null +++ b/src/main/java/com/example/nto/dto/entity/employee/EmployeeDTO.java @@ -0,0 +1,14 @@ +package com.example.nto.dto.entity.employee; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EmployeeDTO { +} + diff --git a/src/main/java/com/example/nto/dto/entity/employee/EmployeeItemDTO.java b/src/main/java/com/example/nto/dto/entity/employee/EmployeeItemDTO.java new file mode 100644 index 0000000..50a72cc --- /dev/null +++ b/src/main/java/com/example/nto/dto/entity/employee/EmployeeItemDTO.java @@ -0,0 +1,14 @@ +package com.example.nto.dto.entity.employee; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EmployeeItemDTO { +} -- 2.47.1 From 5d754dbfbea018817462ff8b31a74389e5831b25 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Tue, 18 Feb 2025 20:29:39 +0300 Subject: [PATCH 10/12] feat: added files DTO mappers --- src/main/java/com/example/nto/dto/mappers/OfficeMapper.java | 4 ++++ src/main/java/com/example/nto/dto/mappers/PositionMapper.java | 4 ++++ src/main/java/com/example/nto/dto/mappers/TerminalMapper.java | 4 ++++ src/main/java/com/example/nto/dto/mappers/VisitMapper.java | 4 ++++ .../nto/dto/mappers/employee/EmployeeCreateMapper.java | 4 ++++ .../example/nto/dto/mappers/employee/EmployeeItemMapper.java | 4 ++++ .../com/example/nto/dto/mappers/employee/EmployeeMapper.java | 4 ++++ 7 files changed, 28 insertions(+) create mode 100644 src/main/java/com/example/nto/dto/mappers/OfficeMapper.java create mode 100644 src/main/java/com/example/nto/dto/mappers/PositionMapper.java create mode 100644 src/main/java/com/example/nto/dto/mappers/TerminalMapper.java create mode 100644 src/main/java/com/example/nto/dto/mappers/VisitMapper.java create mode 100644 src/main/java/com/example/nto/dto/mappers/employee/EmployeeCreateMapper.java create mode 100644 src/main/java/com/example/nto/dto/mappers/employee/EmployeeItemMapper.java create mode 100644 src/main/java/com/example/nto/dto/mappers/employee/EmployeeMapper.java diff --git a/src/main/java/com/example/nto/dto/mappers/OfficeMapper.java b/src/main/java/com/example/nto/dto/mappers/OfficeMapper.java new file mode 100644 index 0000000..193555d --- /dev/null +++ b/src/main/java/com/example/nto/dto/mappers/OfficeMapper.java @@ -0,0 +1,4 @@ +package com.example.nto.dto.mappers; + +public class OfficeMapper { +} diff --git a/src/main/java/com/example/nto/dto/mappers/PositionMapper.java b/src/main/java/com/example/nto/dto/mappers/PositionMapper.java new file mode 100644 index 0000000..486b848 --- /dev/null +++ b/src/main/java/com/example/nto/dto/mappers/PositionMapper.java @@ -0,0 +1,4 @@ +package com.example.nto.dto.mappers; + +public class PositionMapper { +} diff --git a/src/main/java/com/example/nto/dto/mappers/TerminalMapper.java b/src/main/java/com/example/nto/dto/mappers/TerminalMapper.java new file mode 100644 index 0000000..168c442 --- /dev/null +++ b/src/main/java/com/example/nto/dto/mappers/TerminalMapper.java @@ -0,0 +1,4 @@ +package com.example.nto.dto.mappers; + +public class TerminalMapper { +} diff --git a/src/main/java/com/example/nto/dto/mappers/VisitMapper.java b/src/main/java/com/example/nto/dto/mappers/VisitMapper.java new file mode 100644 index 0000000..8d969c8 --- /dev/null +++ b/src/main/java/com/example/nto/dto/mappers/VisitMapper.java @@ -0,0 +1,4 @@ +package com.example.nto.dto.mappers; + +public class VisitMapper { +} diff --git a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeCreateMapper.java b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeCreateMapper.java new file mode 100644 index 0000000..408eae4 --- /dev/null +++ b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeCreateMapper.java @@ -0,0 +1,4 @@ +package com.example.nto.dto.mappers.employee; + +public class EmployeeCreateMapper { +} diff --git a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeItemMapper.java b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeItemMapper.java new file mode 100644 index 0000000..1fffbe6 --- /dev/null +++ b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeItemMapper.java @@ -0,0 +1,4 @@ +package com.example.nto.dto.mappers.employee; + +public class EmployeeItemMapper { +} diff --git a/src/main/java/com/example/nto/dto/mappers/employee/EmployeeMapper.java b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeMapper.java new file mode 100644 index 0000000..5d3b16b --- /dev/null +++ b/src/main/java/com/example/nto/dto/mappers/employee/EmployeeMapper.java @@ -0,0 +1,4 @@ +package com.example.nto.dto.mappers.employee; + +public class EmployeeMapper { +} -- 2.47.1 From 437924a563e4f52b1c1ddd9430fde70ce20a0af4 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Tue, 18 Feb 2025 20:34:12 +0300 Subject: [PATCH 11/12] feat: added EmployeeDTO --- .../nto/dto/entity/employee/EmployeeDTO.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/main/java/com/example/nto/dto/entity/employee/EmployeeDTO.java b/src/main/java/com/example/nto/dto/entity/employee/EmployeeDTO.java index 2816926..450d94b 100644 --- a/src/main/java/com/example/nto/dto/entity/employee/EmployeeDTO.java +++ b/src/main/java/com/example/nto/dto/entity/employee/EmployeeDTO.java @@ -5,10 +5,47 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + @Data @Builder @NoArgsConstructor @AllArgsConstructor public class EmployeeDTO { + private long id; + private String name; + private String surname; + private String patronymic; + private String telephone; + private String email; + + private long officeId; + private String officeName; + private String officeImageUrl; + + private String position; // Название должности + private String role; // строка либо ROLE_USER, либо ROLE_ADMIN + + private String profileImageUrl; + + // Текущее состояние входа: false - visit (посещение) ещё не началось, true - visit идёт + private boolean visitStatus; + + // Если visitStatus true, то возвращает дату и время начала посещения в формате LocalDateTime.toString(), + // превратить обратно можно с помощью LocalDateTime.parse(). + // Если visitStatus false, то возвращает null. + private String startVisitDateTime; + private List visitsIdLast30Days; // Список Id посещений за последние 30 дней. + + // Возвращает количество отработанных часов за последний месяц. + private long totalTimeVisitsLast30Days; + + // (Возможно это стоит убрать) Название офиса, в котором сейчас находится работник. + // Если visitStatus false, возвращает null. + private String currentOfficeName; + + // Возвращает время регистрации в формате LocalDateTime.toString(), + // превратить обратно можно с помощью LocalDateTime.parse(). + private String createAt; } -- 2.47.1 From 5da22577c764eaf0a23de7df1c1f6578de1366a8 Mon Sep 17 00:00:00 2001 From: Petr Rudichev Date: Tue, 18 Feb 2025 20:34:43 +0300 Subject: [PATCH 12/12] feat: added PositionDTO, TerminalDTO, VisitDTO --- .../com/example/nto/dto/entity/PositionDTO.java | 8 ++++++++ .../com/example/nto/dto/entity/TerminalDTO.java | 9 +++++++++ .../java/com/example/nto/dto/entity/VisitDTO.java | 13 +++++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/main/java/com/example/nto/dto/entity/PositionDTO.java b/src/main/java/com/example/nto/dto/entity/PositionDTO.java index b9fe7ba..7a9e265 100644 --- a/src/main/java/com/example/nto/dto/entity/PositionDTO.java +++ b/src/main/java/com/example/nto/dto/entity/PositionDTO.java @@ -1,14 +1,22 @@ package com.example.nto.dto.entity; +import com.example.nto.dto.entity.employee.EmployeeItemDTO; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + @Data @Builder @NoArgsConstructor @AllArgsConstructor public class PositionDTO { + private long id; + private String name; + + // Список всех сотрудников с этой должностью. + private List employeeItemDTOList; } diff --git a/src/main/java/com/example/nto/dto/entity/TerminalDTO.java b/src/main/java/com/example/nto/dto/entity/TerminalDTO.java index ee12cc4..9f3b89c 100644 --- a/src/main/java/com/example/nto/dto/entity/TerminalDTO.java +++ b/src/main/java/com/example/nto/dto/entity/TerminalDTO.java @@ -11,4 +11,13 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor public class TerminalDTO { + private long id; + private String name; + + // ОЧЕНЬ ВАЖНО!!! При создании терминала code не нужен, но отправлять его нужно. + // При создании пиши вместо code, что хочешь он будет просто игнорироваться. + // Мне просто очень лень делать отдельный TerminalCreateDTO ради одного поля. + + private String code; + private String officeName; } diff --git a/src/main/java/com/example/nto/dto/entity/VisitDTO.java b/src/main/java/com/example/nto/dto/entity/VisitDTO.java index 688a799..442963a 100644 --- a/src/main/java/com/example/nto/dto/entity/VisitDTO.java +++ b/src/main/java/com/example/nto/dto/entity/VisitDTO.java @@ -11,4 +11,17 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor public class VisitDTO { + private long id; + + // Возвращается время начала и конца посещения в формате LocalDateTime.toString(), + // превратить обратно можно с помощью LocalDateTime.parse(). + private String startVisit; + private String endVisit; + + private boolean isFinished; + + // Возвращается длительность посещения в формате LocalDateTime.toString(), + // превратить обратно можно с помощью LocalDateTime.parse(). + private String durationVisit; + private String officeName; } -- 2.47.1