Files
seanime-docker/seanime-2.9.10/internal/database/db/account.go
2025-09-20 14:08:38 +01:00

60 lines
1.1 KiB
Go

package db
import (
"errors"
"seanime/internal/database/models"
"gorm.io/gorm/clause"
)
var accountCache *models.Account
func (db *Database) UpsertAccount(acc *models.Account) (*models.Account, error) {
err := db.gormdb.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "id"}},
UpdateAll: true,
}).Create(acc).Error
if err != nil {
db.Logger.Error().Err(err).Msg("Failed to save account in the database")
return nil, err
}
if acc.Username != "" {
accountCache = acc
} else {
accountCache = nil
}
return acc, nil
}
func (db *Database) GetAccount() (*models.Account, error) {
if accountCache != nil {
return accountCache, nil
}
var acc models.Account
err := db.gormdb.Last(&acc).Error
if err != nil {
return nil, err
}
if acc.Username == "" || acc.Token == "" || acc.Viewer == nil {
return nil, errors.New("account not found")
}
accountCache = &acc
return &acc, err
}
// GetAnilistToken retrieves the AniList token from the account or returns an empty string
func (db *Database) GetAnilistToken() string {
acc, err := db.GetAccount()
if err != nil {
return ""
}
return acc.Token
}