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.
 
 

52 lines
1.3 KiB

// Data access objects layer of model token
package repositories
import (
"git.devices.local/mawas/golang-api-skeleton/lib/cache"
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{}
err := dao.db.Joins("User").First(&token, key).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 {
if username, err := c.Get("user:" + token.UserID.String()); err != nil {
return nil, err
} else {
if username != nil {
token.Username = *username
}
}
}
}
return token, err
}