EventoController.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace app\commands;
  3. use app\components\FirebaseHelper;
  4. use v1\models\Evento;
  5. use v1\models\Grupo;
  6. use yii\console\Controller;
  7. class EventoController extends Controller {
  8. public function actionSincronizar() {
  9. $firebase = new FirebaseHelper();
  10. $firestore = $firebase->firestore();
  11. $ultimaFecha = null;
  12. $limite = 1; // 1000;
  13. $continuar = true;
  14. do {
  15. $ref = $firestore->collection("eventos")
  16. // ->where("sincronizado", "==", null)
  17. ->orderBy("timestamp", "ASC")
  18. ->limit($limite);
  19. if($ultimaFecha !== null) {
  20. $ref = $ref->startAt([$ultimaFecha]);
  21. }
  22. $c = 0; # Contador de registros procesados
  23. foreach($ref->documents() as $doc) {
  24. $c++;
  25. $data = $doc->data();
  26. $ultimaFecha = $data["timestamp"];
  27. $modelo = Evento::findOne(["firebaseId" => $doc->id()]);
  28. if($modelo === null) {
  29. $modelo = new Evento();
  30. }
  31. try {
  32. $modelo->nombre = $data["nombre"];
  33. $modelo->descripcion = $data["descripcion"];
  34. // Mapear información de los modelos
  35. $hoy = new \DateTime();
  36. $doc->reference()
  37. ->update([
  38. ["path" => "sincronizado", "value" => "OK"],
  39. ["path" => "sincronizadoFecha", "value" => $hoy->format("Y-m-d H:i:s")],
  40. ["path" => "evidencias", "value" => $data["evidencias"]],
  41. ]);
  42. } catch(\Exception $e) {
  43. $this->stdout("Exception: {$e->getMessage()}\n");
  44. $doc->reference()
  45. ->update([
  46. ["path" => "sincronizado", "value" => "ERROR"],
  47. ["path" => "sincronizadoError", "value" => $e->getMessage()],
  48. ["path" => "sincronizadoErrorLine", "value" => $e->getLine()],
  49. ]);
  50. }
  51. }
  52. # Si los registros procesados son menores al límite, terminar
  53. if($c < $limite) {
  54. $continuar = false;
  55. }
  56. } while($continuar);
  57. }
  58. }