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": {
|
"/wallet": {
|
||||||
"get": {
|
"get": {
|
||||||
"description": "Retrieve all wallets",
|
"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": {
|
"handlers.RegisterCodeReq": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"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": {
|
"/wallet": {
|
||||||
"get": {
|
"get": {
|
||||||
"description": "Retrieve all wallets",
|
"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": {
|
"handlers.RegisterCodeReq": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|
|
||||||
|
|
@ -171,6 +171,36 @@ definitions:
|
||||||
reference_number:
|
reference_number:
|
||||||
type: string
|
type: string
|
||||||
type: object
|
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:
|
handlers.RegisterCodeReq:
|
||||||
properties:
|
properties:
|
||||||
email:
|
email:
|
||||||
|
|
@ -1034,6 +1064,37 @@ paths:
|
||||||
summary: Send reset code
|
summary: Send reset code
|
||||||
tags:
|
tags:
|
||||||
- user
|
- 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:
|
/wallet:
|
||||||
get:
|
get:
|
||||||
consumes:
|
consumes:
|
||||||
|
|
|
||||||
|
|
@ -195,7 +195,7 @@ func RegisterUser(logger *slog.Logger, userSvc *user.Service, walletSvc *wallet.
|
||||||
_, err = walletSvc.CreateCustomerWallet(c.Context(), newUser.ID, 0)
|
_, err = walletSvc.CreateCustomerWallet(c.Context(), newUser.ID, 0)
|
||||||
|
|
||||||
if err != nil {
|
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)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create customer wallet for user", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/wallet"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/wallet"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
||||||
customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator"
|
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)
|
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
|
package httpserver
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
_ "github.com/SamuelTariku/FortuneBet-Backend/docs"
|
_ "github.com/SamuelTariku/FortuneBet-Backend/docs"
|
||||||
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/handlers"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/handlers"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
fiberSwagger "github.com/swaggo/fiber-swagger"
|
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/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.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 {
|
a.fiber.Get("/auth/test", a.authMiddleware, func(c *fiber.Ctx) error {
|
||||||
userId := c.Locals("user_id")
|
userId := c.Locals("user_id").(int64)
|
||||||
role := c.Locals("role")
|
role := string(c.Locals("role").(domain.Role))
|
||||||
refreshToken := c.Locals("refresh_token")
|
refreshToken := (c.Locals("refresh_token").(string))
|
||||||
a.logger.Info("User ID: " + userId.(string))
|
companyID, err := strconv.ParseInt(c.Get("company_id"), 10, 64)
|
||||||
a.logger.Info("Role: " + role.(string))
|
if err != nil {
|
||||||
a.logger.Info("Refresh Token: " + refreshToken.(string))
|
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")
|
return c.SendString("Test endpoint")
|
||||||
})
|
})
|
||||||
a.fiber.Post("/user/resetPassword", handlers.ResetPassword(a.logger, a.userSvc, a.validator))
|
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/sendRegisterCode", handlers.SendRegisterCode(a.logger, a.userSvc, a.validator))
|
||||||
a.fiber.Post("/user/checkPhoneEmailExist", handlers.CheckPhoneEmailExist(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/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
|
// Swagger
|
||||||
a.fiber.Get("/swagger/*", fiberSwagger.FiberWrapHandler())
|
a.fiber.Get("/swagger/*", fiberSwagger.FiberWrapHandler())
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user