60 lines
1.1 KiB
Go
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
|
|
}
|