Skip to content

Dbatr/AutoService

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Приложение AutoService (Backend)

Это приложение на основе Spring Boot управляет автосервисом, предоставляя функционал для работы с механиками, рабочими местами, заданиями, продуктами и ролями пользователей.

Автор: Батршин Денис Аухадеевич

Содержание

Контроллеры

AssignmentController

  • GET /autoservice/assignments: Получение всех заданий.

    • Описание: Этот эндпоинт возвращает список всех заданий в автосервисе.
    • Параметры запроса: Нет.
    • Ожидаемый ответ: Список объектов заданий.
  • GET /autoservice/assignments/{assignmentId}: Получение задания по ID.

    • Описание: Этот эндпоинт возвращает задание с указанным идентификатором.
    • Параметры запроса: ID задания.
    • Ожидаемый ответ: Объект задания.
  • POST /autoservice/addAssignment: Добавление нового задания.

    • Описание: Этот эндпоинт добавляет новое задание на обслуживание.
    • Параметры запроса: JSON с данными нового задания.
    • Ожидаемый ответ: Объект созданного задания.

MechanicController

  • GET /autoservice/mechanics: Получение всех механиков.

    • Описание: Этот эндпоинт возвращает список всех механиков, зарегистрированных в автосервисе.
    • Параметры запроса: Нет.
    • Ожидаемый ответ: Список объектов механиков.
  • GET /autoservice/mechanics/{mechanicId}: Получение механика по ID.

    • Описание: Этот эндпоинт возвращает информацию о механике с указанным идентификатором.
    • Параметры запроса: ID механика.
    • Ожидаемый ответ: Объект механика.
  • PATCH /autoservice/mechanics/{mechanicId}/onDuty/true: Установка статуса onDuty механика "Да".

    • Описание: Этот эндпоинт устанавливает статус "На службе" для механика с указанным идентификатором.
    • Параметры запроса: ID механика.
    • Ожидаемый ответ: Обновленный объект механика.
  • PATCH /autoservice/mechanics/{mechanicId}/onDuty/false: Установка статуса onDuty механика "Нет".

    • Описание: Этот эндпоинт устанавливает статус "Не на службе" для механика с указанным идентификатором.
    • Параметры запроса: ID механика.
    • Ожидаемый ответ: Обновленный объект механика.
  • POST /autoservice/addMechanic: Добавление нового механика.

    • Описание: Этот эндпоинт добавляет нового механика в систему.
    • Параметры запроса: JSON с данными нового механика.
    • Ожидаемый ответ: Объект созданного механика.
  • PATCH /autoservice/mechanics/{mechanicId}/updateExperienceYears/{newExperienceYears}: Изменение количества лет опыта работы механика.

    • Описание: Этот эндпоинт обновляет количество лет опыта работы механика с указанным идентификатором.
    • Параметры запроса: ID механика, новое количество лет опыта работы (newExperienceYears).
    • Ожидаемый ответ: Сообщение об успешном обновлении или об ошибке, если механик не найден.

ProductController

  • GET /autoservice/orders: Получение всех продуктов/заказов.

    • Описание: Этот эндпоинт возвращает список всех продуктов/заказов, зарегистрированных в системе.
    • Параметры запроса: Нет.
    • Ожидаемый ответ: Список объектов продуктов/заказов.
  • GET /autoservice/orders/{orderId}: Получение продукта/заказа по ID.

    • Описание: Этот эндпоинт возвращает информацию о продукте/заказе с указанным идентификатором.
    • Параметры запроса: ID продукта/заказа.
    • Ожидаемый ответ: Объект продукта/заказа.
  • PATCH /autoservice/orders/{orderId}/complete: Пометка продукта/заказа как завершенного.

    • Описание: Этот эндпоинт устанавливает статус "Завершено" для продукта/заказа с указанным идентификатором.
    • Параметры запроса: ID продукта/заказа.
    • Ожидаемый ответ: Обновленный объект продукта/заказа.
  • PATCH /autoservice/orders/{orderId}/uncomplete: Пометка продукта/заказа как незавершенного.

    • Описание: Этот эндпоинт устанавливает статус "Не завершено" для продукта/заказа с указанным идентификатором.
    • Параметры запроса: ID продукта/заказа.
    • Ожидаемый ответ: Обновленный объект продукта/заказа.
  • POST /autoservice/addOrder: Добавление нового продукта/заказа.

    • Описание: Этот эндпоинт добавляет новый продукт/заказ в систему.
    • Параметры запроса: JSON с данными нового продукта/заказа.
    • Ожидаемый ответ: Объект созданного продукта/заказа.

UserController

  • GET /autoservice/users: Получение всех пользователей.

    • Описание: Этот эндпоинт возвращает список всех зарегистрированных пользователей в системе.
    • Параметры запроса: Нет.
    • Ожидаемый ответ: Список объектов пользователей.
  • GET /autoservice/users/{userId}: Получение пользователя по ID.

    • Описание: Этот эндпоинт возвращает информацию о пользователе с указанным идентификатором.
    • Параметры запроса: ID пользователя.
    • Ожидаемый ответ: Объект пользователя.

