package services import ( "net/http" "time" "git.secnex.io/secnex/masterlog" "git.secnex.io/secnex/mgmt-api/models" "git.secnex.io/secnex/mgmt-api/repositories" "git.secnex.io/secnex/mgmt-api/utils" "github.com/gofiber/fiber/v2" "github.com/google/uuid" ) func CreateNewApplication(name string, tenantID string, expiresAt *time.Time) *utils.HTTPResponse { tenant, err := repositories.GetTenantByID(tenantID) if err != nil { masterlog.Error("Failed to get tenant", map[string]interface{}{"error": err.Error()}) return utils.NewHTTPResponse(http.StatusInternalServerError, &fiber.Map{"message": "Failed to get tenant"}, "", nil, nil) } if tenant == nil { return utils.NewHTTPResponse(http.StatusNotFound, &fiber.Map{"message": "Tenant not found"}, "", nil, nil) } applicationID := uuid.New() applicationSecret := utils.GenerateRandomString(32) application := &models.Application{ Name: name, TenantID: tenant.ID, ExpiresAt: expiresAt, Secret: applicationSecret, ID: applicationID, } if err := repositories.CreateApplication(application); err != nil { masterlog.Error("Failed to create application", map[string]interface{}{"error": err.Error()}) if utils.IsDuplicateKeyError(err) { return utils.NewHTTPResponse(http.StatusBadRequest, &fiber.Map{"message": "Application already exists"}, "", nil, nil) } return utils.NewHTTPResponse(http.StatusInternalServerError, &fiber.Map{"message": "Failed to create application"}, "", nil, nil) } return utils.NewHTTPResponse(http.StatusOK, &fiber.Map{"message": "Application created", "id": applicationID, "secret": applicationSecret}, "", nil, nil) }