<% '======================================================================================================================= ' Orders Repository '======================================================================================================================= Class OrdersRepository_Class ' Creates a new order row for the given email/jurisdiction, generates a single-use ' token that expires after OrderTokenExpirationHours, and returns that token. Public Function CreateOrder(email, jurisdictionNumber) Dim token, expiresAt token = NewGuid() expiresAt = DateAdd("h", TokenExpirationHours(), Now()) DAL.Execute _ "INSERT INTO Orders (Email, JurisdictionNumber, Token, TokenExpiresAt, CreatedAt) VALUES (?, ?, ?, ?, ?)", _ Array(email, jurisdictionNumber, token, expiresAt, Now()) CreateOrder = token End Function ' Returns a Scripting.Dictionary describing the order matching the given token, or Nothing if not found. Public Function FindByToken(token) Dim rs Set rs = DAL.Query( _ "SELECT OrderID, Email, JurisdictionNumber, Token, TokenExpiresAt, TokenUsedAt, CreatedAt FROM Orders WHERE Token = ?", _ Array(token)) If rs.EOF Then Set FindByToken = Nothing Else Dim order : Set order = Server.CreateObject("Scripting.Dictionary") order.Add "OrderID", rs("OrderID").Value order.Add "Email", rs("Email").Value order.Add "JurisdictionNumber", rs("JurisdictionNumber").Value order.Add "Token", rs("Token").Value order.Add "TokenExpiresAt", rs("TokenExpiresAt").Value order.Add "TokenUsedAt", rs("TokenUsedAt").Value order.Add "CreatedAt", rs("CreatedAt").Value Set FindByToken = order End If Destroy rs End Function Public Sub MarkTokenUsed(orderId) DAL.Execute "UPDATE Orders SET TokenUsedAt = ? WHERE OrderID = ?", Array(Now(), orderId) End Sub Private Function TokenExpirationHours() Dim setting : setting = GetAppSetting("OrderTokenExpirationHours") If setting = "nothing" Or Not IsNumeric(setting) Then TokenExpirationHours = 24 Else TokenExpirationHours = CInt(setting) End If End Function End Class Dim OrdersRepository__Singleton Function OrdersRepository() If IsEmpty(OrdersRepository__Singleton) Then Set OrdersRepository__Singleton = New OrdersRepository_Class End If Set OrdersRepository = OrdersRepository__Singleton End Function %>