87 lines
2.0 KiB
Go
87 lines
2.0 KiB
Go
package models
|
|
|
|
import (
|
|
"database/sql"
|
|
"time"
|
|
)
|
|
|
|
type Customer struct {
|
|
ID int
|
|
Name string
|
|
Email string
|
|
Phone string
|
|
Address string
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
func CustomerGetAll(db *sql.DB, search string) ([]Customer, error) {
|
|
query := "SELECT id, name, email, phone, address, created_at, updated_at FROM customers"
|
|
args := []interface{}{}
|
|
if search != "" {
|
|
query += " WHERE name LIKE ? OR email LIKE ?"
|
|
s := "%" + search + "%"
|
|
args = append(args, s, s)
|
|
}
|
|
query += " ORDER BY name"
|
|
|
|
rows, err := db.Query(query, args...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var customers []Customer
|
|
for rows.Next() {
|
|
var c Customer
|
|
if err := rows.Scan(&c.ID, &c.Name, &c.Email, &c.Phone, &c.Address, &c.CreatedAt, &c.UpdatedAt); err != nil {
|
|
return nil, err
|
|
}
|
|
customers = append(customers, c)
|
|
}
|
|
return customers, nil
|
|
}
|
|
|
|
func CustomerGetByID(db *sql.DB, id int) (*Customer, error) {
|
|
c := &Customer{}
|
|
err := db.QueryRow(
|
|
"SELECT id, name, email, phone, address, created_at, updated_at FROM customers WHERE id = ?", id,
|
|
).Scan(&c.ID, &c.Name, &c.Email, &c.Phone, &c.Address, &c.CreatedAt, &c.UpdatedAt)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return c, nil
|
|
}
|
|
|
|
func CustomerInsert(db *sql.DB, c *Customer) error {
|
|
result, err := db.Exec(
|
|
"INSERT INTO customers (name, email, phone, address) VALUES (?, ?, ?, ?)",
|
|
c.Name, c.Email, c.Phone, c.Address,
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
id, _ := result.LastInsertId()
|
|
c.ID = int(id)
|
|
return nil
|
|
}
|
|
|
|
func CustomerUpdate(db *sql.DB, c *Customer) error {
|
|
_, err := db.Exec(
|
|
"UPDATE customers SET name = ?, email = ?, phone = ?, address = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?",
|
|
c.Name, c.Email, c.Phone, c.Address, c.ID,
|
|
)
|
|
return err
|
|
}
|
|
|
|
func CustomerDelete(db *sql.DB, id int) error {
|
|
_, err := db.Exec("DELETE FROM customers WHERE id = ?", id)
|
|
return err
|
|
}
|
|
|
|
func CustomerCount(db *sql.DB) int {
|
|
var count int
|
|
db.QueryRow("SELECT COUNT(*) FROM customers").Scan(&count)
|
|
return count
|
|
}
|