storage

package
v1.0.0-beta19 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 8, 2024 License: GPL-3.0 Imports: 13 Imported by: 8

Documentation

Overview

storage/session.go

Index

Constants

View Source
const (
	DefaultUsername   = ""
	DefaultAccessHash = 0
)
View Source
const LatestVersion = 1

Variables

View Source
var (
	ErrNotFound         = errors.New("record not found")
	ErrInvalidConfig    = errors.New("invalid configuration")
	ErrDatabaseConnFail = errors.New("failed to connect to database")
	ErrCacheInitFail    = errors.New("failed to initialize cache")
	ErrStorageNotReady  = errors.New("storage is not ready")
)
View Source
var DefaultStorageConfig = &StorageConfig{
	Cache: CacheConfig{
		Enabled:       true,
		InMemoryOnly:  false,
		TimeToLive:    "6h",
		CleanInterval: "24h",
		Revaluate:     true,
		InitialSize:   1000,
		ShardCount:    32,
	},
	Database: DatabaseConfig{
		MaxOpenConns:    100,
		MaxIdleConns:    10,
		ConnMaxLifetime: "1h",
		ConnMaxIdleTime: "30m",
		LogLevel:        "silent",
	},
}

Functions

func IsNotFoundError

func IsNotFoundError(err error) bool

Helper function to check if error is a "not found" error

Types

type CacheConfig

type CacheConfig struct {
	Enabled       bool   `yaml:"enabled" env:"CACHE_ENABLED" envDefault:"true"`
	InMemoryOnly  bool   `yaml:"inMemoryOnly" env:"CACHE_IN_MEMORY_ONLY" envDefault:"false"`
	TimeToLive    string `yaml:"timeToLive" env:"CACHE_TTL" envDefault:"6h"`
	CleanInterval string `yaml:"cleanInterval" env:"CACHE_CLEAN_INTERVAL" envDefault:"24h"`
	Revaluate     bool   `yaml:"revaluate" env:"CACHE_REVALUATE" envDefault:"true"`
	InitialSize   int    `yaml:"initialSize" env:"CACHE_INITIAL_SIZE" envDefault:"1000"`
	ShardCount    int    `yaml:"shardCount" env:"CACHE_SHARD_COUNT" envDefault:"32"`
}

type DatabaseConfig

type DatabaseConfig struct {
	MaxOpenConns    int    `yaml:"maxOpenConns" env:"DB_MAX_OPEN_CONNS" envDefault:"100"`
	MaxIdleConns    int    `yaml:"maxIdleConns" env:"DB_MAX_IDLE_CONNS" envDefault:"10"`
	ConnMaxLifetime string `yaml:"connMaxLifetime" env:"DB_CONN_MAX_LIFETIME" envDefault:"1h"`
	ConnMaxIdleTime string `yaml:"connMaxIdleTime" env:"DB_CONN_MAX_IDLE_TIME" envDefault:"30m"`
	LogLevel        string `yaml:"logLevel" env:"DB_LOG_LEVEL" envDefault:"silent"`
	TablePrefix     string `yaml:"tablePrefix" env:"DB_TABLE_PREFIX" envDefault:""`
}

type EntityType

type EntityType int
const (
	TypeUser EntityType
	TypeChat
	TypeChannel
)

func (EntityType) GetInt

func (e EntityType) GetInt() int

type Option

type Option func(*PeerStorage) error

func WithCustomCache

func WithCustomCache(cache *cacher.Cacher[int64, *Peer]) Option

type Peer

type Peer struct {
	ID         int64 `gorm:"primary_key"`
	AccessHash int64
	Type       int
	Username   string
}

type PeerStorage

type PeerStorage struct {
	SqlSession *gorm.DB
	// contains filtered or unexported fields
}

func NewPeerStorage

func NewPeerStorage(ctx context.Context, cfg *StorageConfig, dialector gorm.Dialector, opts ...Option) (*PeerStorage, error)

func (*PeerStorage) AddPeer

func (ps *PeerStorage) AddPeer(iD, accessHash int64, peerType EntityType, userName string)

func (*PeerStorage) Close

func (ps *PeerStorage) Close() error

func (*PeerStorage) DeleteSession

func (ps *PeerStorage) DeleteSession(phone string) error

DeleteSession removes a session from storage

func (*PeerStorage) GetAllSessions

func (ps *PeerStorage) GetAllSessions() ([]*Session, error)

GetAllSessions returns all sessions from storage

func (*PeerStorage) GetInputPeerById

func (ps *PeerStorage) GetInputPeerById(iD int64) tg.InputPeerClass

func (*PeerStorage) GetInputPeerByUsername

func (ps *PeerStorage) GetInputPeerByUsername(userName string) tg.InputPeerClass

func (*PeerStorage) GetPeerById

func (ps *PeerStorage) GetPeerById(iD int64) *Peer

func (*PeerStorage) GetPeerByUsername

func (ps *PeerStorage) GetPeerByUsername(username string) *Peer

func (*PeerStorage) GetSession

func (ps *PeerStorage) GetSession(phone string) (*Session, error)

GetSession returns the session saved in storage.

func (*PeerStorage) UpdateSession

func (ps *PeerStorage) UpdateSession(session *Session) error

UpdateSession saves or updates the session in storage>

type Session

type Session struct {
	ID      int `gorm:"primary_key"`
	Version int
	Phone   string `gorm:"uniqueIndex"`
	Data    []byte
}

type StorageConfig

type StorageConfig struct {
	Database DatabaseConfig `yaml:"database"`
	Cache    CacheConfig    `yaml:"cache"`
}

func LoadConfig

func LoadConfig() (*StorageConfig, error)

LoadConfig loads configuration from environment variables

func LoadConfigFromFile

func LoadConfigFromFile(path string) (*StorageConfig, error)

LoadConfigFromFile loads configuration from a YAML file and environment variables

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL