diff --git a/app/src/main/java/com/example/vdcscore/data/FirebaseRepository.java b/app/src/main/java/com/example/vdcscore/data/FirebaseRepository.java new file mode 100644 index 0000000..95526c4 --- /dev/null +++ b/app/src/main/java/com/example/vdcscore/data/FirebaseRepository.java @@ -0,0 +1,104 @@ +package com.example.vdcscore.data; + +import androidx.annotation.NonNull; + +import com.example.vdcscore.models.Club; +import com.example.vdcscore.models.Jornada; +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; +import com.google.firebase.database.ValueEventListener; + +import java.util.ArrayList; +import java.util.List; + +public class FirebaseRepository { + + private final DatabaseReference mDatabase; + private static FirebaseRepository instance; + + private FirebaseRepository() { + mDatabase = FirebaseDatabase.getInstance().getReference(); + } + + public static synchronized FirebaseRepository getInstance() { + if (instance == null) { + instance = new FirebaseRepository(); + } + return instance; + } + + // --- Clubs --- + + public void addClub(Club club, OnCompleteListener onCompleteListener) { + String key = club.getId(); + if (key == null || key.isEmpty()) { + key = mDatabase.child("clubs").push().getKey(); + club.setId(key); + } + mDatabase.child("clubs").child(key).setValue(club).addOnCompleteListener(onCompleteListener); + } + + public void getClubs(final DataCallback> callback) { + mDatabase.child("clubs").addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot snapshot) { + List clubs = new ArrayList<>(); + for (DataSnapshot postSnapshot : snapshot.getChildren()) { + Club club = postSnapshot.getValue(Club.class); + if (club != null) { + club.setId(postSnapshot.getKey()); + clubs.add(club); + } + } + callback.onSuccess(clubs); + } + + @Override + public void onCancelled(@NonNull DatabaseError error) { + callback.onFailure(error.toException()); + } + }); + } + + // --- Jornadas --- + + public void addJornada(Jornada jornada, OnCompleteListener onCompleteListener) { + String key = jornada.getId(); + if (key == null || key.isEmpty()) { + key = mDatabase.child("jornadas").push().getKey(); + jornada.setId(key); + } + mDatabase.child("jornadas").child(key).setValue(jornada).addOnCompleteListener(onCompleteListener); + } + + public void getJornadas(final DataCallback> callback) { + mDatabase.child("jornadas").addValueEventListener(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot snapshot) { + List jornadas = new ArrayList<>(); + for (DataSnapshot postSnapshot : snapshot.getChildren()) { + Jornada jornada = postSnapshot.getValue(Jornada.class); + if (jornada != null) { + jornada.setId(postSnapshot.getKey()); + jornadas.add(jornada); + } + } + callback.onSuccess(jornadas); + } + + @Override + public void onCancelled(@NonNull DatabaseError error) { + callback.onFailure(error.toException()); + } + }); + } + + public interface DataCallback { + void onSuccess(T data); + + void onFailure(Exception e); + } +} diff --git a/app/src/main/java/com/example/vdcscore/models/Club.java b/app/src/main/java/com/example/vdcscore/models/Club.java new file mode 100644 index 0000000..7bf4495 --- /dev/null +++ b/app/src/main/java/com/example/vdcscore/models/Club.java @@ -0,0 +1,51 @@ +package com.example.vdcscore.models; + +public class Club { + private String id; + private String name; + private String logoUrl; + private String stadium; + + // Stats could be here or in a separate object, keeping basic info here + public Club() { + } + + public Club(String id, String name, String logoUrl, String stadium) { + this.id = id; + this.name = name; + this.logoUrl = logoUrl; + this.stadium = stadium; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLogoUrl() { + return logoUrl; + } + + public void setLogoUrl(String logoUrl) { + this.logoUrl = logoUrl; + } + + public String getStadium() { + return stadium; + } + + public void setStadium(String stadium) { + this.stadium = stadium; + } +} diff --git a/app/src/main/java/com/example/vdcscore/models/Game.java b/app/src/main/java/com/example/vdcscore/models/Game.java new file mode 100644 index 0000000..3062ee6 --- /dev/null +++ b/app/src/main/java/com/example/vdcscore/models/Game.java @@ -0,0 +1,102 @@ +package com.example.vdcscore.models; + +public class Game { + private String id; + private String homeTeamId; + private String awayTeamId; + private String homeTeamName; + private String awayTeamName; + private int homeScore; + private int awayScore; + private boolean isFinished; + private long timestamp; + + public Game() { + // Required for Firebase + } + + public Game(String id, String homeTeamId, String awayTeamId, String homeTeamName, String awayTeamName, + long timestamp) { + this.id = id; + this.homeTeamId = homeTeamId; + this.awayTeamId = awayTeamId; + this.homeTeamName = homeTeamName; + this.awayTeamName = awayTeamName; + this.timestamp = timestamp; + this.isFinished = false; + this.homeScore = 0; + this.awayScore = 0; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getHomeTeamId() { + return homeTeamId; + } + + public void setHomeTeamId(String homeTeamId) { + this.homeTeamId = homeTeamId; + } + + public String getAwayTeamId() { + return awayTeamId; + } + + public void setAwayTeamId(String awayTeamId) { + this.awayTeamId = awayTeamId; + } + + public String getHomeTeamName() { + return homeTeamName; + } + + public void setHomeTeamName(String homeTeamName) { + this.homeTeamName = homeTeamName; + } + + public String getAwayTeamName() { + return awayTeamName; + } + + public void setAwayTeamName(String awayTeamName) { + this.awayTeamName = awayTeamName; + } + + public int getHomeScore() { + return homeScore; + } + + public void setHomeScore(int homeScore) { + this.homeScore = homeScore; + } + + public int getAwayScore() { + return awayScore; + } + + public void setAwayScore(int awayScore) { + this.awayScore = awayScore; + } + + public boolean isFinished() { + return isFinished; + } + + public void setFinished(boolean finished) { + isFinished = finished; + } + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } +} diff --git a/app/src/main/java/com/example/vdcscore/models/Jornada.java b/app/src/main/java/com/example/vdcscore/models/Jornada.java new file mode 100644 index 0000000..b49b874 --- /dev/null +++ b/app/src/main/java/com/example/vdcscore/models/Jornada.java @@ -0,0 +1,55 @@ +package com.example.vdcscore.models; + +import java.util.ArrayList; +import java.util.List; + +public class Jornada { + private String id; + private int number; + private List games; + private boolean isCurrent; + + public Jornada() { + // Required for Firebase + this.games = new ArrayList<>(); + } + + public Jornada(String id, int number) { + this.id = id; + this.number = number; + this.games = new ArrayList<>(); + this.isCurrent = false; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getNumber() { + return number; + } + + public void setNumber(int number) { + this.number = number; + } + + public List getGames() { + return games; + } + + public void setGames(List games) { + this.games = games; + } + + public boolean isCurrent() { + return isCurrent; + } + + public void setCurrent(boolean current) { + isCurrent = current; + } +}