Giter Site home page Giter Site logo

win-tech-int's Introduction

win-tech-int

для развертывания проекта выполняем команду docker compose up -d --build

и необходимо подождать 1-2 минуты для установки зависимостей и выполнения миграций

далее приложение принимает запросы по http://localhost

после завершение тестирования выполнить docker compose down --remove-orphans для чистки


Основной стек: php 8.2 Symfony 6.2 Postgres 15 Nginx 1.24


Реализованный функционал:

Пользователь:

POST /api/user/register {"username", "password"} - регистрация пользователя, после которой выдается access token, необходимый для взаимодействия с кошельком

POST /api/user/get-access-token {"username", "password"} - логин пользователя, для повторного получения токена

Данные два урла являются открытыми и к ним могут обращаться без наличия токена


Кошелек:

POST /api/wallet/create {"currency"} - создание кошелька пользователя, если он еще не создан

GET /api/wallet/{id}/balance - получение баланса кошелька (в тз говорилось об обязательном наличии Id кошелька как параметра, поэтому он был добавлен, хотя можно получить соответствующий кошелек по токену пользователя)

POST /api/wallet/{id}/balance {"type", "amount", "currency", "reason"} - метод изменения баланса кошелька, помимо основных требований был добавлен Lock компонент, который исключает возможное состояние гонки, следующий запрос не может приступить к выполнению пока не закончен предыдущий

Для вызова данных эндпоинтов необходимо добавить полученный токен пользователя в Authorization Bearer


Команды:

Чистый SQL запрос для получения суммы по refund за последние 7 дней был обернут в команду для удобства вывода

app:get-sum-for-refund-transactions также можно изменить период выдачи передав опции --for-days="" необходимое значение в днях, по дефолту выставлено 7 дней


Команда для обновления курсов обмена валют

С помощью миграции при развертывании проекта, в бд будут автоматически добавлены две записи для курсов обмена usd -> rub и rub->usd

Далее их можно будет обновить этой командой или создать новые

app:update-exchange-rate имеет обязательные опции --from --to --rate


Тесты:

Также был добавлен unit тест для сервиса AmountConverter, запуск тестов - php vendor/phpunit/phpunit/phpunit


Общие примечания:

Все суммы и курсы хранятся в int умноженное на 100 (хранение в малом разряде - центах, копейках и тд) для более точных вычислений

Для подключения через админку к БД ис-ся следующие креды

  POSTGRES_DB: test
  POSTGRES_PASSWORD: password
  POSTGRES_USER: test

win-tech-int's People

Contributors

dmitriy-kd avatar

Watchers

 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.