Files
scroll/database/orm/session_info.go

59 lines
1.4 KiB
Go

package orm
import (
"encoding/json"
"github.com/jmoiron/sqlx"
"scroll-tech/database/cache"
)
type sessionInfoOrm struct {
db *sqlx.DB
cache cache.Cache
}
var _ SessionInfoOrm = (*sessionInfoOrm)(nil)
// NewSessionInfoOrm create an sessionInfoOrm instance
func NewSessionInfoOrm(db *sqlx.DB, cache cache.Cache) SessionInfoOrm {
return &sessionInfoOrm{db: db, cache: cache}
}
func (o *sessionInfoOrm) GetSessionInfosByIDs(ids []string) ([]*SessionInfo, error) {
if len(ids) == 0 {
return nil, nil
}
query, args, err := sqlx.In("SELECT rollers_info FROM session_info WHERE id IN (?);", ids)
if err != nil {
return nil, err
}
rows, err := o.db.Queryx(o.db.Rebind(query), args...)
if err != nil {
return nil, err
}
var sessionInfos []*SessionInfo
for rows.Next() {
var infoBytes []byte
if err := rows.Scan(&infoBytes); err != nil {
return nil, err
}
sessionInfo := &SessionInfo{}
if err := json.Unmarshal(infoBytes, sessionInfo); err != nil {
return nil, err
}
sessionInfos = append(sessionInfos, sessionInfo)
}
return sessionInfos, nil
}
func (o *sessionInfoOrm) SetSessionInfo(rollersInfo *SessionInfo) error {
infoBytes, err := json.Marshal(rollersInfo)
if err != nil {
return err
}
sqlStr := "INSERT INTO session_info (id, rollers_info) VALUES ($1, $2) ON CONFLICT (id) DO UPDATE SET rollers_info = EXCLUDED.rollers_info;"
_, err = o.db.Exec(sqlStr, rollersInfo.ID, infoBytes)
return err
}