Jelajahi Sumber

Avance sincronización firebase-postgres

ElPoteito 3 tahun lalu
induk
melakukan
25c81c90da

+ 178 - 22
commands/EventoController.php

@@ -3,10 +3,15 @@
 namespace app\commands;
 
 use app\components\FirebaseHelper;
+use v1\models\Dependencia;
 use v1\models\Evento;
+use v1\models\EventoAccion;
 use v1\models\EventoGrupo;
 use v1\models\Grupo;
+use v1\models\Red;
+use v1\models\Resultado;
 use v1\models\Usuario;
+use v1\models\UsuarioDependencia;
 use v1\models\UsuarioGrupo;
 use yii\console\Controller;
 use yii\db\Expression;
@@ -18,15 +23,24 @@ class EventoController extends Controller {
     return $this->stdout($cadena."\n");
   }
 
+  public function cambiarFecha($string) {
+    $formato = "D M d Y H:i:s P";
+    $fecha = \DateTime::createFromFormat($formato, $string);
+
+    return $fecha;
+  }
+
   public function actionSincronizar() {
     $firebase = new FirebaseHelper();
     $firestore = $firebase->firestore();
 
     $refGrupos = $firestore->collection("grupos");
     $refUsuarios = $firestore->collection("usuarios");
+    $refDependencias = $firestore->collection("dependencias");
 
     $grupos = [];
     $usuarios = [];
+    $dependencias = [];
 
     foreach($refGrupos->documents() as $grupo) {
       $grupos[$grupo->id()] = $grupo->data();
@@ -35,11 +49,15 @@ class EventoController extends Controller {
     foreach($refUsuarios->documents() as $usuario) {
       $usuarios[$usuario->id()] = $usuario->data();
     }
+
+    foreach($refDependencias->documents() as $dependencia) {
+      $dependencias[$dependencia->id()] = $dependencia->data();
+    }
     
     $ultimaFecha = null;
     $limite = 1; // 1000;
     $continuar = true;
-    // do {
+    do {
       $this->stdout("Sincronizando ...");
       $ref = $firestore->collection("eventos")
       //  ->where("sincronizado", "==", null)
@@ -64,11 +82,15 @@ class EventoController extends Controller {
           $modelo->nombre = $data["nombre"];
           $modelo->descripcion = $data["descripcion"];
           $modelo->ciudad = $data["ciudad"];
-          $fechaInicio = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data["fechaInicio"]);
+          $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data["timestamp"]);
+          if ($creado !== false) {
+            $modelo->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
+          }
+          $fechaInicio = $this->cambiarFecha($data["fechaInicio"]);
           if ($fechaInicio !== false) {
             $modelo->fechaInicio = $fechaInicio->format(\DateTime::RFC3339_EXTENDED);
           }
-          $fechaFinal = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data["fechaFinal"]);
+          $fechaFinal = $this->cambiarFecha($data["fechaFinal"]);
           if ($fechaFinal !== false) {
             $modelo->fechaFinal = $fechaFinal->format(\DateTime::RFC3339_EXTENDED);
           }
@@ -84,6 +106,50 @@ class EventoController extends Controller {
             continue;
           }
 
+          foreach($data["redes"] as $red) {
+            $eventoRed = Red::find()
+              ->andWhere([
+                "idEvento" => $modelo->id,
+                "url" => $red->url
+              ])
+              ->one();
+            
+            if ($eventoRed === null) {
+              $eventoRed = new Red();
+
+              $eventoRed->idEvento = $modelo->id;
+              $eventoRed->key = $red->key;
+              $eventoRed->url = $red->url;
+              $eventoRed->redSocial = $red->redSocial;
+
+              if (!$eventoRed->save()) {
+                $this->stdoutln('Ocurrió un error al guardar una red. '.Json::encode($eventoRed->getFirstErrors()));
+                continue;
+              }
+            }
+          }
+
+          foreach ($data["accion"] as $accion) {
+            $eventoAccion = EventoAccion::find()
+              ->andWhere([
+                "idEvento" => $modelo->id,
+                "accion" => $accion
+              ])
+              ->one();
+            
+            if ($eventoAccion === null) {
+              $eventoAccion = new EventoAccion();
+
+              $eventoAccion->idEvento = $modelo->id;
+              $eventoAccion->accion = $accion;
+
+              if (!$eventoAccion->save()) {
+                $this->stdoutln('Ocurrió un error al guardar un evento-accion. '.Json::encode($eventoAccion->getFirstErrors()));
+                continue;
+              }
+            }
+          }
+
           foreach ($data["grupos"] as $grupoEvento) {
             $grupoModelo = Grupo::findOne(["firebaseId" => $grupoEvento]);
             if($grupoModelo === null && isset($grupos[$grupoEvento])) {
@@ -99,25 +165,37 @@ class EventoController extends Controller {
 
             }
             if ($grupoModelo !== null) {
-              $eventoGrupo = new EventoGrupo();
-  
-              $eventoGrupo->idEvento = $modelo->id;
-              $eventoGrupo->idGrupo = $grupoModelo->id;
-  
-              if(!$eventoGrupo->save()) {
-                $this->stdoutln('Ocurrió un error al guardar un evento-grupo. '.Json::encode($eventoGrupo->getFirstErrors()));
+              $eventoGrupo = EventoGrupo::find()
+                ->andWhere([
+                  "idEvento" => $modelo->id,
+                  "idGrupo" => $grupoModelo->id
+                ])
+                ->one();
+
+              if ($eventoGrupo === null) {
+                $eventoGrupo = new EventoGrupo();
+    
+                $eventoGrupo->idEvento = $modelo->id;
+                $eventoGrupo->idGrupo = $grupoModelo->id;
+    
+                if(!$eventoGrupo->save()) {
+                  $this->stdoutln('Ocurrió un error al guardar un evento-grupo. '.Json::encode($eventoGrupo->getFirstErrors()));
+                }
               }
             }
           }
 
           foreach ($data["usuarios"] as $usuarioEvento) {
             $usuarioModelo = Usuario::findOne(["uid" => $usuarioEvento["uid"]]);
+            $usuarioRef = $usuarios[$usuarioEvento["uid"]];
+
+            // Usuarios
             if ($usuarioModelo === null && isset($usuarios[$usuarioEvento["uid"]])) {
               $usuarioModelo = new Usuario();
-              $usuarioRef = $usuarios[$usuarioEvento["uid"]];
+              $usuarioModelo->uid = $usuarioRef["uid"];
               $usuarioModelo->nombre = $usuarioRef["nombre"];
-              if (isset($usuarioRef["correo"])) {
-                $usuarioModelo->email = $usuarioRef["correo"];
+              if (isset($usuarioRef["email"])) {
+                $usuarioModelo->email = $usuarioRef["email"];
               }
               $usuarioModelo->telefono = $usuarioRef["telefono"];
               $usuarioModelo->facebook = $usuarioRef["facebook"];
@@ -141,25 +219,103 @@ class EventoController extends Controller {
               }
             }
 
-            if ($usuarioModelo !== null && isset($usuarios[$usuarioEvento["uid"]]) && isset($usuarios[$usuarioEvento["uid"]]["grupo"]) && isset($usuarios[$usuarioEvento["uid"]]["grupo"][0])) {
-              $modelGrupo = Grupo::findOne(['firebaseId' => $usuarios[$usuarioEvento["uid"]]["grupo"][0]]);
-
+            // Grupos
+            if ($usuarioModelo !== null && isset($usuarioRef["grupos"]) && isset($usuarioRef["grupos"][0])) {
+              $modelGrupo = Grupo::findOne(['firebaseId' => $usuarioRef["grupos"][0]]);
               $usuarioGrupo = UsuarioGrupo::find()
-                ->andWhere(["idUsuario" => $usuarioModelo->id])
-                ->andWhere(["idGrupo" => $modelGrupo->id])
+                ->andWhere([
+                  "idUsuario" => $usuarioModelo->id,
+                  "idGrupo" => $modelGrupo->id
+                ])
                 ->one();
 
               if ($usuarioGrupo === null) {
                 $usuarioGrupo = new UsuarioGrupo();
 
                 $usuarioGrupo->idUsuario = $usuarioModelo->id;
-                $usuarioGrupo->idGrupo = $usuarioGrupo->id;
+                $usuarioGrupo->idGrupo = $modelGrupo->id;
 
                 if(!$usuarioGrupo->save()) {
                   $this->stdoutln('Ocurrió un error al guardar un usuario-grupo. '.Json::encode($usuarioGrupo->getFirstErrors()));
                 }
               }
             }
+
+            // Resultados
+            if ($usuarioModelo !== null && isset($data["resultado"])) {
+              $resultados = $data["resultado"];
+              for ($i = 0; $i < count($resultados); $i++) {
+                $res = count($resultados[$usuarioModelo->uid]);
+                if ($res > 0) {
+                  foreach($resultados[$usuarioModelo->uid] as $acciones) {
+                    if (isset($acciones) && isset($acciones[0])){
+                      $resultadoModelo = Resultado::find()
+                        ->andWhere([
+                          "idUsuario" => $usuarioModelo->id,
+                          "idEvento" => $modelo->id,
+                          "accion" => $acciones
+                        ])
+                        ->one();
+                      
+                      if ($resultadoModelo === null) {
+                        $resultadoModelo = new Resultado();
+
+                        $resultadoModelo->idUsuario = $usuarioModelo->id;
+                        $resultadoModelo->idEvento = $modelo->id;
+                        $resultadoModelo->accion = $acciones;
+
+                        if(!$resultadoModelo->save()) {
+                          $this->stdoutln('Ocurrió un error al guardar un resultado. '.Json::encode($resultadoModelo->getFirstErrors()));
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+
+            // Dependencias
+            if ($usuarioModelo !== null && isset($usuarioRef["dependencias"]) && isset($usuarioRef["dependencias"][0])) {
+              foreach($usuarioRef["dependencias"] as $dependencia) {
+                $dependenciaModel = Dependencia::findOne(["firebaseId" => $dependencia]);
+                if ($dependenciaModel === null) {
+                  $dependenciaRef = $dependencias[$dependencia];
+                  $dependenciaModel = new Dependencia();
+
+                  $dependenciaModel->nombre = $dependenciaRef['nombre'];
+                  $dependenciaModel->descripcion = $dependenciaRef['descripcion'];
+                  $dependenciaModel->estatus = $dependenciaRef['estatus'];
+
+                  $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $dependenciaRef["timestamp"]);
+                  if ($creado !== false) {
+                    $dependenciaModel->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
+                  }
+
+                  if(!$dependenciaModel->save()) {
+                    $this->stdoutln('Ocurrió un error al guardar una dependencia. '.Json::encode($dependenciaModel->getFirstErrors()));
+                  }
+                }
+
+                //UsuarioDependencia
+                $usuarioDependencia = UsuarioDependencia::find()
+                  ->andWhere([
+                    "idUsuario" => $usuarioModelo->id,
+                    "idDependencia" => $dependenciaModel->id
+                  ])
+                  ->one();
+                
+                if ($usuarioDependencia === null) {
+                  $usuarioDependencia = new UsuarioDependencia();
+
+                  $usuarioDependencia->idUsuario = $usuarioModelo->id;
+                  $usuarioDependencia->idDependencia = $dependenciaModel->id;
+
+                  if(!$usuarioDependencia->save()) {
+                    $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. '.Json::encode($usuarioDependencia->getFirstErrors()));
+                  }
+                }
+              }
+            }
           }
 
           $hoy = new \DateTime();
@@ -181,11 +337,11 @@ class EventoController extends Controller {
       }
 
       # Si los registros procesados son menores al límite, terminar
-      /* if($c < $limite) {
+      if($c < $limite) {
         $continuar = false;
-      } */
+      }
 
-    // } while($continuar);
+    } while($continuar);
   }
 
 }

+ 24 - 0
migrations/m230131_203636_ajuste_dependencias.php

@@ -0,0 +1,24 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m230131_203636_ajuste_dependencias
+ */
+class m230131_203636_ajuste_dependencias extends Migration {
+  /**
+   * {@inheritdoc}
+   */
+  public function safeUp() {
+
+    $this->addColumn('Dependencia', 'estatus', $this->boolean());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function safeDown() {
+    
+    $this->dropColumn('Dependencia', 'estatus');
+  }
+}

+ 51 - 48
models/Dependencia.php

@@ -14,61 +14,64 @@ use Yii;
  * @property string|null $modificado
  * @property string|null $eliminado
  * @property string|null $firebaseId
+ * @property bool|null $estatus
  *
  * @property Usuario[] $usuarios
  * @property UsuarioDependencia[] $usuariosDependencias
  */
 class Dependencia extends \yii\db\ActiveRecord {
-	/**
-	 * {@inheritdoc}
-	 */
-	public static function tableName() {
-		return 'Dependencia';
-	}
+  /**
+   * {@inheritdoc}
+   */
+  public static function tableName() {
+    return 'Dependencia';
+  }
 
-	/**
-	 * {@inheritdoc}
-	 */
-	public function rules() {
-		return [
-			[['nombre'], 'required'],
-			[['descripcion'], 'string'],
-			[['creado', 'modificado', 'eliminado'], 'safe'],
-			[['nombre'], 'string', 'max' => 100],
-			[['firebaseId'], 'string', 'max' => 50],
-		];
-	}
+  /**
+   * {@inheritdoc}
+   */
+  public function rules() {
+    return [
+      [['nombre'], 'required'],
+      [['descripcion'], 'string'],
+      [['creado', 'modificado', 'eliminado'], 'safe'],
+      [['estatus'], 'boolean'],
+      [['nombre'], 'string', 'max' => 100],
+      [['firebaseId'], 'string', 'max' => 50],
+    ];
+  }
 
-	/**
-	 * {@inheritdoc}
-	 */
-	public function attributeLabels() {
-		return [
-			'id' => 'ID',
-			'nombre' => 'Nombre',
-			'descripcion' => 'Descripcion',
-			'creado' => 'Creado',
-			'modificado' => 'Modificado',
-			'eliminado' => 'Eliminado',
-			'firebaseId' => 'Firebase ID',
-		];
-	}
+  /**
+   * {@inheritdoc}
+   */
+  public function attributeLabels() {
+    return [
+      'id' => 'ID',
+      'nombre' => 'Nombre',
+      'descripcion' => 'Descripcion',
+      'creado' => 'Creado',
+      'modificado' => 'Modificado',
+      'eliminado' => 'Eliminado',
+      'firebaseId' => 'Firebase ID',
+      'estatus' => 'Estatus',
+    ];
+  }
 
-	/**
-	 * Gets query for [[usuarios]].
-	 *
-	 * @return \yii\db\ActiveQuery
-	 */
-	public function getUsuarios() {
-		return $this->hasMany(Usuario::className(), ['id' => 'idUsuario'])->viaTable('UsuarioDependencia', ['idDependencia' => 'id']);
-	}
+  /**
+   * Gets query for [[usuarios]].
+   *
+   * @return \yii\db\ActiveQuery
+   */
+  public function getUsuarios() {
+    return $this->hasMany(Usuario::className(), ['id' => 'idUsuario'])->viaTable('UsuarioDependencia', ['idDependencia' => 'id']);
+  }
 
-	/**
-	 * Gets query for [[usuarioDependencias]].
-	 *
-	 * @return \yii\db\ActiveQuery
-	 */
-	public function getUsuariosDependencias() {
-		return $this->hasMany(UsuarioDependencia::className(), ['idDependencia' => 'id']);
-	}
+  /**
+   * Gets query for [[usuarioDependencias]].
+   *
+   * @return \yii\db\ActiveQuery
+   */
+  public function getUsuariosDependencias() {
+    return $this->hasMany(UsuarioDependencia::className(), ['idDependencia' => 'id']);
+  }
 }

+ 2 - 1
modules/v1/models/Dependencia.php

@@ -14,7 +14,8 @@ class Dependencia extends ModeloDependencia {
 			'creado',
 			'modificado',
 			'eliminado',
-      'firebaseId'
+      'firebaseId',
+      'estatus'
     ];
   }