| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package gorm
- import (
- "github.com/porter-dev/porter/internal/models"
- "github.com/porter-dev/porter/internal/repository"
- "golang.org/x/crypto/bcrypt"
- "gorm.io/gorm"
- )
- // UserRepository uses gorm.DB for querying the database
- type UserRepository struct {
- db *gorm.DB
- }
- // NewUserRepository returns a DefaultUserRepository which uses
- // gorm.DB for querying the database
- func NewUserRepository(db *gorm.DB) repository.UserRepository {
- return &UserRepository{db}
- }
- // CreateUser adds a new User row to the Users table in the database
- func (repo *UserRepository) CreateUser(user *models.User) (*models.User, error) {
- if err := repo.db.Create(user).Error; err != nil {
- return nil, err
- }
- return user, nil
- }
- // ReadUser finds a single user based on their unique id
- func (repo *UserRepository) ReadUser(id uint) (*models.User, error) {
- user := &models.User{}
- if err := repo.db.Where("id = ?", id).First(&user).Error; err != nil {
- return nil, err
- }
- return user, nil
- }
- // ReadUserByEmail finds a single user based on their unique email
- func (repo *UserRepository) ReadUserByEmail(email string) (*models.User, error) {
- user := &models.User{}
- if err := repo.db.Where("email = ?", email).First(&user).Error; err != nil {
- return nil, err
- }
- return user, nil
- }
- // ReadUserByGithubUserID finds a single user based on their github user id
- func (repo *UserRepository) ReadUserByGithubUserID(id int64) (*models.User, error) {
- user := &models.User{}
- if err := repo.db.Where("github_user_id = ?", id).First(&user).Error; err != nil {
- return nil, err
- }
- return user, nil
- }
- // UpdateUser modifies an existing User in the database
- func (repo *UserRepository) UpdateUser(user *models.User) (*models.User, error) {
- if err := repo.db.Save(user).Error; err != nil {
- return nil, err
- }
- return user, nil
- }
- // DeleteUser deletes a single user using their unique id
- func (repo *UserRepository) DeleteUser(user *models.User) (*models.User, error) {
- if err := repo.db.Delete(&user).Error; err != nil {
- return nil, err
- }
- return user, nil
- }
- // CheckPassword checks the input password is correct for the provided user id.
- func (repo *UserRepository) CheckPassword(id int, pwd string) (bool, error) {
- u := &models.User{}
- if err := repo.db.First(u, id).Error; err != nil {
- return false, err
- }
- if err := bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(pwd)); err != nil {
- return false, err
- }
- return true, nil
- }
|