/// <summary>
        /// Зберігає дані виписки в базі даних
        /// </summary>
        /// <param name="account">Рахунок користувача для якої взята виписка</param>
        /// <param name="statementItems">Дані виписки</param>
        /// <returns>[Дані збережено / не збережено] [Повідомлення]</returns>
        public static async Task <(bool isSaved, string message)> SaveAsync(string account, List <StatementItem> statementItems)
        {
            try
            {
                var dbContext = new MonoboardDbContext();

                var databaseData = dbContext.StatementItems.Select(item => item.Id).ToList();

                if (statementItems.Count == 0)
                {
                    return(true, "MbDataMonthNotExist");
                }

                foreach (var item in statementItems.Where(item => !databaseData.Exists(s => s == item.Id)))
                {
                    item.CardKey = account;
                    await dbContext.StatementItems.AddAsync(item);
                }

                return(await dbContext.SaveChangesAsync() > 0
                                        ? (true, "MbSaveDataSuccess")
                                        : (false, "MbDataAlreadyDownloaded"));
            }
            catch (Exception exception)
            {
                return(false, exception.Message);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Видаляє користувача з бази даних і всю інформацію пов'язану з ним
        /// </summary>
        /// <param name="clientId">Id клієнта Monobank</param>
        /// <returns>[Стан] Видалення користувача пройшло успішно / не успішно</returns>
        public static async Task <bool> DeleteUserDataAsync(string clientId)
        {
            await using var db = new MonoboardDbContext();

            db.UserInfo.Remove(await db.UserInfo.SingleAsync(user => user.ClientId == clientId));

            return(await db.SaveChangesAsync() > 0);
        }
Beispiel #3
0
        /// <summary>
        /// Оновлює дані користувача в базі даних застосунку
        /// </summary>
        /// <param name="userInfo">Інформація про користувача</param>
        /// <returns>[Стан] Створення нового користувача пройшло успішно / не успішно</returns>
        public static async Task <bool> UpdateUserAsync(UserInfo userInfo)
        {
            await using var db = new MonoboardDbContext();

            db.UserInfo.Update(userInfo);

            return(await db.SaveChangesAsync() > 0);
        }
Beispiel #4
0
        /// <summary>
        /// Створює нового користувача в базі даних застосунку
        /// </summary>
        /// <param name="userInfo">Інформація про користувача</param>
        /// <returns>[Стан] Створення нового користувача пройшло успішно / не успішно</returns>
        public static async Task <bool> SetNewUserAsync(UserInfo userInfo)
        {
            await using var db = new MonoboardDbContext();

            await db.UserInfo.AddAsync(userInfo);

            return(await db.SaveChangesAsync() > 0);
        }
Beispiel #5
0
        /// <summary>
        /// Завантажує нові дані щодо партнерів базі даних застосунку
        /// </summary>
        /// <param name="partners">Інформація про партнерів</param>
        /// <returns>[Стан] Збереження виконано / Виникла помилка</returns>
        public static async Task <bool> SaveAsync(List <Partner> partners)
        {
            await using var db = new MonoboardDbContext();

            await db.Partners.AddRangeAsync(partners);

            return(await db.SaveChangesAsync() > 0);
        }
Beispiel #6
0
        /// <summary>
        /// Видаляє всі дані про партнерів Монобанку
        /// </summary>
        /// <returns>[Стан] Видалено успішно / Виникла помилка</returns>
        public static async Task <bool> DeleteAsync()
        {
            await using var db = new MonoboardDbContext();

            if (db.Partners.Any() is false)
            {
                return(true);
            }

            db.Partners.RemoveRange(db.Partners);
            return(await db.SaveChangesAsync() > 0);
        }
Beispiel #7
0
        /// <summary>
        /// Визначає тему додатку за бажанням користувача
        /// </summary>
        /// <param name="clientId">Id клієнта Monobank</param>
        /// <param name="isDarkTheme">[Стан] Світла тема / Темна тема</param>
        /// <returns>[Стан] Тему змінено / не змінено</returns>
        public static async Task <bool> UpdateTheme(string clientId, bool isDarkTheme)
        {
            await using var db = new MonoboardDbContext();

            var user = await db.MonoBoardUsers.FirstAsync(monoboardUser => monoboardUser.ClientId == clientId);

            user.IsDarkTheme = isDarkTheme;

            db.MonoBoardUsers.Update(user);

            return(await db.SaveChangesAsync() != 0);
        }
Beispiel #8
0
        /// <summary>
        /// Змінюємо токен доступу користувача
        /// </summary>
        /// <param name="clientId">Id клієнта Monobank</param>
        /// <param name="token">Токен користувача</param>
        /// <returns>[Стан] Токен змінено / не змінено</returns>
        public static async Task <bool> ChangeAccessTokenAsync(string clientId, string token)
        {
            await using var db = new MonoboardDbContext();

            var user = await db.MonoBoardUsers.FirstAsync(monoboardUser => monoboardUser.ClientId == clientId);

            user.AccessToken = token;

            db.MonoBoardUsers.Update(user);

            return(await db.SaveChangesAsync() > 0);
        }
Beispiel #9
0
        /// <summary>
        /// Зберігає мову користувача
        /// </summary>
        /// <param name="clientId">Id клієнта Monobank</param>
        /// <param name="language">Вибрана мова</param>
        /// <returns>[Стан] Мову змінено / не змінено</returns>
        public static async Task <bool> UpdateLanguage(string clientId, string language)
        {
            await using var db = new MonoboardDbContext();

            var user = await db.MonoBoardUsers.FirstAsync(monoboardUser => monoboardUser.ClientId == clientId);

            user.Language = language;

            db.MonoBoardUsers.Update(user);

            return(await db.SaveChangesAsync() != 0);
        }
        /// <summary>
        /// Зберігає інформацію про те, що дані за вказаний місяць завантажені
        /// </summary>
        /// <param name="cardCode">Код картки рахунку користувача</param>
        /// <param name="month">Вибрана дата (місяць)</param>
        /// <param name="isEnd">Вказує, чи це є кінцевою точкою виписки</param>
        /// <returns>[Стан] Дані збережено / не збережено</returns>
        public static async Task <bool> CheckSaveAsync(string cardCode, DateTime month, bool isEnd)
        {
            await using var db = new MonoboardDbContext();

            await db.StatementItemsCheckers.AddAsync(new StatementItemsChecker
            {
                CardCode = cardCode,
                Month    = month,
                IsEnd    = isEnd
            });

            return(await db.SaveChangesAsync() != 0);
        }
Beispiel #11
0
        /// <summary>
        /// Записує захешований пароль користувача в базу даних
        /// </summary>
        /// <param name="clientId">Id клієнта Monobank</param>
        /// <param name="password">Захешований пароль користувача</param>
        /// <returns>[Стан] Пароль встановлено / не встановлено</returns>
        public static async Task <bool> SetNewPassword(string clientId, string password)
        {
            await using var db = new MonoboardDbContext();

            var user = await db.MonoBoardUsers.FirstAsync(monoboardUser => monoboardUser.ClientId == clientId);

            user.Password        = password;
            user.IsPasswordReset = false;

            db.MonoBoardUsers.Update(user);

            return(await db.SaveChangesAsync() > 0);
        }
Beispiel #12
0
        /// <summary>
        /// Вказує, що вся виписка картки/рахунку користувача вже завантажена
        /// [Поточний місяць не рахується]
        /// </summary>
        /// <param name="clientId">Id клієнта Monobank</param>
        /// <param name="cardCode">Ідентифікатор рахунку</param>
        /// <returns>[Стан] Позначує, що виписка завантажена / виникла помилка</returns>
        public static async Task <bool> SetStatementsDownloadedAsync(
            string clientId,
            string cardCode)
        {
            await using var db = new MonoboardDbContext();

            var account = await db.Accounts.FirstAsync(accounts => accounts.ClientId == clientId && accounts.CardCode == cardCode);

            account.IsDownloaded = true;

            db.Accounts.Update(account);

            return(await db.SaveChangesAsync() != 0);
        }
Beispiel #13
0
        /// <summary>
        /// Визначає первинний колір додатку за бажанням користувача
        /// </summary>
        /// <param name="clientId">Id клієнта Monobank</param>
        /// <param name="primaryColor">Основний колір додатку</param>
        /// <returns>[Стан] Основний колір змінено / не змінено</returns>
        public static async Task <bool> UpdatePrimaryColor(string clientId, string primaryColor)
        {
            await using var db = new MonoboardDbContext();

            var user = await db.MonoBoardUsers.FirstAsync(monoboardUser => monoboardUser.ClientId == clientId);

            user.PrimaryColor = primaryColor.Contains("#") ?
                                primaryColor :
                                $"#{primaryColor}";

            db.MonoBoardUsers.Update(user);

            return(await db.SaveChangesAsync() != 0);
        }
Beispiel #14
0
        /// <summary>
        /// Встановлює значення теми і кольорів за замовчуванням
        /// </summary>
        /// <param name="clientId">Id клієнта Monobank</param>
        /// <returns>[Стан] Значення за замовчуванням встановлено / не встановлено</returns>
        public static async Task <bool> ResetColorTheme(string clientId)
        {
            await using var db = new MonoboardDbContext();

            var user = await db.MonoBoardUsers.FirstAsync(monoboardUser => monoboardUser.ClientId == clientId);

            user.IsDarkTheme    = false;
            user.PrimaryColor   = "fff43b3f";
            user.SecondaryColor = "ff06b206";

            db.MonoBoardUsers.Update(user);

            return(await db.SaveChangesAsync() != 0);
        }
Beispiel #15
0
        /// <summary>
        /// Скидання паролю користувача
        /// </summary>
        /// <param name="clientId">Id клієнта Monobank</param>
        /// <returns>[Стан] Пароль скинуто / не скинуто та згенерований пароль для користувача</returns>
        public static async Task <(bool isResetCompleted, string newPassword)> ResetPasswordAsync(string clientId)
        {
            await using var db = new MonoboardDbContext();

            var user = await db.MonoBoardUsers.FirstAsync(monoboardUser => monoboardUser.ClientId == clientId);

            var newPassword = Sha256Hash.Compute($"user{user.ClientId}!");

            bool isComplete;

            if (user.Password != newPassword)
            {
                user.Password        = newPassword;
                user.IsPasswordReset = true;

                isComplete = await db.SaveChangesAsync() > 0;
            }
            else
            {
                isComplete = true;
            }

            return(isComplete, $"user{user.MonoboardUserKey}{user.ClientId}!");
        }
Beispiel #16
0
        /// <summary>
        /// Встановлює введені дані картки/рахунку користувача
        /// </summary>
        /// <param name="clientId">Id клієнта Monobank</param>
        /// <param name="cardCode">Ідентифікатор рахунку</param>
        /// <param name="cardName">Змінена назва картки/рахунку користувача</param>
        /// <param name="cardDescription">Змінений опис картки/рахунку користувача</param>
        /// <returns></returns>
        public static async Task <bool> SetCardPersonalizationAsync(
            string clientId,
            string cardCode,
            string cardName,
            string cardDescription)
        {
            await using var db = new MonoboardDbContext();

            var account = await db.Accounts.FirstAsync(accounts => accounts.ClientId == clientId && accounts.CardCode == cardCode);

            if (string.IsNullOrWhiteSpace(cardName) is false)
            {
                account.CustomCardName = cardName;
            }

            if (string.IsNullOrWhiteSpace(cardDescription) is false)
            {
                account.CustomCardDescription = cardDescription;
            }

            db.Accounts.Update(account);

            return(await db.SaveChangesAsync() != 0);
        }
Beispiel #17
0
        /// <summary>
        /// Зберігає дані курсів валют в базі даних
        /// </summary>
        /// <param name="exchangeRates">Дані курсу валют</param>
        /// <returns>[Стан] Дані збережено / не збережено</returns>
        public static async Task <bool> Save(List <ExchangeRates> exchangeRates)
        {
            var dbContext = new MonoboardDbContext();

            if (await dbContext.ExchangeRates.AnyAsync())
            {
                var dbExchangeRates = await dbContext.ExchangeRates
                                      .Select(exchangesData => exchangesData)
                                      .OrderByDescending(exchangesData => exchangesData.ExchangeRatesId)
                                      .Take(114)
                                      .OrderByDescending(exchangesData => exchangesData.CurrencyCodeA)
                                      .ToListAsync();

                for (var index = 0; index < exchangeRates.Count; index++)
                {
                    var dbRateCross = dbExchangeRates[index];

                    var rateCross = exchangeRates.Single(rates =>
                                                         rates.CurrencyCodeA == dbRateCross.CurrencyCodeA &&
                                                         rates.CurrencyCodeB == dbRateCross.CurrencyCodeB);

                    if (UnixConverter.UnixTimestampToDateTime(dbRateCross.Date)
                        .ToShortDateString() ==
                        UnixConverter.UnixTimestampToDateTime(rateCross.Date)
                        .ToShortDateString())
                    {
                        if (dbRateCross.RateBuy != rateCross.RateBuy)
                        {
                            dbRateCross.RateBuy = float.Parse(rateCross.RateBuy.ToString("F4"));
                        }

                        if (dbRateCross.RateSell != rateCross.RateSell)
                        {
                            dbRateCross.RateSell = float.Parse(rateCross.RateSell.ToString("F4"));
                        }

                        if (dbRateCross.RateCross.HasValue && rateCross.RateCross.HasValue)
                        {
                            if (dbRateCross.RateCross != rateCross.RateCross)
                            {
                                dbRateCross.RateCross = float.Parse(rateCross.RateCross !.Value.ToString("F4"));
                            }
                        }

                        dbRateCross.Date = rateCross.Date;

                        dbContext.ExchangeRates.Update(dbRateCross);
                    }
                    else
                    {
                        rateCross.RateBuy  = float.Parse(rateCross.RateBuy.ToString("F4"));
                        rateCross.RateSell = float.Parse(rateCross.RateSell.ToString("F4"));

                        if (dbRateCross.RateCross.HasValue && rateCross.RateCross.HasValue)
                        {
                            rateCross.RateCross = float.Parse(rateCross.RateCross.Value.ToString("F4"));
                        }

                        await dbContext.ExchangeRates.AddAsync(rateCross);
                    }
                }

                return(await dbContext.SaveChangesAsync() > 0);
            }

            foreach (var rates in exchangeRates)
            {
                rates.RateBuy  = float.Parse(rates.RateBuy.ToString("F4"));
                rates.RateSell = float.Parse(rates.RateSell.ToString("F4"));

                if (rates.RateCross.HasValue)
                {
                    rates.RateCross = float.Parse(rates.RateCross.Value.ToString("F4"));
                }
            }

            await dbContext.ExchangeRates.AddRangeAsync(exchangeRates);

            return(await dbContext.SaveChangesAsync() > 0);
        }