+ Добавлены проверки на обновление/добавление/удаление номера
+ Реализовано: просмотр и удаление SMS
- Необходим рефакторинг (убрать повторяющийся код в JS), оптимизировать
- Объединить запросы в D в модули (подпапки)
This commit is contained in:
Alexander Zhirov 2023-06-03 02:28:18 +03:00
parent de17e88d37
commit ab4b8c6bad
20 changed files with 467 additions and 33 deletions

View file

@ -23,6 +23,10 @@ import requests.updatenumber;
import requests.addnumber;
import requests.delnumber;
import requests.writenumber;
import requests.smsnumbers;
import requests.listsms;
import requests.viewsms;
import requests.delsms;
static ServerInfo serverInfo;
@ -200,6 +204,18 @@ void postReq(HTTPServerRequest req, HTTPServerResponse res) {
case "delnumber":
delNumber(req, res);
break;
case "smsnumbers":
smsNumbers(req, res);
break;
case "listsms":
listSMS(req, res);
break;
case "viewsms":
viewSMS(req, res);
break;
case "delsms":
delSMS(req, res);
break;
default:
res.redirect("/");
}

View file

@ -200,3 +200,96 @@ bool sqlInsertNumber(NumberDB number) {
}
return true;
}
SMSDB[] sqlGetSMSNumbers() {
SMSDB[] numbers;
try {
auto queryResult = pgsql.sql(
"select distinct da_to from da_sms"
);
foreach (row; queryResult) {
SMSDB data;
data.to = row["da_to"];
numbers ~= data;
}
} catch (Exception e) {
log.e("Не удалось выполнить запрос к БД. " ~ e.msg);
}
return numbers;
}
SMSDB[] sqlGetListSMS(string to) {
SMSDB[] sms;
try {
auto queryResult = pgsql.sql(
"select
da_id,
to_char(da_date, 'YYYY.MM.DD HH24:MI:SS') da_date,
da_to,
da_from,
da_text
from da_sms
where da_to = ?
order by da_date desc",
to
);
foreach (row; queryResult) {
SMSDB data;
data.id = row["da_id"].to!int;
data.date = row["da_date"];
data.to = row["da_to"];
data.from = row["da_from"];
data.text = row["da_text"];
sms ~= data;
}
} catch (Exception e) {
log.e("Не удалось выполнить запрос к БД. " ~ e.msg);
}
return sms;
}
SMSDB sqlGetSMS(int idsms) {
SMSDB data;
try {
auto queryResult = pgsql.sql(
"select
da_id,
to_char(da_date, 'YYYY.MM.DD HH24:MI:SS') da_date,
da_to,
da_from,
da_text
from da_sms
where da_id = ?",
idsms
);
foreach (row; queryResult) {
data.id = row["da_id"].to!int;
data.date = row["da_date"];
data.to = row["da_to"];
data.from = row["da_from"];
data.text = row["da_text"];
}
} catch (Exception e) {
log.e("Не удалось выполнить запрос к БД. " ~ e.msg);
}
return data;
}
bool sqlDeleteSMS(int idsms) {
try {
pgsql.sql(
"delete from da_sms where da_id = ?", idsms
);
} catch (Exception e) {
log.e("Ошибка удаления SMS в БД. " ~ e.msg);
return false;
}
return true;
}

19
source/requests/delsms.d Normal file
View file

@ -0,0 +1,19 @@
module requests.delsms;
import vibe.vibe;
import response;
import structures;
import data;
import singlog;
void delSMS(HTTPServerRequest req, HTTPServerResponse res) {
auto jsr = req.json;
int idsms = jsr["id"].get!int;
if (!sqlDeleteSMS(idsms)) {
res.send(true, "Не удалось удалить SMS");
return;
}
res.send();
}

10
source/requests/listsms.d Normal file
View file

@ -0,0 +1,10 @@
module requests.listsms;
import vibe.vibe;
import response;
import data;
void listSMS(HTTPServerRequest req, HTTPServerResponse res) {
auto jsr = req.json;
res.writeJsonBody(sqlGetListSMS(jsr["to"].get!string).serializeToJson());
}

View file

@ -0,0 +1,15 @@
module requests.smsnumbers;
import vibe.vibe;
import response;
import data;
import singlog;
void smsNumbers(HTTPServerRequest req, HTTPServerResponse res) {
// auto jsr = req.json;
// bool edit = true;
// auto dataNumber = sqlGetDataNumber(jsr["number"].get!string);
// auto groups = sqlGetGroups();
auto numbers = sqlGetSMSNumbers();
render!("sms-numbers.dt", numbers)(res);
}

View file

@ -6,8 +6,34 @@ import data;
import singlog;
import structures;
import std.regex;
void updateNumber(HTTPServerRequest req, HTTPServerResponse res) {
NumberDB number = deserializeJson!NumberDB(req.json);
// const string pattern_number = r"^\+7\d{10}$";
// auto regular_number = regex(pattern_number, "g");
if (!number.number.matchFirst(regex(r"^\+7\d{10}$", "g"))) {
res.send(true, "Номер не соответствует формату +7XXXXXXXXXX");
return;
}
if (number.all_cc < 0) {
res.send(true, "Общее количество звонков не может быть отрицательным");
return;
}
if (number.white_cc < 0) {
res.send(true, "Белое количество звонков не может быть отрицательным");
return;
}
if (number.black_cc < 0) {
res.send(true, "Черное количество звонков не может быть отрицательным");
return;
}
if (!sqlUpdateNumber(number)) {
res.send(true, "Не удалось обновить номер");
return;

12
source/requests/viewsms.d Normal file
View file

@ -0,0 +1,12 @@
module requests.viewsms;
import vibe.vibe;
import response;
import data;
import singlog;
void viewSMS(HTTPServerRequest req, HTTPServerResponse res) {
auto jsr = req.json;
auto dataSMS = sqlGetSMS(jsr["id"].to!int);
render!("view-sms.dt", dataSMS)(res);
}

View file

@ -6,8 +6,34 @@ import structures;
import data;
import singlog;
import std.regex;
void writeNumber(HTTPServerRequest req, HTTPServerResponse res) {
NumberDB number = deserializeJson!NumberDB(req.json);
// const string pattern_number = r"^\+7\d{10}$";
// auto regular_number = regex(r"^\+7\d{10}$", "g");
if (!number.number.matchFirst(regex(r"^\+7\d{10}$", "g"))) {
res.send(true, "Номер не соответствует формату +7XXXXXXXXXX");
return;
}
if (number.all_cc < 0) {
res.send(true, "Общее количество звонков не может быть отрицательным");
return;
}
if (number.white_cc < 0) {
res.send(true, "Белое количество звонков не может быть отрицательным");
return;
}
if (number.black_cc < 0) {
res.send(true, "Черное количество звонков не может быть отрицательным");
return;
}
if (!sqlInsertNumber(number)) {
res.send(true, "Не удалось записать номер");
return;

View file

@ -36,3 +36,11 @@ struct NumberDB {
int black_cc;
string comment;
}
struct SMSDB {
int id;
string date;
string to;
string from;
string text;
}

View file

@ -1,3 +1,3 @@
module version_;
enum dasterVersion = "v0.0.4";
enum dasterVersion = "v0.0.5";