1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-27 13:48:49 +08:00
Ivan Milošević effade00aa MF-325 - Add SPDX license and copyright headers (#362)
* MF-325 - Add SPDX license and copyright headers

Signed-off-by: Ivan Milošević <iva@blokovi.com>

* MF-325 - Add SPDX license and copyright headers

Signed-off-by: Ivan Milošević <iva@blokovi.com>

* MF-325 - Add SPDX license and copyright headers

Signed-off-by: Ivan Milošević <iva@blokovi.com>

* MF-325 - Add SPDX license and copyright headers

Signed-off-by: Ivan Milošević <iva@blokovi.com>

* MF-325 - Change mainflux version from 0.4.0 to 0.5.0

Signed-off-by: Ivan Milošević <iva@blokovi.com>
2018-08-26 13:15:48 +02:00

59 lines
1.1 KiB
Go

//
// Copyright (c) 2018
// Mainflux
//
// SPDX-License-Identifier: Apache-2.0
//
package postgres
import (
"database/sql"
"github.com/lib/pq"
"github.com/mainflux/mainflux/users"
)
var _ users.UserRepository = (*userRepository)(nil)
const errDuplicate = "unique_violation"
type userRepository struct {
db *sql.DB
}
// New instantiates a PostgreSQL implementation of user
// repository.
func New(db *sql.DB) users.UserRepository {
return &userRepository{db}
}
func (ur userRepository) Save(user users.User) error {
q := `INSERT INTO users (email, password) VALUES ($1, $2)`
if _, err := ur.db.Exec(q, user.Email, user.Password); err != nil {
if pqErr, ok := err.(*pq.Error); ok && errDuplicate == pqErr.Code.Name() {
return users.ErrConflict
}
return err
}
return nil
}
func (ur userRepository) RetrieveByID(email string) (users.User, error) {
q := `SELECT password FROM users WHERE email = $1`
user := users.User{}
if err := ur.db.QueryRow(q, email).Scan(&user.Password); err != nil {
if err == sql.ErrNoRows {
return user, users.ErrNotFound
}
return user, err
}
user.Email = email
return user, nil
}