🐛 Fix wont link account to local model

This commit is contained in:
LittleSheep 2024-07-16 14:41:51 +08:00
parent 2f2a39d93d
commit f601476e6b
3 changed files with 31 additions and 51 deletions

View File

@ -1,63 +1,21 @@
package models package models
import ( import (
"fmt"
"time" "time"
"github.com/samber/lo"
"github.com/spf13/viper"
"gorm.io/datatypes" "gorm.io/datatypes"
) )
type Account struct { type Account struct {
BaseModel BaseModel
Name string `json:"name" gorm:"uniqueIndex"` Name string `json:"name" gorm:"uniqueIndex"`
Nick string `json:"nick"` Nick string `json:"nick"`
Description string `json:"description"` Description string `json:"description"`
Avatar *uint `json:"avatar"` Avatar string `json:"avatar"`
Banner *uint `json:"banner"` Banner string `json:"banner"`
ConfirmedAt *time.Time `json:"confirmed_at"` EmailAddress string `json:"email"`
SuspendedAt *time.Time `json:"suspended_at"` ConfirmedAt *time.Time `json:"confirmed_at"`
PermNodes datatypes.JSONMap `json:"perm_nodes"` SuspendedAt *time.Time `json:"suspended_at"`
PermNodes datatypes.JSONMap `json:"perm_nodes"`
Contacts []AccountContact `json:"contacts"`
}
func (v Account) GetAvatar() *string {
if v.Avatar != nil {
return lo.ToPtr(fmt.Sprintf("%s/api/attachments/%d", viper.GetString("content_endpoint"), *v.Avatar))
}
return nil
}
func (v Account) GetBanner() *string {
if v.Banner != nil {
return lo.ToPtr(fmt.Sprintf("%s/api/attachments/%d", viper.GetString("content_endpoint"), *v.Banner))
}
return nil
}
func (v Account) GetPrimaryEmail() AccountContact {
val, _ := lo.Find(v.Contacts, func(item AccountContact) bool {
return item.Type == EmailAccountContact && item.IsPrimary
})
return val
}
type AccountContactType = int8
const (
EmailAccountContact = AccountContactType(iota)
)
type AccountContact struct {
BaseModel
Type int8 `json:"type"`
Content string `json:"content" gorm:"uniqueIndex"`
IsPublic bool `json:"is_public"`
IsPrimary bool `json:"is_primary"`
VerifiedAt *time.Time `json:"verified_at"`
AccountID uint `json:"account_id"`
} }

View File

@ -8,6 +8,7 @@ import (
"git.solsynth.dev/hydrogen/dealer/pkg/hyper" "git.solsynth.dev/hydrogen/dealer/pkg/hyper"
"git.solsynth.dev/hydrogen/dealer/pkg/internal/directory" "git.solsynth.dev/hydrogen/dealer/pkg/internal/directory"
"git.solsynth.dev/hydrogen/dealer/pkg/internal/models"
"git.solsynth.dev/hydrogen/dealer/pkg/proto" "git.solsynth.dev/hydrogen/dealer/pkg/proto"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
jsoniter "github.com/json-iterator/go" jsoniter "github.com/json-iterator/go"
@ -117,3 +118,23 @@ func EnsureGrantedPerm(c *fiber.Ctx, key string, val any) error {
} }
return nil return nil
} }
func LinkAccountMiddleware(c *fiber.Ctx) error {
if val, ok := c.Locals("p_user").(*proto.UserInfo); ok {
account := models.Account{
BaseModel: models.BaseModel{
ID: uint(val.Id),
},
Name: val.Name,
Nick: val.Nick,
Avatar: val.Avatar,
Banner: val.Banner,
Description: val.GetDescription(),
EmailAddress: val.GetEmail(),
}
c.Locals("user", account)
}
return c.Next()
}

View File

@ -53,6 +53,7 @@ func NewServer() *HTTPApp {
})) }))
app.Use(exts.AuthMiddleware) app.Use(exts.AuthMiddleware)
app.Use(exts.LinkAccountMiddleware)
api.MapAPIs(app) api.MapAPIs(app)