// ダウンロード系の関数

    // すべてのデータをダウンロードし、jsonからTにパースしてリストで返す。下の方の関数を連結することで実現してる。
    public static async UniTask <List <T> > GetAllData <T>()
    {
        // JsonUtilityの仕様で、Realtime Databaseの全体をパースできない。<string, obj>にパースできない。
        // なので、それが可能なOSSのMiniJsonをkeyの取得にだけ使う。

        // keyの取得(shallowクエリ)
        var text = await FirebaseRepository.GetDataKeys();

        var dictionary = Json.Deserialize(text) as Dictionary <string, object>;
        var keys       = dictionary?.Select(x => x.Key);

        if (keys is null)
        {
            return(null);
        }


        var list = await keys.Select(async key =>
        {
            var d = await GetDataIndividual(key);
            var t = JsonUtility.FromJson <T>(d);
            return(t);
        });

        return(list.ToList());
    }
示例#2
0
        public FirebaseRepositoryTests(MockFirebaseFixture fixture)
        {
            var firebaseQuery = new FirebaseQuery(new FirebaseClient(FirebaseUrl, FirebaseAuth));

            _firebaseRepository = new FirebaseRepository <MockFirebasePerson>(FirebaseMockNode, firebaseQuery);
            _fixture            = fixture;
        }
示例#3
0
 private void init()
 {
     m_Firebase          = new FirebaseDB(r_baseUrl);
     m_WeatherRepository = new FirebaseRepository(m_Firebase.Node("Weather"));
     m_StudentRepository = new FirebaseRepository(m_Firebase.Node("Students"));
     m_JsonSerializer    = new DbJsonSerializer();
     m_WeatherCache      = new EntityCache <WeatherForecast>(m_WeatherRepository, m_JsonSerializer, eCacheLoadingMode.Eager);
     m_StudentCache      = new EntityCache <Student>(m_StudentRepository, m_JsonSerializer, eCacheLoadingMode.Lazy);
 }
示例#4
0
    async void Start()
    {
        var t = Time.time;

        box = await FirebaseRepository.GetAllData <DataClass>();

        box = box.OrderBy(x => x.timeStamp).ToList();

        Debug.Log("fin : " + (Time.time - t));
    }
        public async Task CreateNewCreatorIfDoesntExistAndReturnsItBack()
        {
            //Arrange
            var repo = new FirebaseRepository();

            //Act
            var result = repo.GetCreatorBy(Creator.Me.Name).Result;

            //Assert
            Assert.IsNotNull(result);
        }
示例#6
0
        public async Task SendPushNotification(int id)
        {
            using (var repository = new EntityRepository(new BaitkmDbContext(new DbContextOptions <BaitkmDbContext>())))
            {
                var pushNotification = await repository.Filter <PushNotification>(x => x.Id == id).FirstOrDefaultAsync();

                if (pushNotification == null)
                {
                    return;
                }
                var userIds  = new List <int>();
                var guestIds = new List <int>();
                switch (pushNotification.PushNotificationUserType)
                {
                case PushNotificationUserType.All:
                    userIds = await repository.GetAll <User>().Select(x => x.Id).ToListAsync();

                    guestIds = await repository.GetAll <Guest>().Select(x => x.Id).ToListAsync();

                    break;

                case PushNotificationUserType.Guest:
                    guestIds = await repository.GetAll <Guest>().Select(x => x.Id).ToListAsync();

                    break;

                case PushNotificationUserType.Registered:
                    userIds = await repository.GetAll <User>().Select(x => x.Id).ToListAsync();

                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
                using (var fireBaseRepository = new FirebaseRepository(new BaitkmDbContext(new DbContextOptions <BaitkmDbContext>())))
                {
                    await fireBaseRepository.SendCampaignNotification(new FirebaseCampaignNotificationModel
                    {
                        Description = pushNotification.Description,
                        PushNotificationActionType = pushNotification.PushNotificationActionType,
                        Title     = pushNotification.Title,
                        UserIds   = userIds,
                        GuestIds  = guestIds,
                        FromAdmin = true,
                        SenderId  = null
                    });
                }
                pushNotification.PushNotificationStatusType = PushNotificationStatusType.Sent;
                repository.Update(pushNotification);
                await repository.SaveChangesAsync();
            }
        }
示例#7
0
        public async Task Expired()
        {
            using (var repository = new EntityRepository(new BaitkmDbContext(new DbContextOptions <BaitkmDbContext>())))
            {
                var announcements = await repository
                                    .Filter <Announcement>(x => !x.IsDraft && x.AnnouncementStatus == AnnouncementStatus.Accepted && x.AnnouncementStatusLastDay.Date == DateTime.UtcNow.Date)
                                    .ToListAsync();

                var announcemenExpired = await repository.Filter <Notification>(n =>
                                                                                n.NotificationType == AnnouncementNotificationType.Available).Include(n => n.NotificationTranslate).FirstOrDefaultAsync();

                foreach (var a in announcements)
                {
                    var questionerLanguage = repository.FilterAsNoTracking <PersonOtherSetting>(x =>
                                                                                                x.UserId == a.UserId).Select(s => s.Language).FirstOrDefault();
                    using (var firebaseRepository = new FirebaseRepository(new BaitkmDbContext(new DbContextOptions <BaitkmDbContext>())))
                    {
                        await firebaseRepository.SendIndividualNotification(new IndividualNotificationModel
                        {
                            Description      = $"{a.Title}",
                            GenericId        = a.Id,
                            NotificationType = NotificationType.AnnouncementAvailable,
                            ReceiverId       = a.UserId,
                            SenderId         = null,
                            Title            = questionerLanguage == Language.English ? announcemenExpired.Title
                     : announcemenExpired.NotificationTranslate.Select(n => n.Title).FirstOrDefault()
                        }, false);
                    }
                    repository.Create(new PersonNotification
                    {
                        AnnouncementId = a.Id,
                        UserId         = a.UserId,
                        NotificationId = announcemenExpired.Id
                    });
                }
            }
        }
示例#8
0
 public NewsController()
 {
     _repo = new FirebaseRepository();
 }
示例#9
0
 public void OnClick()
 {
     FirebaseRepository.PushDataToFirebaseWithTimestamp(data);
 }