2025-02-28 10:05:23 +05:00

90 lines
2.1 KiB
Go

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 model.StreamerID,
amount model.DonatAmount,
text string,
) (model.TargetID, 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 model.StreamerID,
) ([]*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 model.TargetID,
amount model.DonatAmount,
) 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
}