<% ' Auto-generated Controller: OrderApi ' Generated on 7/28/2026 2:56:29 PM ' Generator: generateController.vbs v1.0 ' ' Remember to: ' 1. Add to app/controllers/autoload_controllers.asp ' 2. Register in core/lib.ControllerRegistry.asp ' 3. Add routes in public/Default.asp Class OrderApiController_Class Private m_useLayout Private m_title Private Sub Class_Initialize() m_useLayout = False ' this controller returns JSON only, never the shared HTML layout m_title = "OrderApi" End Sub Public Property Get useLayout useLayout = m_useLayout End Property Public Property Let useLayout(v) m_useLayout = v End Property Public Property Get Title Title = m_title End Property Public Property Let Title(v) m_title = v End Property '------------------------------------------------------------------------------------------------------------------- ' POST: accept the completed SurveyJS order-details form (as JSON) for the order matching ?token= '------------------------------------------------------------------------------------------------------------------- Public Sub SubmitOrderDetails() Response.ContentType = "application/json" If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then WriteJsonError "405 Method Not Allowed", "This endpoint only accepts POST." Exit Sub End If Dim token, order token = Trim(Request.QueryString("token")) Set order = Nothing If Len(token) > 0 Then Set order = OrdersRepository().FindByToken(token) If order Is Nothing Then WriteJsonError "404 Not Found", "Order not found." Exit Sub End If If order("TokenExpiresAt") < Now() Then WriteJsonError "410 Gone", "This order link has expired. Please request a new one." Exit Sub End If Dim csrfToken : csrfToken = Request.ServerVariables("HTTP_X_CSRF_TOKEN") If Not HTMLSecurity().IsValidAntiCSRFToken("Order.Continue", csrfToken) Then WriteJsonError "403 Forbidden", "Your form session expired. Please refresh the page and try again." Exit Sub End If Dim answers On Error Resume Next json().loadJSON GetRawJsonFromRequest() If Err.Number <> 0 Then Err.Clear On Error GoTo 0 WriteJsonError "400 Bad Request", "Could not read the submitted form data." Exit Sub End If On Error GoTo 0 Set answers = json().data Dim validationError : validationError = ValidateOrderDetailsAnswers(answers) If Len(validationError) > 0 Then WriteJsonError "400 Bad Request", validationError Exit Sub End If Dim model : Set model = New POBO_OrderDetails On Error Resume Next MapOrderDetailsAnswers model, answers model.SubmittedAt = Now() If Err.Number <> 0 Then Err.Clear On Error GoTo 0 WriteJsonError "400 Bad Request", "The submitted data could not be processed. Please check your entries and try again." Exit Sub End If On Error GoTo 0 On Error Resume Next OrderDetailsRepository().SaveForOrder order("OrderID"), model If Err.Number <> 0 Then Err.Clear On Error GoTo 0 WriteJsonError "500 Internal Server Error", "Could not save your order details. Please try again." Exit Sub End If On Error GoTo 0 ' Best-effort: the order is already safely persisted at this point, so an SMTP hiccup ' should not turn a successful submission into a failed one. OrderMailer().SendOrderDetailsEmail order, model Response.Write "{""success"":true}" End Sub End Class ' Singleton instance Dim OrderApiController_Class__Singleton Function OrderApiController() If IsEmpty(OrderApiController_Class__Singleton) Then Set OrderApiController_Class__Singleton = New OrderApiController_Class End If Set OrderApiController = OrderApiController_Class__Singleton End Function %>