added validation; DB is global now

This commit is contained in:
$(pass /github/name)
2024-07-11 20:59:52 +02:00
parent e4475e2400
commit 03a2b3bdc5
22 changed files with 287 additions and 218 deletions

View File

@@ -3,10 +3,11 @@ package repositories
import (
"time"
"GoMembership/internal/constants"
"gorm.io/gorm"
"GoMembership/internal/constants"
"GoMembership/internal/database"
"gorm.io/gorm/clause"
"GoMembership/internal/models"
@@ -14,7 +15,7 @@ import (
"GoMembership/pkg/logger"
)
type UserRepository interface {
type UserRepositoryInterface interface {
CreateUser(user *models.User) (int64, error)
UpdateUser(userID int64, user *models.User) error
FindUserByID(id int64) (*models.User, error)
@@ -24,28 +25,22 @@ type UserRepository interface {
VerifyUserOfToken(token *string) (*models.User, error)
}
type userRepository struct {
db *gorm.DB
}
type UserRepository struct{}
func NewUserRepository(db *gorm.DB) UserRepository {
return &userRepository{db}
}
func (repo *userRepository) CreateUser(user *models.User) (int64, error) {
result := repo.db.Create(user)
func (ur *UserRepository) CreateUser(user *models.User) (int64, error) {
result := database.DB.Create(user)
if result.Error != nil {
return 0, result.Error
}
return user.ID, nil
}
func (repo *userRepository) UpdateUser(userID int64, user *models.User) error {
func (ur *UserRepository) UpdateUser(userID int64, user *models.User) error {
logger.Info.Printf("Updating User: %#v\n", user)
if user == nil {
return errors.ErrNoData
}
result := repo.db.Session(&gorm.Session{FullSaveAssociations: true}).Updates(&user)
result := database.DB.Session(&gorm.Session{FullSaveAssociations: true}).Updates(&user)
if result.Error != nil {
return result.Error
}
@@ -57,9 +52,9 @@ func (repo *userRepository) UpdateUser(userID int64, user *models.User) error {
return nil
}
func (repo *userRepository) FindUserByID(id int64) (*models.User, error) {
func (ur *UserRepository) FindUserByID(id int64) (*models.User, error) {
var user models.User
result := repo.db.Preload("Consents").Preload("BankAccount").Preload("Verification").Preload("Membership").First(&user, id)
result := database.DB.Preload("Consents").Preload("BankAccount").Preload("Verification").Preload("Membership").First(&user, id)
if result.Error != nil {
if result.Error == gorm.ErrRecordNotFound {
return nil, gorm.ErrRecordNotFound
@@ -69,9 +64,9 @@ func (repo *userRepository) FindUserByID(id int64) (*models.User, error) {
return &user, nil
}
func (repo *userRepository) FindUserByEmail(email string) (*models.User, error) {
func (ur *UserRepository) FindUserByEmail(email string) (*models.User, error) {
var user models.User
result := repo.db.Where("email = ?", email).First(&user)
result := database.DB.Where("email = ?", email).First(&user)
if result.Error != nil {
if result.Error == gorm.ErrRecordNotFound {
return nil, gorm.ErrRecordNotFound
@@ -81,9 +76,9 @@ func (repo *userRepository) FindUserByEmail(email string) (*models.User, error)
return &user, nil
}
func (repo *userRepository) IsVerified(userID *int64) (bool, error) {
func (ur *UserRepository) IsVerified(userID *int64) (bool, error) {
var user models.User
result := repo.db.Select("status").First(&user, userID)
result := database.DB.Select("status").First(&user, userID)
if result.Error != nil {
if result.Error == gorm.ErrRecordNotFound {
return false, gorm.ErrRecordNotFound
@@ -93,9 +88,9 @@ func (repo *userRepository) IsVerified(userID *int64) (bool, error) {
return user.Status != constants.UnverifiedStatus, nil
}
func (repo *userRepository) VerifyUserOfToken(token *string) (*models.User, error) {
func (ur *UserRepository) VerifyUserOfToken(token *string) (*models.User, error) {
var emailVerification models.Verification
result := repo.db.Where("verification_token = ?", token).First(&emailVerification)
result := database.DB.Where("verification_token = ?", token).First(&emailVerification)
if result.Error != nil {
if result.Error == gorm.ErrRecordNotFound {
return nil, gorm.ErrRecordNotFound
@@ -104,11 +99,11 @@ func (repo *userRepository) VerifyUserOfToken(token *string) (*models.User, erro
}
// Check if the user is already verified
verified, err := repo.IsVerified(&emailVerification.UserID)
verified, err := ur.IsVerified(&emailVerification.UserID)
if err != nil {
return nil, err
}
user, err := repo.FindUserByID(emailVerification.UserID)
user, err := ur.FindUserByID(emailVerification.UserID)
if err != nil {
return nil, err
}
@@ -121,7 +116,7 @@ func (repo *userRepository) VerifyUserOfToken(token *string) (*models.User, erro
user.Status = constants.VerifiedStatus
user.Verification = emailVerification
err = repo.UpdateUser(emailVerification.UserID, user)
err = ur.UpdateUser(emailVerification.UserID, user)
if err != nil {
return nil, err
}
@@ -129,9 +124,9 @@ func (repo *userRepository) VerifyUserOfToken(token *string) (*models.User, erro
return user, nil
}
func (repo *userRepository) SetVerificationToken(user *models.User, token *string) (int64, error) {
func (ur *UserRepository) SetVerificationToken(user *models.User, token *string) (int64, error) {
// Check if user is already verified
verified, err := repo.IsVerified(&user.ID)
verified, err := ur.IsVerified(&user.ID)
if err != nil {
return -1, err
}
@@ -146,7 +141,7 @@ func (repo *userRepository) SetVerificationToken(user *models.User, token *strin
}
// Use GORM to insert or update the Verification record
result := repo.db.Clauses(clause.OnConflict{
result := database.DB.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "user_id"}},
DoUpdates: clause.AssignmentColumns([]string{"verification_token", "created_at"}),
}).Create(&verification)