🐛 Fix answer question got select wont got paid
This commit is contained in:
parent
b888cf5acb
commit
d8dabd002b
@ -3,6 +3,9 @@ package api
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
"git.solsynth.dev/hypernet/interactive/pkg/internal/database"
|
"git.solsynth.dev/hypernet/interactive/pkg/internal/database"
|
||||||
"git.solsynth.dev/hypernet/interactive/pkg/internal/gap"
|
"git.solsynth.dev/hypernet/interactive/pkg/internal/gap"
|
||||||
"git.solsynth.dev/hypernet/interactive/pkg/internal/http/exts"
|
"git.solsynth.dev/hypernet/interactive/pkg/internal/http/exts"
|
||||||
@ -16,8 +19,6 @@ import (
|
|||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
jsoniter "github.com/json-iterator/go"
|
jsoniter "github.com/json-iterator/go"
|
||||||
"github.com/samber/lo"
|
"github.com/samber/lo"
|
||||||
"strconv"
|
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func createQuestion(c *fiber.Ctx) error {
|
func createQuestion(c *fiber.Ctx) error {
|
||||||
@ -285,10 +286,14 @@ func selectQuestionAnswer(c *fiber.Ctx) error {
|
|||||||
return fiber.NewError(fiber.StatusNotFound, err.Error())
|
return fiber.NewError(fiber.StatusNotFound, err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var body models.PostQuestionBody
|
||||||
|
raw, _ := jsoniter.Marshal(item.Body)
|
||||||
|
_ = jsoniter.Unmarshal(raw, &body)
|
||||||
|
|
||||||
if item.LockedAt != nil {
|
if item.LockedAt != nil {
|
||||||
return fiber.NewError(fiber.StatusForbidden, "post was locked")
|
return fiber.NewError(fiber.StatusForbidden, "post was locked")
|
||||||
}
|
}
|
||||||
if val, ok := item.Body["answer"].(uint); ok && val > 0 {
|
if body.Answer != nil && *body.Answer > 0 {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, "question already has an answer")
|
return fiber.NewError(fiber.StatusBadRequest, "question already has an answer")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,6 +309,24 @@ func selectQuestionAnswer(c *fiber.Ctx) error {
|
|||||||
if item, err = services.EditPost(item); err != nil {
|
if item, err = services.EditPost(item); err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
} else {
|
} else {
|
||||||
|
// Give the reward
|
||||||
|
if body.Reward > 0 && answer.Publisher.AccountID != nil {
|
||||||
|
conn, err := gap.Nx.GetClientGrpcConn("wa")
|
||||||
|
if err != nil {
|
||||||
|
return fiber.NewError(fiber.StatusInternalServerError, fmt.Sprintf("unable to connect Wallet: %v", err))
|
||||||
|
}
|
||||||
|
wc := wproto.NewPaymentServiceClient(conn)
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second*3)
|
||||||
|
defer cancel()
|
||||||
|
if _, err := wc.MakeTransactionWithAccount(ctx, &wproto.MakeTransactionWithAccountRequest{
|
||||||
|
Amount: body.Reward,
|
||||||
|
Remark: fmt.Sprintf("Answer of question %d got selected reward", item.ID),
|
||||||
|
PayeeAccountId: lo.ToPtr(uint64(*answer.Publisher.AccountID)),
|
||||||
|
}); err != nil {
|
||||||
|
return fiber.NewError(fiber.StatusPaymentRequired, fmt.Sprintf("failed to handle payment: %v", err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_ = authkit.AddEventExt(
|
_ = authkit.AddEventExt(
|
||||||
gap.Nx,
|
gap.Nx,
|
||||||
"posts.edit.answer",
|
"posts.edit.answer",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user