`)
}
// DeleteLeadNew handles DELETE /leads/{id}
func (a *App) DeleteLeadNew(w http.ResponseWriter, r *http.Request) {
accountID, ok := a.requireAuth(w, r)
if !ok {
return
}
clientID := a.clientIDForAccount(accountID)
leadID, _ := strconv.ParseInt(chi.URLParam(r, "id"), 10, 64)
a.DB.Exec("DELETE FROM leads WHERE lead_id = ? AND client_id = ?", leadID, clientID)
w.Header().Set("Content-Type", "text/html; charset=utf-8")
w.Write([]byte(""))
}
// serviceNames returns the list of service names for the review/all-leads dropdowns.
// It reads from the DB-backed services table first, then falls back to the
// hardcoded defaults so the dropdown is never empty on a fresh install.
func (a *App) serviceNames(clientID int64) []string {
rows, err := a.DB.Query(
"SELECT DISTINCT name FROM services WHERE client_id = ? ORDER BY name",
clientID,
)
if err == nil {
defer rows.Close()
var names []string
for rows.Next() {
var n string
if rows.Scan(&n) == nil {
names = append(names, n)
}
}
if len(names) > 0 {
// Ensure "Não especificou" is always first.
hasDefault := false
for _, n := range names {
if n == "Não especificou" {
hasDefault = true
break
}
}
if !hasDefault {
names = append([]string{"Não especificou"}, names...)
}
return names
}
}
// Fallback: hardcoded defaults for a fresh install with no services yet.
return []string{
"Não especificou",
"Head Spa",
"Massagem completa",
"Drenagem linfatica",
"Hydra Boost",
"Design Henna",
"Masculino",
}
}
// --- rendering helpers -------------------------------------------------------
func buildServiceOptions(services []string, selected string) string {
out := ""
for _, s := range services {
sel := ""
if s == selected {
sel = ` selected`
}
out += fmt.Sprintf(``, htmlEscape(s), sel, htmlEscape(s))
}
return out
}
func buildStatusOptions(statuses []db.LeadStatus, selected string) string {
out := ""
for _, s := range statuses {
sel := ""
if s.StatusName == selected {
sel = ` selected`
}
out += fmt.Sprintf(``, htmlEscape(s.StatusName), sel, htmlEscape(s.StatusName))
}
return out
}
func htmlEscape(s string) string {
s = strings.ReplaceAll(s, "&", "&")
s = strings.ReplaceAll(s, "<", "<")
s = strings.ReplaceAll(s, ">", ">")
s = strings.ReplaceAll(s, `"`, """)
return s
}
// --- package-level shims kept for existing tests ---
func LeadReviewQueue(w http.ResponseWriter, r *http.Request) {
(&App{DB: DB, WAConnector: WAConnector}).LeadReviewQueue(w, r)
}
func ConfirmLeadReview(w http.ResponseWriter, r *http.Request) {
(&App{DB: DB, WAConnector: WAConnector}).ConfirmLeadReview(w, r)
}
func LeadAllList(w http.ResponseWriter, r *http.Request) {
(&App{DB: DB, WAConnector: WAConnector}).LeadAllList(w, r)
}
func DeleteLeadNew(w http.ResponseWriter, r *http.Request) {
(&App{DB: DB, WAConnector: WAConnector}).DeleteLeadNew(w, r)
}