From 531fae570d0fdb89a519d3e4e1c80a7ff8b6e665 Mon Sep 17 00:00:00 2001 From: Xe Iaso Date: Wed, 22 May 2024 08:41:00 -0400 Subject: cmd/mi: rename this to SwitchTracker Signed-off-by: Xe Iaso --- cmd/mi/server.go | 134 ------------------------------------------------ cmd/mi/switchtracker.go | 134 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 134 deletions(-) delete mode 100644 cmd/mi/server.go create mode 100644 cmd/mi/switchtracker.go (limited to 'cmd/mi') diff --git a/cmd/mi/server.go b/cmd/mi/server.go deleted file mode 100644 index fd43385..0000000 --- a/cmd/mi/server.go +++ /dev/null @@ -1,134 +0,0 @@ -package main - -import ( - "context" - "errors" - "log/slog" - - "github.com/twitchtv/twirp" - "google.golang.org/protobuf/types/known/emptypb" - "gorm.io/gorm" - "within.website/x/cmd/mi/models" - pb "within.website/x/proto/mi" -) - -type SwitchTracker struct { - db *gorm.DB - dao *models.DAO -} - -func NewSwitchTracker(db *gorm.DB) *SwitchTracker { - return &SwitchTracker{ - db: db, - dao: models.New(db), - } -} - -func (s *SwitchTracker) Members(ctx context.Context, _ *emptypb.Empty) (*pb.MembersResp, error) { - members, err := s.dao.Members(ctx) - if err != nil { - return nil, twirp.InternalErrorWith(err) - } - - var resp pb.MembersResp - for _, m := range members { - resp.Members = append(resp.Members, m.AsProto()) - } - - return &resp, nil -} - -func (s *SwitchTracker) WhoIsFront(ctx context.Context, _ *emptypb.Empty) (*pb.FrontChange, error) { - sw, err := s.dao.WhoIsFront(ctx) - if err != nil { - slog.Error("can't find who is front", "err", err) - switch { - case errors.Is(err, gorm.ErrRecordNotFound): - return nil, twirp.NotFoundError("can't find current switch") - default: - return nil, twirp.InternalErrorWith(err) - } - } - - slog.Info("current front", "sw", sw) - - return sw.AsFrontChange(), nil -} - -func (s *SwitchTracker) Switch(ctx context.Context, req *pb.SwitchReq) (*pb.SwitchResp, error) { - if err := req.Valid(); err != nil { - slog.Error("can't switch without a member", "req", req, "err", err) - return nil, twirp.InvalidArgumentError("member_name", err.Error()) - } - - old, new, err := s.dao.SwitchFront(ctx, req.GetMemberName()) - if err != nil { - slog.Error("can't switch front", "req", req, "err", err) - switch { - case errors.Is(err, models.ErrCantSwitchToYourself): - twirp.InvalidArgumentError("member_name", "cannot switch to yourself"). - WithMeta("member_name", req.GetMemberName()) - case errors.Is(err, gorm.ErrRecordNotFound): - return nil, twirp.NotFoundError("can't find current switch") - default: - return nil, twirp.InternalErrorWith(err) - } - } - - return &pb.SwitchResp{ - Old: old.AsProto(), - Current: new.AsProto(), - }, nil -} - -func (s *SwitchTracker) GetSwitch(ctx context.Context, req *pb.GetSwitchReq) (*pb.FrontChange, error) { - if err := req.Valid(); err != nil { - slog.Error("can't get switch by ID", "req", req, "err", err) - return nil, twirp.InvalidArgumentError("id", err.Error()) - } - - sw, err := s.dao.GetSwitch(ctx, req.GetId()) - if err != nil { - slog.Error("can't get switch", "req", req, "err", err) - switch { - case errors.Is(err, gorm.ErrRecordNotFound): - return nil, twirp.NotFoundError("can't find switch"). - WithMeta("id", req.GetId()) - default: - return nil, twirp.InternalErrorWith(err) - } - } - - return sw.AsFrontChange(), nil -} - -func (s *SwitchTracker) ListSwitches(ctx context.Context, req *pb.ListSwitchesReq) (*pb.ListSwitchesResp, error) { - var switches []models.Switch - - if req.GetCount() == 0 { - req.Count = 30 - } - - switches, err := s.dao.ListSwitches(ctx, int(req.GetCount()), int(req.GetPage())) - if err != nil { - slog.Error("can't get switches", "req", req, "err", err) - switch { - case errors.Is(err, gorm.ErrRecordNotFound): - return nil, twirp.NotFoundError("can't find switch info") - default: - return nil, twirp.InternalErrorWith(err) - } - } - - if len(switches) == 0 { - return nil, twirp.NotFoundError("no switches returned") - } - - var resp pb.ListSwitchesResp - - for _, sw := range switches { - resp.Switches = append(resp.Switches, sw.AsFrontChange()) - } - - return &resp, nil -} diff --git a/cmd/mi/switchtracker.go b/cmd/mi/switchtracker.go new file mode 100644 index 0000000..fd43385 --- /dev/null +++ b/cmd/mi/switchtracker.go @@ -0,0 +1,134 @@ +package main + +import ( + "context" + "errors" + "log/slog" + + "github.com/twitchtv/twirp" + "google.golang.org/protobuf/types/known/emptypb" + "gorm.io/gorm" + "within.website/x/cmd/mi/models" + pb "within.website/x/proto/mi" +) + +type SwitchTracker struct { + db *gorm.DB + dao *models.DAO +} + +func NewSwitchTracker(db *gorm.DB) *SwitchTracker { + return &SwitchTracker{ + db: db, + dao: models.New(db), + } +} + +func (s *SwitchTracker) Members(ctx context.Context, _ *emptypb.Empty) (*pb.MembersResp, error) { + members, err := s.dao.Members(ctx) + if err != nil { + return nil, twirp.InternalErrorWith(err) + } + + var resp pb.MembersResp + for _, m := range members { + resp.Members = append(resp.Members, m.AsProto()) + } + + return &resp, nil +} + +func (s *SwitchTracker) WhoIsFront(ctx context.Context, _ *emptypb.Empty) (*pb.FrontChange, error) { + sw, err := s.dao.WhoIsFront(ctx) + if err != nil { + slog.Error("can't find who is front", "err", err) + switch { + case errors.Is(err, gorm.ErrRecordNotFound): + return nil, twirp.NotFoundError("can't find current switch") + default: + return nil, twirp.InternalErrorWith(err) + } + } + + slog.Info("current front", "sw", sw) + + return sw.AsFrontChange(), nil +} + +func (s *SwitchTracker) Switch(ctx context.Context, req *pb.SwitchReq) (*pb.SwitchResp, error) { + if err := req.Valid(); err != nil { + slog.Error("can't switch without a member", "req", req, "err", err) + return nil, twirp.InvalidArgumentError("member_name", err.Error()) + } + + old, new, err := s.dao.SwitchFront(ctx, req.GetMemberName()) + if err != nil { + slog.Error("can't switch front", "req", req, "err", err) + switch { + case errors.Is(err, models.ErrCantSwitchToYourself): + twirp.InvalidArgumentError("member_name", "cannot switch to yourself"). + WithMeta("member_name", req.GetMemberName()) + case errors.Is(err, gorm.ErrRecordNotFound): + return nil, twirp.NotFoundError("can't find current switch") + default: + return nil, twirp.InternalErrorWith(err) + } + } + + return &pb.SwitchResp{ + Old: old.AsProto(), + Current: new.AsProto(), + }, nil +} + +func (s *SwitchTracker) GetSwitch(ctx context.Context, req *pb.GetSwitchReq) (*pb.FrontChange, error) { + if err := req.Valid(); err != nil { + slog.Error("can't get switch by ID", "req", req, "err", err) + return nil, twirp.InvalidArgumentError("id", err.Error()) + } + + sw, err := s.dao.GetSwitch(ctx, req.GetId()) + if err != nil { + slog.Error("can't get switch", "req", req, "err", err) + switch { + case errors.Is(err, gorm.ErrRecordNotFound): + return nil, twirp.NotFoundError("can't find switch"). + WithMeta("id", req.GetId()) + default: + return nil, twirp.InternalErrorWith(err) + } + } + + return sw.AsFrontChange(), nil +} + +func (s *SwitchTracker) ListSwitches(ctx context.Context, req *pb.ListSwitchesReq) (*pb.ListSwitchesResp, error) { + var switches []models.Switch + + if req.GetCount() == 0 { + req.Count = 30 + } + + switches, err := s.dao.ListSwitches(ctx, int(req.GetCount()), int(req.GetPage())) + if err != nil { + slog.Error("can't get switches", "req", req, "err", err) + switch { + case errors.Is(err, gorm.ErrRecordNotFound): + return nil, twirp.NotFoundError("can't find switch info") + default: + return nil, twirp.InternalErrorWith(err) + } + } + + if len(switches) == 0 { + return nil, twirp.NotFoundError("no switches returned") + } + + var resp pb.ListSwitchesResp + + for _, sw := range switches { + resp.Switches = append(resp.Switches, sw.AsFrontChange()) + } + + return &resp, nil +} -- cgit v1.2.3