diff --git a/bin/evening_detective_server b/bin/evening_detective_server index 835819a..0b17b05 100755 Binary files a/bin/evening_detective_server and b/bin/evening_detective_server differ diff --git a/internal/app/server.go b/internal/app/server.go index 5f5b51b..8203b2c 100644 --- a/internal/app/server.go +++ b/internal/app/server.go @@ -248,6 +248,9 @@ func (s *server) UpdateGameMapItem(ctx context.Context, req *proto.UpdateGameMap return nil, status.Error(codes.InvalidArgument, "некорректный объект карты") } if err := s.mapRepo.Update(ctx, game_map_repo.Item{GameID: int(req.GameId), Kind: req.Kind, ItemID: int(req.ItemId), X: int(req.X), Y: int(req.Y), Hidden: req.Hidden}); err != nil { + if errors.Is(err, game_map_repo.ErrItemNotFound) { + return nil, status.Error(codes.NotFound, "объект карты не найден") + } return nil, status.Error(codes.Internal, "не удалось изменить карту") } return &proto.UpdateGameMapItemRsp{}, nil diff --git a/internal/repos/game_map_repo/repo.go b/internal/repos/game_map_repo/repo.go index 1c0c75d..13fb50c 100644 --- a/internal/repos/game_map_repo/repo.go +++ b/internal/repos/game_map_repo/repo.go @@ -2,10 +2,13 @@ package game_map_repo import ( "context" + "errors" "github.com/jackc/pgx/v5/pgxpool" ) +var ErrItemNotFound = errors.New("объект карты не найден") + type Item struct { GameID int Kind string @@ -15,12 +18,12 @@ type Item struct { Hidden bool } -type Repo struct{ - pool *pgxpool.Pool +type Repo struct { + pool *pgxpool.Pool } -func New(pool *pgxpool.Pool) *Repo { - return &Repo{pool: pool} +func New(pool *pgxpool.Pool) *Repo { + return &Repo{pool: pool} } func (r *Repo) Ensure(ctx context.Context, gameID int, kind string, itemID int) error { @@ -48,6 +51,12 @@ func (r *Repo) List(ctx context.Context, gameID int) ([]Item, error) { } func (r *Repo) Update(ctx context.Context, item Item) error { - _, err := r.pool.Exec(ctx, `UPDATE game_map_items SET x = $4, y = $5, hidden = $6 WHERE game_id = $1 AND kind = $2 AND item_id = $3`, item.GameID, item.Kind, item.ItemID, item.X, item.Y, item.Hidden) - return err + result, err := r.pool.Exec(ctx, `UPDATE game_map_items SET x = $4, y = $5, hidden = $6 WHERE game_id = $1 AND kind = $2 AND item_id = $3`, item.GameID, item.Kind, item.ItemID, item.X, item.Y, item.Hidden) + if err != nil { + return err + } + if result.RowsAffected() == 0 { + return ErrItemNotFound + } + return nil }