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  }