Finilize user api layer

Signed-off-by: Asai Neko <sugar@sne.moe>
This commit is contained in:
2026-01-24 12:37:17 +08:00
parent 8e11ba4631
commit 314995e5f9
15 changed files with 233 additions and 442 deletions

View File

@@ -73,10 +73,10 @@ func (self *User) SetAllowPublic(s bool) *User {
return self
}
func (self *User) GetByEmail(ctx *context.Context, email *string) (*User, error) {
func (self *User) GetByEmail(ctx context.Context, email *string) (*User, error) {
var user User
err := Database.WithContext(*ctx).
err := Database.WithContext(ctx).
Where("email = ?", email).
First(&user).Error
@@ -90,10 +90,10 @@ func (self *User) GetByEmail(ctx *context.Context, email *string) (*User, error)
return &user, nil
}
func (self *User) GetByUserId(ctx *context.Context, userId *uuid.UUID) (*User, error) {
func (self *User) GetByUserId(ctx context.Context, userId *uuid.UUID) (*User, error) {
var user User
err := Database.WithContext(*ctx).
err := Database.WithContext(ctx).
Where("user_id = ?", userId).
First(&user).Error
@@ -107,12 +107,12 @@ func (self *User) GetByUserId(ctx *context.Context, userId *uuid.UUID) (*User, e
return &user, err
}
func (self *User) Create(ctx *context.Context) error {
func (self *User) Create(ctx context.Context) error {
self.UUID = uuid.New()
self.UserId = uuid.New()
// DB transaction only
if err := Database.WithContext(*ctx).Transaction(func(tx *gorm.DB) error {
if err := Database.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
if err := tx.Create(self).Error; err != nil {
return err
}
@@ -122,7 +122,7 @@ func (self *User) Create(ctx *context.Context) error {
}
// Search index (eventual consistency)
if err := self.UpdateSearchIndex(ctx); err != nil {
if err := self.UpdateSearchIndex(&ctx); err != nil {
// TODO: async retry / log
return err
}
@@ -130,8 +130,8 @@ func (self *User) Create(ctx *context.Context) error {
return nil
}
func (self *User) UpdateByUserID(ctx *context.Context, userId *uuid.UUID) error {
return Database.WithContext(*ctx).Transaction(func(tx *gorm.DB) error {
func (self *User) UpdateByUserID(ctx context.Context, userId *uuid.UUID) error {
return Database.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
if err := tx.Model(&User{}).Where("user_id = ?", userId).Updates(&self).Error; err != nil {
return err
}
@@ -139,20 +139,20 @@ func (self *User) UpdateByUserID(ctx *context.Context, userId *uuid.UUID) error
})
}
func (self *User) GetFullTable(ctx *context.Context) (*[]User, error) {
func (self *User) GetFullTable(ctx context.Context) (*[]User, error) {
var users []User
err := Database.WithContext(*ctx).Find(&users).Error
err := Database.WithContext(ctx).Find(&users).Error
if err != nil {
return nil, err
}
return &users, nil
}
func (self *User) FastListUsers(ctx *context.Context, limit, offset *int64) (*[]UserSearchDoc, error) {
func (self *User) FastListUsers(ctx context.Context, limit, offset *int64) (*[]UserSearchDoc, error) {
index := MeiliSearch.Index("user")
// Fast read from MeiliSearch, no DB involved
result, err := index.SearchWithContext(*ctx, "", &meilisearch.SearchRequest{
result, err := index.SearchWithContext(ctx, "", &meilisearch.SearchRequest{
Limit: *limit,
Offset: *offset,
})