/// <summary> /// Inserts a new user record in the database. /// </summary> /// <param name="registrationReference">The Azure Mobile Service user id.</param> /// <returns>Updated user object.</returns> public async Task<UserContract> CreateUser(string registrationReference) { //Create the new user document with default values and starting gold balance. var userDocument = new UserDocument { GoldBalance = 0, RegistrationReference = registrationReference, CreatedAt = new DateDocument { Date = DateTime.UtcNow }, ModifiedAt = new DateDocument { Date = DateTime.UtcNow }, GoldGiven = 0 }; var createdUserId = (await _documentClient.CreateDocumentAsync(DocumentCollectionUri, userDocument)).Resource.Id; // Handle gold balance changes and create transaction record await ExecuteGoldTransactionSproc(createdUserId, SystemUserId, _newUserGoldBalance, GoldTransactionType.WelcomeGoldTransaction); userDocument.Id = createdUserId; userDocument.GoldBalance = _newUserGoldBalance; return userDocument.ToContract(); }
private async Task<UserDocument> ReplaceUserDocument(UserDocument userDocument) { var existingUser = GetUserDocumentByRegistrationReference(userDocument.RegistrationReference); // First time profile pic update awards user some gold (value found in environment definitions) var firstTimeProfileGoldAward = (existingUser.ProfilePhotoId == null && userDocument.ProfilePhotoId != null); // Persist the user's GoldGiven value since it is not currently present in userContracts if (userDocument.GoldGiven == 0 && existingUser.GoldGiven != 0) { userDocument.GoldGiven = existingUser.GoldGiven; } try { userDocument.ModifiedAt = new DateDocument { Date = DateTime.UtcNow }; var response = await _documentClient.ReplaceDocumentAsync( UriFactory.CreateDocumentUri( _documentDataBaseId, _documentCollectionId, userDocument.Id), userDocument); if (response.StatusCode != HttpStatusCode.OK) { throw new DataLayerException(DataLayerError.Unknown, response.StatusCode.ToString()); } } catch (DocumentClientException ex) { throw new DataLayerException(DataLayerError.NotFound, ex.Message, ex); } if (firstTimeProfileGoldAward) { // Handle gold balance changes and create transaction record await ExecuteGoldTransactionSproc(userDocument.Id, SystemUserId, _firstProfilePhotoUpdateGoldIncrement, GoldTransactionType.FirstProfilePicUpdateTransaction); } return userDocument; }