github.com/tickoalcantara12/micro/v3@v3.0.0-20221007104245-9d75b9bcbab9/service/events/handler/store.go (about) 1 package handler 2 3 import ( 4 "context" 5 6 pb "github.com/tickoalcantara12/micro/v3/proto/events" 7 "github.com/tickoalcantara12/micro/v3/service/errors" 8 "github.com/tickoalcantara12/micro/v3/service/events" 9 goevents "github.com/tickoalcantara12/micro/v3/service/events" 10 "github.com/tickoalcantara12/micro/v3/service/events/util" 11 "github.com/tickoalcantara12/micro/v3/util/auth/namespace" 12 ) 13 14 type Store struct{} 15 16 func (s *Store) Read(ctx context.Context, req *pb.ReadRequest, rsp *pb.ReadResponse) error { 17 // authorize the request 18 if err := namespace.AuthorizeAdmin(ctx, namespace.DefaultNamespace, "events.Store.Read"); err != nil { 19 return err 20 } 21 22 // validate the request 23 if len(req.Topic) == 0 { 24 return errors.BadRequest("events.Store.Read", goevents.ErrMissingTopic.Error()) 25 } 26 27 // parse options 28 var opts []goevents.ReadOption 29 if req.Limit > 0 { 30 opts = append(opts, goevents.ReadLimit(uint(req.Limit))) 31 } 32 if req.Offset > 0 { 33 opts = append(opts, goevents.ReadOffset(uint(req.Offset))) 34 } 35 36 // read from the store 37 result, err := events.DefaultStore.Read(req.Topic, opts...) 38 if err != nil { 39 return errors.InternalServerError("events.Store.Read", err.Error()) 40 } 41 42 // serialize the result 43 rsp.Events = make([]*pb.Event, len(result)) 44 for i, r := range result { 45 rsp.Events[i] = util.SerializeEvent(r) 46 } 47 48 return nil 49 } 50 51 func (s *Store) Write(ctx context.Context, req *pb.WriteRequest, rsp *pb.WriteResponse) error { 52 return errors.NotImplemented("events.Store.Write", "Writing to the store directly is not supported") 53 }