diff options
author | Yulqen <246857+yulqen@users.noreply.github.com> | 2024-04-18 13:58:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-18 13:58:11 +0100 |
commit | 69017cc225e2754466b8444ca42cb1122208425d (patch) | |
tree | 6a7ac8d150b95c1fad9229d124a23737abc17964 /internal/models/organisations.go | |
parent | 530f08071fc1295fabdaedf9724b8cda48780927 (diff) | |
parent | f08ac7b887e0bae0cb67362eec90a575faec07f1 (diff) |
Merge pull request #4 from defencedigital/changes
Changes
Diffstat (limited to 'internal/models/organisations.go')
-rw-r--r-- | internal/models/organisations.go | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/internal/models/organisations.go b/internal/models/organisations.go new file mode 100644 index 0000000..88f7bc9 --- /dev/null +++ b/internal/models/organisations.go @@ -0,0 +1,85 @@ +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 +} |