README.md

# kvstore

Приложение реализует функционал тестового задания.

## Quick Start

1. Переход в папку приложения командой **cd "...."**
2. Запуск приложения командой **iex -S mix**. В случае успешного запуска видим информацию логгера  
  **time [info] Started application**
4. Команда **D_apl.write_database** добавит в пустую таблицу 3 тестовые строки. В случае успешного выполнения возвращается кортеж  
  **{:ok, {:atomic, :ok}}**
5. Контролировать содержание таблицы крайне удобно с помощью observer-а. Запуск командой **:observer.start** вкладка Table Viewer, в меню View выбрать Mnesia Tables.
6. Отображается таблица kvs. В таблице в качестве ключевого поля используется поле key.
7. Для проверки добавления информации в таблицу в окне терминала в корневом каталоге используем команду:  
  **curl -X POST -F 'key=zxc' -F 'ttl=12' -F 'data=Jazz' http://localhost:8080/upload**  
  В случае успешного выполнения в терминал возвращается сообщение  
  **Upload complete**  
  Результат можно проконтролировать в приложении Observer.
8. Для проверки корректной работы запроса на отображение информации используем команду  
  **curl -X  GET -F 'key=abc' http://localhost:8080/abc**  
  В первом терминале можно наблюдать сообщения логгера вида:  
			**time [info] Начинаем отсчет ttl секунд**    
			**time [info] Отсчет закончен**  
			**time [info] Запись по ключу key успешно удалена через ttl секунд**  
			Результат можно проконтролировать в приложении Observer.
9. Изменить существующую запись можно во втором терминале командой вида  
  **curl -X  PUT -F 'key=abc' -F 'data=777' -F 'ttl=7' http://localhost:8080/changes**  
  Команда изменит значение в столбцах data и ttl строки с ключевым полем соответствующим key.  В случае успешного выполнения в терминал возвращается сообщение:  
  **changes complete**  
  Можно изменять произвольное количество столбцов на выбор пользователя за одну команду, столбец key - ключевой столбец остается неизменным. Результат можно проконтролировать в приложении Observer.
10. Применение во втором терминале команды вида   
  **curl -X DELETE -F 'key=abc' http://localhost:8080/delete**    
   приведет к немедленному удалению записи. В случае успешного выполнения в терминал возвращается сообщение:  
      **delete complete**  
      Результат можно проконтролировать в приложении Observer.
11. Возможна работа с приложением без использования веб-сервера с помощью функций:  
  **D_apl.zapros(key)**  
  **D_apl.create_mnesia**  - используется для формирования схемы БД.(в репозитории схема уже есть)
  **D_apl.start_database**  
  **D_apl.write_database**  
  **D_apl.add_to_database**
***
Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at [https://hexdocs.pm/serv](https://hexdocs.pm/serv).