package gmodel

import (
	"context"
)

// TODO: 使用model的属性做你想做的
type GetStockListReq struct {
	UserId int64
	Ids    []int64
	Status *int64
	Page   int
	Limit  int
}

func (s *FsUserStockModel) GetStockList(ctx context.Context, req GetStockListReq) (resp []FsUserStock, total int64, err error) {
	db := s.db.WithContext(ctx).Model(&FsUserStock{})
	if req.UserId > 0 {
		db = db.Where("`user_id` = ?", req.UserId)
	}
	if len(req.Ids) > 0 {
		db = db.Where("`id` in (?)", req.Ids)
	}
	if req.Status != nil {
		db = db.Where("`status` = ?", *req.Status)
	}
	if err = db.Limit(1).Count(&total).Error; err != nil {
		return nil, 0, err
	}
	offset := (req.Page - 1) * req.Limit
	err = db.Offset(offset).Limit(req.Limit).Find(&resp).Error
	if err != nil {
		return nil, 0, err
	}
	return
}
func (s *FsUserStockModel) FindOne(ctx context.Context, id int64, userId int64, lock ...bool) (resp *FsUserStock, err error) {
	db := s.db.WithContext(ctx).Model(&FsUserStock{}).Where("`id`  = ? and `user_id` = ? and `status` = ?", id, userId, 1)
	if len(lock) != 0 && lock[0] {
		db = db.Set("gorm:query_option", "FOR UPDATE")
	}
	err = db.First(&resp).Error
	return resp, err
}