pocketbase-signer/handlers/register.go
2025-04-18 09:51:50 +03:00

94 lines
2.7 KiB
Go

package handlers
import (
"fmt"
"log"
"net/http"
"pocketbaseSigner/models"
"encoding/json"
"bytes"
"io/ioutil"
)
type UserResponse struct {
ID string `json:"id"`
Email string `json:"email"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
}
func RegisterFormHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodGet {
http.ServeFile(w, r, "./web/register_form.html")
return
}
if r.Method == http.MethodPost {
err := r.ParseForm()
if err != nil {
http.Error(w, "Ошибка при обработке формы", http.StatusBadRequest)
return
}
user := models.UserForm{
LastName: r.FormValue("lastname"),
FirstName: r.FormValue("firstname"),
Phone: r.FormValue("phone"),
Email: r.FormValue("email"),
Password: r.FormValue("password"),
Password_confirm: r.FormValue("password_confirm"),
}
// Проверка
if user.Email == "" || user.Password == "" {
http.Error(w, "Email и пароль обязательны!", http.StatusBadRequest)
return
}
if user.Password != user.Password_confirm {
http.Error(w, "Пароли не совпали", http.StatusBadRequest)
return
}
log.Printf("Получен пользователь: %+v\n", user)
url:= "http://localhost:8090/api/collections/users/records"
jsonData, err := json.Marshal(user)
if err != nil {
fmt.Println("Ошибка marshaling:", err)
return
}
resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData))
if err != nil {
fmt.Println("Ошибка запроса:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Ошибка чтения ответа:", err)
return
}
// Проверка статуса
if resp.StatusCode != http.StatusOK {
fmt.Printf("Ошибка: %d, %s\n", resp.StatusCode, string(body))
return
}
// Парсинг ответа
var userResponse UserResponse
if err := json.Unmarshal(body, &userResponse); err != nil {
fmt.Println("Ошибка парсинга ответа:", err)
return
}
fmt.Printf("Пользователь создан: ID=%s, Email=%s, Имя=%s\n",
userResponse.ID, userResponse.Email, userResponse.FirstName)
}
http.Error(w, "Метод не поддерживается", http.StatusMethodNotAllowed)
}