/debt-balancer

Приложение, помогает вести учет долгов между друзьями

Primary LanguageJavaScript

debt-balancer

Приложение, помогает вести учет долгов между друзьями. Написано на Angular + serverless nodejs.

Деплоится по мержу в мастер:

{	
  "method": "getUserInfo",
  "id": 123,
  "jsonrpc": "2.0",
  "params": {
    "id": "glebkaf"
  }
}

1.0.0 Roadmap

  • Доделать экраны приложения
    • "Добавить покупку"
    • "Погасить долг"
    • "Посмотреть инфу"
  • Получать список юзеров с сервера
  • Кешировать поток users$, чтобы не грузить список юзеров каждый раз заново
  • Поправить отображение успешного сообщения в случае ошибок api
  • Закрыть аккаунты паролем, чтобы случайно промахнуться аккаунтом при авторизации
  • Сделать апи и сам экран "История транзакций", на котором будут отображаться все покупки и погашения долгов

Backlog

  • Использовать имена пользователей вместо их id везде на клиенте
  • На экране "Погасить долг" подставлять в поле "количество" актуальный долг
  • На странице детализации
  • На экране балансов есть кнопочка напомнить про долг, которая отправляет должнику в телеграм сообщение
  • Cделать PWA
  • Сделать уведомление в телеграм о добавлении покупки\погашении долга
  • Сделать перераспределение долгов, чтобы минимизировать количество транзитивных долгов: Г -> A -> И заменяем на Г -> И
  • Добавить dev окружение для API (отдельная бд или отдельная коллекция)

Разработка

  • yarn start - запускает тестовый now.sh сервер с собранным ангуляр приложением и апи, сам пересобирается при изменении исходников, но ангуляр приложение ребилдится с 0, поэтому в деве клиента, лучше юзать yarn serve.
  • yarn serve - запускает вебпак дев сервер с ангуляр приложением
  • yarn test:api - запускает тесты апишки
  • yarn test:ng - запускает тесты фронтенд приложения

Для локальной разработки нужно в .env файле указать параметры подключения к монге, в формате:

MONGODB_URI=mongodb+srv://user:password@your-base.mongodb.net/test?retryWrites=true&w=majority

В монге должна быть коллекциия users:

users: 
[{
    id: string,
    balances: {
        [userId]: Number
    }
}]