2021-07-12 18:22:16 +00:00
|
|
|
package db
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
|
2021-10-03 16:03:55 +00:00
|
|
|
"github.com/google/uuid"
|
|
|
|
"gorm.io/gorm"
|
2021-07-12 18:22:16 +00:00
|
|
|
"gorm.io/gorm/clause"
|
|
|
|
)
|
|
|
|
|
2021-07-18 04:22:54 +00:00
|
|
|
type VerificationRequest struct {
|
2021-10-03 16:03:55 +00:00
|
|
|
ID uuid.UUID `gorm:"type:uuid;"`
|
|
|
|
Token string `gorm:"index"`
|
2021-07-12 18:22:16 +00:00
|
|
|
Identifier string
|
|
|
|
ExpiresAt int64
|
|
|
|
CreatedAt int64 `gorm:"autoCreateTime"`
|
|
|
|
UpdatedAt int64 `gorm:"autoUpdateTime"`
|
|
|
|
Email string `gorm:"unique"`
|
|
|
|
}
|
|
|
|
|
2021-10-03 16:03:55 +00:00
|
|
|
func (v *VerificationRequest) BeforeCreate(tx *gorm.DB) (err error) {
|
|
|
|
v.ID = uuid.New()
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2021-07-12 18:22:16 +00:00
|
|
|
// AddVerification function to add verification record
|
2021-07-18 04:22:54 +00:00
|
|
|
func (mgr *manager) AddVerification(verification VerificationRequest) (VerificationRequest, error) {
|
2021-07-12 18:22:16 +00:00
|
|
|
result := mgr.db.Clauses(clause.OnConflict{
|
|
|
|
Columns: []clause.Column{{Name: "email"}},
|
|
|
|
DoUpdates: clause.AssignmentColumns([]string{"token", "identifier", "expires_at"}),
|
|
|
|
}).Create(&verification)
|
|
|
|
if result.Error != nil {
|
|
|
|
log.Println(`Error saving verification record`, result.Error)
|
|
|
|
return verification, result.Error
|
|
|
|
}
|
|
|
|
return verification, nil
|
|
|
|
}
|
2021-07-13 20:06:11 +00:00
|
|
|
|
2021-07-18 04:22:54 +00:00
|
|
|
func (mgr *manager) GetVerificationByToken(token string) (VerificationRequest, error) {
|
|
|
|
var verification VerificationRequest
|
2021-07-13 20:06:11 +00:00
|
|
|
result := mgr.db.Where("token = ?", token).First(&verification)
|
|
|
|
|
|
|
|
if result.Error != nil {
|
|
|
|
log.Println(`Error getting verification token:`, result.Error)
|
|
|
|
return verification, result.Error
|
|
|
|
}
|
|
|
|
|
|
|
|
return verification, nil
|
|
|
|
}
|
|
|
|
|
2021-07-18 07:26:17 +00:00
|
|
|
func (mgr *manager) GetVerificationByEmail(email string) (VerificationRequest, error) {
|
|
|
|
var verification VerificationRequest
|
|
|
|
result := mgr.db.Where("email = ?", email).First(&verification)
|
|
|
|
|
|
|
|
if result.Error != nil {
|
|
|
|
log.Println(`Error getting verification token:`, result.Error)
|
|
|
|
return verification, result.Error
|
|
|
|
}
|
|
|
|
|
|
|
|
return verification, nil
|
|
|
|
}
|
|
|
|
|
2021-07-13 20:06:11 +00:00
|
|
|
func (mgr *manager) DeleteToken(email string) error {
|
2021-07-18 04:22:54 +00:00
|
|
|
var verification VerificationRequest
|
2021-07-13 20:06:11 +00:00
|
|
|
result := mgr.db.Where("email = ?", email).Delete(&verification)
|
|
|
|
|
|
|
|
if result.Error != nil {
|
|
|
|
log.Println(`Error deleting token:`, result.Error)
|
|
|
|
return result.Error
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
2021-07-18 04:22:54 +00:00
|
|
|
|
|
|
|
// GetUsers function to get all users
|
|
|
|
func (mgr *manager) GetVerificationRequests() ([]VerificationRequest, error) {
|
|
|
|
var verificationRequests []VerificationRequest
|
|
|
|
result := mgr.db.Find(&verificationRequests)
|
|
|
|
if result.Error != nil {
|
|
|
|
log.Println(result.Error)
|
|
|
|
return verificationRequests, result.Error
|
|
|
|
}
|
|
|
|
return verificationRequests, nil
|
|
|
|
}
|