summaryrefslogtreecommitdiff
path: root/persistence/sqlite
diff options
context:
space:
mode:
Diffstat (limited to 'persistence/sqlite')
-rw-r--r--persistence/sqlite/0001_Create_Initial_Tables.sql13
-rw-r--r--persistence/sqlite/sqliteRepository.go100
2 files changed, 113 insertions, 0 deletions
diff --git a/persistence/sqlite/0001_Create_Initial_Tables.sql b/persistence/sqlite/0001_Create_Initial_Tables.sql
new file mode 100644
index 0000000..d563e4a
--- /dev/null
+++ b/persistence/sqlite/0001_Create_Initial_Tables.sql
@@ -0,0 +1,13 @@
+CREATE TABLE IF NOT EXISTS registrations (
+ reg_id TEXT PRIMARY KEY NOT NULL,
+ first_name TEXT NOT NULL,
+ last_name TEXT NOT NULL,
+ email TEXT NOT NULL,
+ company TEXT,
+ training_code TEXT,
+ date TEXT NOT NULL,
+ privacy_policy_accepted INTEGER NOT NULL,
+ confirmed INTEGER NOT NULL
+);
+
+PRAGMA user_version = 1
diff --git a/persistence/sqlite/sqliteRepository.go b/persistence/sqlite/sqliteRepository.go
new file mode 100644
index 0000000..61e89d8
--- /dev/null
+++ b/persistence/sqlite/sqliteRepository.go
@@ -0,0 +1,100 @@
+package persistence
+
+import (
+ "context"
+ "database/sql"
+ "log"
+
+ _ "modernc.org/sqlite"
+
+ "uvok.de/go/training_fellow/registration"
+)
+
+var (
+ debug bool = true
+)
+
+type SqliteRepository struct {
+ FileName string
+ context context.Context
+}
+
+func NewRepository(fileName string, context context.Context) *SqliteRepository {
+ repo := SqliteRepository{FileName: fileName, context: context}
+ return &repo
+}
+
+func (repo *SqliteRepository) SaveRegistration(registration *registration.Registration) error {
+ db, err := repo.checkInit()
+ if err != nil {
+ return err
+ }
+ defer db.Close()
+
+ res, err := db.ExecContext(
+ repo.context,
+ `INSERT INTO registrations
+ (reg_id, first_name, last_name, email, company, training_code, date, privacy_policy_accepted, confirmed)
+ VALUES (?,?,?,?,?,?,?,?,?)`,
+ registration.RegId,
+ registration.FirstName,
+ registration.LastName,
+ registration.Email,
+ registration.Company,
+ registration.TrainingCode,
+ registration.Date,
+ registration.PrivacyPolicyAccepted,
+ registration.Confirmed)
+
+ if debug {
+ log.Printf("SQL result: %v", res)
+ }
+ return err
+}
+
+func (repo *SqliteRepository) GetUnconfirmedRegistrations() ([]*registration.Registration, error) {
+ db, err := repo.checkInit()
+ if err != nil {
+ return nil, err
+ }
+ res, err := db.QueryContext(
+ repo.context,
+ `SELECT reg_id, first_name, last_name, email, company, training_code, date, privacy_policy_accepted
+ FROM registrations
+ WHERE confirmed = 0
+ `)
+
+ if err != nil {
+ return nil, err
+ }
+ defer res.Close()
+
+ regArray := make([]*registration.Registration, 0)
+ for res.Next() {
+ reg := registration.Registration{}
+ err = res.Scan(&reg.RegId, &reg.FirstName, &reg.LastName, &reg.Email, &reg.Company, &reg.TrainingCode, &reg.Date, &reg.PrivacyPolicyAccepted)
+ if err != nil {
+ log.Printf("Error scanning: %v", err)
+ }
+ regArray = append(regArray, &reg)
+ }
+ return regArray, nil
+}
+
+func (repo *SqliteRepository) ConfirmRegistration(registrationId string) (*registration.Registration, error) {
+ repo.checkInit()
+ panic("not implemented") // TODO: Implement
+}
+
+func (repo *SqliteRepository) checkInit() (*sql.DB, error) {
+ db, err := sql.Open("sqlite", repo.FileName)
+ if err != nil {
+ return nil, err
+ }
+ err = db.PingContext(repo.context)
+
+ if err != nil {
+ return nil, err
+ }
+ return db, nil
+}