41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
package repositories
|
|
|
|
import (
|
|
"GoMembership/internal/models"
|
|
"GoMembership/pkg/errors"
|
|
"database/sql"
|
|
)
|
|
|
|
type UserRepository interface {
|
|
CreateUser(user *models.User) error
|
|
FindUserByID(id int) (*models.User, error)
|
|
// FindUserByEmail(email string) (*models.User, error)
|
|
}
|
|
|
|
type userRepository struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
func NewUserRepository(db *sql.DB) UserRepository {
|
|
return &userRepository{db}
|
|
}
|
|
|
|
func (r *userRepository) CreateUser(user *models.User) error {
|
|
query := "INSERT INTO users (first_name, last_name, email, password, iban, bic, mandate_reference, mandate_date_signed, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
|
_, err := r.db.Exec(query, user.FirstName, user.LastName, user.Email, user.Password, user.CreatedAt, user.UpdatedAt)
|
|
return err
|
|
}
|
|
|
|
func (r *userRepository) FindUserByID(id int) (*models.User, error) {
|
|
var user models.User
|
|
query := "SELECT id, first_name, last_name, email, iban, bic, mandate_reference FROM users WHERE id = ?"
|
|
err := r.db.QueryRow(query, id).Scan(&user.ID, &user.FirstName, &user.LastName, &user.Email, &user.IBAN, &user.BIC, &user.MandateReference)
|
|
if err != nil {
|
|
if err == sql.ErrNoRows {
|
|
return nil, errors.ErrUserNotFound
|
|
}
|
|
return nil, err
|
|
}
|
|
return &user, nil
|
|
}
|