module requests.numbers; import vibe.vibe; import response; import structures; import sql; import singlog; import std.regex; // Получить список всех групп номеров void getListNumberGroups(HTTPServerRequest req, HTTPServerResponse res) { auto listGroups = sqlGetListGroups(); render!("list_number_groups.dt", listGroups)(res); } // Получить список номеров конкретной группы void getListGroupNumbers(HTTPServerRequest req, HTTPServerResponse res) { auto jsr = req.json; res.writeJsonBody(sqlGetListNumbers(jsr["group"].get!string).serializeToJson()); } // Добавление номера телефона void getAddNumber(HTTPServerRequest req, HTTPServerResponse res) { auto jsr = req.json; bool edit = false; NumberDB dataNumber; dataNumber.group = jsr["group"].get!string; auto groups = sqlGetGroups(); auto lists = sqlGetLists(); render!("number.dt", edit, dataNumber, groups, lists)(res); } // Просмотр номера телефона void getViewNumber(HTTPServerRequest req, HTTPServerResponse res) { auto jsr = req.json; bool edit = true; auto dataNumber = sqlGetDataNumber(jsr["number"].get!string); auto groups = sqlGetGroups(); auto lists = sqlGetLists(); render!("number.dt", edit, dataNumber, groups, lists)(res); } // Обновить номер телефона void sendUpdateNumber(HTTPServerRequest req, HTTPServerResponse res) { NumberDB number = deserializeJson!NumberDB(req.json); if (!checkNumber(number, res)) return; if (!sqlUpdateNumber(number)) { res.send(true, "Не удалось обновить номер"); return; } res.send(); } // Записать номер телефона void sendWriteNumber(HTTPServerRequest req, HTTPServerResponse res) { NumberDB number = deserializeJson!NumberDB(req.json); if (!checkNumber(number, res)) return; if (!sqlInsertNumber(number)) { res.send(true, "Не удалось записать номер"); return; } res.send(); } // Удалить номера телефона void sendDelNumber(HTTPServerRequest req, HTTPServerResponse res) { auto jsr = req.json; string number = jsr["number"].get!string; if (!number.length) { res.send(true, "Номер не может быть пуст"); return; } if (!sqlDeleteNumber(number)) { res.send(true, "Не удалось удалить номер"); return; } res.send(); } // Проверка номера перед изменением bool checkNumber(NumberDB number, HTTPServerResponse res) { if (!number.number.matchFirst(regex(r"^\+7\d{10}$", "g"))) { res.send(true, "Номер не соответствует формату +7XXXXXXXXXX"); return false; } if (number.all_cc < 0) { res.send(true, "Общее количество звонков не может быть отрицательным"); return false; } if (number.white_cc < 0) { res.send(true, "Белое количество звонков не может быть отрицательным"); return false; } if (number.black_cc < 0) { res.send(true, "Черное количество звонков не может быть отрицательным"); return false; } return true; }