public async Task SetAsync(Guid accountId, AccountFlagType type, CancellationToken ct) { var flag = await _storage.AccountFlags .FirstOrDefaultAsync(x => x.Type == type && x.AccountId == accountId, ct); if (flag != null) { flag.SetDateTime = DateTime.UtcNow; _storage.Update(flag); } else { flag = new AccountFlag { Id = Guid.NewGuid(), AccountId = accountId, Type = type, SetDateTime = DateTime.UtcNow }; await _storage.AddAsync(flag, ct); } await _storage.SaveChangesAsync(ct); }
public void SetFlag(AccountFlag flag, bool value) { try { int iFlag = (int)flag; if (iFlag >= 0 && iFlag < 32) { SetFlag(iFlag, value); } } catch (Exception ex) { EventSink.InvokeLogException(new LogExceptionEventArgs(ex)); } }
public bool GetFlag(AccountFlag flag) { bool bReturn = false; try { int iFlag = (int)flag; if (iFlag >= 0 && iFlag < 32) { bReturn = GetFlag(iFlag); } } catch (Exception ex) { EventSink.InvokeLogException(new LogExceptionEventArgs(ex)); } return(bReturn); }
public async Task <IActionResult> SetFlags([FromBody] Messages.AccountFlagSetRequest msg) { // Validate that the user is logged in. var account = await GetCurrentAccountAsync(); if (account == null) { return(Unauthorized()); } // Validate the request if (msg.Flags == null || !msg.Flags.Any()) { return(BadRequest("Must provide at least one account flag to set")); } foreach (var flag in msg.Flags) { var name = flag.Key; if (string.IsNullOrWhiteSpace(name)) { return(BadRequest("Account flag name cannot be empty or whitespace. Was: '" + name + "'.")); } if (name.Length > AccountFlag.MaxNameLength) { return(BadRequest("Account flag name cannot be longer than " + AccountFlag.MaxNameLength + " characters. Was: " + name.Length + " characters, '" + name + "'.")); } } // Edit/change the flags as needed. var accountId = account.Id; var flags = await Db.AccountFlags.Where(f => f.AccountId == accountId).ToListAsync(); var flagsByName = flags.ToDictionary(flag => flag.Name); foreach (var flagToSet in msg.Flags) { var found = flagsByName.TryGetValue(flagToSet.Key, out var flagToChange); if (found) { // Update existing flag. flagToChange.Value = flagToSet.Value; flagToChange.LastChangedTimeUtc = _timeService.UtcNow; Db.AccountFlags.Update(flagToChange); } else { // Add a new flag. var newFlag = new AccountFlag { Id = Guid.NewGuid(), AccountId = accountId, Name = flagToSet.Key, Value = flagToSet.Value, LastChangedTimeUtc = _timeService.UtcNow }; Db.AccountFlags.Add(newFlag); } } await Db.SaveChangesAsync(); return(NoContent()); }
public bool GetFlag(AccountFlag flag) { bool bReturn = false; try { int iFlag = (int)flag; if (iFlag >= 0 && iFlag < 32) { bReturn = GetFlag(iFlag); } } catch (Exception ex) { EventSink.InvokeLogException(new LogExceptionEventArgs(ex)); } return bReturn; }