Giter Site home page Giter Site logo

documentaccounting2's Introduction

Проект для работы с документами

Deploy to Yandex Cloud Maintainability

Возможности приложения

  • при запуске автоматически создаются два пользователя с ролями "администратор" и "модератор"
  • регистрация и авторизации пользователей с присвоением роли "пользователь"
  • создание авторизованными пользователями новых документов, загрузка файлов, редактирование и удаление
  • настройка области видимости созданных\загруженных сущностей - "публичный" или "виден только определённым пользователям", по умолчанию созданная сущность видна только автору или администатору
  • добавлены ограничения для редактирования данных и удаление сущностей:
    • это доступно только автору или администратору
    • пользователю доступны для редактирования не все поля(например, только администратор может изменить автора документа)
  • добавлен поиск по всем основным полям сущностей, сортировка отображения по полям, способ сортировки(по возрастанию или обратный), пагинация при поиске
  • есть возможность редактирования пользователя:
    • для роли "пользователь" доступны основные поля для редактрования и удаление только своих данных из базы
    • для роли "администратор" доступно полное редактирование полей пользователя, включая присвоение тому новых ролей, а также удаление любыз пользователейиз базы
  • реализована возможность добавлять адрес для пользователя с использованием external-API(сервиса Dadata)
  • добавлена фронтенд-часть для взаимодействия с пользователем

Список изменений в проекте

Использующиеся технологии

  • Фреймворк: Spring Boot
  • Аутентификация: Spring Security, JWT-токен
  • Работа с базой данных Spring Data JPA-Hibernate
  • Менеджеры транзакций: JpaTransactionManager, DataSourceTransactionManager
  • Автоматический маппинг: Mapstruct, JsonNullable, Jackson
  • Шаблон проектирования: DTO
  • Сокращение шаблонного кода: Lombok
  • Поиск, сортировка сущностей из БД: JPA Criteria API, JPQL
  • Работа с файлами: Apache FileUpload
  • Работа с миниатюрами файлов: Thumbnails, Apache pdfbox
  • Общий обработчик ошибок реализован через метод: AOP
  • Документация по API-приложения: Springdoc Openapi, Swagger
  • Тесты: JUnit 5, MockWebserver, Mockito
  • Базы данных и управление миграциями: PostgresSQL, Liquibase
  • Подключенный клиент внешней API: DaData
  • Среды разработки: development, test, production
  • Выполнение разработки возможно, как при подключении локальной БД PostgresSQL, так и через Docker Compose
  • Настроены конфиг файлы для работы приложения через Minikube(папка k8s)
  • Развертывание в production: Docker, Docker Compose, Yandex Cloud
  • Задеплоено на виртуальную машину на серверах Яндекса
  • Для редеплоя используются два способа - локальный через bash-скрипты, удаленный через GitHub Actions
  • Фронтенд-часть: HTML + CSS + JS

Инструкция по локальному развертыванию

  • при использовании локальной базы данных

Создать БД с атрибутами:

name: docs
user: ivan
password: password

Или изменить данные значения в файле application-development.properties на свои

  • при запуске через Docker Compose

  • Прежде всего, скачайте Docker Desktop, установите и запустите его.

  • Расскоментируйте значения конфигарции подключения к БД в файле application-development.properties с пометкой data for start in docker-compose и закомендируйте/удалите текущие данные

  • Проверьте открыт ли порт 5432 для работы Docker, например командой(для Linux) sudo netstat -tulpn,

    • если порт уже прослушивается, убейте процесс командой sudo kill -9 <PID-процесса>
  • Поднимите приложение командой:

sudo docker-compose up --build -d
или
make run

При первом запуске процесс может быть долгим, далее он будет быстрее.

  • при запуске через Minikube

    • Нужно иметь утсановленный Docker desktop или Docker engine
    • Вы должны установить Minikube и утилиту Kubectl(проверьте их работу командами minikube и kubectl - должен быть вывод с информацией о командах).
    • Расскоментируйте значения конфигарции подключения к БД в файле application-development.properties с пометкой data for start in docker-compose и закомендируйте/удалите текущие данные
    • Запустите кластер командой minikube start --driver=docker (или используйте другой драйвер, подробнее - в оф. документации)
    • Проверьте успешность создания кластера командой kubectl get all - если все ок, будет выведена информация о кластере-кубернетиса
    • Находясь в корне проекта запустите манифесты для создания контейнеров в миникубе
kubectl apply -f ./k8s/pv-postgres.yaml
kubectl apply -f ./k8s/pvc-postgres.yaml
kubectl apply -f ./k8s/deployment-postgres.yaml
kubectl apply -f ./k8s/service-postgres.yaml
kubectl apply -f ./k8s/deployment-spring-boot.yaml
kubectl apply -f ./k8s/service-spring-boot.yaml
  • Проверьте запустились все контейнеры kubectl get all
  • Дождитесь, пока статус подов с деплойментов контейнеров(бекенд и БД) будет Running
  • Откройте в отдельном терминале тунельное соединение к бекенд контейнеру командой minikube tunnel ВАЖНО! Чтоб внешнее подключение работало, терминал с туннелем нельзя закрывавть!
  • kubectl get all, найдите EXTERNAL-IP и PORTS в выведенной информации
  • перейдите по адресу, для подключения к приложению, в моем случае это было 127.0.0.1:80

Дополнительная информация

Документация по API/Swagger доступены по адресам при запущенном приложении

localhost:8080/v3/api-docs
localhost:8080/swagger-ui/index.html

Для входа под админом, используйте данные:

username: admin
password: password

Текущие баги или критические недоработки указаны в разделе Issues
Обо всех моментах, уточнениях, пожелания или идеях по улучшению проекта, пишите мне в телеграм

documentaccounting2's People

Contributors

degtevuwu avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.