- •Цель работы
- •Теоретическая часть
- •Слоистая архитектура
- •Ключевые понятия
- •Ход выполнения работы
- •Часть 0. Подготовка
- •Часть 1. Подключение Spring Data JPA и PostgreSQL
- •Часть 2. Создание сущностей и перечислений
- •2.1. Создайте перечисления NotificationChannel и NotificationStatus
- •2.2. Создайте сущность User
- •2.3. Создайте сущность Notification
- •Часть 3. Создание DTO и репозиториев
- •3.1. DTO для User
- •3.2. DTO для Notification
- •3.3. Создайте репозитории
- •Часть 4. Реализация CRUD для User
- •4.1. Создайте UserService
- •4.2. Создайте UserController
- •Часть 5. Реализация CRUD для Notification
- •5.1. Создайте NotificationService
- •5.2. Создайте NotificationController
- •5.3. Проверьте работу CRUD-операций для Notification
- •Часть 6. Методы репозитория Spring Data JPA
- •6.1. Запрос по нескольким параметрам
- •6.2. Сортировка в имени метода
- •6.3. Использование @Query
- •Часть 7. Транзакции
- •Часть 8. Проверка работы приложения в Postman
- •Часть 9. Валидация данных
- •Самостоятельные задания
- •Контрольные вопросы
Часть 3. Создание DTO и репозиториев
3.1. DTO для User
package org.example.model.dto;
import lombok.AllArgsConstructor; import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor public class UserDto {
private String name;
private String email;
private String phone;
private String deviceToken;
private String telegramChatId;
private LocalDateTime createdAt;
}
3.2. DTO для Notification
package org.example.model.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.Setter;
import org.example.model.enums.NotificationChannel; import org.example.model.enums.NotificationStatus;
import java.time.LocalDateTime;
7
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class NotificationDto {
@NotBlank(message = "Заголовок не должен быть пустым") private String title;
@NotBlank(message = "Текст сообщения не должен быть пустым") private String message;
@NotNull(message = "Канал обязателен") private NotificationChannel channel;
private NotificationStatus status;
private LocalDateTime createdAt;
private LocalDateTime sentAt;
@NotNull(message = "Идентификатор получателя обязателен") private Long recipientId;
}
3.3. Создайте репозитории
package org.example.repository;
import org.example.model.entity.User;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
package org.example.repository;
import org.example.model.entity.Notification; import org.example.model.enums.NotificationChannel; import org.example.model.enums.NotificationStatus;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository;
import java.util.List;
8
