Files
mp-qvyun/backend/modules/users/service.go
2024-11-29 19:23:35 +08:00

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")
}