### Чирцов Т А Группа 1.1

# Отчет по лабораторной работе "Task Management System"

## Описание работы
В ходе выполнения работы был создан RESTful веб-сервис для управления задачами с использованием Spring Boot. Приложение поддерживает базовые CRUD-операции: создание, редактирование, удаление и просмотр задач.

## Ход выполнения
1. **Создание проекта:**
    - Проект был создан с помощью Spring Initializr с выбранными зависимостями: `Spring Web`, `Spring Data JPA`, `H2 Database`, `Spring Security`.
    - Проект был импортирован в среду разработки IntelliJ IDEA.

2. **Создание модели задачи:**
    - Создан класс `Task` с полями `id`, `title`, `description`, `status`, `createdAt`.
    - Для аннотаций использовались `@Entity`, `@Id`, `@GeneratedValue(strategy = GenerationType.IDENTITY)`, `@Column`.
    - Добавлены геттеры, сеттеры и методы `equals`, `hashCode`, `toString` для корректного сравнения объектов.

3. **Создание репозитория:**
    - Создан интерфейс `TaskRepository`, который наследуется от `JpaRepository` для доступа к данным базы.

4. **Создание контроллера:**
    - Создан класс `TaskController` с аннотацией `@RestController` и маршрутами CRUD операций.
    - Методы контроллера:
        - `@GetMapping("/api/tasks")` — получение списка всех задач.
        - `@PostMapping("/api/tasks")` — добавление новой задачи.
        - `@PutMapping("/api/tasks/{id}")` — обновление задачи по ID.
        - `@DeleteMapping("/api/tasks/{id}")` — удаление задачи по ID.
    - Добавлена обработка ошибок с возвратом корректных HTTP-кодов (`404 Not Found`, `201 Created`, `200 OK`, `204 No Content`).

5. **Настройка базы данных:**
    - Настроен файл `application.yml` для использования базы данных H2 в режиме "in-memory".
    - Включена консоль H2 для проверки данных по адресу [http://localhost:8080/h2-console](http://localhost:8080/h2-console).

6. **Добавление безопасности:**
    - В `pom.xml` добавлена зависимость `spring-boot-starter-security`.
    - Создан класс `SecurityConfig` для настройки базовой аутентификации.
    - В `SecurityConfig`:
        - Включена `HTTP Basic` аутентификация.
        - Добавлен пользователь с логином `admin` и паролем `admin123`.
        - Для упрощения тестирования CSRF защита была отключена.

## Результаты тестирования
Тестирование проводилось с использованием Postman. Были протестированы следующие эндпоинты:

1. **Создание задачи (POST /api/tasks)**:
   ```json
   {
       "title": "First Task",
       "description": "Description of the first task",
       "status": "Pending"
   }
   ```
   **Результат:** HTTP 201 Created, задача успешно добавлена.

2. **Получение всех задач (GET /api/tasks)**:
   **Результат:** HTTP 200 OK, возвращается список задач.

3. **Обновление задачи (PUT /api/tasks/1)**:
   ```json
   {
       "title": "Updated Task",
       "description": "Updated description",
       "status": "Completed"
   }
   ```
   **Результат:** HTTP 200 OK, данные задачи обновлены.

4. **Удаление задачи (DELETE /api/tasks/1)**:
   **Результат:** HTTP 204 No Content, задача успешно удалена.

5. **Получение несуществующей задачи:**
   **Результат:** HTTP 404 Not Found.

## Выводы
В ходе работы было создано полноценное RESTful-приложение с поддержкой аутентификации и всех CRUD операций для управления задачами. Настроена база данных H2 и реализована базовая защита через Spring Security.

Для тестирования использовались запросы через Postman и проверка базы данных через консоль H2.


## Скриншоты
![task1.png](images/task1.png)
![task2.png](images/task2.png)
![controller1.png](images/controller1.png)
![controller2.png](images/controller2.png)
![application.png](images/application.png)