🐛 Fix wont link account to local model
This commit is contained in:
		| @@ -1,63 +1,21 @@ | ||||
| package models | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/samber/lo" | ||||
| 	"github.com/spf13/viper" | ||||
| 	"gorm.io/datatypes" | ||||
| ) | ||||
|  | ||||
| type Account struct { | ||||
| 	BaseModel | ||||
|  | ||||
| 	Name        string            `json:"name" gorm:"uniqueIndex"` | ||||
| 	Nick        string            `json:"nick"` | ||||
| 	Description string            `json:"description"` | ||||
| 	Avatar      *uint             `json:"avatar"` | ||||
| 	Banner      *uint             `json:"banner"` | ||||
| 	ConfirmedAt *time.Time        `json:"confirmed_at"` | ||||
| 	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"` | ||||
| 	Name         string            `json:"name" gorm:"uniqueIndex"` | ||||
| 	Nick         string            `json:"nick"` | ||||
| 	Description  string            `json:"description"` | ||||
| 	Avatar       string            `json:"avatar"` | ||||
| 	Banner       string            `json:"banner"` | ||||
| 	EmailAddress string            `json:"email"` | ||||
| 	ConfirmedAt  *time.Time        `json:"confirmed_at"` | ||||
| 	SuspendedAt  *time.Time        `json:"suspended_at"` | ||||
| 	PermNodes    datatypes.JSONMap `json:"perm_nodes"` | ||||
| } | ||||
|   | ||||
| @@ -8,6 +8,7 @@ import ( | ||||
|  | ||||
| 	"git.solsynth.dev/hydrogen/dealer/pkg/hyper" | ||||
| 	"git.solsynth.dev/hydrogen/dealer/pkg/internal/directory" | ||||
| 	"git.solsynth.dev/hydrogen/dealer/pkg/internal/models" | ||||
| 	"git.solsynth.dev/hydrogen/dealer/pkg/proto" | ||||
| 	"github.com/gofiber/fiber/v2" | ||||
| 	jsoniter "github.com/json-iterator/go" | ||||
| @@ -117,3 +118,23 @@ func EnsureGrantedPerm(c *fiber.Ctx, key string, val any) error { | ||||
| 	} | ||||
| 	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() | ||||
| } | ||||
|   | ||||
| @@ -53,6 +53,7 @@ func NewServer() *HTTPApp { | ||||
| 	})) | ||||
|  | ||||
| 	app.Use(exts.AuthMiddleware) | ||||
| 	app.Use(exts.LinkAccountMiddleware) | ||||
|  | ||||
| 	api.MapAPIs(app) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user