private async Task <CachedGaUserId> GetCachedUserIdAsync(string clientId, string cid = null) { var cachedGaUserId = new CachedGaUserId(); var trackerUser = await _trackerUserRepository.GetGaUserAsync(clientId); if (trackerUser == null) { var gaUser = GaUser.CreateNew(clientId, cid); await _trackerUserRepository.AddAsync(gaUser); cachedGaUserId.GaUserId = gaUser.TrackerUserId; cachedGaUserId.GaCid = gaUser.Cid; } else { string userCid = trackerUser.Cid; if (string.IsNullOrEmpty(userCid)) { userCid = string.IsNullOrEmpty(cid) ? GaUser.GenerateNewCid() : cid; await _trackerUserRepository.AddAsync(new GaUser { ClientId = trackerUser.ClientId, Cid = userCid, TrackerUserId = trackerUser.TrackerUserId }); } cachedGaUserId.GaUserId = trackerUser.TrackerUserId; cachedGaUserId.GaCid = userCid; } return(cachedGaUserId); }
public async Task <IGaUser> GetGaUserAsync(string clientId) { var entity = await _tableStorage.GetDataAsync(GaUserEntity.GeneratePartitionKey(), GaUserEntity.GenerateRowKey(clientId)); return(entity != null?GaUser.Create(entity) : null); }
public async Task AddGaUserAsync(string clientId, string cid) { var trackerUser = await _trackerUserRepository.GetGaUserAsync(clientId); var gaUser = new GaUser { ClientId = clientId }; if (trackerUser == null) { gaUser.TrackerUserId = GaUser.GenerateNewUserId(); gaUser.Cid = cid; } else { gaUser.TrackerUserId = trackerUser.TrackerUserId; if (string.IsNullOrEmpty(trackerUser.Cid)) { gaUser.Cid = cid; } } await _trackerUserRepository.AddAsync(gaUser); var value = MessagePackSerializer.Serialize(new CachedGaUserId(gaUser.TrackerUserId, gaUser.Cid)); await _cache.SetAsync(GetUserInfoKey(clientId), value); }
private async Task FillGaHitAsync(GaBaseHit model) { GaUser gaUser = await _gaUserService.GetGaUserAsync(model.UserId, model.Cid); model.UserId = gaUser.TrackerUserId; model.Cid = gaUser.Cid; model.TrackingId = _gaSettings.ApiKey; model.Traffic = await _gaUserService.GetGaUserTrafficAsync(gaUser.ClientId); var deviceInfo = new DeviceInfo(); deviceInfo.ParseUserAgent(model.UserAgent); deviceInfo.ParseClientInfo(model.ClientInfo); model.UserAgent = deviceInfo.GetUserAgentString(); model.ScreenResolution = deviceInfo.ScreenResolution; model.AppVersion = deviceInfo.AppVersion; }