/// <inheritdoc/>
        public async Task <(Guid id, bool result, string message)> RegisterAsync(AccountDTO accountDTO)
        {
            var user = await _identityContext.Accounts.FirstOrDefaultAsync(a => a.Email == accountDTO.Email &&
                                                                           a.Username == accountDTO.Username);

            if (user != null)
            {
                return(Guid.Empty, false, IdentityConstants.USER_ALREADY_EXIST);
            }

            user = await _identityContext.Accounts.FirstOrDefaultAsync(a => a.Email == accountDTO.Email);

            if (user != null)
            {
                return(Guid.Empty, false, IdentityConstants.EMAIL_ALREADY_EXIST);
            }

            user = await _identityContext.Accounts.FirstOrDefaultAsync(a => a.Username == accountDTO.Username);

            if (user != null)
            {
                return(Guid.Empty, false, IdentityConstants.USERNAME_ALREADY_EXIST);
            }

            var account = _mapper.Map <AccountDTO, AccountModel>(accountDTO);

            await _identityContext.Accounts.AddAsync(account);

            await _identityContext.SaveChangesAsync(new CancellationToken());

            var id = account.Id;

            return(id, true, IdentityConstants.REGISTRATION_SUCCESS);
        }
        /// <summary>
        /// Seed application context.
        /// </summary>
        /// <param name="context">Application context.</param>
        public static async Task SeedAsync(IIdentityContext context)
        {
            if (!context.Accounts.Any())
            {
                await context.Accounts.AddRangeAsync(GetPreconfiguredAccountModels());

                await context.SaveChangesAsync(new CancellationToken());
            }
        }