github.com/chanxuehong/wechat@v0.0.0-20230222024006-36f0325263cd/mp/dkf/record/iter.go (about)

     1  package record
     2  
     3  import (
     4  	"github.com/chanxuehong/wechat/mp/core"
     5  )
     6  
     7  // RecordIterator
     8  //
     9  //	iter, err := NewRecordIterator(clt, request)
    10  //	if err != nil {
    11  //	    // TODO: 增加你的代码
    12  //	}
    13  //
    14  //	for iter.HasNext() {
    15  //	    records, err := iter.NextPage()
    16  //	    if err != nil {
    17  //	        // TODO: 增加你的代码
    18  //	    }
    19  //	    // TODO: 增加你的代码
    20  //	}
    21  type RecordIterator struct {
    22  	clt *core.Client
    23  
    24  	nextGetRequest *GetRequest
    25  
    26  	lastGetRecords []Record
    27  	nextPageCalled bool
    28  }
    29  
    30  func (iter *RecordIterator) HasNext() bool {
    31  	if !iter.nextPageCalled {
    32  		return len(iter.lastGetRecords) > 0
    33  	}
    34  	return len(iter.lastGetRecords) >= iter.nextGetRequest.PageSize
    35  }
    36  
    37  func (iter *RecordIterator) NextPage() (records []Record, err error) {
    38  	if !iter.nextPageCalled {
    39  		iter.nextPageCalled = true
    40  		records = iter.lastGetRecords
    41  		return
    42  	}
    43  
    44  	records, err = Get(iter.clt, iter.nextGetRequest)
    45  	if err != nil {
    46  		return
    47  	}
    48  
    49  	iter.lastGetRecords = records
    50  	iter.nextGetRequest.PageIndex++
    51  	return
    52  }
    53  
    54  func NewRecordIterator(clt *core.Client, request *GetRequest) (iter *RecordIterator, err error) {
    55  	// 逻辑上相当于第一次调用 RecordIterator.NextPage,
    56  	// 因为第一次调用 RecordIterator.HasNext 需要数据支撑, 所以提前获取了数据
    57  	records, err := Get(clt, request)
    58  	if err != nil {
    59  		return
    60  	}
    61  
    62  	request.PageIndex++
    63  
    64  	iter = &RecordIterator{
    65  		clt:            clt,
    66  		nextGetRequest: request,
    67  		lastGetRecords: records,
    68  		nextPageCalled: false,
    69  	}
    70  	return
    71  }