- •Цель работы
- •Теоретическая часть
- •Слоистая архитектура
- •Ключевые понятия
- •Ход выполнения работы
- •Часть 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. Валидация данных
- •Самостоятельные задания
- •Контрольные вопросы
@Repository
public interface NotificationRepository extends JpaRepository<Notification, Long> {
List<Notification> findByStatus(NotificationStatus status);
List<Notification> findByChannel(NotificationChannel channel);
List<Notification> findByRecipientId(Long recipientId);
}
Часть 4. Реализация CRUD для User
4.1. Создайте UserService
package org.example.service;
import lombok.RequiredArgsConstructor; import org.example.model.dto.UserDto; import org.example.model.entity.User;
import org.example.repository.UserRepository; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.util.List;
@Service
@RequiredArgsConstructor public class UserService {
private final UserRepository userRepository;
public User createUser(UserDto request) { User user = new User(); user.setName(request.getName()); user.setEmail(request.getEmail()); user.setPhone(request.getPhone());
user.setDeviceToken(request.getDeviceToken());
user.setTelegramChatId(request.getTelegramChatId());
user.setCreatedAt(LocalDateTime.now()); return userRepository.save(user);
}
public List<User> getAllUsers() { return userRepository.findAll();
}
public User getUserById(Long id) {
return userRepository.findById(id).orElseThrow();
}
9
public User updateUser(Long id, UserDto request) {
User user = userRepository.findById(id).orElseThrow(); user.setName(request.getName()); user.setEmail(request.getEmail()); user.setPhone(request.getPhone()); user.setDeviceToken(request.getDeviceToken()); user.setTelegramChatId(request.getTelegramChatId()); return userRepository.save(user);
}
public void deleteUser(Long id) {
User user = userRepository.findById(id).orElseThrow(); userRepository.delete(user);
}
}
4.2. Создайте UserController
package org.example.controller;
import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.example.model.dto.UserDto; import org.example.model.entity.User; import org.example.service.UserService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController @RequestMapping("/users") @RequiredArgsConstructor public class UserController {
private final UserService userService;
@PostMapping("/add")
public UserDto createUser(@RequestBody @Valid UserDto request) { User response = userService.createUser(request);
return UserDto.builder()
.name(response.getName())
.email(response.getEmail())
.phone(response.getPhone())
.telegramChatId(response.getTelegramChatId())
.deviceToken(response.getDeviceToken())
.createdAt(response.getCreatedAt())
.build();
}
10
@GetMapping("/all")
public List<UserDto> getAllUsers() {
return userService.getAllUsers().stream()
.map(r -> UserDto.builder()
.name(r.getName())
.email(r.getEmail())
.phone(r.getPhone())
.telegramChatId(r.getTelegramChatId())
.deviceToken(r.getDeviceToken())
.createdAt(r.getCreatedAt())
.build())
.toList();
}
@GetMapping("/{id}")
public UserDto getUserById(@PathVariable Long id) { User response = userService.getUserById(id); return UserDto.builder()
.name(response.getName())
.email(response.getEmail())
.phone(response.getPhone())
.telegramChatId(response.getTelegramChatId())
.deviceToken(response.getDeviceToken())
.createdAt(response.getCreatedAt())
.build();
}
@PutMapping("/{id}")
public UserDto updateUser(@PathVariable Long id, @RequestBody @Valid UserDto request) {
User response = userService.updateUser(id, request); return UserDto.builder()
.name(response.getName())
.email(response.getEmail())
.phone(response.getPhone())
.telegramChatId(response.getTelegramChatId())
.deviceToken(response.getDeviceToken())
.createdAt(response.getCreatedAt())
.build();
}
@DeleteMapping("/{id}")
public String deleteUser(@PathVariable Long id) { userService.deleteUser(id);
return String.format("Пользователь %s удален", id);
}
}
4.3.Проверьте работу CRUD-операций для User
•POST http://localhost:8080/users/add
11
