feat: update
This commit is contained in:
@@ -72,7 +72,7 @@ func (ctl *auth) Login(ctx fiber.Ctx, code, state, redirect string) error {
|
|||||||
Scope: token.Scope,
|
Scope: token.Scope,
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
user, err := models.Users.GetUserByOpenIDOrCreate(ctx.Context(), token.Openid, userModel)
|
user, err := models.Users.GetUserByOpenIDOrCreate(ctx.Context(), token.GetOpenID(), userModel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to get user by openid")
|
return errors.Wrap(err, "failed to get user by openid")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,5 +80,16 @@ func Provide(opts ...opt.Option) error {
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := container.Container.Provide(func(
|
||||||
|
wechat *wechat.Client,
|
||||||
|
) (*wechats, error) {
|
||||||
|
obj := &wechats{
|
||||||
|
wechat: wechat,
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj, nil
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
19
backend/app/http/wechat.go
Normal file
19
backend/app/http/wechat.go
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package http
|
||||||
|
|
||||||
|
import (
|
||||||
|
"quyun/database/schemas/public/model"
|
||||||
|
"quyun/providers/wechat"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
// @provider
|
||||||
|
type wechats struct {
|
||||||
|
wechat *wechat.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Router /wechat/js-ticket [get]
|
||||||
|
// @Bind user local
|
||||||
|
func (ctl *wechats) GetTicket(ctx fiber.Ctx, user *model.Users) (string, error) {
|
||||||
|
return ctl.wechat.GetJSTicket(user.AuthToken.Data.AccessToken)
|
||||||
|
}
|
||||||
@@ -153,19 +153,20 @@ func (m *usersModel) Create(ctx context.Context, userModel *model.Users) (*model
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update updates an existing user
|
// Update updates an existing user
|
||||||
func (m *usersModel) Update(ctx context.Context, id int64, model *model.Users) error {
|
func (m *usersModel) Update(ctx context.Context, id int64, userModel *model.Users) (*model.Users, error) {
|
||||||
model.UpdatedAt = time.Now()
|
userModel.UpdatedAt = time.Now()
|
||||||
|
|
||||||
tbl := table.Users
|
tbl := table.Users
|
||||||
stmt := tbl.UPDATE(tbl.MutableColumns.Except(tbl.CreatedAt, tbl.DeletedAt)).MODEL(model).WHERE(tbl.ID.EQ(Int64(id)))
|
stmt := tbl.UPDATE(tbl.MutableColumns.Except(tbl.CreatedAt, tbl.DeletedAt)).MODEL(userModel).WHERE(tbl.ID.EQ(Int64(id))).RETURNING(tbl.AllColumns)
|
||||||
m.log.Infof("sql: %s", stmt.DebugSql())
|
m.log.Infof("sql: %s", stmt.DebugSql())
|
||||||
|
|
||||||
_, err := stmt.ExecContext(ctx, db)
|
var updatedUser model.Users
|
||||||
if err != nil {
|
|
||||||
|
if err := stmt.QueryContext(ctx, db, &updatedUser); err != nil {
|
||||||
m.log.Errorf("error updating user: %v", err)
|
m.log.Errorf("error updating user: %v", err)
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
return nil
|
return &updatedUser, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteByID soft deletes a user by ID
|
// DeleteByID soft deletes a user by ID
|
||||||
@@ -277,8 +278,6 @@ func (m *usersModel) GetUserByOpenIDOrCreate(ctx context.Context, openID string,
|
|||||||
user, err := m.GetUserByOpenID(ctx, openID)
|
user, err := m.GetUserByOpenID(ctx, openID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, qrm.ErrNoRows) {
|
if errors.Is(err, qrm.ErrNoRows) {
|
||||||
// Create User
|
|
||||||
|
|
||||||
user, err = m.Create(ctx, userModel)
|
user, err = m.Create(ctx, userModel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to create user")
|
return nil, errors.Wrap(err, "failed to create user")
|
||||||
@@ -286,6 +285,12 @@ func (m *usersModel) GetUserByOpenIDOrCreate(ctx context.Context, openID string,
|
|||||||
} else {
|
} else {
|
||||||
return nil, errors.Wrap(err, "failed to get user")
|
return nil, errors.Wrap(err, "failed to get user")
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
userModel.OpenID = user.OpenID
|
||||||
|
user, err = m.Update(ctx, user.ID, userModel)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "failed to update user")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return user, nil
|
return user, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -243,3 +243,28 @@ func (we *Client) AuthorizeUserInfo(accessToken, openID string) (*AuthorizeUserI
|
|||||||
|
|
||||||
return &data, nil
|
return &data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetJSTicket
|
||||||
|
func (we *Client) GetJSTicket(token string) (string, error) {
|
||||||
|
var data struct {
|
||||||
|
Errcode int `json:"errcode"`
|
||||||
|
Errmsg string `json:"errmsg"`
|
||||||
|
Ticket string `json:"ticket"`
|
||||||
|
ExpiresIn int `json:"expires_in"`
|
||||||
|
}
|
||||||
|
|
||||||
|
params := map[string]string{
|
||||||
|
"access_token": token,
|
||||||
|
"type": "jsapi",
|
||||||
|
}
|
||||||
|
_, err := we.client.R().SetSuccessResult(&data).SetQueryParams(params).Get("/cgi-bin/ticket/getticket")
|
||||||
|
if err != nil {
|
||||||
|
return "", errors.Wrap(err, "call /cgi-bin/ticket/getticket failed")
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.Errcode != 0 {
|
||||||
|
return "", errors.New("get wechat ticket failed: " + data.Errmsg)
|
||||||
|
}
|
||||||
|
|
||||||
|
return data.Ticket, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -84,3 +84,14 @@ func TestClient_AuthorizeUserInfo(t *testing.T) {
|
|||||||
t.Logf("user: %+v", user)
|
t.Logf("user: %+v", user)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_GetJsTicket(t *testing.T) {
|
||||||
|
Convey("Test GetJsTicket", t, func() {
|
||||||
|
token := ""
|
||||||
|
ticket, err := getClient().GetJSTicket(token)
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
So(ticket, ShouldNotBeEmpty)
|
||||||
|
|
||||||
|
t.Log("Js Ticket:", ticket)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user