WorkspaceController

  • GET /autoservice/workspaces: Получение всех рабочих мест.

    • Описание: Этот эндпоинт возвращает список всех рабочих мест (подъемников) в автосервисе.
    • Параметры запроса: Нет.
    • Ожидаемый ответ: Список объектов рабочих мест.
  • GET /autoservice/workspaces/{workspaceId}: Получение рабочего места по ID.

    • Описание: Этот эндпоинт возвращает информацию о рабочем месте (подъемнике) с указанным идентификатором.
    • Параметры запроса: ID рабочего места.
    • Ожидаемый ответ: Объект рабочего места.
  • PATCH /autoservice/workspaces/{workspaceId}/updateNumberOfWorkplaces/{newNumberOfWorkplaces}: Изменение количества рабочих мест

    • Описание: Этот эндпоинт обновляет количество рабочих мест (подъемников) на указанном рабочем месте.
    • Параметры запроса: ID рабочего места, которое требуется обновить. Новое количество рабочих мест на указанном рабочем месте.
    • Ожидаемый ответ: Обновленный объект рабочего места.

Примеры данных

Пример данных, полученных при запросе GET /autoservice/assignments:

[
    {
        "id": 1,
        "mechanic": {
            "id": 2,
            "firstName": "Дмитрий",
            "lastName": "Козлов",
            "specialization": "Подвеска",
            "experienceYears": 8,
            "onDuty": false,
            "preferredCarBrands": "Немецкие, Французские и Итальянские автомобили"
        },
        "workspace": {
            "id": 3,
            "workspaceName": "Подъемник 1",
            "numberOfWorkplaces": 4,
            "availability": "Занят",
            "workType": "Простая работа",
            "requirements": "Основные инструменты"
        },
        "product": {
            "id": 4,
            "title": "Ольга",
            "lastName": "Новикова",
            "description": "Проверить тормоза",
            "phoneNumber": "999888777",
            "completed": false
        }
    },
  ...
]

Пример данных, полученных при запросе GET /autoservice/mechanics:

[
  {
    "id": 1,
    "firstName": "Алексей",
    "lastName": "Смирнов",
    "specialization": "Двигатель",
    "experienceYears": 5,
    "onDuty": true,
    "preferredCarBrands": "Местные модели, Японские автомобили"
  },
  {
    "id": 2,
    "firstName": "Дмитрий",
    "lastName": "Козлов",
    "specialization": "Подвеска",
    "experienceYears": 8,
    "onDuty": false,
    "preferredCarBrands": "Немецкие, Французские и Итальянские автомобили"
  },
    ...
]

Пример данных, полученных при запросе GET /autoservice/users:

[
    {
        "id": 1,
        "login": "admin@mail.com",
        "password": "$2a$08$dysgE1VFRc0WpbLgpMrp5.eMmBbOBoBulkMFOGDh.NpyT2RBq84h.",
        "firstName": "Администратор",
        "lastName": "Administ",
        "phoneNumber": "89993331234",
        "active": true,
        "roles": [
            "ROLE_ADMIN"
        ],
        "enabled": true,
        "username": "admin@mail.com",
        "authorities": [
            "ROLE_ADMIN"
        ],
        "accountNonLocked": true,
        "accountNonExpired": true,
        "credentialsNonExpired": true
    },
    ...
]

Пример данных, полученных при запросе GET /autoservice/orders:

[
    {
        "id": 1,
        "title": "Алексей",
        "lastName": "Смирнов",
        "description": "Поменять резину",
        "phoneNumber": "123456789",
        "completed": false
    },
    {
        "id": 2,
        "title": "Михаил",
        "lastName": "Иванов",
        "description": "Помыть машину",
        "phoneNumber": "987654321",
        "completed": true
    },
    ...
]

Пример данных, полученных при запросе GET /autoservice/workspaces:

[
  {
    "id": 1,
    "workspaceName": "Главный Бокс",
    "numberOfWorkplaces": 4,
    "availability": "Свободен",
    "workType": "Серьезная работа",
    "requirements": "Подходить для любой работы"
  },
  {
    "id": 2,
    "workspaceName": "Большой Бокс",
    "numberOfWorkplaces": 5,
    "availability": "Занят",
    "workType": "Трудная работа",
    "requirements": "Множество услуг"
  },
    ...
]

Модели

Assignment

Сущность Assignment используется для хранения информации о заданиях в автосервисе. Каждое задание связано с механиком, рабочим местом и продуктом (заказом). Включает следующие атрибуты:

  • id: Уникальный идентификатор задания.
  • mechanic: Связь многие к одному с сущностью Mechanic (Механик). Указывает на механика, выполнение задания которым назначено.
  • workspace: Связь многие к одному с сущностью Workspace (Рабочее место). Указывает на рабочее место, где должно быть выполнено задание.
  • product: Связь многие к одному с сущностью Product (Продукт/Заказ). Указывает на продукт или заказ, для которого создано задание.

