private async Task <Character> TryAddCharacterNameToConstructedTeam(int teamId, string characterName, string customAlias) { var character = await _characterService.GetCharacterByNameAsync(characterName); if (character == null) { return(null); } using (await _constructedTeamLock.WaitAsync($"{teamId}^{character.Id}")) { if (await IsCharacterIdOnTeam(teamId, character.Id)) { return(null); } string playerAlias; if (string.IsNullOrWhiteSpace(customAlias)) { playerAlias = Player.GetTrimmedPlayerName(character.Name, character.WorldId); if (string.IsNullOrWhiteSpace(playerAlias)) { playerAlias = characterName; } } else { playerAlias = customAlias; } if (await TryAddCharacterToConstructedTeamDb(teamId, character.Id, character.FactionId, playerAlias)) { var member = new ConstructedTeamPlayerMembership { ConstructedTeamId = teamId, CharacterId = character.Id, FactionId = character.FactionId, Alias = playerAlias }; var memberDetails = ConvertToMemberDetailsModel(character, member); var changeMessage = new ConstructedTeamMemberChangeMessage(teamId, character, memberDetails, ConstructedTeamMemberChangeType.Add); _messageService.BroadcastConstructedTeamMemberChangeMessage(changeMessage); return(character); } else { return(null); } } }
private async Task <bool> TryAddCharacterToConstructedTeamDb(int teamId, string characterId, int factionId, string alias) { using var factory = _dbContextHelper.GetFactory(); var dbContext = factory.GetDbContext(); // Don't allow NSO characters onto teams if (factionId > 3 || factionId <= 0) { return(false); } var newEntity = new ConstructedTeamPlayerMembership { ConstructedTeamId = teamId, CharacterId = characterId, FactionId = factionId, Alias = alias }; try { var storeEntity = await dbContext.ConstructedTeamPlayerMemberships .Where(m => m.CharacterId == characterId && m.ConstructedTeamId == teamId) .FirstOrDefaultAsync(); if (storeEntity != null) { return(false); } dbContext.ConstructedTeamPlayerMemberships.Add(newEntity); await dbContext.SaveChangesAsync(); return(true); } catch (Exception ex) { _logger.LogError($"Error adding character ID {characterId} to team ID {teamId} in database: {ex}"); return(false); } }
private ConstructedTeamMemberDetails ConvertToMemberDetailsModel(Character character, ConstructedTeamPlayerMembership membership) { return(new ConstructedTeamMemberDetails { CharacterId = membership.CharacterId, ConstructedTeamId = membership.ConstructedTeamId, FactionId = membership.FactionId, NameFull = character.Name, NameAlias = membership.Alias, PrestigeLevel = character.PrestigeLevel, WorldId = character.WorldId }); }