221 lines
8.8 KiB
Go
221 lines
8.8 KiB
Go
package httpserver
|
|
|
|
import (
|
|
"Yimaru-Backend/internal/domain"
|
|
"Yimaru-Backend/internal/web_server/handlers"
|
|
"context"
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
fiberSwagger "github.com/swaggo/fiber-swagger"
|
|
)
|
|
|
|
func (a *App) initAppRoutes() {
|
|
h := handlers.New(
|
|
a.assessmentSvc,
|
|
a.courseSvc,
|
|
a.arifpaySvc,
|
|
a.logger,
|
|
a.settingSvc,
|
|
a.NotidicationStore,
|
|
a.validator,
|
|
a.recommendationSvc,
|
|
a.userSvc,
|
|
a.transactionSvc,
|
|
a.authSvc,
|
|
a.JwtConfig,
|
|
a.cfg,
|
|
a.mongoLoggerSvc,
|
|
)
|
|
|
|
a.fiber.Get("/", func(c *fiber.Ctx) error {
|
|
return c.JSON(fiber.Map{
|
|
"message": "Welcome to Yimaru Backend API",
|
|
"version": a.cfg.APP_VERSION,
|
|
})
|
|
})
|
|
|
|
a.fiber.Get("/routes", func(c *fiber.Ctx) error {
|
|
return c.JSON(a.fiber.Stack()) // prints all registered routes
|
|
})
|
|
|
|
// Groups
|
|
groupV1 := a.fiber.Group("/api/v1")
|
|
tenant := groupV1.Group("/tenant/:tenant_slug", a.TenantMiddleware)
|
|
tenant.Get("/test", a.authMiddleware, a.authMiddleware, func(c *fiber.Ctx) error {
|
|
fmt.Printf("\nTest Route %v\n", c.Route().Path)
|
|
companyID := c.Locals("company_id").(domain.ValidInt64)
|
|
if !companyID.Valid {
|
|
h.BadRequestLogger().Error("invalid company id")
|
|
return fiber.NewError(fiber.StatusBadRequest, "invalid company id")
|
|
}
|
|
|
|
fmt.Printf("In the tenant auth test \n")
|
|
return c.JSON(fiber.Map{
|
|
"message": "Is is fine",
|
|
})
|
|
})
|
|
tenant.Get("/", func(c *fiber.Ctx) error {
|
|
fmt.Printf("\nTenant Route %v\n", c.Route().Path)
|
|
companyID := c.Locals("company_id").(domain.ValidInt64)
|
|
if !companyID.Valid {
|
|
h.BadRequestLogger().Error("invalid company id")
|
|
return fiber.NewError(fiber.StatusBadRequest, "invalid company id")
|
|
}
|
|
return c.JSON(fiber.Map{
|
|
"message": "Company Tenant Active",
|
|
})
|
|
})
|
|
|
|
// Get S
|
|
groupV1.Get("/tenant", a.authMiddleware, h.GetTenantSlugByToken)
|
|
|
|
// Swagger
|
|
a.fiber.Get("/swagger/*", fiberSwagger.FiberWrapHandler())
|
|
|
|
groupV1.Get("/", func(c *fiber.Ctx) error {
|
|
return c.JSON(fiber.Map{
|
|
"message": "Welcome to Yimaru Backend API v1",
|
|
"version": "1.0.1",
|
|
})
|
|
})
|
|
|
|
//assessment Routes
|
|
groupV1.Post("/assessment/questions", h.CreateAssessmentQuestion)
|
|
groupV1.Get("/assessment/questions", h.GetActiveAssessmentQuestions)
|
|
tenant.Post("/assessment/submit", a.authMiddleware, h.SubmitAssessment)
|
|
|
|
// Course Management Routes
|
|
groupV1.Post("/course-categories", h.CreateCourseCategory)
|
|
groupV1.Get("/course-categories", h.ListActiveCourseCategories)
|
|
groupV1.Get("/course-categories/:id", h.GetCourseCategoryByID)
|
|
groupV1.Put("/course-categories/:id", h.UpdateCourseCategory)
|
|
groupV1.Post("/course-categories/:id/deactivate", h.DeactivateCourseCategory)
|
|
|
|
groupV1.Post("/courses", h.CreateCourse)
|
|
groupV1.Get("/courses", h.ListActiveCourses)
|
|
groupV1.Get("/courses/:id", h.GetCourseByID)
|
|
groupV1.Put("/courses/:id", h.UpdateCourse)
|
|
groupV1.Post("/courses/:id/deactivate", h.DeactivateCourse)
|
|
groupV1.Get("/course-categories/:category_id/courses", h.ListCoursesByCategory)
|
|
|
|
groupV1.Post("/courses/:course_id/programs", h.CreateProgram)
|
|
groupV1.Get("/courses/:course_id/programs", h.ListProgramsByCourse)
|
|
|
|
groupV1.Post("/modules", h.CreateModule)
|
|
groupV1.Get("/levels/:level_id/modules", h.ListModulesByLevel)
|
|
|
|
groupV1.Post("/module-videos", h.CreateModuleVideo)
|
|
|
|
groupV1.Post("/practices", h.CreatePractice)
|
|
groupV1.Post("/practice-questions", h.CreatePracticeQuestion)
|
|
|
|
groupV1.Post("/levels", h.CreateLevel)
|
|
|
|
// Auth Routes
|
|
tenant.Post("/auth/customer-login", h.LoginUser)
|
|
tenant.Post("/auth/admin-login", h.LoginAdmin)
|
|
groupV1.Post("/auth/super-login", h.LoginSuper)
|
|
groupV1.Post("/auth/refresh", h.RefreshToken)
|
|
groupV1.Post("/auth/logout", a.authMiddleware, h.LogOutuser)
|
|
groupV1.Get("/auth/test", a.authMiddleware, func(c *fiber.Ctx) error {
|
|
userID, ok := c.Locals("user_id").(int64)
|
|
if !ok {
|
|
return fiber.NewError(fiber.StatusUnauthorized, "Invalid user ID")
|
|
}
|
|
role, ok := c.Locals("role").(domain.Role)
|
|
if !ok {
|
|
return fiber.NewError(fiber.StatusUnauthorized, "Invalid role")
|
|
}
|
|
refreshToken, ok := c.Locals("refresh_token").(string)
|
|
if !ok {
|
|
return fiber.NewError(fiber.StatusUnauthorized, "Invalid refresh token")
|
|
}
|
|
companyID, err := strconv.ParseInt(c.Get("company_id"), 10, 64)
|
|
if err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, "Invalid company_id")
|
|
}
|
|
|
|
a.logger.Info("User ID: " + strconv.FormatInt(userID, 10))
|
|
fmt.Printf("User ID: %d\n", userID)
|
|
a.logger.Info("Role: " + string(role))
|
|
a.logger.Info("Refresh Token: " + refreshToken)
|
|
a.logger.Info("Company ID: " + strconv.FormatInt(companyID, 10))
|
|
return c.SendString("Test endpoint")
|
|
})
|
|
|
|
//Arifpay
|
|
// groupV1.Post("/arifpay/checkout", a.authMiddleware, h.CreateCheckoutSessionHandler)
|
|
// groupV1.Post("/arifpay/checkout/cancel/:sessionId", a.authMiddleware, h.CancelCheckoutSessionHandler)
|
|
// groupV1.Post("/api/v1/arifpay/c2b-webhook", h.HandleArifpayC2BWebhook)
|
|
// groupV1.Post("/api/v1/arifpay/b2c-webhook", h.HandleArifpayB2CWebhook)
|
|
// groupV1.Post("/arifpay/b2c/transfer", a.authMiddleware, h.ExecuteArifpayB2CTransfer)
|
|
// groupV1.Post("/arifpay/transaction-id/verify-transaction", a.authMiddleware, h.ArifpayVerifyByTransactionIDHandler)
|
|
// groupV1.Get("/arifpay/session-id/verify-transaction/:session_id", a.authMiddleware, h.ArifpayVerifyBySessionIDHandler)
|
|
// groupV1.Get("/arifpay/payment-methods", a.authMiddleware, h.GetArifpayPaymentMethodsHandler
|
|
|
|
// User Routes
|
|
tenant.Put("/user/knowledge-level", h.UpdateUserKnowledgeLevel)
|
|
groupV1.Get("/user/:user_name/is-unique", h.CheckUserNameUnique)
|
|
groupV1.Get("/user/:user_name/is-pending", h.CheckUserPending)
|
|
groupV1.Post("/user/resetPassword", h.ResetPassword)
|
|
groupV1.Post("/user/sendResetCode", h.SendResetCode)
|
|
groupV1.Post("/user/verify-otp", h.VerifyOtp)
|
|
groupV1.Post("/user/resend-otp", h.ResendOtp)
|
|
|
|
tenant.Post("/user/resetPassword", h.ResetTenantPassword)
|
|
tenant.Post("/user/sendResetCode", h.SendTenantResetCode)
|
|
tenant.Post("/user/register", h.RegisterUser)
|
|
tenant.Post("/user/sendRegisterCode", h.SendRegisterCode)
|
|
tenant.Post("/user/checkPhoneEmailExist", h.CheckPhoneEmailExist)
|
|
|
|
groupV1.Get("/user/admin-profile", a.authMiddleware, h.AdminProfile)
|
|
|
|
tenant.Get("/user/user-profile", a.authMiddleware, h.GetUserProfile)
|
|
|
|
groupV1.Get("/user/single/:id", a.authMiddleware, h.GetUserByID)
|
|
groupV1.Delete("/user/delete/:id", a.authMiddleware, h.DeleteUser)
|
|
groupV1.Post("/user/search", a.authMiddleware, h.SearchUserByNameOrPhone)
|
|
|
|
groupV1.Get("/admin", a.authMiddleware, a.SuperAdminOnly, h.GetAllAdmins)
|
|
groupV1.Get("/admin/:id", a.authMiddleware, a.SuperAdminOnly, h.GetAdminByID)
|
|
groupV1.Post("/admin", a.authMiddleware, a.SuperAdminOnly, h.CreateAdmin)
|
|
groupV1.Put("/admin/:id", a.authMiddleware, a.SuperAdminOnly, h.UpdateAdmin)
|
|
|
|
// groupV1.Get("/t-approver", a.authMiddleware, a.OnlyAdminAndAbove, h.GetAllTransactionApprovers)
|
|
// groupV1.Get("/t-approver/:id", a.authMiddleware, a.OnlyAdminAndAbove, h.GetTransactionApproverByID)
|
|
// groupV1.Post("/t-approver", a.authMiddleware, a.OnlyAdminAndAbove, h.CreateTransactionApprover)
|
|
// groupV1.Put("/t-approver/:id", a.authMiddleware, a.OnlyAdminAndAbove, h.UpdateTransactionApprover)
|
|
|
|
//mongoDB logs
|
|
groupV1.Get("/logs", a.authMiddleware, a.SuperAdminOnly, handlers.GetLogsHandler(context.Background()))
|
|
|
|
// groupV1.Get("/shop/transaction", a.authMiddleware, a.CompanyOnly, h.GetAllTransactions)
|
|
// groupV1.Get("/shop/transaction/:id", a.authMiddleware, a.CompanyOnly, h.GetTransactionByID)
|
|
// groupV1.Get("/shop/transaction/:id/bet", a.authMiddleware, a.CompanyOnly, h.GetShopBetByTransactionID)
|
|
// groupV1.Put("/shop/transaction/:id", a.authMiddleware, a.CompanyOnly, h.UpdateTransactionVerified)
|
|
|
|
// Notification Routes
|
|
groupV1.Post("/sendSMS", h.SendSingleAfroSMS)
|
|
groupV1.Get("/ws/connect", a.WebsocketAuthMiddleware, h.ConnectSocket)
|
|
groupV1.Get("/notifications", a.authMiddleware, h.GetUserNotification)
|
|
groupV1.Get("/notifications/all", a.authMiddleware, h.GetAllNotifications)
|
|
// groupV1.Post("/notifications/mark-as-read", a.authMiddleware, h.MarkNotificationAsRead)
|
|
groupV1.Get("/notifications/unread", a.authMiddleware, h.CountUnreadNotifications)
|
|
groupV1.Post("/notifications/create", a.authMiddleware, h.CreateAndSendNotification)
|
|
|
|
//Issue Reporting Routes
|
|
// groupV1.Post("/issues", a.authMiddleware, h.CreateIssue) //anyone who has logged can report a
|
|
// groupV1.Get("/issues/customer/:customer_id", a.authMiddleware, a.OnlyAdminAndAbove, h.GetUserIssues)
|
|
// groupV1.Get("/issues", a.authMiddleware, a.OnlyAdminAndAbove, h.GetAllIssues)
|
|
// groupV1.Patch("/issues/:issue_id/status", a.authMiddleware, a.OnlyAdminAndAbove, h.UpdateIssueStatus)
|
|
// groupV1.Delete("/issues/:issue_id", a.authMiddleware, a.OnlyAdminAndAbove, h.DeleteIssue)
|
|
|
|
// Settings
|
|
groupV1.Get("/settings", a.authMiddleware, a.SuperAdminOnly, h.GetGlobalSettingList)
|
|
groupV1.Get("/settings/:key", a.authMiddleware, a.SuperAdminOnly, h.GetGlobalSettingByKey)
|
|
groupV1.Put("/settings", a.authMiddleware, a.SuperAdminOnly, h.UpdateGlobalSettingList)
|
|
|
|
}
|