Mechanic

Сущность Mechanic представляет информацию о механике в автосервисе. Включает в себя следующие характеристики:

  • id: Уникальный идентификатор механика.
  • firstName: Имя механика.
  • lastName: Фамилия механика.
  • specialization: Специализация механика (например, двигатель, подвеска и т. д.).
  • experienceYears: Количество лет опыта работы механика.
  • onDuty: Флаг, указывающий, находится ли механик в настоящее время на службе.
  • preferredCarBrands: Предпочитаемые марки автомобилей, с которыми работает механик.

Product

Сущность Product представляет информацию о продукте или заказе в автосервисе. Содержит следующие атрибуты:

  • id: Уникальный идентификатор продукта или заказа.
  • title: Имя клиента, размещающего заказ.
  • lastName: Фамилия клиента, размещающего заказ.
  • description: Описание продукта или заказа (может быть текстовым полем для подробного описания).
  • phoneNumber: Номер телефона клиента.
  • completed: Флаг, указывающий, завершен ли заказ (true - завершен, false - не завершен).

User

Сущность User представляет информацию о пользователе в системе автосервиса. Включает в себя следующие характеристики:

  • id: Уникальный идентификатор пользователя.
  • login: Логин пользователя.
  • password: Хэшированный пароль пользователя.
  • firstName: Имя пользователя.
  • lastName: Фамилия пользователя.
  • phoneNumber: Номер телефона пользователя.
  • active: Флаг, указывающий, активен ли пользователь.
  • roles: Роли пользователя в системе (например, ROLE_USER, ROLE_ADMIN).

Workspace

Сущность Workspace описывает рабочее место в автосервисе. Включает следующие атрибуты:

  • id: Уникальный идентификатор рабочего места.
  • workspaceName: Название рабочего места.
  • numberOfWorkplaces: Количество рабочих мест на данном рабочем месте.
  • availability: Доступность рабочего места (свободен, занят и т.д.).
  • workType: Тип выполняемой работы на рабочем месте.
  • requirements: Требования к рабочему месту (например, для каких видов работ подходит).

Конфигурация Безопасности

Конфигурация безопасности управляется в классе SecurityConfig.

  • SecurityFilterChain: Настроен для разрешения доступа к определенным URL-ам без аутентификации.
  • AuthenticationManager: Настроен для управления аутентификацией с использованием предоставленной AuthenticationConfiguration.
  • PasswordEncoder: Настроен для использования BCryptPasswordEncoder с силой шифрования 8.

Репозитории

AssignmentRepository

Репозиторий для работы с заданиями (assignments). Позволяет получать список заданий для конкретного механика.

MechanicRepository

Репозиторий для работы с механиками. Предоставляет базовые операции поиска и сохранения механиков.

ProductRepository

Репозиторий для работы с продуктами (заявками). Позволяет искать продукты по их названию.

UserRepository

Репозиторий для работы с пользователями. В данном контексте используется для поиска пользователя по его логину.

WorkspaceRepository

Репозиторий для работы с рабочими местами. Предоставляет базовые операции поиска и сохранения рабочих мест.

Сервисы

AssignmentService

Сервис для работы с заданиями. Включает методы для инициализации данных, получения всех заданий, создания нового задания и получения задания по его уникальному идентификатору.

CustomUserDetailsService

Сервис для работы с пользователями в контексте Spring Security. Реализует интерфейс UserDetailsService для загрузки информации о пользователе.

MechanicService

Сервис для работы с механиками. Включает методы для инициализации данных, получения всех механиков, создания нового механика и обновления статуса onDuty.

ProductService

Сервис для работы с продуктами (заявками). Включает методы для инициализации данных, получения всех продуктов, создания нового продукта и обновления статуса выполнения.

UserService

Сервис для работы с пользователями. Включает методы для инициализации данных, получения всех пользователей и получения пользователя по его уникальному идентификатору. Использует UserRepository для взаимодействия с базой данных.

WorkspaceService

Сервис для работы с рабочими местами (подъемниками). Включает методы для инициализации данных, получения информации о рабочем месте по его уникальному идентификатору и получения списка всех рабочих мест. Использует WorkspaceRepository для взаимодействия с базой данных.

AutoServiceApplication

Главный класс Spring Boot приложения. Включает метод initializeData, который используется для инициализации тестовых данных при запуске приложения. Зависит от всех вышеперечисленных сервисов.

Запуск приложения

Для запуска приложения убедитесь, что все зависимости удовлетворены, и выполните метод main в классе AutoServiceApplication. При первом запуске метод initializeData создаст тестовые записи в базе данных.

Необходимо также настроить базу данных в файле application.properties перед запуском приложения.

spring.datasource.url=jdbc:mysql://localhost:3306/autoservice
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages