You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.4 KiB
54 lines
1.4 KiB
// Data access objects layer of model token
|
|
package repositories
|
|
|
|
import (
|
|
"git.devices.local/mawas/golang-api-skeleton/lib/cache"
|
|
"git.devices.local/mawas/golang-api-skeleton/lib/common"
|
|
model "git.devices.local/mawas/golang-api-skeleton/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type TokenDAO struct {
|
|
repo
|
|
}
|
|
|
|
// NewTokenRepository create new repository for model token
|
|
func NewTokenRepository(db *gorm.DB, userID string, username string, cache cache.Cache) *TokenDAO {
|
|
db = db.Set("username", username).Set("userID", userID).Set("cache", cache)
|
|
return &TokenDAO{
|
|
repo: repo{
|
|
db: db,
|
|
userID: userID,
|
|
username: username,
|
|
},
|
|
}
|
|
}
|
|
|
|
func (dao *TokenDAO) ReadByKey(key interface{}) (*model.Token, error) {
|
|
token := model.Token{}
|
|
t, _ := common.StringToGUID(key.(string))
|
|
err := dao.db.Where(model.Token{Token: t}).First(&token).Error
|
|
return &token, err
|
|
}
|
|
|
|
func (dao *TokenDAO) ReadAll() ([]*model.Token, error) {
|
|
var tokens []*model.Token
|
|
err := dao.db.Find(&tokens).Error
|
|
return tokens, err
|
|
}
|
|
|
|
func (dao *TokenDAO) Create(token *model.Token) (*model.Token, error) {
|
|
err := dao.db.Create(token).Error
|
|
if cc, ok := dao.db.Get("cache"); ok {
|
|
if c, ok := cc.(cache.Cache); ok {
|
|
username, err := c.Get("user:" + token.UserID.String())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if username != nil {
|
|
token.Username = *username
|
|
}
|
|
}
|
|
}
|
|
return token, err
|
|
}
|