The user json document.
Inheritance: BaseDocument
コード例 #1
0
        /// <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();
        }
コード例 #2
0
        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;
        }