feat: add charge
This commit is contained in:
@@ -33,3 +33,19 @@ func (c *Controller) Charge(ctx fiber.Ctx) error {
|
||||
|
||||
return ctx.JSON(nil)
|
||||
}
|
||||
|
||||
// Info
|
||||
func (c *Controller) Info(ctx fiber.Ctx) error {
|
||||
claim := fiber.Locals[*jwt.Claims](ctx, consts.CtxKeyClaim)
|
||||
log.Debug(claim)
|
||||
|
||||
info := &UserInfo{}
|
||||
|
||||
balance, err := c.svc.GetTenantUserBalance(ctx.Context(), claim.TenantID, claim.UserID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
info.Balance = balance
|
||||
|
||||
return ctx.JSON(info)
|
||||
}
|
||||
|
||||
5
backend/modules/users/dto.go
Normal file
5
backend/modules/users/dto.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package users
|
||||
|
||||
type UserInfo struct {
|
||||
Balance int64 `json:"balance"`
|
||||
}
|
||||
@@ -26,6 +26,6 @@ func (r *Router) Name() string {
|
||||
|
||||
func (r *Router) Register(router fiber.Router) {
|
||||
group := router.Group(r.Name())
|
||||
group.Get("", r.controller.List)
|
||||
group.Get("info", r.controller.Info)
|
||||
group.Patch("charge/:code", r.controller.Charge)
|
||||
}
|
||||
|
||||
@@ -174,13 +174,13 @@ func (svc *Service) TenantHasUser(ctx context.Context, userID, tenantID int64) (
|
||||
log.Debug(stmt.DebugSql())
|
||||
|
||||
var result struct {
|
||||
cnt int64
|
||||
Cnt int64
|
||||
}
|
||||
if err := stmt.QueryContext(ctx, db.FromContext(ctx, svc.db), &result); err != nil {
|
||||
return false, errors.Wrap(err, "failed to query user-tenant relation")
|
||||
}
|
||||
|
||||
return result.cnt > 0, nil
|
||||
return result.Cnt > 0, nil
|
||||
}
|
||||
|
||||
// CreateTenantUser
|
||||
@@ -268,7 +268,7 @@ func (svc *Service) GenerateChargeCode(ctx context.Context, tenantID, chargeAmou
|
||||
if err != nil {
|
||||
return "", errors.Wrap(err, "failed to encode charge code")
|
||||
}
|
||||
log.Infof("generate charge code: %s", code)
|
||||
log.Infof("generate charge code: %s, info: %+v", code, []int64{tenantID, chargeAmount, timestamp})
|
||||
|
||||
return code, nil
|
||||
}
|
||||
@@ -379,3 +379,20 @@ func (svc *Service) Charge(ctx context.Context, claim *jwt.Claims, code string)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetTenantUserBalance
|
||||
func (svc *Service) GetTenantUserBalance(ctx context.Context, tenantID, userID int64) (int64, error) {
|
||||
log := svc.log.WithField("method", "GetTenantUserBalance")
|
||||
|
||||
tbl := table.UsersTenants
|
||||
stmt := tbl.SELECT(tbl.Balance.AS("balance")).WHERE(tbl.TenantID.EQ(Int64(tenantID)).AND(tbl.UserID.EQ(Int64(userID))))
|
||||
log.Debug(stmt.DebugSql())
|
||||
|
||||
var result struct {
|
||||
Balance int64
|
||||
}
|
||||
if err := stmt.QueryContext(ctx, db.FromContext(ctx, svc.db), &result); err != nil {
|
||||
return 0, errors.Wrap(err, "failed to query user balance")
|
||||
}
|
||||
return result.Balance, nil
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ func Test_DiscoverMedias(t *testing.T) {
|
||||
|
||||
func (t *ServiceTestSuite) Test_Charge() {
|
||||
Convey("Charge", t.T(), func() {
|
||||
code, err := t.Svc.GenerateChargeCode(context.Background(), 1, 100)
|
||||
code, err := t.Svc.GenerateChargeCode(context.Background(), 2, 100)
|
||||
So(err, ShouldBeNil)
|
||||
code = "b8TDWf59wvPw"
|
||||
|
||||
@@ -57,3 +57,12 @@ func (t *ServiceTestSuite) Test_Charge() {
|
||||
So(err, ShouldBeNil)
|
||||
})
|
||||
}
|
||||
|
||||
// Test_GetTenantUserBalance
|
||||
func (t *ServiceTestSuite) Test_GetTenantUserBalance() {
|
||||
Convey("GetTenantUserBalance", t.T(), func() {
|
||||
balance, err := t.Svc.GetTenantUserBalance(context.Background(), 1, 1)
|
||||
So(err, ShouldBeNil)
|
||||
So(balance, ShouldNotEqual, 0)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user