Читать связанные данные с помощью календаря в Firestore - PullRequest
0 голосов
/ 25 марта 2019

В моем приложении есть фиксированные данные, которые требуются в соответствии с датой.

Мое намерение:

  • Избегайте необходимости обновлять эти данные каждый год, потому что они всегда одинаковы.

  • Поместите каждую часть информации относительно дня, который ей соответствует.

В соответствии с тем, что обсуждается в этом вопросе: Как организовать связанные временные и фиксированные данные в Firestore? , я решил сохранить фиксированные данные в коллекции, а затем создать коллекцию calendar, которая даст знать, учитывая дату, какому контенту соответствует.

В то же время я хочу избежать наименьшего количества потребления: согласно моей модели, сначала будет прочитано calendar в поисках содержимого, соответствующего этой дате в соответствии с данной датой. Затем содержимое будет искать по этой ссылке.

  • Будет два чтения , одно для календаря, а другое для коллекции с фиксированным содержанием.

  • Коллекция calendar и коллекции oficio и laudes будут синхронизироваться и кэшироваться приложением.

Фиксированный контент

Firestore-root
   |
   --- liturgia (collection)
   |     |
   |     --- lh (documents)
   |          |
   |          --- oficio (collection)
   |                |
   |                --- 03070101 (documents)
   |                        |
   |                        --- himno: "Today himno for today oficio"
   |                        |
   |                        --- read: "Today read for today oficio"
   |
   |                --- 03070102 (documents)
   |                        |
   |                        --- himno: "Today himno for today oficio"
   |                        |
   |                        --- read: "Today read for today oficio"
   |
   |                --- 09010325 (documents)
   |                        |
   |                        --- himno: "Today himno for today oficio"
   |                        |
   |                        --- read: "Today read for today oficio"
   |
   |          --- laudes (collection)
   |                |
   |                --- 03000101 (documents)
   |                        |
   |                        --- himno: "Today himno for today laudes"
   |                        |
   |                        --- read: "Today read for today laudes"
   |
   |                --- 03000102 (documents)
   |                        |
   |                        --- himno: "Today himno for today laudes"
   |                        |
   |                        --- read: "Today read for today laudes"
   |
   |                --- 09010325 (documents)
   |                        |
   |                        --- himno: "Today himno for today laudes"
   |                        |
   |                        --- read: "Today read for today laudes"

Обновляемый контент

Firestore-root
   |
   --- calendar (collection)
   |     |
   |     --- 20190325 (documents)
   |          |
   |          --- oficio: "09010325"
   |          |
   |          --- laudes: "09010325"
   |          |
   |          --- tercia: "03000301"   
   |
   |
   |      --- 20190326 (documents)
   |          |
   |          --- oficio: "03070102"
   |          |
   |          --- laudes: "03000102"
   |          |
   |          --- tercia: "03000102"

Код

Код для получения документа oficio на сегодняшний день, а именно:

   |                --- 09010325 (documents)
   |                        |
   |                        --- himno: "Today himno for today oficio"
   |                        |
   |                        --- read: "Today read for today oficio"

есть

String todayDate="20190325"; //getted automatically
    final DocumentReference docRef = db.collection("calendar").document(todayDate);
    docRef.addSnapshotListener(new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(@Nullable DocumentSnapshot snapshot,
                            @Nullable FirebaseFirestoreException e) {
            if (e != null) {
                Log.w(TAG, "Listen failed.", e);
                //launchVolley();
                return;
            }

            if (snapshot != null && snapshot.exists()) {
                String contentPath=snapshot.getString("oficio");
                DocumentReference docRef = db.collection("liturgia").document("lh").collection("oficio")
                        .document(contentPath);
                docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                    @Override
                    public void onSuccess(DocumentSnapshot documentSnapshot) {
                        mBreviario = documentSnapshot.toObject(Breviario.class);
                        Log.w(TAG, documentSnapshot.toString());
                        showData();
                    }
                });
            } else {
                //launchVolley();
            }
        }
    });

Относительно этого сценария у меня есть два сомнения:

  1. Я делаю две консультации , одну для получения ссылки в соответствии с сегодняшней датой и другую для получения фиксированного содержания в соответствии с полученной ссылкой. Поскольку я планирую кэшировать календарь, будет ли мне выставляться счет, когда приложение считывает календарь из кэша или только когда оно читает календарь в Firebase?

  2. Поскольку также фиксированные коллекции будут кэшироваться и содержать много информации: не менее 365 документов для каждой группы (oficio, laudes и т. Д.). Как кеш будет работать в этом смысле по отношению к календарю. Я хочу расставить приоритеты для кэша calendar и добавить другое содержимое в соответствии с лимитом кэша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...