Skip to content

Commit

Permalink
fix statuses
Browse files Browse the repository at this point in the history
  • Loading branch information
vindosVP committed Mar 26, 2024
1 parent 1fba879 commit 4f7d0e5
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 4 deletions.
16 changes: 14 additions & 2 deletions internal/processor/processor.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package processor

import (
"context"
"encoding/json"
"errors"
"fmt"
"github.com/go-resty/resty/v2"
Expand All @@ -18,6 +19,7 @@ var ErrTooManyRequests = errors.New("too many requests")
type Storage interface {
GetUnprocessedOrders(ctx context.Context) ([]int, error)
UpdateOrder(ctx context.Context, id int, status string, sum float64) (*models.Order, error)
UpdateOrderStatus(ctx context.Context, id int, status string) (*models.Order, error)
}

type Processor struct {
Expand Down Expand Up @@ -134,7 +136,7 @@ func (p *Processor) generateJobs(orders []int) chan job {
func processOrder(client *resty.Client, serverAddress string, order int, storage Storage) error {
var response accrualResponse
url := fmt.Sprintf("%s/api/orders/%s", serverAddress, strconv.Itoa(order))
resp, err := client.R().SetResult(&response).Get(url)
resp, err := client.R().Get(url)
if err != nil {
logger.Log.Error("Failed to get accruals by order", zap.Int("orderId", order), zap.Error(err))
}
Expand All @@ -145,8 +147,18 @@ func processOrder(client *resty.Client, serverAddress string, order int, storage
logger.Log.Error("Failed to get accruals by order", zap.Int("orderId", order), zap.Int("statusCode", resp.StatusCode()))
return err
}
err = json.Unmarshal(resp.Body(), &response)
if err != nil {
logger.Log.Error("Failed to unmarshal accruals response", zap.Int("orderId", order), zap.Error(err))
return err
}
id, _ := strconv.Atoi(response.Order)
_, err = storage.UpdateOrder(context.Background(), id, response.Status, response.Accrual)
if response.Status == models.OrderStatusProcessed {
_, err = storage.UpdateOrder(context.Background(), id, response.Status, response.Accrual)
} else {
_, err = storage.UpdateOrderStatus(context.Background(), id, response.Status)
}

if err != nil {
return fmt.Errorf("storage.UpdateOrder: %w", err)
}
Expand Down
13 changes: 11 additions & 2 deletions internal/repos/orders.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ func (or *OrdersRepo) GetUsersWithdrawals(ctx context.Context, userID int) ([]*m
}

func (or *OrdersRepo) GetUnprocessedOrders(ctx context.Context) ([]int, error) {
query := "select id from orders where status = $1"
rows, err := or.pool.Query(ctx, query, models.OrderStatusNew)
query := "select id from orders where status = $1 or status = $2"
rows, err := or.pool.Query(ctx, query, models.OrderStatusNew, models.OrderStatusProcessing)
if err != nil {
return nil, fmt.Errorf("or.pool.Query: %w", err)
}
Expand All @@ -141,3 +141,12 @@ func (or *OrdersRepo) UpdateOrder(ctx context.Context, id int, status string, su
}
return or.GetByID(ctx, id)
}

func (or *OrdersRepo) UpdateOrderStatus(ctx context.Context, id int, status string) (*models.Order, error) {
query := "update orders set status = $1 where id = $3"
_, err := or.pool.Exec(ctx, query, status, id)
if err != nil {
return nil, fmt.Errorf("or.pool.Exec: %w", err)
}
return or.GetByID(ctx, id)
}
9 changes: 9 additions & 0 deletions internal/storage/storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ type OrderRepo interface {
GetUsersWithdrawals(ctx context.Context, userID int) ([]*models.Order, error)
GetUnprocessedOrders(ctx context.Context) ([]int, error)
UpdateOrder(ctx context.Context, id int, status string, sum float64) (*models.Order, error)
UpdateOrderStatus(ctx context.Context, id int, status string) (*models.Order, error)
}

type Storage struct {
Expand Down Expand Up @@ -136,3 +137,11 @@ func (s *Storage) UpdateOrder(ctx context.Context, id int, status string, sum fl
}
return order, nil
}

func (s *Storage) UpdateOrderStatus(ctx context.Context, id int, status string) (*models.Order, error) {
order, err := s.orderRepo.UpdateOrderStatus(ctx, id, status)
if err != nil {
return nil, fmt.Errorf("s.orderRepo.UpdateOrderStatus: %w", err)
}
return order, nil
}

0 comments on commit 4f7d0e5

Please sign in to comment.