Бэкенд сервис для небольшого онлайн магазина, написанный на языке программирования Golang. Проект представляет собой MVP в виде монолита. Функциоанльность реализована в виде REST API. В связи с простотой и распространенностью, широким функционалом, а также потому что большинство контрибуторов уже ранее работали с ним, в качестве роутера был выбран gin-gonic/gin. В будущем при увеличении нагрузки возможен переход на более производительные роутеры, например fasthttp. По тем же причинам в качестве основной СУБД для хранения данных сервиса была выбрана реляционная СУБД Postgresql. В текущей реализации возможностей данной СУБД достаточно, большинство контрибуторов знакомы с этой базой данных, что позволило ускорить процесс разработки. Для увеличения отзывчивости сервиса реализован кэш на основе key-value базы данных Redis. Кэш используется в наиболее частых и тяжелых операциях - таких как выведение списка категорий и товаров. Для логирования командой был выбран логгер zap за его широкий функционал, высокую скорость работы и понятную документацию. Для мониторинга сервиса используется связка из контейнеров prometheus для сбора метрик и grafana для их отображения. При разработке сервиса по возможности применялись принципы чистой архитектуры. Реализованы юнит тесты для большинства систем и интеграционные тесты базы данных.
/user/create
, метод POST)/user/login
, метод POST)/user/login/google
, метод GET)/user/logout
, метод GET)/items/list
, метод GET), в том числе с возможностью задать ограничения по оффсету, лимиту, и параметры для сортировки (есть возможность сортировки по имени и по цене, по возрастанию и по убыванию, для этого эндпоинт дополняется парметрами вида:
/items/list/?offset=0&limit=10&sortType=name&sortOrder=asc
)categories/list
, метод GET)items/{itemID}
, метод GET)/items/?param=categoryName&offset=20&limit=10&sort_type=name&sort_order=asc
, также с возможностью сортировки и ограничения по количеству (sort_type == name or price, sort_order == asc or desc), метод GET)/items/?param=searchRequest&offset=20&limit=10&sort_type=name&sort_order=asc
, также с возможностью сортировки и ограничения по количеству (sort_type == name or price, sort_order == asc or desc), метод GET)/items/quantity
, метод GET)/items/quantityCat/{categoryName}
, метод GET)/items/quantitySearch/{searchRequest}
, метод GET)/user/profile
, метод GET)/user/profile/edit
, метод PUT)/items/addFavItem/
, метод POST)/items/favList?param=userIDt&offset=20&limit=10&sort_type=name&sort_order=asc
(sort_type == name or price, sort_order == asc or desc), метод GET)/items/deleteFav/{userID}/{itemID}
, метод DELETE)/cart/create/{userID}
, метод POST)/cart/addItem
метод PUT)/cart/delete/{cartID}/{itemID}
, метод DELETE)/cart/{cartID}
, метод GET)/cart/byUser/{userID}
, метод GET)/cart/delete/{cartID}
, метод DELETE)/order/create
, метод POST)/order/{orderID}
, метод GET)/order/list/{userID}
, метод GET)/order/changeaddress
, метод PATCH)/user/role/update
, метод PUT)/user/createRights
, метод POST)/user/rights/list
, метод GET)/categories/create
, метод POST)/categories/{categoryID}
, метод PUT)/categories/image/upload/{categoryID}
, метод POST)/categories/image/delete
, метод DELETE)/categories/delete/{categoryID}
, метод DELETE)/items/create
, метод POST)/items/update
, метод PUT)/items/image/upload/:itemID
, метод POST)/items/image/delete?id=25f32441-587a-452d-af8c-b3876ae29d45&name=20221209194557.jpeg
, метод DELETE)/items/delete/{itemID}
, метод DELETE)/order/delete/{orderID}
, метод DELETE)/order/changestatus
, метод PATCH)/images/list
, метод GET)Авторизация на сервисе осуществляется с помощью JWT токенов. Кэш создается при запуске сервиса, также при запуске создаются права пользователя и админа и создается пользователь с правами администратора. Данные для создания администратора задаются через переменные окружения. По умолчанию это admin@mail.ru
и 12345678
. Завершение работы сервиса организовано с использованием принципов graceful shutdown.
Благодаря пользователю ZavNatalia практически весь функционал данного сервиса можно удобно протестировать с помощью графического интерфейса
Документирование сервиса осуществляется с помощью библиотеки swaggo.
git clone https://github.com/GBteammates/OnlineShopBackend.git
make test
make up-win
, после окончания процесса установки и сборки переходим в любой удобный браузер и в адресной строке вводим http://localhost:3000, для просмотра данных мониторинга вводим в адресной строке браузера http://localhost:3001, попадаем на страницу входа в Grafana. По умолчанию логин admin
пароль admin
, после первого ввода будет предложено сменить. Можно сменить или пропустить.make up-lin
, после окончания процесса установки и сборки переходим в любой удобный браузер и в адресной строке вводим http://localhost:3000, для просмотра данных мониторинга вводим в адресной строке браузера http://localhost:3001, попадаем на страницу входа в Grafana. По умолчанию логин admin
пароль admin
, после первого ввода будет предложено сменить. Можно сменить или пропустить.make up
или, если утилита make не установлена, вводим docker-compose up -d
Для остановки сервиса наберите make down
или docker-compose down
.
Сервис запущен по адресу: http://cozydragon.online/
Сервис распространяется по лицензии MIT.