mirror of
https://github.com/scroll-tech/scroll.git
synced 2026-01-14 00:18:03 -05:00
Co-authored-by: colinlyguo <651734127@qq.com> Co-authored-by: zimpha <zimpha@gmail.com> Co-authored-by: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com> Co-authored-by: HAOYUatHZ <haoyu@protonmail.com>
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package orm
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/jmoiron/sqlx"
|
|
|
|
"scroll-tech/common/types"
|
|
)
|
|
|
|
type sessionInfoOrm struct {
|
|
db *sqlx.DB
|
|
}
|
|
|
|
var _ SessionInfoOrm = (*sessionInfoOrm)(nil)
|
|
|
|
// NewSessionInfoOrm create an sessionInfoOrm instance
|
|
func NewSessionInfoOrm(db *sqlx.DB) SessionInfoOrm {
|
|
return &sessionInfoOrm{db: db}
|
|
}
|
|
|
|
func (o *sessionInfoOrm) GetSessionInfosByHashes(hashes []string) ([]*types.SessionInfo, error) {
|
|
if len(hashes) == 0 {
|
|
return nil, nil
|
|
}
|
|
query, args, err := sqlx.In("SELECT rollers_info FROM session_info WHERE hash IN (?);", hashes)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
rows, err := o.db.Queryx(o.db.Rebind(query), args...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var sessionInfos []*types.SessionInfo
|
|
for rows.Next() {
|
|
var infoBytes []byte
|
|
if err := rows.Scan(&infoBytes); err != nil {
|
|
return nil, err
|
|
}
|
|
sessionInfo := &types.SessionInfo{}
|
|
if err := json.Unmarshal(infoBytes, sessionInfo); err != nil {
|
|
return nil, err
|
|
}
|
|
sessionInfos = append(sessionInfos, sessionInfo)
|
|
}
|
|
return sessionInfos, nil
|
|
}
|
|
|
|
func (o *sessionInfoOrm) SetSessionInfo(rollersInfo *types.SessionInfo) error {
|
|
infoBytes, err := json.Marshal(rollersInfo)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
sqlStr := "INSERT INTO session_info (hash, rollers_info) VALUES ($1, $2) ON CONFLICT (hash) DO UPDATE SET rollers_info = EXCLUDED.rollers_info;"
|
|
_, err = o.db.Exec(sqlStr, rollersInfo.ID, infoBytes)
|
|
return err
|
|
}
|