summaryrefslogtreecommitdiffstats
path: root/internal/models/organisations.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/models/organisations.go')
-rw-r--r--internal/models/organisations.go85
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
+}