♻️ Use the new dealer BaseUser and remove ExternalID
This commit is contained in:
parent
78705e82a8
commit
6c5a99e867
10
.idea/workspace.xml
generated
10
.idea/workspace.xml
generated
@ -4,12 +4,8 @@
|
|||||||
<option name="autoReloadType" value="ALL" />
|
<option name="autoReloadType" value="ALL" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="18dd0d68-b4b8-40db-9734-9119b5c848bd" name="更改" comment=":bug: Fix account_id where clause causing indexing issue">
|
<list default="true" id="18dd0d68-b4b8-40db-9734-9119b5c848bd" name="更改" comment=":sparkles: Attachment API can edit metadata">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/dataSources.local.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/dataSources.local.xml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Checkout_at_2024_8_20,_22_59_[更改]/shelved.patch" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Checkout_at_2024_8_20__22_59___.xml" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/pkg/internal/server/api/attachments_api.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/server/api/attachments_api.go" afterDir="false" />
|
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
@ -120,7 +116,6 @@
|
|||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="VcsManagerConfiguration">
|
<component name="VcsManagerConfiguration">
|
||||||
<MESSAGE value=":sparkles: Self reference detection" />
|
|
||||||
<MESSAGE value=":sparkles: List attachment original filter" />
|
<MESSAGE value=":sparkles: List attachment original filter" />
|
||||||
<MESSAGE value=":sparkles: Attachment pool basis" />
|
<MESSAGE value=":sparkles: Attachment pool basis" />
|
||||||
<MESSAGE value=":sparkles: Attachment has pool" />
|
<MESSAGE value=":sparkles: Attachment has pool" />
|
||||||
@ -145,7 +140,8 @@
|
|||||||
<MESSAGE value=":bug: Fix uploader still using old cache api" />
|
<MESSAGE value=":bug: Fix uploader still using old cache api" />
|
||||||
<MESSAGE value=":bug: Fix concurrent upload multipart cause incomplete" />
|
<MESSAGE value=":bug: Fix concurrent upload multipart cause incomplete" />
|
||||||
<MESSAGE value=":bug: Fix account_id where clause causing indexing issue" />
|
<MESSAGE value=":bug: Fix account_id where clause causing indexing issue" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value=":bug: Fix account_id where clause causing indexing issue" />
|
<MESSAGE value=":sparkles: Attachment API can edit metadata" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value=":sparkles: Attachment API can edit metadata" />
|
||||||
</component>
|
</component>
|
||||||
<component name="VgoProject">
|
<component name="VgoProject">
|
||||||
<settings-migrated>true</settings-migrated>
|
<settings-migrated>true</settings-migrated>
|
||||||
|
2
go.mod
2
go.mod
@ -3,7 +3,7 @@ module git.solsynth.dev/hydrogen/paperclip
|
|||||||
go 1.21.6
|
go 1.21.6
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.solsynth.dev/hydrogen/dealer v0.0.0-20240823113302-208da7e90fdb
|
git.solsynth.dev/hydrogen/dealer v0.0.0-20240911145828-d734d617bfc8
|
||||||
github.com/go-playground/validator/v10 v10.17.0
|
github.com/go-playground/validator/v10 v10.17.0
|
||||||
github.com/gofiber/fiber/v2 v2.52.4
|
github.com/gofiber/fiber/v2 v2.52.4
|
||||||
github.com/google/uuid v1.6.0
|
github.com/google/uuid v1.6.0
|
||||||
|
2
go.sum
2
go.sum
@ -1,5 +1,7 @@
|
|||||||
git.solsynth.dev/hydrogen/dealer v0.0.0-20240823113302-208da7e90fdb h1:dv4uVDMe53eBprW2Q8ocAhZuO+DKWlWyxGiJMiwE62E=
|
git.solsynth.dev/hydrogen/dealer v0.0.0-20240823113302-208da7e90fdb h1:dv4uVDMe53eBprW2Q8ocAhZuO+DKWlWyxGiJMiwE62E=
|
||||||
git.solsynth.dev/hydrogen/dealer v0.0.0-20240823113302-208da7e90fdb/go.mod h1:Q51JPkKnV0UoOT/IRmdBh5CyfSlp7s8BRGzgooYHqkI=
|
git.solsynth.dev/hydrogen/dealer v0.0.0-20240823113302-208da7e90fdb/go.mod h1:Q51JPkKnV0UoOT/IRmdBh5CyfSlp7s8BRGzgooYHqkI=
|
||||||
|
git.solsynth.dev/hydrogen/dealer v0.0.0-20240911145828-d734d617bfc8 h1:kWheneSdSySG5tz9TAXrtr546JdMpQZTyWDFk4jeGwg=
|
||||||
|
git.solsynth.dev/hydrogen/dealer v0.0.0-20240911145828-d734d617bfc8/go.mod h1:Q51JPkKnV0UoOT/IRmdBh5CyfSlp7s8BRGzgooYHqkI=
|
||||||
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
|
@ -1,19 +1,9 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
// Account profiles basically fetched from Hydrogen.Passport
|
import "git.solsynth.dev/hydrogen/dealer/pkg/hyper"
|
||||||
// But cache at here for better usage
|
|
||||||
// At the same time this model can make relations between local models
|
|
||||||
type Account struct {
|
|
||||||
BaseModel
|
|
||||||
|
|
||||||
Name string `json:"name"`
|
type Account struct {
|
||||||
Nick string `json:"nick"`
|
hyper.BaseUser
|
||||||
Avatar string `json:"avatar"`
|
|
||||||
Banner string `json:"banner"`
|
|
||||||
Description string `json:"description"`
|
|
||||||
EmailAddress string `json:"email_address"`
|
|
||||||
PowerLevel int `json:"power_level"`
|
|
||||||
ExternalID uint `json:"external_id"`
|
|
||||||
|
|
||||||
Attachments []Attachment `json:"attachments"`
|
Attachments []Attachment `json:"attachments"`
|
||||||
Pools []AttachmentPool `json:"pools"`
|
Pools []AttachmentPool `json:"pools"`
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
package exts
|
|
||||||
|
|
||||||
import (
|
|
||||||
"git.solsynth.dev/hydrogen/dealer/pkg/proto"
|
|
||||||
"git.solsynth.dev/hydrogen/paperclip/pkg/internal/services"
|
|
||||||
"github.com/gofiber/fiber/v2"
|
|
||||||
)
|
|
||||||
|
|
||||||
func LinkAccountMiddleware(c *fiber.Ctx) error {
|
|
||||||
if val, ok := c.Locals("p_user").(*proto.UserInfo); ok {
|
|
||||||
if account, err := services.LinkAccount(val); err != nil {
|
|
||||||
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
|
||||||
} else {
|
|
||||||
c.Locals("user", account)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.Next()
|
|
||||||
}
|
|
@ -3,9 +3,11 @@ package server
|
|||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"git.solsynth.dev/hydrogen/dealer/pkg/hyper"
|
||||||
|
"git.solsynth.dev/hydrogen/paperclip/pkg/internal/database"
|
||||||
"git.solsynth.dev/hydrogen/paperclip/pkg/internal/gap"
|
"git.solsynth.dev/hydrogen/paperclip/pkg/internal/gap"
|
||||||
|
"git.solsynth.dev/hydrogen/paperclip/pkg/internal/models"
|
||||||
"git.solsynth.dev/hydrogen/paperclip/pkg/internal/server/api"
|
"git.solsynth.dev/hydrogen/paperclip/pkg/internal/server/api"
|
||||||
"git.solsynth.dev/hydrogen/paperclip/pkg/internal/server/exts"
|
|
||||||
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
"github.com/gofiber/fiber/v2/middleware/cors"
|
"github.com/gofiber/fiber/v2/middleware/cors"
|
||||||
@ -54,7 +56,15 @@ func NewServer() {
|
|||||||
}))
|
}))
|
||||||
|
|
||||||
app.Use(gap.H.AuthMiddleware)
|
app.Use(gap.H.AuthMiddleware)
|
||||||
app.Use(exts.LinkAccountMiddleware)
|
app.Use(hyper.LinkAccountMiddleware(
|
||||||
|
database.C,
|
||||||
|
&models.Account{},
|
||||||
|
func(u hyper.BaseUser) models.Account {
|
||||||
|
return models.Account{
|
||||||
|
BaseUser: u,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
))
|
||||||
|
|
||||||
api.MapAPIs(app, "/api")
|
api.MapAPIs(app, "/api")
|
||||||
}
|
}
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
package services
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"git.solsynth.dev/hydrogen/dealer/pkg/proto"
|
|
||||||
"git.solsynth.dev/hydrogen/paperclip/pkg/internal/database"
|
|
||||||
"git.solsynth.dev/hydrogen/paperclip/pkg/internal/models"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
"reflect"
|
|
||||||
)
|
|
||||||
|
|
||||||
func LinkAccount(userinfo *proto.UserInfo) (models.Account, error) {
|
|
||||||
var account models.Account
|
|
||||||
if userinfo == nil {
|
|
||||||
return account, fmt.Errorf("remote userinfo was not found")
|
|
||||||
}
|
|
||||||
if err := database.C.Where(&models.Account{
|
|
||||||
ExternalID: uint(userinfo.Id),
|
|
||||||
}).First(&account).Error; err != nil {
|
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
||||||
account = models.Account{
|
|
||||||
Name: userinfo.Name,
|
|
||||||
Nick: userinfo.Nick,
|
|
||||||
Avatar: userinfo.Avatar,
|
|
||||||
Banner: userinfo.Banner,
|
|
||||||
Description: userinfo.GetDescription(),
|
|
||||||
EmailAddress: userinfo.Email,
|
|
||||||
PowerLevel: 0,
|
|
||||||
ExternalID: uint(userinfo.Id),
|
|
||||||
}
|
|
||||||
return account, database.C.Save(&account).Error
|
|
||||||
}
|
|
||||||
return account, err
|
|
||||||
}
|
|
||||||
|
|
||||||
prev := account
|
|
||||||
account.Name = userinfo.Name
|
|
||||||
account.Nick = userinfo.Nick
|
|
||||||
account.Avatar = userinfo.Avatar
|
|
||||||
account.Banner = userinfo.Banner
|
|
||||||
account.Description = userinfo.GetDescription()
|
|
||||||
account.EmailAddress = userinfo.Email
|
|
||||||
|
|
||||||
var err error
|
|
||||||
if !reflect.DeepEqual(prev, account) {
|
|
||||||
err = database.C.Save(&account).Error
|
|
||||||
}
|
|
||||||
|
|
||||||
return account, err
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user