added customer wallet
This commit is contained in:
parent
675597c093
commit
ddc4f8bc54
91
docs/docs.go
91
docs/docs.go
|
|
@ -972,6 +972,55 @@ const docTemplate = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"/user/wallet": {
|
||||
"get": {
|
||||
"security": [
|
||||
{
|
||||
"Bearer": []
|
||||
}
|
||||
],
|
||||
"description": "Retrieve customer wallet details",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"wallet"
|
||||
],
|
||||
"summary": "Get customer wallet",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Company ID",
|
||||
"name": "company_id",
|
||||
"in": "header",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/handlers.CustomerWalletRes"
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/response.APIResponse"
|
||||
}
|
||||
},
|
||||
"500": {
|
||||
"description": "Internal Server Error",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/response.APIResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/wallet": {
|
||||
"get": {
|
||||
"description": "Retrieve all wallets",
|
||||
|
|
@ -1352,6 +1401,48 @@ const docTemplate = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"handlers.CustomerWalletRes": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"company_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "string"
|
||||
},
|
||||
"customer_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"regular_balance": {
|
||||
"type": "number",
|
||||
"example": 100
|
||||
},
|
||||
"regular_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"regular_updated_at": {
|
||||
"type": "string"
|
||||
},
|
||||
"static_balance": {
|
||||
"type": "number",
|
||||
"example": 100
|
||||
},
|
||||
"static_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"static_updated_at": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"handlers.RegisterCodeReq": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
|
|
|||
|
|
@ -964,6 +964,55 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"/user/wallet": {
|
||||
"get": {
|
||||
"security": [
|
||||
{
|
||||
"Bearer": []
|
||||
}
|
||||
],
|
||||
"description": "Retrieve customer wallet details",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"wallet"
|
||||
],
|
||||
"summary": "Get customer wallet",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Company ID",
|
||||
"name": "company_id",
|
||||
"in": "header",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/handlers.CustomerWalletRes"
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/response.APIResponse"
|
||||
}
|
||||
},
|
||||
"500": {
|
||||
"description": "Internal Server Error",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/response.APIResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/wallet": {
|
||||
"get": {
|
||||
"description": "Retrieve all wallets",
|
||||
|
|
@ -1344,6 +1393,48 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"handlers.CustomerWalletRes": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"company_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "string"
|
||||
},
|
||||
"customer_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"regular_balance": {
|
||||
"type": "number",
|
||||
"example": 100
|
||||
},
|
||||
"regular_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"regular_updated_at": {
|
||||
"type": "string"
|
||||
},
|
||||
"static_balance": {
|
||||
"type": "number",
|
||||
"example": 100
|
||||
},
|
||||
"static_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"static_updated_at": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"handlers.RegisterCodeReq": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
|
|
|||
|
|
@ -171,6 +171,36 @@ definitions:
|
|||
reference_number:
|
||||
type: string
|
||||
type: object
|
||||
handlers.CustomerWalletRes:
|
||||
properties:
|
||||
company_id:
|
||||
example: 1
|
||||
type: integer
|
||||
created_at:
|
||||
type: string
|
||||
customer_id:
|
||||
example: 1
|
||||
type: integer
|
||||
id:
|
||||
example: 1
|
||||
type: integer
|
||||
regular_balance:
|
||||
example: 100
|
||||
type: number
|
||||
regular_id:
|
||||
example: 1
|
||||
type: integer
|
||||
regular_updated_at:
|
||||
type: string
|
||||
static_balance:
|
||||
example: 100
|
||||
type: number
|
||||
static_id:
|
||||
example: 1
|
||||
type: integer
|
||||
static_updated_at:
|
||||
type: string
|
||||
type: object
|
||||
handlers.RegisterCodeReq:
|
||||
properties:
|
||||
email:
|
||||
|
|
@ -1034,6 +1064,37 @@ paths:
|
|||
summary: Send reset code
|
||||
tags:
|
||||
- user
|
||||
/user/wallet:
|
||||
get:
|
||||
consumes:
|
||||
- application/json
|
||||
description: Retrieve customer wallet details
|
||||
parameters:
|
||||
- description: Company ID
|
||||
in: header
|
||||
name: company_id
|
||||
required: true
|
||||
type: integer
|
||||
produces:
|
||||
- application/json
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
schema:
|
||||
$ref: '#/definitions/handlers.CustomerWalletRes'
|
||||
"400":
|
||||
description: Bad Request
|
||||
schema:
|
||||
$ref: '#/definitions/response.APIResponse'
|
||||
"500":
|
||||
description: Internal Server Error
|
||||
schema:
|
||||
$ref: '#/definitions/response.APIResponse'
|
||||
security:
|
||||
- Bearer: []
|
||||
summary: Get customer wallet
|
||||
tags:
|
||||
- wallet
|
||||
/wallet:
|
||||
get:
|
||||
consumes:
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@ func RegisterUser(logger *slog.Logger, userSvc *user.Service, walletSvc *wallet.
|
|||
_, err = walletSvc.CreateCustomerWallet(c.Context(), newUser.ID, 0)
|
||||
|
||||
if err != nil {
|
||||
logger.Error("RegisterUser failed", "error", err)
|
||||
logger.Error("CreateCustomerWallet failed", "error", err)
|
||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create customer wallet for user", err, nil)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import (
|
|||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/wallet"
|
||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
||||
customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator"
|
||||
|
|
@ -146,3 +147,66 @@ func UpdateWalletActive(logger *slog.Logger, walletSvc *wallet.Service, validato
|
|||
return response.WriteJSON(c, fiber.StatusOK, "Wallet successfully updated", nil, nil)
|
||||
}
|
||||
}
|
||||
|
||||
type CustomerWalletRes struct {
|
||||
ID int64 `json:"id" example:"1"`
|
||||
RegularID int64 `json:"regular_id" example:"1"`
|
||||
RegularBalance float32 `json:"regular_balance" example:"100.0"`
|
||||
StaticID int64 `json:"static_id" example:"1"`
|
||||
StaticBalance float32 `json:"static_balance" example:"100.0"`
|
||||
CustomerID int64 `json:"customer_id" example:"1"`
|
||||
CompanyID int64 `json:"company_id" example:"1"`
|
||||
RegularUpdatedAt time.Time `json:"regular_updated_at"`
|
||||
StaticUpdatedAt time.Time `json:"static_updated_at"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
// GetCustomerWallet godoc
|
||||
// @Summary Get customer wallet
|
||||
// @Description Retrieve customer wallet details
|
||||
// @Tags wallet
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param company_id header int true "Company ID"
|
||||
// @Security Bearer
|
||||
// @Success 200 {object} CustomerWalletRes
|
||||
// @Failure 400 {object} response.APIResponse
|
||||
// @Failure 500 {object} response.APIResponse
|
||||
// @Router /user/wallet [get]
|
||||
func GetCustomerWallet(logger *slog.Logger, walletSvc *wallet.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
||||
return func(c *fiber.Ctx) error {
|
||||
|
||||
userId := c.Locals("user_id").(int64)
|
||||
role := string(c.Locals("role").(domain.Role))
|
||||
|
||||
companyID, err := strconv.ParseInt(c.Get("company_id"), 10, 64)
|
||||
if err != nil {
|
||||
return c.Status(fiber.StatusBadRequest).SendString("Invalid company_id")
|
||||
}
|
||||
logger.Info("Company ID: " + strconv.FormatInt(companyID, 10))
|
||||
|
||||
if role != string(domain.RoleCustomer) {
|
||||
logger.Error("Unauthorized access", "userId", userId, "role", role)
|
||||
return response.WriteJSON(c, fiber.StatusUnauthorized, "Unauthorized access", nil, nil)
|
||||
}
|
||||
wallet, err := walletSvc.GetCustomerWallet(c.Context(), userId, companyID)
|
||||
if err != nil {
|
||||
logger.Error("Failed to get customer wallet", "userId", userId, "error", err)
|
||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve wallet", err, nil)
|
||||
}
|
||||
res := CustomerWalletRes{
|
||||
ID: wallet.ID,
|
||||
RegularID: wallet.RegularID,
|
||||
RegularBalance: wallet.RegularBalance.Float64(),
|
||||
StaticID: wallet.StaticID,
|
||||
StaticBalance: wallet.StaticBalance.Float64(),
|
||||
CustomerID: wallet.CustomerID,
|
||||
CompanyID: wallet.CompanyID,
|
||||
RegularUpdatedAt: wallet.RegularUpdatedAt,
|
||||
StaticUpdatedAt: wallet.StaticUpdatedAt,
|
||||
CreatedAt: wallet.CreatedAt,
|
||||
}
|
||||
return response.WriteJSON(c, fiber.StatusOK, "Wallet retrieved successfully", res, nil)
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,11 @@
|
|||
package httpserver
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
_ "github.com/SamuelTariku/FortuneBet-Backend/docs"
|
||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/handlers"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
fiberSwagger "github.com/swaggo/fiber-swagger"
|
||||
|
|
@ -12,12 +16,19 @@ func (a *App) initAppRoutes() {
|
|||
a.fiber.Post("/auth/refresh", a.authMiddleware, handlers.RefreshToken(a.logger, a.authSvc, a.validator, a.JwtConfig))
|
||||
a.fiber.Post("/auth/logout", a.authMiddleware, handlers.LogOutCustomer(a.logger, a.authSvc, a.validator))
|
||||
a.fiber.Get("/auth/test", a.authMiddleware, func(c *fiber.Ctx) error {
|
||||
userId := c.Locals("user_id")
|
||||
role := c.Locals("role")
|
||||
refreshToken := c.Locals("refresh_token")
|
||||
a.logger.Info("User ID: " + userId.(string))
|
||||
a.logger.Info("Role: " + role.(string))
|
||||
a.logger.Info("Refresh Token: " + refreshToken.(string))
|
||||
userId := c.Locals("user_id").(int64)
|
||||
role := string(c.Locals("role").(domain.Role))
|
||||
refreshToken := (c.Locals("refresh_token").(string))
|
||||
companyID, err := strconv.ParseInt(c.Get("company_id"), 10, 64)
|
||||
if err != nil {
|
||||
return c.Status(fiber.StatusBadRequest).SendString("Invalid company_id")
|
||||
}
|
||||
// a.logger.Info("User ID: " + string(userId.(string))) //panic: interface conversion: interface {} is int64, not string
|
||||
a.logger.Info("User ID: " + strconv.FormatInt(userId, 10))
|
||||
fmt.Printf("User ID: %d\n", userId)
|
||||
a.logger.Info("Role: " + role)
|
||||
a.logger.Info("Refresh Token: " + refreshToken)
|
||||
a.logger.Info("Company ID: " + strconv.FormatInt(companyID, 10))
|
||||
return c.SendString("Test endpoint")
|
||||
})
|
||||
a.fiber.Post("/user/resetPassword", handlers.ResetPassword(a.logger, a.userSvc, a.validator))
|
||||
|
|
@ -26,6 +37,9 @@ func (a *App) initAppRoutes() {
|
|||
a.fiber.Post("/user/sendRegisterCode", handlers.SendRegisterCode(a.logger, a.userSvc, a.validator))
|
||||
a.fiber.Post("/user/checkPhoneEmailExist", handlers.CheckPhoneEmailExist(a.logger, a.userSvc, a.validator))
|
||||
a.fiber.Get("/user/profile", a.authMiddleware, handlers.UserProfile(a.logger, a.userSvc))
|
||||
|
||||
a.fiber.Get("/user/wallet", a.authMiddleware, handlers.GetCustomerWallet(a.logger, a.walletSvc, a.validator))
|
||||
|
||||
// Swagger
|
||||
a.fiber.Get("/swagger/*", fiberSwagger.FiberWrapHandler())
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user