You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

154 lines
4.5 KiB

1 year ago
  1. ALTER PROC mobile_proc_OTPRequest
  2. (
  3. @FLAG VARCHAR(20)
  4. ,@OTP_CODE VARCHAR(6)
  5. ,@USER_ID VARCHAR(150)
  6. ,@REQUEST_FOR VARCHAR(10) = NULL
  7. ,@RECEIVER_ID BIGINT = NULL
  8. )
  9. AS;
  10. SET NOCOUNT ON;
  11. SET XACT_ABORT ON;
  12. BEGIN
  13. DECLARE @ROW_ID BIGINT = NULL, @IS_EXPIRED BIT = 0, @IS_USED BIT = 0, @MOBILE VARCHAR(30), @EXPIRE_MINUTES TINYINT = 10, @CURRENT_OTP VARCHAR(10)
  14. , @REQUEST_MINUTES INT
  15. IF @FLAG = 'REQUEST'
  16. BEGIN
  17. IF @USER_ID IS NULL OR (NOT EXISTS(SELECT * FROM CUSTOMERMASTER(NOLOCK) WHERE USERNAME = @USER_ID)
  18. AND NOT EXISTS(SELECT * FROM CUSTOMERMASTERTEMP(NOLOCK) WHERE USERNAME = @USER_ID))
  19. BEGIN
  20. SELECT 1 Code, 'Invalid user!' Msg, NULL Id
  21. RETURN
  22. END
  23. IF @REQUEST_FOR = 'REGISTER'
  24. BEGIN
  25. IF EXISTS(SELECT * FROM TBL_MOBILE_OTP_REQUEST(NOLOCK) WHERE [USER_ID] = @USER_ID AND IS_SUCCESS = 1 AND REQUEST_FOR = 'REGISTER')
  26. BEGIN
  27. SELECT 2 Code, 'User already verified!' Msg, NULL Id
  28. RETURN
  29. END
  30. SELECT @CURRENT_OTP = OTP_CODE, @REQUEST_MINUTES = DATEDIFF(MINUTE, REQUESTED_DATE, GETDATE())
  31. FROM TBL_MOBILE_OTP_REQUEST
  32. WHERE [USER_ID] = @USER_ID
  33. AND REQUEST_FOR = 'REGISTER'
  34. AND IS_EXPIRED = 0
  35. END
  36. ELSE
  37. BEGIN
  38. IF @RECEIVER_ID IS NULL
  39. BEGIN
  40. SELECT 3 Code, 'Receiver ID can not be null for Receiver OTP Request!' Msg, NULL Id
  41. RETURN
  42. END
  43. IF EXISTS(SELECT * FROM TBL_MOBILE_OTP_REQUEST(NOLOCK) WHERE [USER_ID] = @USER_ID AND IS_SUCCESS = 1 AND REQUEST_FOR = 'RECEIVER'
  44. AND RECEIVER_ID = @RECEIVER_ID)
  45. BEGIN
  46. SELECT 4 Code, 'Receiver already verified!' Msg, NULL Id
  47. RETURN
  48. END
  49. SELECT @CURRENT_OTP = OTP_CODE, @REQUEST_MINUTES = DATEDIFF(MINUTE, REQUESTED_DATE, GETDATE())
  50. FROM TBL_MOBILE_OTP_REQUEST
  51. WHERE [USER_ID] = @USER_ID
  52. AND RECEIVER_ID = @RECEIVER_ID
  53. AND REQUEST_FOR = 'RECEIVER'
  54. AND IS_EXPIRED = 0
  55. END
  56. IF @CURRENT_OTP IS NOT NULL AND @REQUEST_MINUTES <= @EXPIRE_MINUTES
  57. BEGIN
  58. SELECT 103 Code, 'Success, Old OTP used' Msg, @OTP_CODE Id
  59. RETURN
  60. END
  61. IF @CURRENT_OTP IS NOT NULL AND @REQUEST_MINUTES > @EXPIRE_MINUTES
  62. BEGIN
  63. UPDATE TBL_MOBILE_OTP_REQUEST SET IS_EXPIRED = 1
  64. WHERE [USER_ID] = @USER_ID
  65. AND REQUEST_FOR = @REQUEST_FOR
  66. AND ISNULL(RECEIVER_ID, 1) = CASE WHEN @REQUEST_FOR = 'RECEIVER' THEN @RECEIVER_ID ELSE 1 END
  67. AND OTP_CODE = @CURRENT_OTP
  68. END
  69. INSERT INTO TBL_MOBILE_OTP_REQUEST([USER_ID], OTP_CODE, REQUESTED_DATE, IS_EXPIRED, IS_SUCCESS, REQUEST_FOR, RECEIVER_ID)
  70. SELECT @USER_ID, @OTP_CODE, GETDATE(), 0, 0, @REQUEST_FOR, @RECEIVER_ID
  71. SELECT 0 Code, 'Success' Msg, @EXPIRE_MINUTES Id
  72. END
  73. ELSE IF @FLAG = 'SUBMIT'
  74. BEGIN
  75. IF @USER_ID IS NULL OR (NOT EXISTS(SELECT * FROM CUSTOMERMASTER(NOLOCK) WHERE USERNAME = @USER_ID)
  76. AND NOT EXISTS(SELECT * FROM CUSTOMERMASTERTEMP(NOLOCK) WHERE USERNAME = @USER_ID))
  77. BEGIN
  78. SELECT 1 Code, 'Invalid user!' Msg, NULL Id
  79. RETURN
  80. END
  81. IF @REQUEST_FOR = 'RECEIVER'
  82. BEGIN
  83. SELECT @ROW_ID = ROW_ID,
  84. @IS_EXPIRED = IS_EXPIRED,
  85. @IS_USED = IS_SUCCESS
  86. FROM TBL_MOBILE_OTP_REQUEST(NOLOCK)
  87. WHERE [USER_ID] = @USER_ID
  88. AND OTP_CODE = @OTP_CODE
  89. AND REQUEST_FOR = @REQUEST_FOR
  90. AND RECEIVER_ID = @RECEIVER_ID
  91. END
  92. ELSE
  93. BEGIN
  94. SELECT @ROW_ID = ROW_ID,
  95. @IS_EXPIRED = IS_EXPIRED,
  96. @IS_USED = IS_SUCCESS
  97. FROM TBL_MOBILE_OTP_REQUEST(NOLOCK)
  98. WHERE [USER_ID] = @USER_ID
  99. AND OTP_CODE = @OTP_CODE
  100. AND REQUEST_FOR = @REQUEST_FOR
  101. END
  102. IF @ROW_ID IS NULL
  103. BEGIN
  104. SELECT 2 Code, 'Invalid OTP!' Msg, NULL Id
  105. RETURN
  106. END
  107. IF @IS_EXPIRED = 1
  108. BEGIN
  109. SELECT 3 Code, 'OTP is already expired!' Msg, NULL Id
  110. RETURN
  111. END
  112. IF @IS_USED = 1
  113. BEGIN
  114. SELECT 4 Code, 'OTP is already used!' Msg, NULL Id
  115. RETURN
  116. END
  117. IF EXISTS (SELECT TOP 1 1 FROM TBL_MOBILE_OTP_REQUEST(NOLOCK) WHERE ROW_ID = @ROW_ID AND DATEDIFF(MINUTE, REQUESTED_DATE, GETDATE()) > @EXPIRE_MINUTES)
  118. BEGIN
  119. UPDATE TBL_MOBILE_OTP_REQUEST SET IS_EXPIRED = 1 WHERE ROW_ID = @ROW_ID
  120. SELECT 3 Code, 'OTP is already expired!' Msg, NULL Id
  121. RETURN
  122. END
  123. UPDATE TBL_MOBILE_OTP_REQUEST SET VERIFIED_DATE = GETDATE(), IS_SUCCESS = 1
  124. WHERE ROW_ID = @ROW_ID
  125. IF @REQUEST_FOR = 'RECEIVER'
  126. UPDATE RECEIVERINFORMATION SET isOTPVerified = 1 WHERE RECEIVERID = @RECEIVER_ID
  127. ELSE
  128. BEGIN
  129. IF EXISTS (SELECT * FROM CUSTOMERMASTER(NOLOCK) WHERE username = @USER_ID)
  130. UPDATE CUSTOMERMASTER SET isEmailVerified = 1 WHERE username = @USER_ID
  131. ELSE
  132. UPDATE CUSTOMERMASTERTEMP SET isEmailVerified = 1 WHERE username = @USER_ID
  133. END
  134. SELECT 0 Code, 'Success' Msg, @ROW_ID Id, @EXPIRE_MINUTES Extra
  135. END
  136. END