Yimaru-BackEnd/internal/web_server/handlers/referal_handlers.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)
// }