Current section
Files
Jump to
Current section
Files
lib/amnesia.ex
defmodule Amn do
@moduledoc "В данном модуле создаем схему базы данных (create_database),
таблицу, запускаем БД(start_database),
записываем в нее начальные данные(wr_database),
определяем функцию чтения из БД по ключевому полю(rd_database),
функция останова БД (stop_database),Функция удаления строки из БД (del_item_database)
Функция изменения строки БД (change_item_database)."
@doc "Функция создания шаблона БД"
def create_database do
:mnesia.create_schema([node()])#создаем БД,в рабочем кат.
#появится папка Mnesia.nonode@nohost
#в этом каталоге созд файл schema.DAT
:mnesia.create_table(:p_players,[{:disc_copies,[node()]},{:attributes,[:nikname, :name, :age, :games, :wins, :ttl]}])
end
@doc "Функция запуска БД"
def start_database do
:mnesia.start()
end
@doc "Функция записи в БД начальных значений"
def wr_database do
:mnesia.transaction(fn ->
:mnesia.write({:p_players, "hat", "Bill Smith", "45", 100, 40, 30})
:mnesia.write({:p_players, "bell", "Ann Pirson", "20", 10, 3, 20})
:mnesia.write({:p_players, "Rat", "Den Konnie", "45", 75, 37, 25})
end)
end
@doc "Функция чтения записей из БД по ключевому полю"
@spec rd_database(string()) :: tuple()
def rd_database(nik) do
try do
{:atomic, [record]} = :mnesia.transaction(fn ->
:mnesia.read({:p_players, nik}) end)
ttl = List.last(Tuple.to_list(record))
pid = spawn(Ttl120, :del120, [nik, ttl])
send(pid, [nik, ttl])
string_parse(record)
rescue
error -> error
end
end
@doc "Функция парсинга результатов :mnesia.read в
строку для отображение на HTML страничке"
def string_parse(record) do
temp = List.delete_at(List.flatten(Tuple.to_list(record)),0)
nik = List.first(temp)
temp1 = List.delete_at(temp, 0)
name = List.first(temp1)
string_p = "We are leaving #{name} called #{nik}"
end
@doc "Функция останова БД"
def stop_database do
:mnesia.stop()
end
@doc "Функция удаления строки из БД"
def del_item_database(params) do
player_nik = Map.get(params, "nik")
try do
{:atomic, [record]} = :mnesia.transaction(fn ->
:mnesia.delete({:p_players, player_nik}) end)
rescue
error -> error
end
end
@doc "функция изменения строки в БД"
def change_item_database(params) do
player_nik = Map.get(params, "nik")
Map.delete(params, "nik")
{:atomic, [record]} = :mnesia.transaction(fn ->
:mnesia.read({:p_players, player_nik}) end)
record = List.delete_at(List.delete_at((Tuple.to_list(record)),0), 0)
if (Map.has_key?(params,"name")) do
player_name = Map.get(params, "name")
else
player_name = List.first(record)
end
if (Map.has_key?(params,"age")) do
player_age = Map.get(params, "age")
else
player_age = List.first(List.delete_at(record, 0))
end
if (Map.has_key?(params,"ttl")) do
player_ttl = Map.get(params, "ttl")
else
player_ttl = List.last(record)
end
if (Map.has_key?(params,"games")) do
player_games = Map.get(params, "games")
else
player_games = List.first(List.delete_at(List.delete_at(record, 0), 0))
end
if (Map.has_key?(params,"wins")) do
player_wins = Map.get(params, "wins")
else
player_wins = List.first(List.delete_at(List.delete_at(List.delete_at(record, 0),0), 0))
end
:mnesia.transaction(fn ->:mnesia.write({:p_players, player_nik, player_name, player_age, player_games, player_wins, player_ttl}) end)
end
@doc "Функция внесения новой записи в БД из командной строки."
def add_to_database do
receive do
msg -> IO.puts("Вам выпала честь дополнить нашу таблицу!")
:timer.sleep(2_000)
nik = String.trim(IO.gets("Введите ник игрока:")) # Trim для отбрасывания хвоста /n
name = String.trim(IO.gets("Введите имя игрока:"))
age = String.trim(IO.gets("Введите возраст игрока:"))
games = String.to_integer(String.trim(IO.gets("Введите количество игр:")))
wins = String.to_integer(String.trim(IO.gets("Введите количество побед:")))
ttl = String.to_integer(String.trim(IO.gets("Введите время жизни записи:")))
:mnesia.transaction(fn ->:mnesia.write({:p_players, nik, name, age, games, wins, ttl}) end)
end
end
@doc "Функция добавления строки в таблицу по http"
def add_to_database_http(params) do
player_nik = Map.get(params, "nik")
player_name = Map.get(params, "name")
player_age = Map.get(params, "age")
player_ttl = String.to_integer(Map.get(params, "ttl"))
player_games = String.to_integer(Map.get(params, "games"))
player_wins = String.to_integer(Map.get(params, "wins"))
:mnesia.transaction(fn ->:mnesia.write({:p_players, player_nik, player_name, player_age, player_games, player_wins, player_ttl}) end)
end
end