This commit is contained in:
mm 2024-10-21 10:31:25 +05:00
parent 13a80221ed
commit c259b0f34c
14 changed files with 209 additions and 51 deletions

View File

@ -11,7 +11,7 @@ import (
) )
func CreateDonat(donatService model.DonatService) echo.HandlerFunc { func CreateDonat(donatService model.DonatService) echo.HandlerFunc {
type Body struct { type CreateDonatBody struct {
StreamerID model.StreamerID `json:"streamerID"` StreamerID model.StreamerID `json:"streamerID"`
TargetID model.TargetID `json:"targetID"` TargetID model.TargetID `json:"targetID"`
Amount model.DonatAmount `json:"amount"` Amount model.DonatAmount `json:"amount"`
@ -20,7 +20,7 @@ func CreateDonat(donatService model.DonatService) echo.HandlerFunc {
} }
return func(request echo.Context) error { return func(request echo.Context) error {
ctx := context.Background() ctx := context.Background()
var body Body var body CreateDonatBody
if err := request.Bind(&body); err != nil { if err := request.Bind(&body); err != nil {
slog.Error(err.Error()) slog.Error(err.Error())
return echo.NewHTTPError(400, err.Error()) return echo.NewHTTPError(400, err.Error())
@ -32,29 +32,30 @@ func CreateDonat(donatService model.DonatService) echo.HandlerFunc {
orderID := model.OrderID(uuid.New().String()) orderID := model.OrderID(uuid.New().String())
err := donatService.CreateDonat( order, err := donatService.CreateDonat(
ctx, ctx,
body.StreamerID, body.StreamerID,
orderID, orderID,
body.TargetID,
body.Amount, body.Amount,
body.Text, body.Text,
body.DonatUser, body.DonatUser,
) )
if err != nil { if err != nil {
return request.JSON(500, "Set donat error") return request.JSON(500, "Create donat error")
} }
return request.String(200, "Set donat success") return request.JSON(http.StatusCreated, order)
} }
} }
func MarkDonatPaid(donatService model.DonatService) echo.HandlerFunc { func MarkDonatPaid(donatService model.DonatService) echo.HandlerFunc {
type Body struct { type MarkDonatPaidBody struct {
OrderID model.OrderID `json:"orderID"` OrderID model.OrderID `json:"orderID"`
} }
return func(request echo.Context) error { return func(request echo.Context) error {
ctx := context.Background() ctx := context.Background()
var body Body var body MarkDonatPaidBody
if err := request.Bind(&body); err != nil { if err := request.Bind(&body); err != nil {
slog.Error(err.Error()) slog.Error(err.Error())
return echo.NewHTTPError(400, err.Error()) return echo.NewHTTPError(400, err.Error())

View File

@ -10,8 +10,10 @@ import (
func CreateWidget(widgetService model.WidgetService) echo.HandlerFunc { func CreateWidget(widgetService model.WidgetService) echo.HandlerFunc {
type Body struct { type Body struct {
StreamerID model.StreamerID `json:"streamerID" validate:"required"` StreamerID model.StreamerID `json:"streamerID"`
TemplateID model.TemplateID `json:"templateID" validate:"required"` TemplateID model.TemplateID `json:"templateID"`
MinAmount model.DonatAmount `json:"minAmount"`
Duration model.Duration `json:"duration"`
} }
type Response struct { type Response struct {
@ -31,6 +33,8 @@ func CreateWidget(widgetService model.WidgetService) echo.HandlerFunc {
ctx, ctx,
body.StreamerID, body.StreamerID,
body.TemplateID, body.TemplateID,
body.Duration,
body.MinAmount,
) )
if err != nil { if err != nil {
return request.JSON(422, "Create widget error") return request.JSON(422, "Create widget error")
@ -140,7 +144,7 @@ func UpdateDuration(widgetService model.WidgetService) echo.HandlerFunc {
} }
} }
func SetMediaFile(service model.MediaService) echo.HandlerFunc { func SetMediaFile(widgetService model.WidgetService) echo.HandlerFunc {
return func(request echo.Context) error { return func(request echo.Context) error {
ctx := context.Background() ctx := context.Background()
@ -161,7 +165,7 @@ func SetMediaFile(service model.MediaService) echo.HandlerFunc {
return echo.NewHTTPError(500, "File is invalid") return echo.NewHTTPError(500, "File is invalid")
} }
err = service.SetMediaFile( err = widgetService.SetMediaFile(
ctx, ctx,
model.MediaType(mediaType), model.MediaType(mediaType),
model.WidgetID(widgetID), model.WidgetID(widgetID),
@ -178,7 +182,7 @@ func SetMediaFile(service model.MediaService) echo.HandlerFunc {
} }
} }
func GetMediaFile(service model.MediaService) echo.HandlerFunc { func GetMediaFile(widgetService model.WidgetService) echo.HandlerFunc {
return func(request echo.Context) error { return func(request echo.Context) error {
ctx := context.Background() ctx := context.Background()
@ -191,7 +195,7 @@ func GetMediaFile(service model.MediaService) echo.HandlerFunc {
return echo.NewHTTPError(400, "Path parameter 'widgetID' is invalid") return echo.NewHTTPError(400, "Path parameter 'widgetID' is invalid")
} }
file, err := service.GetMediaFile( file, err := widgetService.GetMediaFile(
ctx, ctx,
model.WidgetID(widgetID), model.WidgetID(widgetID),
model.MediaType(mediaType), model.MediaType(mediaType),
@ -204,7 +208,7 @@ func GetMediaFile(service model.MediaService) echo.HandlerFunc {
} }
} }
func UpdateMediaFile(service model.MediaService) echo.HandlerFunc { func UpdateMediaFile(widgetService model.WidgetService) echo.HandlerFunc {
return func(request echo.Context) error { return func(request echo.Context) error {
ctx := context.Background() ctx := context.Background()
@ -225,7 +229,7 @@ func UpdateMediaFile(service model.MediaService) echo.HandlerFunc {
return echo.NewHTTPError(500, "File is invalid") return echo.NewHTTPError(500, "File is invalid")
} }
err = service.UpdateMediaFile( err = widgetService.UpdateMediaFile(
ctx, ctx,
model.WidgetID(widgetID), model.WidgetID(widgetID),
model.MediaType(mediaType), model.MediaType(mediaType),
@ -243,7 +247,7 @@ func UpdateMediaFile(service model.MediaService) echo.HandlerFunc {
} }
} }
func SetMediaUrl(service model.MediaService) echo.HandlerFunc { func SetMediaUrl(widgetService model.WidgetService) echo.HandlerFunc {
type Body struct { type Body struct {
WidgetID model.WidgetID `json:"widgetID" validate:"required"` WidgetID model.WidgetID `json:"widgetID" validate:"required"`
MediaUrl model.MediaUrl `json:"mediaUrl" validate:"required"` MediaUrl model.MediaUrl `json:"mediaUrl" validate:"required"`
@ -261,7 +265,7 @@ func SetMediaUrl(service model.MediaService) echo.HandlerFunc {
mediaType := request.Param("mediaType") mediaType := request.Param("mediaType")
err := service.SetMediaUrl( err := widgetService.SetMediaUrl(
ctx, ctx,
model.MediaType(mediaType), model.MediaType(mediaType),
body.WidgetID, body.WidgetID,

View File

@ -2,7 +2,7 @@ package http
import ( import (
"context" "context"
. "donat-widget/internal/api/http/handlers/donat"
"donat-widget/internal/model/sql" "donat-widget/internal/model/sql"
"github.com/labstack/echo/v4" "github.com/labstack/echo/v4"
"github.com/swaggo/echo-swagger" "github.com/swaggo/echo-swagger"
@ -15,6 +15,7 @@ import (
) )
import ( import (
. "donat-widget/internal/api/http/handlers/donat"
. "donat-widget/internal/api/http/handlers/widget" . "donat-widget/internal/api/http/handlers/widget"
) )
@ -44,20 +45,23 @@ func IncludeDonatHandlers(
) { ) {
server.POST(PREFIX+"/donat/create", CreateDonat(donatService)) server.POST(PREFIX+"/donat/create", CreateDonat(donatService))
server.POST(PREFIX+"/donat/view/:donatID", MarkDonatView(donatService)) server.POST(PREFIX+"/donat/view/:donatID", MarkDonatView(donatService))
server.POST(PREFIX+"/donat/paid/:donatID", MarkDonatPaid(donatService)) server.POST(PREFIX+"/donat/paid", MarkDonatPaid(donatService))
} }
func IncludeWidgetHandlers( func IncludeWidgetHandlers(
server *echo.Echo, server *echo.Echo,
widgetService model.WidgetService, widgetService model.WidgetService,
) { ) {
server.POST(PREFIX+"/create", CreateWidget(widgetService))
server.GET(PREFIX+"/html/:widgetID", GetWidgetHTML(widgetService))
server.GET(PREFIX+"/info/:widgetID", GetWidgetInfo(widgetService))
server.POST(PREFIX+"/media/:mediaType/upload", SetMediaFile(widgetService)) server.POST(PREFIX+"/media/:mediaType/upload", SetMediaFile(widgetService))
server.POST(PREFIX+"/media/:mediaType/set", SetMediaUrl(widgetService)) server.POST(PREFIX+"/media/:mediaType/set", SetMediaUrl(widgetService))
server.GET(PREFIX+"/media/:mediaType/get/:widgetID", GetMediaFile(widgetService)) server.GET(PREFIX+"/media/:mediaType/get/:widgetID", GetMediaFile(widgetService))
server.POST(PREFIX+"/create", CreateWidget(widgetService))
server.PATCH(PREFIX+"/duration/update", UpdateDuration(widgetService)) server.PATCH(PREFIX+"/duration/update", UpdateDuration(widgetService))
server.GET(PREFIX+"/html/:widgetID", GetWidgetHTML(widgetService))
server.GET(PREFIX+"/info/:widgetID", GetWidgetInfo(widgetService))
} }
func CreateTale(db model.Db) echo.HandlerFunc { func CreateTale(db model.Db) echo.HandlerFunc {

View File

@ -1,9 +1,9 @@
db: db:
port: "5432" port: "5432"
host: "80.87.195.79" host: "db"
password: "test" password: "postgres"
username: "test" username: "postgres"
dbname: "test" dbname: "postgres"
server: server:
port: "8002" port: "8002"
@ -13,5 +13,5 @@ storage:
master: "http://92.63.193.151:9333" master: "http://92.63.193.151:9333"
paymentService: paymentService:
host: "payment-service" host: "92.118.114.148"
port: "8003" port: "8003"

View File

@ -9,7 +9,7 @@ import (
) )
type WidgetService interface { type WidgetService interface {
CreateWidget(ctx context.Context, streamerID StreamerID, templateId TemplateID) (WidgetID, error) CreateWidget(ctx context.Context, streamerID StreamerID, templateId TemplateID, duration Duration, minAmount DonatAmount) (WidgetID, error)
DeleteWidget(ctx context.Context, widgetID WidgetID) error DeleteWidget(ctx context.Context, widgetID WidgetID) error
UpdateDuration(ctx context.Context, widgetID WidgetID, duration Duration) error UpdateDuration(ctx context.Context, widgetID WidgetID, duration Duration) error
GetWidgetInfo(ctx context.Context, widgetID WidgetID) (*DonatAndWidget, error) GetWidgetInfo(ctx context.Context, widgetID WidgetID) (*DonatAndWidget, error)
@ -21,7 +21,7 @@ type WidgetService interface {
} }
type WidgetRepo interface { type WidgetRepo interface {
CreateWidget(ctx context.Context, streamerID StreamerID, templateId TemplateID) (WidgetID, error) CreateWidget(ctx context.Context, streamerID StreamerID, templateId TemplateID, duration Duration, minAmount DonatAmount) (WidgetID, error)
DeleteWidget(ctx context.Context, widgetID WidgetID) error DeleteWidget(ctx context.Context, widgetID WidgetID) error
UpdateDuration(ctx context.Context, widgetID WidgetID, duration Duration) error UpdateDuration(ctx context.Context, widgetID WidgetID, duration Duration) error
GetWidget(ctx context.Context, widgetID WidgetID) (*Widget, error) GetWidget(ctx context.Context, widgetID WidgetID) (*Widget, error)
@ -34,18 +34,26 @@ type WidgetRepo interface {
} }
type DonatService interface { type DonatService interface {
CreateDonat(ctx context.Context, streamerID StreamerID, orderID OrderID, amount DonatAmount, text string, donatUser string) error CreateDonat(ctx context.Context, streamerID StreamerID, orderID OrderID, targetID TargetID, amount DonatAmount, text string, donatUser string) (api.CreatePaymentResponse, error)
MarkDonatPaid(ctx context.Context, orderID OrderID) error MarkDonatPaid(ctx context.Context, orderID OrderID) error
MarkDonatView(ctx context.Context, DonatID DonatID) error MarkDonatView(ctx context.Context, DonatID DonatID) error
} }
type DonatRepo interface { type DonatRepo interface {
CreateDonat(ctx context.Context, widgetID WidgetID, orderID OrderID, amount DonatAmount, text string, donatUser string) error CreateDonat(ctx context.Context, widgetID WidgetID, orderID OrderID, targetID TargetID, amount DonatAmount, text string, donatUser string) error
GetDonat(ctx context.Context, widgetID WidgetID) ([]*Donat, error) GetDonat(ctx context.Context, widgetID WidgetID) ([]*Donat, error)
MarkDonatPaid(ctx context.Context, orderID OrderID) error MarkDonatPaid(ctx context.Context, orderID OrderID) error
MarkDonatView(ctx context.Context, DonatID DonatID) error MarkDonatView(ctx context.Context, DonatID DonatID) error
} }
type TargetService interface {
CreateTarget()
}
type TargetRepo interface {
CreateTarget()
}
type Error interface { type Error interface {
Error() string Error() string
} }

View File

@ -21,6 +21,7 @@ CREATE TABLE IF NOT EXISTS donats (
id SERIAL PRIMARY KEY, id SERIAL PRIMARY KEY,
widget_id INTEGER NOT NULL, widget_id INTEGER NOT NULL,
order_id TEXT NOT NULL, order_id TEXT NOT NULL,
target_id INTEGER NOT NULL,
text TEXT NOT NULL, text TEXT NOT NULL,
amount INTEGER NOT NULL, amount INTEGER NOT NULL,
@ -35,9 +36,12 @@ CREATE TABLE IF NOT EXISTS donats (
CREATE TABLE IF NOT EXISTS targets ( CREATE TABLE IF NOT EXISTS targets (
id SERIAL PRIMARY KEY, id SERIAL PRIMARY KEY,
streamer_id INTEGER NOT NULL,
text TEXT NOT NULL, text TEXT NOT NULL,
amount INTEGER NOT NULL, amount INTEGER NOT NULL,
collected INTEGER NOT NULL, collected INTEGER DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
); );

View File

@ -6,8 +6,8 @@ import (
) )
var CreateWidget = ` var CreateWidget = `
INSERT INTO widgets (streamer_id, template_id) INSERT INTO widgets (streamer_id, template_id, duration, min_amount)
VALUES (@streamer_id, @template_id); VALUES (@streamer_id, @template_id, @duration, @min_amount);
` `
var UpdateDuration = ` var UpdateDuration = `
UPDATE widgets UPDATE widgets
@ -43,8 +43,8 @@ func GetMediaUrl(mediaType model.MediaType) string {
} }
var CreateDonat = ` var CreateDonat = `
INSERT INTO donats (widget_id, text, amount, donat_user, order_id) INSERT INTO donats (widget_id, text, amount, donat_user, order_id, target_id)
VALUES (@widget_id, @text, @amount, @donat_user, @order_id); VALUES (@widget_id, @text, @amount, @donat_user, @order_id, @target_id);
` `
var MarkDonatView = ` var MarkDonatView = `
UPDATE donats UPDATE donats
@ -60,3 +60,18 @@ var GetDonat = `
SELECT * FROM donats SELECT * FROM donats
WHERE widget_id = (@widget_id) AND paid = (@paid) AND view = (@view); WHERE widget_id = (@widget_id) AND paid = (@paid) AND view = (@view);
` `
var CreateTarget = `
INSERT INTO targets (streamer_id, text, amount)
VALUES (@streamer_id, @text, @amount);
`
var GetAllTarget = `
SELECT * FROM targets
WHERE streamer_id = (@streamer_id);
`
var AddAmountToTarget = `
UPDATE targets
SET amount = amount + (@amount)
WHERE id = (@target_id);
`

View File

@ -81,7 +81,7 @@ async function endDonat(donatID) {
while (contentDiv.firstChild) { while (contentDiv.firstChild) {
contentDiv.removeChild(contentDiv.firstChild); contentDiv.removeChild(contentDiv.firstChild);
} }
let response = await fetch(baseUrl + '/donat/delete/' + String(donatID), {method: 'DELETE'}); let response = await fetch(baseUrl + '/donat/view/' + String(donatID), {method: 'POST'});
} }
let audio; let audio;

View File

@ -23,13 +23,15 @@ func (repoDonat *RepoDonat) CreateDonat(
ctx context.Context, ctx context.Context,
widgetID model.WidgetID, widgetID model.WidgetID,
orderID model.OrderID, orderID model.OrderID,
targetID model.TargetID,
amount model.DonatAmount, amount model.DonatAmount,
text string, text string,
donatUser string, donatUser string,
) error { ) error {
args := model.QueryArgs{ args := pgx.NamedArgs{
"widget_id": widgetID, "widget_id": widgetID,
"order_id": orderID, "order_id": orderID,
"target_id": targetID,
"text": text, "text": text,
"amount": amount, "amount": amount,
"donat_user": donatUser, "donat_user": donatUser,

View File

@ -1 +1,81 @@
package target package target
import (
"context"
"donat-widget/internal/model"
"donat-widget/internal/model/sql"
"github.com/georgysavva/scany/v2/pgxscan"
"github.com/jackc/pgx/v5"
"log/slog"
)
func New(db model.Db) *RepoTarget {
return &RepoTarget{
db: db,
}
}
type RepoTarget struct {
db model.Db
}
func (targetRepo *RepoTarget) CreateTarget(
ctx context.Context,
streamerID model.StreamerID,
amount model.DonatAmount,
text string,
) error {
args := pgx.NamedArgs{
"streamer_id": streamerID,
"amount": amount,
"text": text,
}
_, err := targetRepo.db.Query(ctx, sql.CreateTarget, args)
if err != nil {
slog.Error("targetRepo.db.Query", err)
return err
}
return nil
}
func (targetRepo *RepoTarget) GetAllTarget(
ctx context.Context,
streamerID model.StreamerID,
) ([]*model.Target, error) {
args := pgx.NamedArgs{
"streamer_id": streamerID,
}
rows, err := targetRepo.db.Query(ctx, sql.GetAllTarget, args)
if err != nil {
slog.Error("targetRepo.db.Query", err)
return nil, err
}
var targets []*model.Target
err = pgxscan.ScanAll(&targets, rows)
if err != nil {
slog.Error("targetRepo.db.Query", err)
return nil, err
}
return targets, nil
}
func (targetRepo *RepoTarget) AddAmountToTarget(
ctx context.Context,
targetID model.TargetID,
amount model.DonatAmount,
) error {
args := pgx.NamedArgs{
"target_id": targetID,
"amount": amount,
}
_, err := targetRepo.db.Query(ctx, sql.AddAmountToTarget, args)
if err != nil {
slog.Error("targetRepo.db.Query", err)
return err
}
return nil
}

View File

@ -6,6 +6,7 @@ import (
"donat-widget/internal/model/sql" "donat-widget/internal/model/sql"
"errors" "errors"
"github.com/georgysavva/scany/v2/pgxscan" "github.com/georgysavva/scany/v2/pgxscan"
"github.com/jackc/pgx/v5"
"log/slog" "log/slog"
) )
@ -28,10 +29,14 @@ func (widgetRepo *RepoWidget) CreateWidget(
ctx context.Context, ctx context.Context,
streamerID model.StreamerID, streamerID model.StreamerID,
templateID model.TemplateID, templateID model.TemplateID,
duration model.Duration,
minAmount model.DonatAmount,
) (model.WidgetID, error) { ) (model.WidgetID, error) {
args := model.QueryArgs{ args := pgx.NamedArgs{
"streamer_id": streamerID, "streamer_id": streamerID,
"template_id": templateID, "template_id": templateID,
"duration": duration,
"min_amount": minAmount,
} }
_, err := widgetRepo.db.Query(ctx, sql.CreateWidget, args) _, err := widgetRepo.db.Query(ctx, sql.CreateWidget, args)
if err != nil { if err != nil {
@ -47,7 +52,7 @@ func (widgetRepo *RepoWidget) GetWidget(
ctx context.Context, ctx context.Context,
widgetID model.WidgetID, widgetID model.WidgetID,
) (*model.Widget, error) { ) (*model.Widget, error) {
args := model.QueryArgs{ args := pgx.NamedArgs{
"id": widgetID, "id": widgetID,
} }
rows, err := widgetRepo.db.Query(ctx, sql.GetWidget, args) rows, err := widgetRepo.db.Query(ctx, sql.GetWidget, args)
@ -78,7 +83,7 @@ func (widgetRepo *RepoWidget) GetAllWidget(
ctx context.Context, ctx context.Context,
streamerID model.StreamerID, streamerID model.StreamerID,
) ([]*model.Widget, error) { ) ([]*model.Widget, error) {
args := model.QueryArgs{ args := pgx.NamedArgs{
"streamerID": streamerID, "streamerID": streamerID,
} }
rows, err := widgetRepo.db.Query(ctx, sql.GetAllWidget, args) rows, err := widgetRepo.db.Query(ctx, sql.GetAllWidget, args)
@ -109,7 +114,7 @@ func (widgetRepo *RepoWidget) UpdateDuration(
widgetID model.WidgetID, widgetID model.WidgetID,
duration model.Duration, duration model.Duration,
) error { ) error {
args := model.QueryArgs{ args := pgx.NamedArgs{
"id": widgetID, "id": widgetID,
"duration": duration, "duration": duration,
} }
@ -166,7 +171,7 @@ func (widgetRepo *RepoWidget) UpdateMediaFile(
} }
mediaType = mediaType + "_url" mediaType = mediaType + "_url"
args := model.QueryArgs{ args := pgx.NamedArgs{
string(mediaType): model.MediaUrl(fileID), string(mediaType): model.MediaUrl(fileID),
"id": widgetID, "id": widgetID,
} }
@ -187,7 +192,7 @@ func (widgetRepo *RepoWidget) SetMediaUrl(
) error { ) error {
mediaType = mediaType + "_url" mediaType = mediaType + "_url"
args := model.QueryArgs{ args := pgx.NamedArgs{
string(mediaType): mediaUrl, string(mediaType): mediaUrl,
"id": widgetID, "id": widgetID,
} }
@ -205,7 +210,7 @@ func (widgetRepo *RepoWidget) GetMediaUrl(
mediaType model.MediaType, mediaType model.MediaType,
) (model.MediaUrl, error) { ) (model.MediaUrl, error) {
mediaType = mediaType + "_url" mediaType = mediaType + "_url"
args := model.QueryArgs{ args := pgx.NamedArgs{
"id": widgetID, "id": widgetID,
} }
rows, err := widgetRepo.db.Query(ctx, sql.GetMediaUrl(mediaType), args) rows, err := widgetRepo.db.Query(ctx, sql.GetMediaUrl(mediaType), args)

View File

@ -3,6 +3,7 @@ package donat
import ( import (
"context" "context"
"donat-widget/internal/model" "donat-widget/internal/model"
"donat-widget/internal/model/api"
"log/slog" "log/slog"
) )
@ -28,14 +29,15 @@ func (donatService *ServiceDonat) CreateDonat(
ctx context.Context, ctx context.Context,
streamerID model.StreamerID, streamerID model.StreamerID,
orderID model.OrderID, orderID model.OrderID,
targetID model.TargetID,
amount model.DonatAmount, amount model.DonatAmount,
text string, text string,
donatUser string, donatUser string,
) error { ) (api.CreatePaymentResponse, error) {
widgets, err := donatService.widgetRepo.GetAllWidget(ctx, streamerID) widgets, err := donatService.widgetRepo.GetAllWidget(ctx, streamerID)
if err != nil { if err != nil {
slog.Error("donatService.widgetRepo.GetAllWidget: ", err) slog.Error("donatService.widgetRepo.GetAllWidget: ", err)
return err return api.CreatePaymentResponse{}, err
} }
var widgetID model.WidgetID var widgetID model.WidgetID
@ -49,16 +51,23 @@ func (donatService *ServiceDonat) CreateDonat(
ctx, ctx,
widgetID, widgetID,
orderID, orderID,
targetID,
amount, amount,
text, text,
donatUser, donatUser,
) )
if err != nil { if err != nil {
slog.Error("donatService.donatRepo.SetDonat: " + err.Error()) slog.Error("donatService.donatRepo.CreateDonat: " + err.Error())
return err return api.CreatePaymentResponse{}, err
} }
return nil createPaymentResponse, err := donatService.paymentClient.CreatePayment(streamerID, amount, orderID)
if err != nil {
slog.Error("donatService.paymentClient.CreatePayment: " + err.Error())
return api.CreatePaymentResponse{}, err
}
return createPaymentResponse, nil
} }
func (donatService *ServiceDonat) MarkDonatPaid( func (donatService *ServiceDonat) MarkDonatPaid(

View File

@ -1 +1,19 @@
package target package target
import "donat-widget/internal/model"
type ServiceDonat struct {
targetRepo model.TargerRep
}
func New(
donatRepo model.DonatRepo,
widgetRepo model.WidgetRepo,
paymentClient model.PaymentClient,
) *ServiceDonat {
return &ServiceDonat{
donatRepo: donatRepo,
widgetRepo: widgetRepo,
paymentClient: paymentClient,
}
}

View File

@ -25,8 +25,16 @@ func (widgetService *ServiceWidget) CreateWidget(
ctx context.Context, ctx context.Context,
streamerID model.StreamerID, streamerID model.StreamerID,
templateID model.TemplateID, templateID model.TemplateID,
duration model.Duration,
minAmount model.DonatAmount,
) (model.WidgetID, error) { ) (model.WidgetID, error) {
widgetID, err := widgetService.widgetRepo.CreateWidget(ctx, streamerID, templateID) widgetID, err := widgetService.widgetRepo.CreateWidget(
ctx,
streamerID,
templateID,
duration,
minAmount,
)
if err != nil { if err != nil {
slog.Error("widgetService.widgetRepo.CreateWidget: " + err.Error()) slog.Error("widgetService.widgetRepo.CreateWidget: " + err.Error())
return 0, err return 0, err