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;
|
||
}
|