114 lines
3.4 KiB
D
114 lines
3.4 KiB
D
|
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;
|
|||
|
}
|