go-common/app/interface/main/esports/dao/mysql.go
2019-04-22 18:49:16 +08:00

629 lines
21 KiB
Go

package dao
import (
"context"
"database/sql"
"fmt"
"strconv"
"strings"
"go-common/app/interface/main/esports/model"
xsql "go-common/library/database/sql"
"go-common/library/log"
"go-common/library/xstr"
)
const (
_matchsSQL = "SELECT id,title,sub_title,logo,rank FROM es_matchs WHERE status=0 order by rank DESC , ID ASC"
_gamesSQL = "SELECT id,title,sub_title,logo FROM es_games WHERE status=0 order by id ASC"
_teamsSQL = "SELECT id,title,sub_title,logo FROM es_teams WHERE is_deleted=0 order by id ASC"
_tagsSQL = "SELECT id,name FROM es_tags WHERE status=0 order by id ASC"
_yearsSQL = "SELECT distinct year as id, year FROM es_year_map WHERE is_deleted=0 order by id ASC"
_dayContestSQL = "SELECT FROM_UNIXTIME(stime, '%Y-%m-%d') as s,count(1) as c FROM `es_contests` WHERE status=0 AND stime >= ? and stime <= ? GROUP BY s ORDER BY stime"
_seasonSQL = "SELECT id,mid,title,sub_title,stime,etime,sponsor,logo,dic,ctime,mtime,status,rank,is_app,url,data_focus,focus_url FROM es_seasons WHERE status = 0 ORDER BY stime DESC"
_epSeasonSQL = "SELECT id,mid,title,sub_title,stime,etime,sponsor,logo,dic,ctime,mtime,status,rank,is_app,url,data_focus,focus_url FROM es_seasons WHERE status = 0 and id in (%s) ORDER BY stime DESC"
_seasonMSQL = "SELECT id,mid,title,sub_title,stime,etime,sponsor,logo,dic,ctime,mtime,status,rank,is_app,url,data_focus,focus_url FROM es_seasons WHERE status = 0 AND is_app = 1 ORDER BY rank DESC,stime DESC"
_seasonsSQL = "SELECT id,title,sub_title,logo,url,data_focus,focus_url FROM es_seasons WHERE status = 0 ORDER BY stime DESC"
_contestSQL = "SELECT id,game_stage,stime,etime,home_id,away_id,home_score,away_score,live_room,aid,collection,game_state,dic,ctime,mtime,status,sid,mid,special,special_name,special_tips,success_team,special_image,playback,collection_url,live_url,data_type,match_id FROM `es_contests` WHERE id= ?"
_contestsSQL = "SELECT id,game_stage,stime,etime,home_id,away_id,home_score,away_score,live_room,aid,collection,game_state,dic,ctime,mtime,status,sid,mid,special,special_name,special_tips,success_team,special_image,playback,collection_url,live_url,data_type,match_id FROM `es_contests` WHERE id in (%s) ORDER BY ID ASC"
_contestLeidaSQL = "SELECT id,game_stage,stime,etime,home_id,away_id,home_score,away_score,live_room,aid,collection,game_state,dic,ctime,mtime,status,sid,mid,special,special_name,special_tips,success_team,special_image,playback,collection_url,live_url,data_type,match_id FROM `es_contests` WHERE match_id > 0 and status = 0"
_moduleSQL = "SELECT id,ma_id,name,oids FROM `es_matchs_module` WHERE id = ? AND status = 0"
_activeSQL = "SELECT id,mid,sid,background,live_id,intr,focus,url,back_color,color_step,h5_background,h5_back_color,intr_logo,intr_title,intr_text,h5_focus,h5_url FROM es_matchs_active WHERE id = ? AND `status`= 0"
_modulesSQL = "SELECT id,ma_id,name,oids FROM `es_matchs_module` WHERE ma_id = ? AND status = 0 ORDER BY ID ASC"
_pDetailSQL = "SELECT ma_id,game_type,stime,etime FROM es_matchs_detail WHERE id = ? AND `status` = 0"
_actDetail = "SELECT id,ma_id,game_type,stime,etime,score_id,game_stage,knockout_type,winner_type,online FROM es_matchs_detail WHERE ma_id = ? AND status = 0"
_treeSQL = "SELECT id,ma_id,mad_id,pid,root_id,game_rank,mid FROM es_matchs_tree WHERE mad_id = ? AND is_deleted=0 ORDER BY root_id ASC,pid ASC,game_rank ASC"
_teamsInSQL = "SELECT id,title,sub_title,logo FROM es_teams WHERE is_deleted=0 AND id in (%s)"
_kDetailsSQL = "SELECT id,ma_id,game_type,stime,etime,online FROM es_matchs_detail WHERE `status` = 0 AND game_type = 2"
_contestDataSQL = "SELECT id,cid,url,point_data FROM `es_contests_data` WHERE cid = ? AND is_deleted = 0"
_contestRecent = "SELECT id,game_stage,stime,etime,home_id,away_id,home_score,away_score,live_room,aid,collection,game_state,dic,ctime,mtime,status,sid,mid,special,special_name,special_tips,success_team,special_image,playback,collection_url,live_url,data_type FROM es_contests WHERE ( `status` = 0 AND home_id = ? AND away_id = ? ) OR ( `status` = 0 AND home_id = ? AND away_id = ? ) ORDER BY stime DESC LIMIT ?"
)
// logoURL convert logo url to full url.
func logoURL(uri string) (logo string) {
if uri == "" {
return
}
logo = uri
if strings.Index(uri, "http://") == 0 || strings.Index(uri, "//") == 0 {
return
}
if len(uri) >= 10 && uri[:10] == "/templets/" {
return
}
if strings.HasPrefix(uri, "group1") {
logo = "//i0.hdslb.com/" + uri
return
}
if pos := strings.Index(uri, "/uploads/"); pos != -1 && (pos == 0 || pos == 3) {
logo = uri[pos+8:]
}
logo = strings.Replace(logo, "{IMG}", "", -1)
logo = "//i0.hdslb.com" + logo
return
}
// Matchs filter matchs.
func (d *Dao) Matchs(c context.Context) (res []*model.Filter, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _matchsSQL); err != nil {
log.Error("Match:d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := new(model.Filter)
if err = rows.Scan(&r.ID, &r.Title, &r.SubTitle, &r.Logo, &r.Rank); err != nil {
log.Error("Match:row.Scan() error(%v)", err)
return
}
r.Logo = logoURL(r.Logo)
res = append(res, r)
}
if err = rows.Err(); err != nil {
log.Error("rows.Err() error(%v)", err)
}
return
}
// Games filter games.
func (d *Dao) Games(c context.Context) (res []*model.Filter, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _gamesSQL); err != nil {
log.Error("Games:d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := new(model.Filter)
if err = rows.Scan(&r.ID, &r.Title, &r.SubTitle, &r.Logo); err != nil {
log.Error("Games:row.Scan() error(%v)", err)
return
}
r.Logo = logoURL(r.Logo)
res = append(res, r)
}
if err = rows.Err(); err != nil {
log.Error("rows.Err() error(%v)", err)
}
return
}
// Teams filter teams.
func (d *Dao) Teams(c context.Context) (res []*model.Filter, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _teamsSQL); err != nil {
log.Error("Teams:d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := new(model.Filter)
if err = rows.Scan(&r.ID, &r.Title, &r.SubTitle, &r.Logo); err != nil {
log.Error("Teams:row.Scan() error(%v)", err)
return
}
r.Logo = logoURL(r.Logo)
res = append(res, r)
}
if err = rows.Err(); err != nil {
log.Error("rows.Err() error(%v)", err)
}
return
}
// Tags filter Tags.
func (d *Dao) Tags(c context.Context) (res []*model.Filter, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _tagsSQL); err != nil {
log.Error("Tags:d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := new(model.Filter)
if err = rows.Scan(&r.ID, &r.Title); err != nil {
log.Error("Tags:row.Scan() error(%v)", err)
return
}
r.Logo = logoURL(r.Logo)
res = append(res, r)
}
if err = rows.Err(); err != nil {
log.Error("rows.Err() error(%v)", err)
}
return
}
// Years filter years.
func (d *Dao) Years(c context.Context) (res []*model.Filter, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _yearsSQL); err != nil {
log.Error("Years:d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := new(model.Year)
if err = rows.Scan(&r.ID, &r.Year); err != nil {
log.Error("Years:row.Scan() error(%v)", err)
return
}
res = append(res, &model.Filter{ID: r.ID, Title: strconv.FormatInt(r.Year, 10)})
}
if err = rows.Err(); err != nil {
log.Error("rows.Err() error(%v)", err)
}
return
}
// Calendar calendar count.
func (d *Dao) Calendar(c context.Context, stime, etime int64) (res []*model.Calendar, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _dayContestSQL, stime, etime); err != nil {
log.Error("Calendar:d.db.Query(%d,%d) error(%v)", stime, etime, err)
return
}
defer rows.Close()
for rows.Next() {
r := new(model.Calendar)
if err = rows.Scan(&r.Stime, &r.Count); err != nil {
log.Error("Calendar:row.Scan() error(%v)", err)
return
}
res = append(res, r)
}
return
}
// Season season list.
func (d *Dao) Season(c context.Context) (res []*model.Season, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _seasonSQL); err != nil {
log.Error("Contest:d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := new(model.Season)
if err = rows.Scan(&r.ID, &r.Mid, &r.Title, &r.SubTitle, &r.Stime, &r.Etime, &r.Sponsor, &r.Logo, &r.Dic, &r.Ctime,
&r.Mtime, &r.Status, &r.Rank, &r.IsApp, &r.URL, &r.DataFocus, &r.FocusURL); err != nil {
log.Error("Contest:row.Scan() error(%v)", err)
return
}
r.Logo = logoURL(r.Logo)
res = append(res, r)
}
if err = rows.Err(); err != nil {
log.Error("rows.Err() error(%v)", err)
}
return
}
// Module active module
func (d *Dao) Module(c context.Context, mmid int64) (mod *model.Module, err error) {
mod = &model.Module{}
row := d.db.QueryRow(c, _moduleSQL, mmid)
if err = row.Scan(&mod.ID, &mod.MAid, &mod.Name, &mod.Oids); err != nil {
if err == sql.ErrNoRows {
mod = nil
err = nil
} else {
log.Error("Esport dao Module:row.Scan error(%v)", err)
}
}
return
}
// Modules active module
func (d *Dao) Modules(c context.Context, aid int64) (mods []*model.Module, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _modulesSQL, aid); err != nil {
log.Error("Esport dao Modules:d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := new(model.Module)
if err = rows.Scan(&r.ID, &r.MAid, &r.Name, &r.Oids); err != nil {
log.Error("Esport dao Modules:row.Scan() error(%v)", err)
return
}
mods = append(mods, r)
}
if err = rows.Err(); err != nil {
log.Error("Esport dao Modules.Err() error(%v)", err)
}
return
}
// Trees match tree
func (d *Dao) Trees(c context.Context, madID int64) (mods []*model.Tree, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _treeSQL, madID); err != nil {
log.Error("Esport dao Trees:d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := new(model.Tree)
if err = rows.Scan(&r.ID, &r.MaID, &r.MadID, &r.Pid, &r.RootID, &r.GameRank, &r.Mid); err != nil {
log.Error("Esport dao Trees:row.Scan() error(%v)", err)
return
}
mods = append(mods, r)
}
if err = rows.Err(); err != nil {
log.Error("Esport dao Trees.Err() error(%v)", err)
}
return
}
// Active matchs active
func (d *Dao) Active(c context.Context, aid int64) (mod *model.Active, err error) {
mod = &model.Active{}
row := d.db.QueryRow(c, _activeSQL, aid)
if err = row.Scan(&mod.ID, &mod.Mid, &mod.Sid, &mod.Background, &mod.Liveid, &mod.Intr, &mod.Focus, &mod.URL, &mod.BackColor, &mod.ColorStep, &mod.H5Background, &mod.H5BackColor, &mod.IntrLogo, &mod.IntrTitle, &mod.IntrText, &mod.H5Focus, &mod.H5Url); err != nil {
if err == sql.ErrNoRows {
mod = nil
err = nil
} else {
log.Error("Esport dao Active:row.Scan error(%v)", err)
}
}
return
}
// PActDetail poin match detail
func (d *Dao) PActDetail(c context.Context, id int64) (mod *model.ActiveDetail, err error) {
mod = &model.ActiveDetail{}
row := d.db.QueryRow(c, _pDetailSQL, id)
if err = row.Scan(&mod.Maid, &mod.GameType, &mod.STime, &mod.ETime); err != nil {
if err == sql.ErrNoRows {
mod = nil
err = nil
} else {
log.Error("Esport dao Contest:row.Scan error(%v)", err)
}
}
return
}
// ActDetail data module
func (d *Dao) ActDetail(c context.Context, aid int64) (actDetail []*model.ActiveDetail, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _actDetail, aid); err != nil {
log.Error("Esport dao Modules:d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := new(model.ActiveDetail)
if err = rows.Scan(&r.ID, &r.Maid, &r.GameType, &r.STime, &r.ETime, &r.ScoreID, &r.GameStage, &r.KnockoutType, &r.WinnerType, &r.Online); err != nil {
log.Error("Esport dao ActDetail:row.Scan() error(%v)", err)
return
}
actDetail = append(actDetail, r)
}
if err = rows.Err(); err != nil {
log.Error("Esport dao ActDetail.Err() error(%v)", err)
}
return
}
// AppSeason season match list.
func (d *Dao) AppSeason(c context.Context) (res []*model.Season, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _seasonMSQL); err != nil {
log.Error("Contest:d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := new(model.Season)
if err = rows.Scan(&r.ID, &r.Mid, &r.Title, &r.SubTitle, &r.Stime, &r.Etime, &r.Sponsor, &r.Logo,
&r.Dic, &r.Ctime, &r.Mtime, &r.Status, &r.Rank, &r.IsApp, &r.URL, &r.DataFocus, &r.FocusURL); err != nil {
log.Error("Contest:row.Scan() error(%v)", err)
return
}
r.Logo = logoURL(r.Logo)
res = append(res, r)
}
if err = rows.Err(); err != nil {
log.Error("rows.Err() error(%v)", err)
}
return
}
// SeasonAll all season list.
func (d *Dao) SeasonAll(c context.Context) (res []*model.Filter, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _seasonsSQL); err != nil {
log.Error("SeasonAll:d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := new(model.Filter)
if err = rows.Scan(&r.ID, &r.Title, &r.SubTitle, &r.Logo, &r.URL, &r.DataFocus, &r.FocusURL); err != nil {
log.Error("SeasonAll:row.Scan() error(%v)", err)
return
}
r.Logo = logoURL(r.Logo)
res = append(res, r)
}
if err = rows.Err(); err != nil {
log.Error("rows.Err() error(%v)", err)
}
return
}
// Contest get contest by id.
func (d *Dao) Contest(c context.Context, cid int64) (res *model.Contest, err error) {
res = &model.Contest{}
row := d.db.QueryRow(c, _contestSQL, cid)
if err = row.Scan(&res.ID, &res.GameStage, &res.Stime, &res.Etime, &res.HomeID, &res.AwayID, &res.HomeScore, &res.AwayScore,
&res.LiveRoom, &res.Aid, &res.Collection, &res.GameState, &res.Dic, &res.Ctime, &res.Mtime, &res.Status, &res.Sid, &res.Mid,
&res.Special, &res.SpecialName, &res.SpecialTips, &res.SuccessTeam, &res.SpecialImage, &res.Playback, &res.CollectionURL,
&res.LiveURL, &res.DataType, &res.MatchID); err != nil {
if err == sql.ErrNoRows {
err = nil
} else {
log.Error("Contest:row.Scan error(%v)", err)
}
}
return
}
// ContestRecent get recent contest
func (d *Dao) ContestRecent(c context.Context, homeid, awayid, contestid, ps int64) (res []*model.Contest, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _contestRecent, homeid, awayid, awayid, homeid, ps+1); err != nil {
log.Error("ContestRecent: db.Exec(%s) error(%v)", _contestRecent, err)
return
}
defer rows.Close()
res = make([]*model.Contest, 0)
for rows.Next() {
r := new(model.Contest)
if err = rows.Scan(&r.ID, &r.GameStage, &r.Stime, &r.Etime, &r.HomeID, &r.AwayID, &r.HomeScore, &r.AwayScore,
&r.LiveRoom, &r.Aid, &r.Collection, &r.GameState, &r.Dic, &r.Ctime, &r.Mtime, &r.Status, &r.Sid, &r.Mid,
&r.Special, &r.SpecialName, &r.SpecialTips, &r.SuccessTeam, &r.SpecialImage, &r.Playback, &r.CollectionURL, &r.LiveURL, &r.DataType); err != nil {
log.Error("Contests:row.Scan() error(%v)", err)
return
}
if r.ID != contestid && len(res) != int(ps) {
res = append(res, r)
}
}
if err = rows.Err(); err != nil {
log.Error("rows.Err() error(%v)", err)
}
return
}
// ContestData get contest by id.
func (d *Dao) ContestData(c context.Context, cid int64) (res []*model.ContestsData, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _contestDataSQL, cid); err != nil {
log.Error("ContestsData: db.Exec(%s) error(%v)", _contestDataSQL, err)
return
}
defer rows.Close()
for rows.Next() {
data := new(model.ContestsData)
if err = rows.Scan(&data.ID, &data.Cid, &data.URL, &data.PointData); err != nil {
log.Error("ContestsData:row.Scan() error(%v)", err)
return
}
res = append(res, data)
}
if err = rows.Err(); err != nil {
log.Error("ContestssData rows.Err() error(%v)", err)
}
return
}
// ContestDatas contest datas.
func (d *Dao) ContestDatas(c context.Context) (res []*model.Contest, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _contestLeidaSQL); err != nil {
log.Error("Contests: db.Exec(%s) error(%v)", _contestLeidaSQL, err)
return
}
defer rows.Close()
res = make([]*model.Contest, 0)
for rows.Next() {
r := new(model.Contest)
if err = rows.Scan(&r.ID, &r.GameStage, &r.Stime, &r.Etime, &r.HomeID, &r.AwayID, &r.HomeScore, &r.AwayScore,
&r.LiveRoom, &r.Aid, &r.Collection, &r.GameState, &r.Dic, &r.Ctime, &r.Mtime, &r.Status, &r.Sid, &r.Mid,
&r.Special, &r.SpecialName, &r.SpecialTips, &r.SuccessTeam, &r.SpecialImage, &r.Playback, &r.CollectionURL, &r.LiveURL, &r.DataType, &r.MatchID); err != nil {
log.Error("Contests:row.Scan() error(%v)", err)
return
}
res = append(res, r)
}
if err = rows.Err(); err != nil {
log.Error("rows.Err() error(%v)", err)
}
return
}
// RawEpContests get contests by ids.
func (d *Dao) RawEpContests(c context.Context, cids []int64) (res map[int64]*model.Contest, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, fmt.Sprintf(_contestsSQL, xstr.JoinInts(cids))); err != nil {
log.Error("Contests: db.Exec(%s) error(%v)", xstr.JoinInts(cids), err)
return
}
defer rows.Close()
res = make(map[int64]*model.Contest, len(cids))
for rows.Next() {
r := new(model.Contest)
if err = rows.Scan(&r.ID, &r.GameStage, &r.Stime, &r.Etime, &r.HomeID, &r.AwayID, &r.HomeScore, &r.AwayScore,
&r.LiveRoom, &r.Aid, &r.Collection, &r.GameState, &r.Dic, &r.Ctime, &r.Mtime, &r.Status, &r.Sid, &r.Mid,
&r.Special, &r.SpecialName, &r.SpecialTips, &r.SuccessTeam, &r.SpecialImage, &r.Playback, &r.CollectionURL,
&r.LiveURL, &r.DataType, &r.MatchID); err != nil {
log.Error("Contests:row.Scan() error(%v)", err)
return
}
res[r.ID] = r
}
if err = rows.Err(); err != nil {
log.Error("rows.Err() error(%v)", err)
}
return
}
// RawEpSeasons get seasons by ids.
func (d *Dao) RawEpSeasons(c context.Context, sids []int64) (res map[int64]*model.Season, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, fmt.Sprintf(_epSeasonSQL, xstr.JoinInts(sids))); err != nil {
log.Error("Contests: db.Exec(%s) error(%v)", xstr.JoinInts(sids), err)
return
}
defer rows.Close()
res = make(map[int64]*model.Season, len(sids))
for rows.Next() {
r := new(model.Season)
if err = rows.Scan(&r.ID, &r.Mid, &r.Title, &r.SubTitle, &r.Stime, &r.Etime, &r.Sponsor, &r.Logo, &r.Dic, &r.Ctime,
&r.Mtime, &r.Status, &r.Rank, &r.IsApp, &r.URL, &r.DataFocus, &r.FocusURL); err != nil {
log.Error("Contest:row.Scan() error(%v)", err)
return
}
res[r.ID] = r
}
if err = rows.Err(); err != nil {
log.Error("rows.Err() error(%v)", err)
}
return
}
// ActTeams get teams by ids in
func (d *Dao) ActTeams(c context.Context, tids []int64) (res []*model.Team, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, fmt.Sprintf(_teamsInSQL, xstr.JoinInts(tids))); err != nil {
log.Error("ActTeams: db.Exec(%s) error(%v)", xstr.JoinInts(tids), err)
return
}
defer rows.Close()
res = make([]*model.Team, len(tids))
for rows.Next() {
r := new(model.Team)
if err = rows.Scan(&r.ID, &r.Title, &r.SubTitle, &r.Logo); err != nil {
log.Error("ActTeams:row.Scan() error(%v)", err)
return
}
res = append(res, r)
}
if err = rows.Err(); err != nil {
log.Error("ActTeams rows.Err() error(%v)", err)
}
return
}
// RawEpTeams get seasons by ids.
func (d *Dao) RawEpTeams(c context.Context, tids []int64) (res map[int64]*model.Team, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, fmt.Sprintf(_teamsInSQL, xstr.JoinInts(tids))); err != nil {
log.Error("RawEpTeams: db.Exec(%s) error(%v)", xstr.JoinInts(tids), err)
return
}
defer rows.Close()
res = make(map[int64]*model.Team, len(tids))
for rows.Next() {
r := new(model.Team)
if err = rows.Scan(&r.ID, &r.Title, &r.SubTitle, &r.Logo); err != nil {
log.Error("RawEpTeams:row.Scan() error(%v)", err)
return
}
res[r.ID] = r
}
if err = rows.Err(); err != nil {
log.Error("RawEpTeams.Err() error(%v)", err)
}
return
}
// KDetails knockout detail
func (d *Dao) KDetails(c context.Context) (res []*model.ActiveDetail, err error) {
var (
rows *xsql.Rows
)
if rows, err = d.db.Query(c, _kDetailsSQL); err != nil {
log.Error("ActPDetails: db.Exec(%s) error(%v)", _kDetailsSQL, err)
return
}
defer rows.Close()
for rows.Next() {
detail := new(model.ActiveDetail)
if err = rows.Scan(&detail.ID, &detail.Maid, &detail.GameType, &detail.STime, &detail.ETime, &detail.Online); err != nil {
log.Error("KDetails:row.Scan() error(%v)", err)
return
}
res = append(res, detail)
}
if err = rows.Err(); err != nil {
log.Error("KDetails rows.Err() error(%v)", err)
}
return
}