Full refactor of codebase
This commit is contained in:
76
src/repository/crud.go
Normal file
76
src/repository/crud.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"github.com/ascyii/qrank/src/utils"
|
||||
"github.com/gin-contrib/sessions"
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func FindUser(ref any) *User {
|
||||
// Session case
|
||||
if c, ok := ref.(*gin.Context); ok {
|
||||
session := sessions.Default(c)
|
||||
if uid := session.Get("user_id"); uid != nil {
|
||||
var u User
|
||||
if err := db.First(&u, uid.(uint)).Error; err == nil {
|
||||
return &u
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// String handle case
|
||||
if h, ok := ref.(string); ok {
|
||||
h = strings.TrimSpace(h)
|
||||
if h == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
var u User
|
||||
var err error
|
||||
if strings.Contains(h, "@") {
|
||||
err = db.Where("LOWER(email) = ?", strings.ToLower(h)).First(&u).Error
|
||||
} else {
|
||||
err = db.Where("username = ?", h).First(&u).Error
|
||||
}
|
||||
|
||||
if err == nil {
|
||||
return &u
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func FindOrCreateUserFromEmail(email string) *User {
|
||||
var u User
|
||||
// Try to find existing user
|
||||
err := db.Where("email = ?", email).First(&u).Error // TODO: This makes bad logs
|
||||
if err == nil {
|
||||
return &u
|
||||
}
|
||||
|
||||
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
log.Println("Find user:", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Create a new user
|
||||
u = User{
|
||||
Email: email,
|
||||
Username: utils.DefaultUsername(),
|
||||
}
|
||||
if err := EnsureUniqueUsernameAndSlug(&u); err != nil {
|
||||
log.Println("Ensure unique:", err)
|
||||
}
|
||||
if err := db.Create(&u).Error; err != nil {
|
||||
log.Println("Create user:", err)
|
||||
return nil
|
||||
}
|
||||
return &u
|
||||
}
|
||||
Reference in New Issue
Block a user