MyPackBot/internal/middleware/acquire_user.go

43 lines
1.3 KiB
Go

package middleware
import (
"time"
"gitlab.com/toby3d/mypackbot/internal/model"
"gitlab.com/toby3d/mypackbot/internal/model/users"
)
func AcquireUser(us users.ReadWriter) Interceptor {
return func(ctx *model.Context, next model.UpdateFunc) (err error) {
ctx.User = new(model.User)
switch {
case ctx.Request.IsMessage():
ctx.User.ID = ctx.Request.Message.From.ID
ctx.User.CreatedAt = ctx.Request.Message.Date
ctx.User.UpdatedAt = ctx.Request.Message.Date
ctx.User.LanguageCode = ctx.Request.Message.From.LanguageCode
ctx.User.LastSeen = ctx.Request.Message.Date
case ctx.Request.IsInlineQuery():
now := time.Now().UTC().Unix()
ctx.User.ID = ctx.Request.InlineQuery.From.ID
ctx.User.CreatedAt = now
ctx.User.UpdatedAt = now
ctx.User.LanguageCode = ctx.Request.InlineQuery.From.LanguageCode
ctx.User.LastSeen = now
case ctx.Request.IsCallbackQuery():
ctx.User.ID = ctx.Request.CallbackQuery.From.ID
ctx.User.CreatedAt = ctx.Request.CallbackQuery.Message.Date
ctx.User.UpdatedAt = ctx.Request.CallbackQuery.Message.Date
ctx.User.LanguageCode = ctx.Request.CallbackQuery.From.LanguageCode
ctx.User.LastSeen = ctx.Request.CallbackQuery.Message.Date
}
if ctx.User, err = us.GetOrCreate(ctx.User); err != nil {
return err
}
return next(ctx)
}
}