add handle for donat paid

This commit is contained in:
harold 2025-03-13 21:01:14 +05:00
parent 17d8c25d5f
commit 167a7d5e59
8 changed files with 165 additions and 13 deletions

View File

@ -105,23 +105,28 @@ func GetDonat(donatService model.DonatService) echo.HandlerFunc {
}
}
// MarkDonatPaid godoc
// @Summary Mark donat as paid
// @Description Mark donat as paid
// @Tags Donate
// @Accept json
// @Produce json
// @Param request body model.MarkDonatPaidBody true "order id body"
// @Success 200 {string} string "Ok"
// @Failure 400 {object} echo.HTTPError "Некорректный формат streamerID"
// @Failure 500 {object} echo.HTTPError "Внутренняя ошибка сервера"
// @Router /donat/paid [post]
func MarkDonatPaid(donatService model.DonatService) echo.HandlerFunc {
type MarkDonatPaidBody struct {
OrderID string `json:"orderID"`
}
return func(request echo.Context) error {
ctx := context.Background()
var body MarkDonatPaidBody
if err := request.Bind(&body); err != nil {
var body model.MarkDonatPaidBody
err := validator.ParseAndValidate(&body, request)
if err != nil {
slog.Error(err.Error())
return request.JSON(http.StatusInternalServerError, err.Error())
}
if err := request.Validate(&body); err != nil {
slog.Error(err.Error())
return request.JSON(http.StatusInternalServerError, err.Error())
return echo.NewHTTPError(http.StatusUnprocessableEntity, "Unprocessable Entity")
}
err := donatService.MarkDonatPaid(ctx, body.OrderID)
err = donatService.MarkDonatPaid(ctx, body.OrderID)
if err != nil {
slog.Error(err.Error())
return request.JSON(http.StatusInternalServerError, err.Error())

View File

@ -268,6 +268,52 @@ const docTemplate = `{
}
}
},
"/donat/paid": {
"post": {
"description": "Mark donat as paid",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Donate"
],
"summary": "Mark donat as paid",
"parameters": [
{
"description": "order id body",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/donat-widget_internal_model.MarkDonatPaidBody"
}
}
],
"responses": {
"200": {
"description": "Ok",
"schema": {
"type": "string"
}
},
"400": {
"description": "Некорректный формат streamerID",
"schema": {
"$ref": "#/definitions/echo.HTTPError"
}
},
"500": {
"description": "Внутренняя ошибка сервера",
"schema": {
"$ref": "#/definitions/echo.HTTPError"
}
}
}
}
},
"/donat/period-stat": {
"get": {
"security": [
@ -1559,6 +1605,14 @@ const docTemplate = `{
}
}
},
"donat-widget_internal_model.MarkDonatPaidBody": {
"type": "object",
"properties": {
"order_id": {
"type": "string"
}
}
},
"donat-widget_internal_model.ModerationDonat": {
"type": "object",
"properties": {

View File

@ -261,6 +261,52 @@
}
}
},
"/donat/paid": {
"post": {
"description": "Mark donat as paid",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Donate"
],
"summary": "Mark donat as paid",
"parameters": [
{
"description": "order id body",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/donat-widget_internal_model.MarkDonatPaidBody"
}
}
],
"responses": {
"200": {
"description": "Ok",
"schema": {
"type": "string"
}
},
"400": {
"description": "Некорректный формат streamerID",
"schema": {
"$ref": "#/definitions/echo.HTTPError"
}
},
"500": {
"description": "Внутренняя ошибка сервера",
"schema": {
"$ref": "#/definitions/echo.HTTPError"
}
}
}
}
},
"/donat/period-stat": {
"get": {
"security": [
@ -1552,6 +1598,14 @@
}
}
},
"donat-widget_internal_model.MarkDonatPaidBody": {
"type": "object",
"properties": {
"order_id": {
"type": "string"
}
}
},
"donat-widget_internal_model.ModerationDonat": {
"type": "object",
"properties": {

View File

@ -317,6 +317,11 @@ definitions:
ru_name:
type: string
type: object
donat-widget_internal_model.MarkDonatPaidBody:
properties:
order_id:
type: string
type: object
donat-widget_internal_model.ModerationDonat:
properties:
accepted:
@ -660,6 +665,36 @@ paths:
summary: Create donat
tags:
- Donate
/donat/paid:
post:
consumes:
- application/json
description: Mark donat as paid
parameters:
- description: order id body
in: body
name: request
required: true
schema:
$ref: '#/definitions/donat-widget_internal_model.MarkDonatPaidBody'
produces:
- application/json
responses:
"200":
description: Ok
schema:
type: string
"400":
description: Некорректный формат streamerID
schema:
$ref: '#/definitions/echo.HTTPError'
"500":
description: Внутренняя ошибка сервера
schema:
$ref: '#/definitions/echo.HTTPError'
summary: Mark donat as paid
tags:
- Donate
/donat/period-stat:
get:
consumes:

View File

@ -302,6 +302,10 @@ type ModerationDonat struct {
ShowName *bool `json:"show_name"`
}
type MarkDonatPaidBody struct {
OrderID string `json:"order_id"`
}
//func (widget *GetWidgetDb) GetMediaUrl(mediaType MediaType) MediaUrl {
// var mediaUrl MediaUrl
// if mediaType == "background_url" {

View File

@ -37,6 +37,7 @@ CREATE TABLE IF NOT EXISTS donats (
widget_id INTEGER REFERENCES widgets(id) NOT NULL,
order_id UUID NOT NULL,
target_id INTEGER,
paid_time TIMESTAMP,
status VARCHAR(50) NOT NULL DEFAULT 'pending',

View File

@ -55,7 +55,7 @@ WHERE id = (@id);
`
var MarkDonatPaid = `
UPDATE donats
SET paid = (@paid)
SET paid_time = now(), status = 'moderation'
WHERE order_id = (@order_id);
`
var GetDonatByStreamerID = `

View File

@ -130,7 +130,6 @@ func (repoDonat *RepoDonat) MarkDonatPaid(
) error {
args := pgx.NamedArgs{
"order_id": orderID,
"paid": true,
}
err := repoDonat.db.Update(ctx, sql.MarkDonatPaid, args)
if err != nil {