package models import ( "database/sql" "errors" "time" ) type Organisation struct { ID int Name string Created time.Time } type OrganisationModel struct { DB *sql.DB } func (m *OrganisationModel) Insert(name string) (int, error) { stmt := `INSERT INTO organisations (name, created) VALUEs (?, UTC_TIMESTAMP())` result, err := m.DB.Exec(stmt, name) if err != nil { return 0, err } id, err := result.LastInsertId() if err != nil { return 0, err } return int(id), nil } func (m *OrganisationModel) Get(id int) (Organisation, error) { stmt := `SELECT id, name, created FROM organisations WHERE id = ?` row := m.DB.QueryRow(stmt, id) var o Organisation err := row.Scan(&o.ID, &o.Name, &o.Created) if err != nil { if errors.Is(err, sql.ErrNoRows) { return Organisation{}, ErrNoRecord } else { return Organisation{}, err } } return o, nil } // Ten most recent... func (m *OrganisationModel) Latest() ([]Organisation, error) { // Pick out the last 10 stmt := `SELECT id, name, created FROM organisations ORDER BY id DESC LIMIT 10` rows, err := m.DB.Query(stmt) if err != nil { return nil, err } defer rows.Close() var organisations []Organisation for rows.Next() { var o Organisation err = rows.Scan(&o.ID, &o.Name, &o.Created) if err != nil { return nil, err } organisations = append(organisations, o) } if err = rows.Err(); err != nil { return nil, err } return organisations, err }