diff --git a/pkg/repository/auth_schema.go b/pkg/repository/auth_schema.go new file mode 100644 index 0000000..709bfd6 --- /dev/null +++ b/pkg/repository/auth_schema.go @@ -0,0 +1,86 @@ +package repository + +import ( + "errors" + "esauth" + "fmt" + "math/rand/v2" + + "github.com/sirupsen/logrus" + "gorm.io/gorm" +) + +type AuthSchema struct { + db *gorm.DB +} + +func NewAuthSchema(db *gorm.DB) *AuthSchema { + return &AuthSchema{db: db} +} + +func (r AuthSchema) CreateUser(user *esauth.User) (int64, error) { + if user.Username != "" { + userF := esauth.User{} + err := r.db.Find(&userF, "username = ?", user.Username).Error + if (err == nil) && (userF.Id > 0) && (userF.Id != user.Id) { + logrus.Warnf("Same username USER: %d (%s) -> %s", userF.Id, user.FirstName, userF.Username) + user.Username += fmt.Sprintf("%d", (rand.IntN(999999) + 1)) + return r.CreateUser(user) + } + } + err := r.db.Create(&user).Error + return user.Id, err +} + +func (r AuthSchema) SaveUser(user *esauth.User) (int64, error) { + if user.Username != "" { + userF := esauth.User{} + err := r.db.Find(&userF, "username = ?", user.Username).Error + if (err == nil) && (userF.Id >= 0) && (userF.Id != user.Id) { + return -1, errors.New("username already used") + } + } + err := r.db.Save(user).Error + return user.Id, err +} + +func (r AuthSchema) GetUser(id int64) (esauth.User, error) { + user := esauth.User{} + err := r.db.Find(&user, "id = ?", id).Error + if user.Id == -1 { + err = fmt.Errorf("unknown user %d", id) + } + return user, err +} + +func (r AuthSchema) FindUser(query, param string) (esauth.User, error) { + user := esauth.User{} + err := r.db.Find(&user, query, param).Error + return user, err +} + +func (r AuthSchema) GetUsers(start, limit int) []int64 { + result := []esauth.User{} + r.db.Select("id").Limit(limit).Offset(start).Find(&result) + var ans = make([]int64, len(result)) + for i, res := range result { + ans[i] = res.Id + } + return ans +} + +func (r AuthSchema) GetUsersCount() int64 { + var count int64 = 0 + r.db.Model(&esauth.User{}).Count(&count) + return count +} + +func (r AuthSchema) DeleteUser(id int64) error { + user := esauth.User{} + err := r.db.Find(&user, "id = ?", id).Error + if user.Id == -1 { + err = fmt.Errorf("unknown user %d", id) + } + r.db.Delete(user) + return err +}