From 8ce139ff0092558c06b4a892be9a29784250ca4e Mon Sep 17 00:00:00 2001 From: ParkSuMin Date: Sat, 22 Feb 2025 19:58:30 +0300 Subject: [PATCH] Users and pay in one file --- .../app/{payment/pay_orders.db => UNITED.db} | Bin 28672 -> 36864 bytes .../style/app/{payment/pay.go => main.go} | 215 ++++++++++++++---- frontend/style/app/profile/auth.go | 160 ------------- frontend/style/app/profile/users.db | Bin 16384 -> 0 bytes 4 files changed, 167 insertions(+), 208 deletions(-) rename frontend/style/app/{payment/pay_orders.db => UNITED.db} (66%) rename frontend/style/app/{payment/pay.go => main.go} (59%) delete mode 100644 frontend/style/app/profile/auth.go delete mode 100644 frontend/style/app/profile/users.db diff --git a/frontend/style/app/payment/pay_orders.db b/frontend/style/app/UNITED.db similarity index 66% rename from frontend/style/app/payment/pay_orders.db rename to frontend/style/app/UNITED.db index c51e6ffdcbf5960812dbf923c66a64c53fb99acb..3dc02ed6ff481d6212c11ea2c7e79c0c4dbe2edb 100644 GIT binary patch delta 407 zcmZp8z}T>WX@ayM8v_FaClJE`+e95>SvCf}szP4=9}FBkRt)^f{Kxrb^Xu`(@N)53 z@!a2RsIZUQyitjrU0ht8u}QfkF)1gtv^ce>7))?D2e~?ixGID=I{CONfQ1w^xD=pZ z@*N(ndJsD`H!(9uA;dKzM8VG=h(mpR6hi$x14CVP;ED?pi;K(ii&9XPfu%JyIoQN) z#Tgkg^HNePiVJfxOH$(#OH1;>{CKdn@rGcEGk}dvTw9wl66{c*(#g;Gq#4;KGx4i2 zH`%aGp2DNV$hLVqk2E6(GrPE=B4cCrHvj-@@S6d)YNC1e34(D V1sLEQoB#N;C@cy9A^|W`007O4Y0dxu literal 28672 zcmeI3OK%(36~~9BM2eKiNjD{6!01R`ltMhwydOm?S9KUes3NB_3B)U6o-k`YEIxp$ zt5WbLXn;0Fb^-DMf}(H>1WDb*s{&niwDA|{rdfEA07(|fBL8zKMwDw81eir#9MUs$ z=RW`Ech0#c2h`19Y<2pHk{)#Tg1%x(FG#tZ^ixHVBxxB(5y$v-35B`w4X(L~^0SJ| z(o4TStjKk#u=JKxeN>I)e^xU254hnM6JP>NfC(@GCcp%k027#=fLzc2v9`RNyJz=< za5p*V#!0um+v)YsN`-4Xjg4kQX>R;%tD&6LEA_I1*QlZsE6v91P35(n%~v;eZYe)+ z+`6JDs;abFn=dQbUzC%3*~63HWFKYsPmZ(q6*^@PPKLPN7t{0)`oV7dZnqO93f9|F zwr@0*?bg=TXqxQZ?9V4}VDRr0G3a6TA?A8W<&!s+?1Sun_5cU2VzxNwC;iS|G7>eO zisTAW+1o?6$l-(@QG&6_tA&(ZYN@~T|F(63#-oO@&S9Jl?XHwJ{_ z{8P!H;S}9&XFq9!+~#((alNrK2~XK*HE(QgV}e&3+s#u3zlYZ2j7-^-rQc?MRW@H12#$X&7fIp0t1~DpO)pU_S~?#MWAInXr4qg!?M)i{A8q|kfAormK=-qQ9gRbv$_+=UdN(*~54yX(@%6&FU|Shi zuOQY+D}zBNUMW$A0_h5djc(48tX!IqSReIAn7@`U)LwiscS|tn9qz)3?Ot*?NcN-T ziQBnz>p#(0-w*bZD;T*d|3ms^tyaq&Ulwx?dP%n@P80e!77Df2T2AWh$H}iwX9@=W z199I*Mc76#-EE5*+E!aXt=d?kaRs>`_CK>)s9j%v)-2;R?e*LGS((13FVN^UOm*$j zvj&ghw)Jr-Uy;9(-C20A_=yn4CnmrI zm;e)C0!-k4n!xvR`PvUUyPcqSdvHYmjt0YZd9HQr2X+)EQ4p%3>jkP6T7l}DPOO?< zGM>tzZw6; zv`^o7`Wmw*f1{jcP2?Izz_geTenZIx^HE6G%P`F@$icu^}GwImU3kLI!w2tfj7@sdlQHs^wd;>Y2Ku>Xv0D zK4wSrj0Ombc8bLTNeBTy5C%vh3A!*zlx+wjf4QcKdKad^NYrS!H%tSjP=C5QCJb02 z17a_BEIl<;*Yi^{z*0lgaaAi$1KqRy(01&Z3;-=!5(Yp%1VA1RA9WT;Qt)^vAOi(0ke`XU+NC!yuLW}@nW5vf+{d1_#Vo@yA0XQsNFXnr!I z0Z?UX2qAMM8X`ytOo30xJ09uAo4n)06!b<(gO3~$at7#AV2L}_QKlG8=Ei~M>rphL0kk~j07bY7Asz{WFA!3YPN88yu14meos4iO zg;BCVn?eRj59%lj^Uw#aFrY*R*lBDdlU+41^%x$ABQ*$9Uv+}OGBhv7O72Vs&^`nS z2q6%LXbbX)E=9A8J%~gj*HFeC4&qK>M|&2vIT(YThsYiRLj*O)z{5XwLCj8Q_l&5Fc_{E$#tn#0X}@64+Q!K$Kt^iW1spMmr{n1u>jaBLbebAqsU5l8G?wqcjc0nLWHX_nnAC zAcCBWrD^U_u7MadjkXh7m^KiiN}){KI=L3rph{A(^Pz_1Q!dhf&qh9l6B!4M?CO?+{E&oftD&MaDUH*QxTYW6QB|oUXgJym)0Vco%m;e)C0!)Aj zFaajO1egF5n2x|gzE%=Xr0e-sZkngi_=!&|H_g-DDs`OZscMBfPV@9~i8@a6lyH$c zPV+RbOdY3r>Q$nS(>z~VppMf#T`JDyrCfnd^K_b{Q=U#2;J7(@3VxKF8_kSp-KOz|Y3BvPZ1}kL(On?b6 z0Vco%m;e)C0!)AjFaajO1g0P`@%?{_-rR)=FaajO1egF5U;<2l2`~XBzyz286L=m8 llu0yx|IaTbzyz286JP>NfC(@GCcp%k025#WOyK{Qz&BvmePsXu diff --git a/frontend/style/app/payment/pay.go b/frontend/style/app/main.go similarity index 59% rename from frontend/style/app/payment/pay.go rename to frontend/style/app/main.go index 3f47bf4e..08aa3bcb 100644 --- a/frontend/style/app/payment/pay.go +++ b/frontend/style/app/main.go @@ -9,6 +9,7 @@ import ( "net/http" "os" "strconv" + "strings" "time" "github.com/google/uuid" @@ -16,50 +17,45 @@ import ( _ "github.com/mattn/go-sqlite3" ) -// Структура для тела запроса на localhost:5000 -type PaymentRequest struct { - ID string `json:"id"` - Sum float64 `json:"sum"` -} - -// Структура для ответа от localhost:5000 -type PaymentResponse struct { - Message string `json:"message"` - URL string `json:"redir_url"` +type User struct { + ID int `json:"id"` + Email string `json:"email"` + Password string `json:"password"` } var db *sql.DB +func create_table(command string) { + _, err := db.Exec(command) + if err != nil { + log.Fatal("Ошибка при создании таблицы:", err) + } + fmt.Println("База данных готова к работе.") +} + func initDB() { var err error - dbFile := "pay_orders.db" + dbFile := "UNITED.db" db, err = sql.Open("sqlite3", dbFile) if err != nil { log.Fatal("Ошибка подключения к базе данных:", err) } - // Создаем таблицу pay_urls, если она не существует - createTableSQL := ` + // Create tables if they don't exist + create_table(` CREATE TABLE IF NOT EXISTS pay_urls ( id TEXT PRIMARY KEY, url TEXT NOT NULL - );` - _, err = db.Exec(createTableSQL) - if err != nil { - log.Fatal("Ошибка при создании таблицы pay_urls:", err) - } - createTableSQL = ` + );`) + + create_table(` CREATE TABLE IF NOT EXISTS order_list ( order_id TEXT PRIMARY KEY, total_price REAL NOT NULL, datetime TEXT NOT NULL - );` - _, err = db.Exec(createTableSQL) - if err != nil { - log.Fatal("Ошибка при создании таблицы order_list:", err) - } + );`) - createTableSQL = `CREATE TABLE IF NOT EXISTS order_lines ( + create_table(`CREATE TABLE IF NOT EXISTS order_lines ( line_id INTEGER PRIMARY KEY AUTOINCREMENT, order_id TEXT NOT NULL, item_id INTEGER NOT NULL, @@ -67,17 +63,32 @@ func initDB() { item_price REAL NOT NULL, item_quantity INTEGER NOT NULL, FOREIGN KEY (order_id) REFERENCES order_list(order_id) - );` - _, err = db.Exec(createTableSQL) - if err != nil { - log.Fatal("Ошибка при создании таблицы order_lines:", err) - } + );`) + + create_table(`CREATE TABLE IF NOT EXISTS users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + email TEXT NOT NULL UNIQUE, + password TEXT NOT NULL + );`) fmt.Println("База данных готова к работе.") } +/*----------------------------PAYMENT--------------------------------------*/ func payHandler(w http.ResponseWriter, r *http.Request) { + // Структура для тела запроса на localhost:5000 + type PaymentRequest struct { + ID string `json:"id"` + Sum float64 `json:"sum"` + } + + // Структура для ответа от localhost:5000 + type PaymentResponse struct { + Message string `json:"message"` + URL string `json:"redir_url"` + } + cookie, err := r.Cookie("totalPrice") if err != nil { http.Error(w, "Не удалось получить amount из cookies", http.StatusBadRequest) @@ -216,33 +227,39 @@ func checkPayHandler(w http.ResponseWriter, r *http.Request) { w.Write([]byte(response)) } -type CartItem struct { - ID int `json:"id"` - Title string `json:"title"` - Price float64 `json:"price"` - Quantity int `json:"quantity"` -} - -type Cart struct { - CartItems []CartItem `json:"cart_items"` -} - func add_to_cart(w http.ResponseWriter, r *http.Request) { + + type CartItem struct { + ID int `json:"id"` + Title string `json:"title"` + Price float64 `json:"price"` + Quantity int `json:"quantity"` + } + + type Cart struct { + CartItems []CartItem `json:"cart_items"` + } + cartCookie, err := r.Cookie("cart") if err != nil { http.Error(w, "Cart cookie not found", http.StatusBadRequest) return } fmt.Print("cartCookie.Value: ", cartCookie.Value) + cartValue := strings.ReplaceAll(cartCookie.Value, "'", "\"") // Replace single quotes with double quotes var cart Cart - // Разбираем JSON - err = json.Unmarshal([]byte(cartCookie.Value), &cart) + err = json.Unmarshal([]byte(cartValue), &cart) if err != nil { - fmt.Println("Ошибка при разборе JSON:", err) + http.Error(w, "Invalid cart data format", http.StatusBadRequest) return } - + for _, item := range cart.CartItems { + fmt.Println("Item ID:", item.ID) + fmt.Println("Item Title:", item.Title) + fmt.Println("Item Price:", item.Price) + fmt.Println("Item Quantity:", item.Quantity) + } del_cookie, err := r.Cookie("uuid") if err != nil { http.Error(w, "Не найден cookie с uuid", http.StatusBadRequest) @@ -256,20 +273,24 @@ func add_to_cart(w http.ResponseWriter, r *http.Request) { total_price := total_cookie.Value order_id := del_cookie.Value + fmt.Println("order_id: ", order_id) + fmt.Println("total_price: ", total_price) insertSql := `INSERT INTO order_list VALUES (?, ?, ?)` _, err = db.Exec(insertSql, order_id, total_price, time.Now().Format("2006-01-02 15:04:05")) if err != nil { - http.Error(w, "Ошибка при сохранении данных в базу данных", http.StatusInternalServerError) + http.Error(w, "Ошибка при сохранении данных в базу данных 1", http.StatusInternalServerError) + fmt.Print("Ошибка при сохранении данных в базу данных 1", err) return } for _, item := range cart.CartItems { - insertSQL := `INSERT INTO order_lines VALUES (?, ?, ?, ?, ?)` + insertSQL := `INSERT INTO order_lines (order_id, item_id, item_title, item_price, item_quantity) VALUES (?, ?, ?, ?, ?)` _, err = db.Exec(insertSQL, order_id, item.ID, item.Title, item.Price, item.Quantity) if err != nil { - http.Error(w, "Ошибка при сохранении данных в базу данных", http.StatusInternalServerError) + http.Error(w, "Ошибка при сохранении данных в базу данных 2", http.StatusInternalServerError) + fmt.Println("Ошибка при сохранении данных в базу данных 2", err) return } } @@ -292,6 +313,101 @@ func add_to_cart(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("OK")) } + +/*----------------------------USER-----------------------------------------*/ +func registerHandler(w http.ResponseWriter, r *http.Request) { + log.Printf("Received request with method: %s", r.Method) + if r.Method != http.MethodPost { + http.Error(w, "Метод не поддерживается", http.StatusMethodNotAllowed) + return + } + + var user User + if err := json.NewDecoder(r.Body).Decode(&user); err != nil { + http.Error(w, "Ошибка обработки JSON", http.StatusBadRequest) + return + } + + if user.Email == "" || user.Password == "" { + http.Error(w, "Email и пароль обязательны", http.StatusBadRequest) + return + } + + insertQuery := `INSERT INTO users (email, password) VALUES (?, ?)` + _, err := db.Exec(insertQuery, user.Email, user.Password) + if err != nil { + http.Error(w, "Ошибка записи в базу данных", http.StatusInternalServerError) + fmt.Println("Ошибка:", err) + return + } + + w.WriteHeader(http.StatusCreated) + json.NewEncoder(w).Encode(map[string]string{"message": "Пользователь успешно зарегистрирован", "email": user.Email}) +} + +func loginHandler(w http.ResponseWriter, r *http.Request) { + log.Printf("Received request with method: %s", r.Method) + if r.Method != http.MethodPost { + http.Error(w, "Метод не поддерживается", http.StatusMethodNotAllowed) + return + } + + var user User + if err := json.NewDecoder(r.Body).Decode(&user); err != nil { + http.Error(w, "Ошибка обработки JSON", http.StatusBadRequest) + return + } + + if user.Email == "" || user.Password == "" { + http.Error(w, "Email и пароль обязательны", http.StatusBadRequest) + return + } + + query := `SELECT id, email, password FROM users WHERE email = ? AND password = ?` + var dbUser User + err := db.QueryRow(query, user.Email, user.Password).Scan(&dbUser.ID, &dbUser.Email, &dbUser.Password) + if err != nil { + if err == sql.ErrNoRows { + http.Error(w, "Неверные учетные данные", http.StatusUnauthorized) + } else { + http.Error(w, "Ошибка при проверке учетных данных", http.StatusInternalServerError) + } + return + } + + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(map[string]string{"message": "Вход успешен", "email": dbUser.Email}) +} + +func getUsersHandler(w http.ResponseWriter, r *http.Request) { + + log.Printf("Received request with method: %s", r.Method) + if r.Method != http.MethodGet { + http.Error(w, "Метод не поддерживается", http.StatusMethodNotAllowed) + return + } + + rows, err := db.Query(`SELECT id, email, password FROM users`) + if err != nil { + http.Error(w, "Ошибка чтения из базы данных", http.StatusInternalServerError) + return + } + defer rows.Close() + + var users []User + for rows.Next() { + var user User + if err := rows.Scan(&user.ID, &user.Email, &user.Password); err != nil { + http.Error(w, "Ошибка обработки данных", http.StatusInternalServerError) + return + } + users = append(users, user) + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(users) +} + func main() { initDB() @@ -307,6 +423,9 @@ func main() { http.HandleFunc("/api/pay", payHandler) http.HandleFunc("/api/check_pay", checkPayHandler) http.HandleFunc("/api/add_to_cart", add_to_cart) + http.HandleFunc("/api/register", registerHandler) + http.HandleFunc("/api/login", loginHandler) + http.HandleFunc("/api/users", getUsersHandler) // Start server with CORS middleware port := os.Getenv("PORT") diff --git a/frontend/style/app/profile/auth.go b/frontend/style/app/profile/auth.go deleted file mode 100644 index d41edfa2..00000000 --- a/frontend/style/app/profile/auth.go +++ /dev/null @@ -1,160 +0,0 @@ -package main - -import ( - "database/sql" - "encoding/json" - "fmt" - "log" - "net/http" - "os" - - "github.com/gorilla/handlers" - _ "github.com/mattn/go-sqlite3" -) - -type User struct { - ID int `json:"id"` - Email string `json:"email"` - Password string `json:"password"` -} - -var db *sql.DB - -func initDB() { - var err error - dbFile := "users.db" - db, err = sql.Open("sqlite3", dbFile) - if err != nil { - log.Fatal("Ошибка подключения к базе данных:", err) - } - - createTableQuery := ` - CREATE TABLE IF NOT EXISTS users ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - email TEXT NOT NULL UNIQUE, - password TEXT NOT NULL - );` - _, err = db.Exec(createTableQuery) - if err != nil { - log.Fatal("Ошибка при создании таблицы:", err) - } - fmt.Println("База данных готова к работе.") -} - -func registerHandler(w http.ResponseWriter, r *http.Request) { - log.Printf("Received request with method: %s", r.Method) - if r.Method != http.MethodPost { - http.Error(w, "Метод не поддерживается", http.StatusMethodNotAllowed) - return - } - - var user User - if err := json.NewDecoder(r.Body).Decode(&user); err != nil { - http.Error(w, "Ошибка обработки JSON", http.StatusBadRequest) - return - } - - if user.Email == "" || user.Password == "" { - http.Error(w, "Email и пароль обязательны", http.StatusBadRequest) - return - } - - insertQuery := `INSERT INTO users (email, password) VALUES (?, ?)` - _, err := db.Exec(insertQuery, user.Email, user.Password) - if err != nil { - http.Error(w, "Ошибка записи в базу данных", http.StatusInternalServerError) - fmt.Println("Ошибка:", err) - return - } - - w.WriteHeader(http.StatusCreated) - json.NewEncoder(w).Encode(map[string]string{"message": "Пользователь успешно зарегистрирован", "email": user.Email}) -} - -func loginHandler(w http.ResponseWriter, r *http.Request) { - log.Printf("Received request with method: %s", r.Method) - if r.Method != http.MethodPost { - http.Error(w, "Метод не поддерживается", http.StatusMethodNotAllowed) - return - } - - var user User - if err := json.NewDecoder(r.Body).Decode(&user); err != nil { - http.Error(w, "Ошибка обработки JSON", http.StatusBadRequest) - return - } - - if user.Email == "" || user.Password == "" { - http.Error(w, "Email и пароль обязательны", http.StatusBadRequest) - return - } - - query := `SELECT id, email, password FROM users WHERE email = ? AND password = ?` - var dbUser User - err := db.QueryRow(query, user.Email, user.Password).Scan(&dbUser.ID, &dbUser.Email, &dbUser.Password) - if err != nil { - if err == sql.ErrNoRows { - http.Error(w, "Неверные учетные данные", http.StatusUnauthorized) - } else { - http.Error(w, "Ошибка при проверке учетных данных", http.StatusInternalServerError) - } - return - } - - w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(map[string]string{"message": "Вход успешен", "email": dbUser.Email}) -} - -func getUsersHandler(w http.ResponseWriter, r *http.Request) { - log.Printf("Received request with method: %s", r.Method) - if r.Method != http.MethodGet { - http.Error(w, "Метод не поддерживается", http.StatusMethodNotAllowed) - return - } - - rows, err := db.Query(`SELECT id, email, password FROM users`) - if err != nil { - http.Error(w, "Ошибка чтения из базы данных", http.StatusInternalServerError) - return - } - defer rows.Close() - - var users []User - for rows.Next() { - var user User - if err := rows.Scan(&user.ID, &user.Email, &user.Password); err != nil { - http.Error(w, "Ошибка обработки данных", http.StatusInternalServerError) - return - } - users = append(users, user) - } - - w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(users) -} - -func main() { - initDB() - defer db.Close() - - // Setup CORS - cors := handlers.CORS( - handlers.AllowedOrigins([]string{"*"}), - handlers.AllowedMethods([]string{"GET", "POST"}), - handlers.AllowedHeaders([]string{"Content-Type"}), - ) - - // Register handlers - http.HandleFunc("/api/register", registerHandler) - http.HandleFunc("/api/login", loginHandler) - http.HandleFunc("/api/users", getUsersHandler) - - // Start server with CORS middleware - port := os.Getenv("PORT") - if port == "" { - port = "8080" - } - - fmt.Println("Go-сервер запущен на порту", port) - log.Fatal(http.ListenAndServe(":"+port, cors(http.DefaultServeMux))) -} diff --git a/frontend/style/app/profile/users.db b/frontend/style/app/profile/users.db deleted file mode 100644 index a1b81d740b5982f051ea85f70b6dc02836bbf422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeI(J#W)M7zgm@a(1AV%27GsjwcwJC~c#*Gg1ROp{S|b21g=OWa@L3C@&;VRLTYt zU!n_Nfw5npBaH1g=)#P|$i=iEyRgv({U7;qzSrb_n;$DL_UoOAmeFwB4<>Sx?h|9Q zB_$E%O|eY54rXq$?d!3>)p=TbJ6aImiQhXXQ52s|g@6DAAOHafKmY;|fB*y_009X6 zBY{1hcgtngngp+UIv(}RBW^p^qp2PoWSiErhN}8X`qig(B{Or2gP^Zh%*xWcN9>O4 zy6pYqWY1}=$8qwJORZ13WN}_zMJJRs&sWb?L+&+dJJm)@ZmX88HvQe2XIAbg&tLg9 zTla%bPx|VmFTGt;n)SMDdbRzg`aS1$5XVQuahRT#Y*8xZ^6nFtQD+e9H&;gqrjudP zZYRI3y`EIuK;NBVFPLJB49M&|0|jo;vJ;0