movemeet/movemeet

View on GitHub
app/src/main/java/com/sdp/movemeet/backend/firebase/firestore/FirestoreActivityManager.java

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
package com.sdp.movemeet.backend.firebase.firestore;

import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QuerySnapshot;
import com.sdp.movemeet.backend.providers.BackendInstanceProvider;
import com.sdp.movemeet.backend.serialization.BackendSerializer;
import com.sdp.movemeet.models.Activity;

/**
 * A class capable of handling Activity storage operations with a Firebase Firestore backend
 */
public class FirestoreActivityManager extends FirestoreManager<Activity> {

    // The name of the Firestore collection containing Activities
    public final static String ACTIVITIES_COLLECTION = "activities";

    private final FirebaseFirestore db;
    private final String collection;

    public FirestoreActivityManager(String collection, BackendSerializer<Activity> serializer) {
        super(collection, serializer);
        this.db = BackendInstanceProvider.getFirestoreInstance();
        this.collection = collection;
    }

    @Override
    public Task<QuerySnapshot> search(String field, Object value) {
        return super.search(field, value);
    }

    /**
     * Returns a list of recently added activities, with the specified size
     *
     * @param size number of recently added activities we want to get
     * @return a querySnapshot for size number of recently added activities
     */
    public Task<QuerySnapshot> getRecentlyAddedActivities(int size) {
        return db.collection(collection).orderBy("createdAt", Query.Direction.DESCENDING).limit(size).get();
    }

    /**
     * When the given activity is updated in the db, the event listener should trigger the given callback
     *
     * @param activity      activity that is listened on
     * @param eventListener used to trigger a callback when activity changes in db
     */
    public void setActivitiesUpdateListener(Activity activity, EventListener<DocumentSnapshot> eventListener) {
        db.document(activity.getDocumentPath()).addSnapshotListener(eventListener);
    }


    /**
     * Gets all documents in the corresponding collection
     *
     * @return a querySnapshot for all documents in the collection
     */
    public Task<QuerySnapshot> getAll() {
        return db.collection(collection).get();
    }


}