diff options
Diffstat (limited to 'server/admin/store.go')
-rw-r--r-- | server/admin/store.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/server/admin/store.go b/server/admin/store.go new file mode 100644 index 0000000..437e6af --- /dev/null +++ b/server/admin/store.go @@ -0,0 +1,49 @@ +package admin + +import ( + "context" + "errors" + + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgxpool" +) + +type Store struct { + database *pgxpool.Pool +} + +func NewStore(database *pgxpool.Pool) *Store { + return &Store{ + database, + } +} + +func (store Store) Find(requestAdmin Admin) (Admin, error) { + adminRows, err := store.database.Query(context.Background(), + "select * from admin") + if err != nil { + return Admin{}, err + } + defer adminRows.Close() + admin, found := createAdmin(requestAdmin, adminRows) + + if found { + return admin, nil + } + return Admin{}, errors.New("admin not found") +} + +func createAdmin(requestAdmin Admin, adminRows pgx.Rows) (Admin, bool) { + var databaseAdmin Admin + for adminRows.Next() { + err := adminRows.Scan(&databaseAdmin.Username, &databaseAdmin.Password) + if err != nil { + return Admin{}, false + } + if databaseAdmin.Username == requestAdmin.Username && + databaseAdmin.Password == requestAdmin.Password { + return databaseAdmin, true + } + } + return Admin{}, false +} |