У меня есть процесс входа в систему для моего приложения, который должен выполнить три разные транзакции, если пользователь успешно прошел аутентификацию.Вот пример моего текущего кода:
<cftransaction action="begin">
<cftry>
<cfset local.appStruct = structNew()>
<cfset local.appStruct.AccountID = UserResults.AccountID>
<cfset local.appStruct.UserName = UserResults.UserName>
<cfset local.appStruct.Email = UserResults.Email>
<cfset session.AccountInfo = appStruct>
<cfset session.LoggedIn = true>
<cfquery name="trackLogin" datasource="#dsn#">
DELETE
FROM FailedLogins
WHERE LoginUN = <cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(arguments.username)#" maxlength="50">
UPDATE Accounts
SET LockedUntil = NULL
WHERE UserName = <cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(arguments.username)#" maxlength="50">
INSERT INTO AccountLogins (
AccountID,
Login
)VALUES(
<cfqueryparam cfsqltype="cf_sql_idstamp" value="#UserResults.AccountID#">,
CURRENT_TIMESTAMP
)
</cfquery>
<cfset local.fnResults = {status : "200"}>
<cfcatch type="any">
<cftransaction action="rollback" />
<cfset local.fnResults = {error : cfcatch, status : "400", message : "Error! Please contact your administrator."}>
</cfcatch>
</cftry>
</cftransaction>
В приведенном выше коде сначала я устанавливаю переменные session
, а затем очищаю логины Failed, затем обновляю флаг и вставляю некоторую информацию в таблицу входа в аккаунт.,Сначала я хотел бы переместить это в процедуру хранения.Тогда мне интересно, есть ли хороший способ объединить эти три транзакции в одну или они должны быть отдельными хранимыми процедурами?Если у кого-то есть совет или веская причина, почему так или иначе, пожалуйста, дайте мне знать.Спасибо.