You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.6 KiB
71 lines
1.6 KiB
package like |
|
|
|
import ( |
|
"context" |
|
"database/sql" |
|
"fmt" |
|
"go-common/app/admin/main/activity/model" |
|
|
|
"go-common/library/xstr" |
|
|
|
"github.com/pkg/errors" |
|
) |
|
|
|
const ( |
|
_likeActSumSQL = "SELECT SUM(`action`) AS `like`,lid FROM like_action WHERE lid IN(%s) GROUP BY lid" |
|
_likeActListSQL = "SELECT id,mid FROM like_action WHERE lid = ? AND id > ? ORDER BY id LIMIT ?" |
|
) |
|
|
|
// BatchLikeActSum . |
|
func (d *Dao) BatchLikeActSum(c context.Context, lids []int64) (res map[int64]int64, err error) { |
|
rows, err := d.db.Query(c, fmt.Sprintf(_likeActSumSQL, xstr.JoinInts(lids))) |
|
if err != nil { |
|
if err == sql.ErrNoRows { |
|
err = nil |
|
} else { |
|
err = errors.Wrap(err, "d.db.Query()") |
|
} |
|
return |
|
} |
|
defer rows.Close() |
|
res = make(map[int64]int64) |
|
for rows.Next() { |
|
like := sql.NullInt64{} |
|
lid := sql.NullInt64{} |
|
if err = rows.Scan(&like, &lid); err != nil { |
|
err = errors.Wrap(err, "rows.Scan()") |
|
return |
|
} |
|
res[lid.Int64] = like.Int64 |
|
} |
|
if err = rows.Err(); err != nil { |
|
err = errors.Wrap(err, "rows.Err()") |
|
} |
|
return |
|
} |
|
|
|
// LikeActList . |
|
func (d *Dao) LikeActList(c context.Context, lid, minID, limit int64) (res []*model.LikeAction, err error) { |
|
rows, err := d.db.Query(c, _likeActListSQL, lid, minID, limit) |
|
if err != nil { |
|
if err == sql.ErrNoRows { |
|
err = nil |
|
} else { |
|
err = errors.Wrap(err, "d.db.Query()") |
|
} |
|
return |
|
} |
|
defer rows.Close() |
|
for rows.Next() { |
|
action := new(model.LikeAction) |
|
if err = rows.Scan(&action.ID, &action.Mid); err != nil { |
|
err = errors.Wrap(err, "rows.Scan()") |
|
return |
|
} |
|
res = append(res, action) |
|
} |
|
if err = rows.Err(); err != nil { |
|
err = errors.Wrap(err, "rows.Err()") |
|
} |
|
return |
|
}
|
|
|