gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/store/service/handler/handler.go (about)

     1  package handler
     2  
     3  import (
     4  	"context"
     5  	"io"
     6  	"time"
     7  
     8  	"gitee.com/liuxuezhan/go-micro-v1.18.0/errors"
     9  	"gitee.com/liuxuezhan/go-micro-v1.18.0/store"
    10  	pb "gitee.com/liuxuezhan/go-micro-v1.18.0/store/service/proto"
    11  )
    12  
    13  type Store struct {
    14  	Store store.Store
    15  }
    16  
    17  func (s *Store) Read(ctx context.Context, req *pb.ReadRequest, rsp *pb.ReadResponse) error {
    18  	vals, err := s.Store.Read(req.Keys...)
    19  	if err != nil {
    20  		return errors.InternalServerError("go.micro.store", err.Error())
    21  	}
    22  	for _, val := range vals {
    23  		rsp.Records = append(rsp.Records, &pb.Record{
    24  			Key:    val.Key,
    25  			Value:  val.Value,
    26  			Expiry: int64(val.Expiry.Seconds()),
    27  		})
    28  	}
    29  	return nil
    30  }
    31  
    32  func (s *Store) Write(ctx context.Context, req *pb.WriteRequest, rsp *pb.WriteResponse) error {
    33  	records := make([]*store.Record, 0, len(req.Records))
    34  
    35  	for _, record := range req.Records {
    36  		records = append(records, &store.Record{
    37  			Key:    record.Key,
    38  			Value:  record.Value,
    39  			Expiry: time.Duration(record.Expiry) * time.Second,
    40  		})
    41  	}
    42  
    43  	err := s.Store.Write(records...)
    44  	if err != nil {
    45  		return errors.InternalServerError("go.micro.store", err.Error())
    46  	}
    47  	return nil
    48  }
    49  
    50  func (s *Store) Delete(ctx context.Context, req *pb.DeleteRequest, rsp *pb.DeleteResponse) error {
    51  	err := s.Store.Delete(req.Keys...)
    52  	if err != nil {
    53  		return errors.InternalServerError("go.micro.store", err.Error())
    54  	}
    55  	return nil
    56  }
    57  
    58  func (s *Store) List(ctx context.Context, req *pb.ListRequest, stream pb.Store_ListStream) error {
    59  	var vals []*store.Record
    60  	var err error
    61  
    62  	if len(req.Key) > 0 {
    63  		vals, err = s.Store.Read(req.Key)
    64  	} else {
    65  		vals, err = s.Store.List()
    66  	}
    67  	if err != nil {
    68  		return errors.InternalServerError("go.micro.store", err.Error())
    69  	}
    70  	rsp := new(pb.ListResponse)
    71  
    72  	// TODO: batch sync
    73  	for _, val := range vals {
    74  		rsp.Records = append(rsp.Records, &pb.Record{
    75  			Key:    val.Key,
    76  			Value:  val.Value,
    77  			Expiry: int64(val.Expiry.Seconds()),
    78  		})
    79  	}
    80  
    81  	err = stream.Send(rsp)
    82  	if err == io.EOF {
    83  		return nil
    84  	}
    85  	if err != nil {
    86  		return errors.InternalServerError("go.micro.store", err.Error())
    87  	}
    88  	return nil
    89  }