67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package users
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
|
|
"backend/database/models/qvyun/public/model"
|
|
"backend/database/models/qvyun/public/table"
|
|
"backend/pkg/pg"
|
|
|
|
. "github.com/go-jet/jet/v2/postgres"
|
|
"github.com/pkg/errors"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// @provider:except
|
|
type Service struct {
|
|
db *sql.DB
|
|
log *logrus.Entry `inject:"false"`
|
|
}
|
|
|
|
func (svc *Service) Prepare() error {
|
|
svc.log = logrus.WithField("module", "users.service")
|
|
return nil
|
|
}
|
|
|
|
// GetByOpenID
|
|
func (svc *Service) GetByOpenID(ctx context.Context, openid string) (*model.Users, error) {
|
|
tbl := table.Users
|
|
stmt := tbl.
|
|
SELECT(tbl.AllColumns).
|
|
WHERE(
|
|
tbl.OpenID.EQ(String(openid)),
|
|
)
|
|
svc.log.WithField("method", "GetByOpenID").Debug(stmt.DebugSql())
|
|
|
|
var item model.Users
|
|
if err := stmt.QueryContext(ctx, svc.db, &item); err != nil {
|
|
return nil, errors.Wrap(err, "failed to query user by openid")
|
|
}
|
|
return &item, nil
|
|
}
|
|
|
|
// GetOrNew
|
|
func (svc *Service) GetOrNew(ctx context.Context, openid string, authInfo pg.UserOAuth) (*model.Users, error) {
|
|
user, err := svc.GetByOpenID(ctx, openid)
|
|
if err == nil {
|
|
return user, nil
|
|
}
|
|
|
|
if err != nil {
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
// user = &model.Users{
|
|
// OpenID: openid,
|
|
// OAuth:,authInfo
|
|
// }
|
|
// if err := user.Insert(ctx, svc.db, table.Users); err != nil {
|
|
// return nil, errors.Wrap(err, "failed to insert user")
|
|
// }
|
|
}
|
|
return nil, errors.Wrap(err, "failed to get user by openid")
|
|
|
|
}
|
|
|
|
return nil, errors.New("unknown error")
|
|
}
|