aboutsummaryrefslogtreecommitdiff
path: root/cmd/mi/server.go
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2024-05-22 08:41:00 -0400
committerXe Iaso <me@xeiaso.net>2024-05-22 12:33:19 -0400
commit531fae570d0fdb89a519d3e4e1c80a7ff8b6e665 (patch)
treec75de7d3ec9200367b46171344fa9ad14147d45b /cmd/mi/server.go
parent05dcffafec901dd8a328f5eafb2778ea37429d9a (diff)
downloadx-531fae570d0fdb89a519d3e4e1c80a7ff8b6e665.tar.xz
x-531fae570d0fdb89a519d3e4e1c80a7ff8b6e665.zip
cmd/mi: rename this to SwitchTracker
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'cmd/mi/server.go')
-rw-r--r--cmd/mi/server.go134
1 files changed, 0 insertions, 134 deletions
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
-}