func()

in server/datasource/etcd/history/history_dao.go [38:75]


func (s *Dao) GetHistory(ctx context.Context, kvID, project, domain string, options ...datasource.FindOption) (*model.KVResponse, error) {
	kvreq := &model.GetKVRequest{
		Domain:  domain,
		Project: project,
		ID:      kvID,
	}
	kvdoc, err := datasource.GetBroker().GetKVDao().Get(ctx, kvreq)
	if err != nil {
		return nil, err
	}
	if err := auth.CheckGetKV(ctx, kvdoc); err != nil {
		return nil, err
	}

	opts := datasource.FindOptions{}
	for _, o := range options {
		o(&opts)
	}
	kvs, total, err := etcdadpt.List(ctx, key.HisList(domain, project, kvID))
	if err != nil {
		openlog.Error(err.Error())
		return nil, err
	}
	histories := make([]*model.KVDoc, 0, len(kvs))
	for _, kv := range kvs {
		var doc model.KVDoc
		err := json.Unmarshal(kv.Value, &doc)
		if err != nil {
			openlog.Error("decode error: " + err.Error())
			continue
		}
		histories = append(histories, &doc)
	}
	return &model.KVResponse{
		Data:  pagingResult(histories, opts.Offset, opts.Limit),
		Total: int(total),
	}, nil
}