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 }