Сделать простую реализацию сервиса тарификации услуг сотовой связи (минут звонков и гигабайт интернета).
Сервис должен позволять:
- Начислять пакеты минут и гигабайтов, имеющих время жизни
- Расходовать (вычитать) минуты и гигабайты из пакета
- Получать количество доступных минут и гигабайт
- Активировать и блокировать сим-карты
Технологии для использования:
- Spring Boot
- Gradle
- Любая встраиваемая СУБД
- Любые другие библиотеки
Код должен быть опубликован на github и содержать всё необходимое для работы с приложением описание.
Решение должно быть реализовано в виде самостоятельного jar файла и не должно требовать каких-либо других зависимостей для запуска.
Ожидается высокая степень покрытия тестами.
- При старте приложения база наполняется тестовыми данными
- Используется Java 8
- В проекте настроены две системы сборки: Maven & Gradle
- Скомпилировать проект (включить Annotation Processor для Lombok и поставить Lombok Plugin для IDEA)
- Запустить из IDE через MobileServicesApplication#main или после сборки Gradle bootJar из build/libs с помощью java -jar mobile-services-1.0.jar
- Запустить из IDE через MobileServicesApplication#main или после сборки Maven package из target с помощью java -jar mobile-services-1.0.jar
- WebUI для встроенной базы данных: http://localhost:8080/h2-console/
- JDBC Url: jdbc:h2:mem:test
- User: sa
- Password:
- API доступно на порту 8080
Метод | Тело запроса | Адрес | Описание |
---|---|---|---|
GET | пусто | localhost:8080/api/v1/sim-card/${номер_телефона}/ |
Получить сим-карту (обьект) |
GET | пусто | localhost:8080/api/v1/sim-card/${номер_телефона}/status |
Статус сим-карты |
PUT | {"value": <true/false>} | localhost:8080/api/v1/sim-card/${номер_телефона}/status |
Обновить статус сим-карты |
GET | пусто | localhost:8080/api/v1/sim-card/${номер_телефона}/minutes/total |
Количество активных минут |
GET | пусто | localhost:8080/api/v1/sim-card/${номер_телефона}/traffic/total |
Количество активных гигабайт |
GET | пусто | localhost:8080/api/v1/sim-card/${номер_телефона}/minutes/packages |
Количество активных пакетов минут |
GET | пусто | localhost:8080/api/v1/sim-card/${номер_телефона}/traffic/packages |
Количество активных пакетов гигабайт |
POST | {"basePackageId": "<id базового пакета>","addition": <Количество минут>,"daysToLive": "<Время жизни (дней)>"} | localhost:8080/api/v1/sim-card/${номер_телефона}/minutes |
Добавить пакет минут к сим-карте |
POST | {"basePackageId": "<id базового пакета>","addition": <Количество гигабайт>,"daysToLive": "<Время жизни (дней)>"} | localhost:8080/api/v1/sim-card/${номер_телефона}/traffic |
Добавить пакет гигабайт к сим-карте |
GET | пусто | localhost:8080/api/v1/packages-of-minutes/${id_пакета} |
Получить базовый пакет минут (обьект) |
GET | пусто | localhost:8080/api/v1/traffic-packages/${id_пакета} |
Получить базовый пакет траффика (обьект) |
GET | пусто | localhost:8080/api/v1/packages-of-minutes/ |
Получить все базовые пакеты минут (список) |
GET | пусто | localhost:8080/api/v1/traffic-packages/ |
Получить все базовые пакеты траффика (список) |
POST | {"name":"<имя_пакета>","type":"<FREE_ROAMING \ FAVORITE_NUMBER>"} | localhost:8080/api/v1/packages-of-minutes/ |
Сохранить в базу базовый пакет минут |
POST | {"name":"<имя_пакета>","type":"<YOUTUBE \ FREE_MESSENGER>"} | localhost:8080/api/v1/traffic-packages/ |
Сохранить в базу базовый пакет траффика |
PUT | {"value": <количество минут (отр или пол)>} | localhost:8080/api/v1/packages-of-minutes/details/${details_id} |
Расходовать или добавлять минуты в пакет минут |
PUT | {"value": <количество гигабайт (отр или пол)>} | localhost:8080/api/v1/traffic-packages/details/${details_id} |
Расходовать или добавлять гигабайты в пакет траффика |