v0.0.5
+ Добавлены проверки на обновление/добавление/удаление номера + Реализовано: просмотр и удаление SMS - Необходим рефакторинг (убрать повторяющийся код в JS), оптимизировать - Объединить запросы в D в модули (подпапки)
This commit is contained in:
		
							parent
							
								
									de17e88d37
								
							
						
					
					
						commit
						ab4b8c6bad
					
				
					 20 changed files with 467 additions and 33 deletions
				
			
		| 
						 | 
				
			
			@ -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("/");
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
									
								
							
							
						
						
									
										19
									
								
								source/requests/delsms.d
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										10
									
								
								source/requests/listsms.d
									
										
									
									
									
										Normal 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());
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								source/requests/smsnumbers.d
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								source/requests/smsnumbers.d
									
										
									
									
									
										Normal 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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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
									
								
							
							
						
						
									
										12
									
								
								source/requests/viewsms.d
									
										
									
									
									
										Normal 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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,3 +36,11 @@ struct NumberDB {
 | 
			
		|||
    int black_cc;
 | 
			
		||||
    string comment;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct SMSDB {
 | 
			
		||||
    int id;
 | 
			
		||||
    string date;
 | 
			
		||||
    string to;
 | 
			
		||||
    string from;
 | 
			
		||||
    string text;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
module version_;
 | 
			
		||||
 | 
			
		||||
enum dasterVersion = "v0.0.4";
 | 
			
		||||
enum dasterVersion = "v0.0.5";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue