add test donat handler

This commit is contained in:
harold 2025-07-04 11:04:15 +05:00
parent 66a546b465
commit 4403934c71
9 changed files with 277 additions and 6 deletions

View File

@ -55,6 +55,47 @@ func CreateDonat(donatService model.DonatService) echo.HandlerFunc {
}
}
// CreateTestDonat godoc
// @Summary Create donat
// @Description Create donat
// @Tags Donate
// @Accept json
// @Produce json
// @Param streamer-login path string true "Login стримера"
// @Param request body model.CreateDonatBody true "Create donat body json"
// @Success 200 {object} model.CreateDonatResponse "Donat page updated successfully"
// @Failure 400 {object} echo.HTTPError "Bad request"
// @Failure 401 {object} echo.HTTPError "Unauthorized or expired token"
// @Failure 422 {object} echo.HTTPError "Validation error"
// @Router /test-donat/{streamer-login} [post]
func CreateTestDonat(donatService model.DonatService) echo.HandlerFunc {
return func(request echo.Context) error {
ctx := context.Background()
var body model.CreateDonatBody
err := validator.ParseAndValidate(&body, request)
if err != nil {
slog.Error(err.Error())
return echo.NewHTTPError(http.StatusUnprocessableEntity, "Unprocessable Entity")
}
streamerLogin := request.Param("streamer-login")
err = donatService.CreateTestDonat(
ctx,
streamerLogin,
body.Text,
body.DonatUser,
body.TargetID,
body.Amount,
)
if err != nil {
return request.JSON(http.StatusInternalServerError, err.Error())
}
return request.JSON(http.StatusCreated, "Test donat has been created!")
}
}
// GetDonat godoc
// @Summary Get donats
// @Description Получает список донатов для указанного стримера с пагинацией

View File

@ -80,6 +80,7 @@ func IncludeDonatHandlers(
server.POST(PREFIX+"/init-streamer", InitNewStreamer(donatService))
server.POST(PREFIX+"/donat/:streamer-login", CreateDonat(donatService))
server.POST(PREFIX+"/test-donat/:streamer-login", CreateTestDonat(donatService))
server.GET(PREFIX+"/inner-donate-page", GetInnerDonatePage(donatService))
server.GET(PREFIX+"/outer-donate-page/:streamer-login", GetOuterDonatePage(donatService))

View File

@ -504,7 +504,7 @@ const docTemplate = `{
"parameters": [
{
"type": "file",
"description": "New file to upload",
"description": "New file to upload (max 20 MB)",
"name": "new_file",
"in": "formData",
"required": true
@ -535,6 +535,12 @@ const docTemplate = `{
"$ref": "#/definitions/echo.HTTPError"
}
},
"413": {
"description": "File size exceeds 20 MB limit",
"schema": {
"$ref": "#/definitions/echo.HTTPError"
}
},
"422": {
"description": "Validation error (specific cases, might overlap with 400/500)",
"schema": {
@ -1105,6 +1111,65 @@ const docTemplate = `{
}
}
},
"/test-donat/{streamer-login}": {
"post": {
"description": "Create donat",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Donate"
],
"summary": "Create donat",
"parameters": [
{
"type": "string",
"description": "Login стримера",
"name": "streamer-login",
"in": "path",
"required": true
},
{
"description": "Create donat body json",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/donat-widget_internal_model.CreateDonatBody"
}
}
],
"responses": {
"200": {
"description": "Donat page updated successfully",
"schema": {
"$ref": "#/definitions/donat-widget_internal_model.CreateDonatResponse"
}
},
"400": {
"description": "Bad request",
"schema": {
"$ref": "#/definitions/echo.HTTPError"
}
},
"401": {
"description": "Unauthorized or expired token",
"schema": {
"$ref": "#/definitions/echo.HTTPError"
}
},
"422": {
"description": "Validation error",
"schema": {
"$ref": "#/definitions/echo.HTTPError"
}
}
}
}
},
"/text-after-donat/{order-id}": {
"get": {
"description": "Получает список донатов для указанного стримера с пагинацией",

View File

@ -497,7 +497,7 @@
"parameters": [
{
"type": "file",
"description": "New file to upload",
"description": "New file to upload (max 20 MB)",
"name": "new_file",
"in": "formData",
"required": true
@ -528,6 +528,12 @@
"$ref": "#/definitions/echo.HTTPError"
}
},
"413": {
"description": "File size exceeds 20 MB limit",
"schema": {
"$ref": "#/definitions/echo.HTTPError"
}
},
"422": {
"description": "Validation error (specific cases, might overlap with 400/500)",
"schema": {
@ -1098,6 +1104,65 @@
}
}
},
"/test-donat/{streamer-login}": {
"post": {
"description": "Create donat",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Donate"
],
"summary": "Create donat",
"parameters": [
{
"type": "string",
"description": "Login стримера",
"name": "streamer-login",
"in": "path",
"required": true
},
{
"description": "Create donat body json",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/donat-widget_internal_model.CreateDonatBody"
}
}
],
"responses": {
"200": {
"description": "Donat page updated successfully",
"schema": {
"$ref": "#/definitions/donat-widget_internal_model.CreateDonatResponse"
}
},
"400": {
"description": "Bad request",
"schema": {
"$ref": "#/definitions/echo.HTTPError"
}
},
"401": {
"description": "Unauthorized or expired token",
"schema": {
"$ref": "#/definitions/echo.HTTPError"
}
},
"422": {
"description": "Validation error",
"schema": {
"$ref": "#/definitions/echo.HTTPError"
}
}
}
}
},
"/text-after-donat/{order-id}": {
"get": {
"description": "Получает список донатов для указанного стримера с пагинацией",

View File

@ -870,7 +870,7 @@ paths:
- multipart/form-data
description: Add new File. The entity type defaults to 'widget' if not specified.
parameters:
- description: New file to upload
- description: New file to upload (max 20 MB)
in: formData
name: new_file
required: true
@ -894,6 +894,10 @@ paths:
description: Unauthorized or expired token
schema:
$ref: '#/definitions/echo.HTTPError'
"413":
description: File size exceeds 20 MB limit
schema:
$ref: '#/definitions/echo.HTTPError'
"422":
description: Validation error (specific cases, might overlap with 400/500)
schema:
@ -1265,6 +1269,45 @@ paths:
summary: Get outer donate page info
tags:
- Donate
/test-donat/{streamer-login}:
post:
consumes:
- application/json
description: Create donat
parameters:
- description: Login стримера
in: path
name: streamer-login
required: true
type: string
- description: Create donat body json
in: body
name: request
required: true
schema:
$ref: '#/definitions/donat-widget_internal_model.CreateDonatBody'
produces:
- application/json
responses:
"200":
description: Donat page updated successfully
schema:
$ref: '#/definitions/donat-widget_internal_model.CreateDonatResponse'
"400":
description: Bad request
schema:
$ref: '#/definitions/echo.HTTPError'
"401":
description: Unauthorized or expired token
schema:
$ref: '#/definitions/echo.HTTPError'
"422":
description: Validation error
schema:
$ref: '#/definitions/echo.HTTPError'
summary: Create donat
tags:
- Donate
/text-after-donat/{order-id}:
get:
consumes:

View File

@ -74,6 +74,14 @@ type DonatService interface {
CheckToken(request echo.Context) (api.CheckTokenResponse, error)
CreateDonat(ctx context.Context, streamerLogin, text, donatUser string, targetID *int, amount int) (CreateDonatResponse, error)
CreateTestDonat(
ctx context.Context,
streamerLogin string,
text string,
donatUser string,
targetID *int,
amount int,
) error
GetDonatsByStreamerID(ctx context.Context, streamerID, page, limit int) ([]*Donat, error)
GetDonatByOrderID(ctx context.Context, orderID string) (*Donat, error)
@ -131,6 +139,7 @@ type DonatRepo interface {
amount int,
text string,
donatUser string,
status string,
) error
GetDonatsByStreamerID(ctx context.Context, streamerID, page, limit int) ([]*Donat, error)

View File

@ -77,6 +77,7 @@ FROM donats
WHERE streamer_id = @streamer_id
AND rejected_time IS NULL
AND paid_time IS NOT NULL
AND status != 'test_donat'
ORDER BY created_at DESC
LIMIT @limit OFFSET @offset;
@ -580,7 +581,7 @@ FROM widgets AS w
INNER JOIN
donats AS d ON d.widget_id = w.id
WHERE d.streamer_id = @streamer_id
AND d.status = 'accepted_moderation'
AND (d.status = 'accepted_moderation' OR d.status = 'test_donat')
AND d.showed_time IS NULL
ORDER BY d.accepted_time ASC
LIMIT 1;

View File

@ -33,6 +33,7 @@ func (repoDonat *RepoDonat) CreateDonat(
amount int,
text string,
donatUser string,
status string,
) error {
args := pgx.NamedArgs{
"streamer_id": streamerID,
@ -41,7 +42,7 @@ func (repoDonat *RepoDonat) CreateDonat(
"target_id": targetID,
"text": text,
"amount": amount,
"status": "pending",
"status": status,
"donat_user": donatUser,
}
_, err := repoDonat.db.Insert(ctx, sql.CreateDonat, args)

View File

@ -120,7 +120,15 @@ func (donatService *ServiceDonat) CreateDonat(
}
err = donatService.donatRepo.CreateDonat(
ctx, donatePage.StreamerID, targetID, widgetID, orderID, amount, text, donatUser,
ctx,
donatePage.StreamerID,
targetID,
widgetID,
orderID,
amount,
text,
donatUser,
"pending",
)
if err != nil {
slog.Error(err.Error())
@ -139,6 +147,43 @@ func (donatService *ServiceDonat) CreateDonat(
return createDonatResp, err
}
func (donatService *ServiceDonat) CreateTestDonat(
ctx context.Context,
streamerLogin string,
text string,
donatUser string,
targetID *int,
amount int,
) error {
donatePage, err := donatService.donatRepo.GetDonatPageByLogin(ctx, streamerLogin)
if err != nil {
slog.Error("Failed to get donate page", "error", err.Error())
return err
}
orderID := uuid.New()
widgetID := donatService.defaultWidgetID
err = donatService.donatRepo.CreateDonat(
ctx,
donatePage.StreamerID,
targetID,
widgetID,
orderID,
amount,
text,
donatUser,
"test_donat",
)
if err != nil {
slog.Error(err.Error())
return err
}
return nil
}
func (donatService *ServiceDonat) GetDonatsByStreamerID(
ctx context.Context,
streamerID int,