package target import ( "context" "donat-widget/internal/model" "donat-widget/internal/model/api" "github.com/labstack/echo/v4" "log/slog" "net/http" ) func New( targetRepo model.TargetRepo, authClient model.AuthClient, ) *ServiceTarget { return &ServiceTarget{ targetRepo: targetRepo, authClient: authClient, } } type ServiceTarget struct { targetRepo model.TargetRepo authClient model.AuthClient } func (targetService *ServiceTarget) CreateTarget( ctx context.Context, streamerID int, amount int, text string, ) (int, error) { targetID, err := targetService.targetRepo.CreateTarget(ctx, streamerID, amount, text) if err != nil { slog.Error(err.Error()) return 0, err } return targetID, nil } func (targetService *ServiceTarget) GetAllTarget( ctx context.Context, streamerID int, ) ([]*model.Target, error) { targets, err := targetService.targetRepo.GetAllTarget(ctx, streamerID) if err != nil { slog.Error(err.Error()) return nil, err } return targets, nil } func (targetService *ServiceTarget) AddAmountToTarget( ctx context.Context, targetID int, amount int, ) error { err := targetService.targetRepo.AddAmountToTarget(ctx, targetID, amount) if err != nil { slog.Error(err.Error()) return err } return nil } func (donatService *ServiceTarget) CheckToken( request echo.Context, ) (api.CheckTokenResponse, error) { accessToken := model.Token(request.Request().Header.Get("Authorization")) checkTokenResponse, err := donatService.authClient.CheckToken(accessToken) if err != nil { slog.Error("Failed to check token", "error", err.Error()) return api.CheckTokenResponse{}, echo.NewHTTPError(http.StatusInternalServerError, err.Error()) } if checkTokenResponse.AccountID == 0 { slog.Error("Unauthorized account") return api.CheckTokenResponse{}, echo.NewHTTPError(http.StatusUnauthorized, "Unauthorized account") } if checkTokenResponse.AccountID == -1 { slog.Error("Expired token") return api.CheckTokenResponse{}, echo.NewHTTPError(http.StatusUnauthorized, "Expired token") } return checkTokenResponse, nil }