🐛 Trying to fix check in locking
This commit is contained in:
		| @@ -362,14 +362,21 @@ public class AccountController( | ||||
|         if (!isAvailable) | ||||
|             return BadRequest("Check-in is not available for today."); | ||||
|  | ||||
|         var needsCaptcha = await events.CheckInDailyDoAskCaptcha(currentUser); | ||||
|         return needsCaptcha switch | ||||
|         try | ||||
|         { | ||||
|             true when string.IsNullOrWhiteSpace(captchaToken) => StatusCode(423, | ||||
|                 "Captcha is required for this check-in."), | ||||
|             true when !await auth.ValidateCaptcha(captchaToken!) => BadRequest("Invalid captcha token."), | ||||
|             _ => await events.CheckInDaily(currentUser) | ||||
|         }; | ||||
|             var needsCaptcha = await events.CheckInDailyDoAskCaptcha(currentUser); | ||||
|             return needsCaptcha switch | ||||
|             { | ||||
|                 true when string.IsNullOrWhiteSpace(captchaToken) => StatusCode(423, | ||||
|                     "Captcha is required for this check-in."), | ||||
|                 true when !await auth.ValidateCaptcha(captchaToken!) => BadRequest("Invalid captcha token."), | ||||
|                 _ => await events.CheckInDaily(currentUser) | ||||
|             }; | ||||
|         } | ||||
|         catch (InvalidOperationException ex) | ||||
|         { | ||||
|             return BadRequest(ex.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     [HttpGet("me/calendar")] | ||||
|   | ||||
| @@ -142,7 +142,8 @@ public class AccountEventService( | ||||
|     public async Task<CheckInResult> CheckInDaily(Account user) | ||||
|     { | ||||
|         var lockKey = $"{CheckInLockKey}{user.Id}"; | ||||
|         var lk = await cache.AcquireLockAsync(lockKey, TimeSpan.FromMinutes(10), TimeSpan.Zero); | ||||
|          | ||||
|         await using var lk = await cache.AcquireLockAsync(lockKey, TimeSpan.FromMinutes(10), TimeSpan.Zero); | ||||
|         if (lk is null) throw new InvalidOperationException("Check-in was in progress."); | ||||
|  | ||||
|         var cultureInfo = new CultureInfo(user.Language, false); | ||||
| @@ -212,7 +213,7 @@ public class AccountEventService( | ||||
|             ActivityVisibility.Friends | ||||
|         ); | ||||
|  | ||||
|         await lk.ReleaseAsync(); | ||||
|         // The lock will be automatically released by the await using statement | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user