crypto_alert_bot/internal/usecase/alert.go
2026-02-25 23:52:21 +03:00

66 lines
2.1 KiB
Go

package usecase
import (
"context"
"fmt"
"gitea.computernetthings.ru/yash/crypto_alert_bot/internal/entities"
"github.com/shopspring/decimal"
)
func (uc *Usecase) CreateAlert(ctx context.Context, alert *entities.Alert) (entities.AlertID, error) {
id, err := uc.storage.SaveAlert(ctx, alert)
if err != nil {
uc.log.Error("failed to create alert", "alert", alert, "err", err)
return "", fmt.Errorf("failed to create alert: %w", err)
}
return id, nil
}
func (uc *Usecase) Alert(ctx context.Context, alertID entities.AlertID) (*entities.Alert, error) {
alert, err := uc.storage.AlertByID(ctx, alertID)
if err != nil {
uc.log.Error("failed to get alert", "alert_id", alertID, "err", err)
return nil, fmt.Errorf("failed to get alert: %w", err)
}
return alert, nil
}
func (uc *Usecase) Alerts(ctx context.Context, userID entities.UserID, offset, limit int) ([]entities.Alert, error) {
alerts, err := uc.storage.AlertsByUserID(ctx, userID, offset, limit)
if err != nil {
uc.log.Error("failed to get alerts", "user_id", userID, "err", err)
return nil, fmt.Errorf("failed to get alerts: %w", err)
}
return alerts, nil
}
func (uc *Usecase) RemoveAlert(ctx context.Context, alertID entities.AlertID) error {
if err := uc.storage.DeleteAlert(ctx, alertID); err != nil {
uc.log.Error("failed to remove alert", "alert_id", alertID, "err", err)
return fmt.Errorf("failed to remove alert: %w", err)
}
return nil
}
func (uc *Usecase) UpdateAlertPrice(ctx context.Context, alertID entities.AlertID, price decimal.Decimal) error {
if err := uc.storage.UpdateAlertPrice(ctx, alertID, price); err != nil {
uc.log.Error("failed to update alert price", "alert_id", alertID, "price", price, "err", err)
return fmt.Errorf("failed to update alert price: %w", err)
}
return nil
}
func (uc *Usecase) DisableAlert(ctx context.Context, alertID entities.AlertID) error {
if err := uc.storage.DisableAlert(ctx, alertID); err != nil {
uc.log.Error("failed to disable alert", "alert_id", alertID, "err", err)
return fmt.Errorf("failed to disable alert: %w", err)
}
return nil
}