package handlers import ( "database/sql" "encoding/json" "net/http" "strconv" "time" "go-crm/internal/db" "github.com/go-chi/chi/v5" ) func ListClients(w http.ResponseWriter, r *http.Request) { limit, _ := strconv.Atoi(r.URL.Query().Get("limit")) offset, _ := strconv.Atoi(r.URL.Query().Get("offset")) if limit == 0 { limit = 20 } clients, err := db.ListClients(DB, limit, offset) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "text/html") w.Write([]byte(` Clients

Clients

`)) for _, c := range clients { w.Write([]byte(``)) } w.Write([]byte(`
NamePhoneEmailActions
` + c.Name + ` ` + c.Phone + ` ` + c.Email + ` View
`)) } func CreateClient(w http.ResponseWriter, r *http.Request) { r.ParseForm() client := db.Client{ Name: r.FormValue("name"), Phone: r.FormValue("phone"), Email: r.FormValue("email"), Address: r.FormValue("address"), Notes: r.FormValue("notes"), CreatedAt: time.Now().Unix(), } if err := client.Create(DB); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } w.Header().Set("Content-Type", "text/html") w.Header().Set("HX-Refresh", "true") } func ViewClient(w http.ResponseWriter, r *http.Request) { id, _ := strconv.ParseInt(chi.URLParam(r, "id"), 10) client, err := db.GetClientByID(DB, id) if err != nil { http.Error(w, "Client not found", http.StatusNotFound) return } w.Header().Set("Content-Type", "text/html") w.Write([]byte(`

` + client.Name + `

Phone: ` + client.Phone + `

Email: ` + client.Email + `

Address: ` + client.Address + `

Notes: ` + client.Notes + `

Back `)) } func UpdateClient(w http.ResponseWriter, r *http.Request) { id, _ := strconv.ParseInt(chi.URLParam(r, "id"), 10) r.ParseForm() client := db.Client{ ClientID: id, Name: r.FormValue("name"), Phone: r.FormValue("phone"), Email: r.FormValue("email"), Address: r.FormValue("address"), Notes: r.FormValue("notes"), } if err := client.Update(DB); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(client) } func DeleteClient(w http.ResponseWriter, r *http.Request) { id, _ := strconv.ParseInt(chi.URLParam(r, "id"), 10) if err := (&db.Client{}).Delete(DB, id); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } w.Header().Set("Content-Type", "text/html") w.Write([]byte("OK")) }