204 lines
7.1 KiB
Go
204 lines
7.1 KiB
Go
package handlers
|
|
|
|
import (
|
|
"Yimaru-Backend/internal/domain"
|
|
"Yimaru-Backend/internal/web_server/response"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func (h *Handler) CreateReferralCode(c *fiber.Ctx) error {
|
|
|
|
companyID := c.Locals("company_id").(domain.ValidInt64)
|
|
if !companyID.Valid {
|
|
h.BadRequestLogger().Error("invalid company id")
|
|
return fiber.NewError(fiber.StatusBadRequest, "invalid company id")
|
|
}
|
|
userID, ok := c.Locals("user_id").(int64)
|
|
if !ok || userID == 0 {
|
|
h.mongoLoggerSvc.Info("Invalid user ID in context",
|
|
zap.Int("status_code", fiber.StatusInternalServerError),
|
|
zap.Int64("userID", userID),
|
|
zap.Time("timestamp", time.Now()),
|
|
)
|
|
return fiber.NewError(fiber.StatusInternalServerError, "Invalid user identification")
|
|
}
|
|
// referralCode, err := h.referralSvc.CreateReferralCode(c.Context(), userID, companyID.Value)
|
|
|
|
// if err != nil {
|
|
// h.mongoLoggerSvc.Error("Failed to create referral",
|
|
// zap.Int64("userID", userID),
|
|
// zap.Int("status_code", fiber.StatusInternalServerError),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusInternalServerError, "Failed to create referral")
|
|
// }
|
|
|
|
fmt.Printf("Successfully created referral!")
|
|
|
|
// res := domain.ConvertReferralCodeRes(referralCode)
|
|
|
|
return response.WriteJSON(c, fiber.StatusOK, "Referral created successfully", nil, nil)
|
|
}
|
|
|
|
func (h *Handler) GetReferralCode(c *fiber.Ctx) error {
|
|
companyID := c.Locals("company_id").(domain.ValidInt64)
|
|
if !companyID.Valid {
|
|
h.BadRequestLogger().Error("invalid company id")
|
|
return fiber.NewError(fiber.StatusBadRequest, "invalid company id")
|
|
}
|
|
userID, ok := c.Locals("user_id").(int64)
|
|
if !ok || userID == 0 {
|
|
h.mongoLoggerSvc.Error("Invalid user ID in context",
|
|
zap.Int64("userID", userID),
|
|
zap.Int("status_code", fiber.StatusInternalServerError),
|
|
zap.Time("timestamp", time.Now()),
|
|
)
|
|
return fiber.NewError(fiber.StatusInternalServerError, "Invalid user id")
|
|
}
|
|
|
|
user, err := h.userSvc.GetUserByID(c.Context(), userID)
|
|
if err != nil {
|
|
h.mongoLoggerSvc.Error("Failed to get user",
|
|
zap.Int64("userID", userID),
|
|
zap.Int("status_code", fiber.StatusInternalServerError),
|
|
zap.Error(err),
|
|
zap.Time("timestamp", time.Now()),
|
|
)
|
|
return fiber.NewError(fiber.StatusInternalServerError, "Failed to retrieve user")
|
|
}
|
|
|
|
if !user.OrganizationID.Valid || user.OrganizationID.Value != companyID.Value {
|
|
h.mongoLoggerSvc.Warn("User attempt to login to different company",
|
|
zap.Int64("userID", userID),
|
|
zap.Int("status_code", fiber.StatusInternalServerError),
|
|
zap.Error(err),
|
|
zap.Time("timestamp", time.Now()),
|
|
)
|
|
return fiber.NewError(fiber.StatusBadRequest, "Failed to retrieve user")
|
|
}
|
|
|
|
// referrals, err := h.referralSvc.GetReferralCodesByUser(c.Context(), user.ID)
|
|
|
|
// if err != nil {
|
|
// h.mongoLoggerSvc.Error("Failed to get user referrals",
|
|
// zap.Int64("userID", userID),
|
|
// zap.Int("status_code", fiber.StatusInternalServerError),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusInternalServerError, "Failed to retrieve user referral codes")
|
|
// }
|
|
|
|
// result := domain.ConvertReferralCodeResList(referrals)
|
|
|
|
return response.WriteJSON(c, fiber.StatusOK, "Referral Code Fetched Successfully", nil, nil)
|
|
|
|
}
|
|
|
|
// // UpdateReferralSettings godoc
|
|
// // @Summary Update referral settings
|
|
// // @Description Updates referral settings (admin only)
|
|
// // @Tags referral
|
|
// // @Accept json
|
|
// // @Produce json
|
|
// // @Param settings body domain.ReferralSettings true "Referral settings"
|
|
// // @Success 200 {object} response.APIResponse
|
|
// // @Failure 401 {object} response.APIResponse
|
|
// // @Failure 403 {object} response.APIResponse
|
|
// // @Failure 500 {object} response.APIResponse
|
|
// // @Security Bearer
|
|
// // @Router /api/v1/referral/settings [put]
|
|
// func (h *Handler) UpdateReferralSettings(c *fiber.Ctx) error {
|
|
// userID, ok := c.Locals("user_id").(int64)
|
|
// if !ok || userID == 0 {
|
|
// h.logger.Error("Invalid user ID in context")
|
|
// h.mongoLoggerSvc.Error("Failed to delete user",
|
|
// zap.Int64("userID", userID),
|
|
// zap.Int("status_code", fiber.StatusInternalServerError),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusInternalServerError, "Invalid user id")
|
|
// }
|
|
|
|
// user, err := h.userSvc.GetUserByID(c.Context(), userID)
|
|
// if err != nil {
|
|
// h.mongoLoggerSvc.Error("Failed to get user",
|
|
// zap.Int64("userID", userID),
|
|
// zap.Int("status_code", fiber.StatusInternalServerError),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
|
// }
|
|
|
|
// if user.Role != domain.RoleAdmin {
|
|
// h.mongoLoggerSvc.Error("Access Forbidden",
|
|
// zap.Int64("userID", userID),
|
|
// zap.Int("status_code", fiber.StatusForbidden),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusForbidden, "Admin access required")
|
|
// }
|
|
|
|
// var settings domain.ReferralSettings
|
|
// if err := c.BodyParser(&settings); err != nil {
|
|
// h.mongoLoggerSvc.Info("Failed to parse settings",
|
|
// zap.Int64("userID", userID),
|
|
// zap.Int("status_code", fiber.StatusBadRequest),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusBadRequest, "Invalid request body")
|
|
// }
|
|
|
|
// settings.UpdatedBy = user.PhoneNumber
|
|
// if err := h.referralSvc.UpdateReferralSettings(c.Context(), &settings); err != nil {
|
|
// h.mongoLoggerSvc.Error("Failed to update referral settings",
|
|
// zap.Int64("userID", userID),
|
|
// zap.Int("status_code", fiber.StatusInternalServerError),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
|
// }
|
|
|
|
// return response.WriteJSON(c, fiber.StatusOK, "Referral settings updated successfully", nil, nil)
|
|
// }
|
|
|
|
// // GetReferralSettings godoc
|
|
// // @Summary Get referral settings
|
|
// // @Description Retrieves current referral settings (admin only)
|
|
// // @Tags referral
|
|
// // @Accept json
|
|
// // @Produce json
|
|
// // @Success 200 {object} domain.ReferralSettings
|
|
// // @Failure 401 {object} response.APIResponse
|
|
// // @Failure 403 {object} response.APIResponse
|
|
// // @Failure 500 {object} response.APIResponse
|
|
// // @Security Bearer
|
|
// // @Router /api/v1/referral/settings [get]
|
|
// func (h *Handler) GetReferralSettings(c *fiber.Ctx) error {
|
|
// // userID, ok := c.Locals("user_id").(int64)
|
|
// // if !ok || userID == 0 {
|
|
// // h.logger.Error("Invalid user ID in context")
|
|
// // return fiber.NewError(fiber.StatusUnauthorized, "Invalid user identification")
|
|
// // }
|
|
// settings, err := h.referralSvc.GetReferralSettings(c.Context())
|
|
// if err != nil {
|
|
// h.mongoLoggerSvc.Error("Failed to get referral settings",
|
|
// zap.Int("status_code", fiber.StatusInternalServerError),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
|
// }
|
|
|
|
// return response.WriteJSON(c, fiber.StatusOK, "Referral settings retrieved successfully", settings, nil)
|
|
// }
|