Ver Fonte

avance yager postgres

ElPoteito há 2 anos atrás
pai
commit
e7e9b26aaa

+ 94 - 93
commands/EventoController.php

@@ -20,7 +20,7 @@ use yii\helpers\Json;
 class EventoController extends Controller {
 
   public function stdoutln($cadena) {
-    return $this->stdout($cadena."\n");
+    return $this->stdout($cadena . "\n");
   }
 
   public function cambiarFecha($string) {
@@ -42,39 +42,40 @@ class EventoController extends Controller {
     $usuarios = [];
     $dependencias = [];
 
-    foreach($refGrupos->documents() as $grupo) {
+    foreach ($refGrupos->documents() as $grupo) {
       $grupos[$grupo->id()] = $grupo->data();
     }
 
-    foreach($refUsuarios->documents() as $usuario) {
+    foreach ($refUsuarios->documents() as $usuario) {
       $usuarios[$usuario->id()] = $usuario->data();
     }
 
-    foreach($refDependencias->documents() as $dependencia) {
+    foreach ($refDependencias->documents() as $dependencia) {
       $dependencias[$dependencia->id()] = $dependencia->data();
     }
-    
+
     $ultimaFecha = null;
-    $limite = 1; // 1000;
+    $limite = 100; // 1000;
     $continuar = true;
     do {
       $this->stdout("Sincronizando ...");
       $ref = $firestore->collection("eventos")
-      //  ->where("sincronizado", "==", null)
+        // ->where("sincronizado", "==", null)
         ->orderBy("timestamp", "ASC")
         ->limit($limite);
 
-      if($ultimaFecha !== null) {
+      if ($ultimaFecha !== null) {
         $ref = $ref->startAt([$ultimaFecha]);
       }
 
       $c = 0; # Contador de registros procesados
-      foreach($ref->documents() as $doc) {
+      foreach ($ref->documents() as $doc) {
+        $this->stdoutln($doc->id());
         $c++;
         $data = $doc->data();
         $ultimaFecha = $data["timestamp"];
         $modelo = Evento::findOne(["firebaseId" => $doc->id()]);
-        if($modelo === null) {
+        if ($modelo === null) {
           $modelo = new Evento();
         }
         try {
@@ -82,6 +83,7 @@ class EventoController extends Controller {
           $modelo->nombre = $data["nombre"];
           $modelo->descripcion = $data["descripcion"];
           $modelo->ciudad = $data["ciudad"];
+          $modelo->redSocial = $data["redSocial"];
           $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data["timestamp"]);
           if ($creado !== false) {
             $modelo->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
@@ -102,29 +104,31 @@ class EventoController extends Controller {
           $modelo->firebaseId = $doc->id();
 
           if (!$modelo->save()) {
-            $this->stdoutln('Ocurrió un error al guardar un evento. '.Json::encode($modelo->getFirstErrors()));
+            $this->stdoutln('Ocurrió un error al guardar un evento. ' . Json::encode($modelo->getFirstErrors()));
             continue;
           }
 
-          foreach($data["redes"] as $red) {
-            $eventoRed = Red::find()
-              ->andWhere([
-                "idEvento" => $modelo->id,
-                "url" => $red->url
-              ])
-              ->one();
-            
-            if ($eventoRed === null) {
-              $eventoRed = new Red();
+          if (isset($data["redes"])) {
+            foreach ($data["redes"] as $red) {
+              $eventoRed = Red::find()
+                ->andWhere([
+                  "idEvento" => $modelo->id,
+                  "url" => $red["url"]
+                ])
+                ->one();
 
-              $eventoRed->idEvento = $modelo->id;
-              $eventoRed->key = $red->key;
-              $eventoRed->url = $red->url;
-              $eventoRed->redSocial = $red->redSocial;
+              if ($eventoRed === null) {
+                $eventoRed = new Red();
 
-              if (!$eventoRed->save()) {
-                $this->stdoutln('Ocurrió un error al guardar una red. '.Json::encode($eventoRed->getFirstErrors()));
-                continue;
+                $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;
+                }
               }
             }
           }
@@ -136,7 +140,7 @@ class EventoController extends Controller {
                 "accion" => $accion
               ])
               ->one();
-            
+
             if ($eventoAccion === null) {
               $eventoAccion = new EventoAccion();
 
@@ -144,15 +148,16 @@ class EventoController extends Controller {
               $eventoAccion->accion = $accion;
 
               if (!$eventoAccion->save()) {
-                $this->stdoutln('Ocurrió un error al guardar un evento-accion. '.Json::encode($eventoAccion->getFirstErrors()));
+                $this->stdoutln('Ocurrió un error al guardar un evento-accion. ' . Json::encode($eventoAccion->getFirstErrors()));
                 continue;
               }
             }
           }
 
+          //Grupos dentro de los eventos
           foreach ($data["grupos"] as $grupoEvento) {
             $grupoModelo = Grupo::findOne(["firebaseId" => $grupoEvento]);
-            if($grupoModelo === null && isset($grupos[$grupoEvento])) {
+            if ($grupoModelo === null && isset($grupos[$grupoEvento])) {
               $grupoModelo = new Grupo();
               $grupoModelo->creado = new Expression('now()');
               $grupoModelo->nombre = $grupos[$grupoEvento]["nombre"];
@@ -160,9 +165,8 @@ class EventoController extends Controller {
               $grupoModelo->firebaseId = $grupoEvento;
 
               if (!$grupoModelo->save()) {
-                $this->stdoutln('Ocurrió un error al guardar un grupo. '.Json::encode($grupoModelo->getFirstErrors()));
+                $this->stdoutln('Ocurrió un error al guardar un grupo. ' . Json::encode($grupoModelo->getFirstErrors()));
               }
-
             }
             if ($grupoModelo !== null) {
               $eventoGrupo = EventoGrupo::find()
@@ -174,12 +178,12 @@ class EventoController extends Controller {
 
               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()));
+
+                if (!$eventoGrupo->save()) {
+                  $this->stdoutln('Ocurrió un error al guardar un evento-grupo. ' . Json::encode($eventoGrupo->getFirstErrors()));
                 }
               }
             }
@@ -187,10 +191,11 @@ class EventoController extends Controller {
 
           foreach ($data["usuarios"] as $usuarioEvento) {
             $usuarioModelo = Usuario::findOne(["uid" => $usuarioEvento["uid"]]);
-            $usuarioRef = $usuarios[$usuarioEvento["uid"]];
+            $usuarioRef = isset($usuarios[$usuarioEvento["uid"]])
+              ? $usuarios[$usuarioEvento["uid"]] : null;
 
             // Usuarios
-            if ($usuarioModelo === null && isset($usuarios[$usuarioEvento["uid"]])) {
+            if ($usuarioModelo === null && $usuarioRef !== null) {
               $usuarioModelo = new Usuario();
               $usuarioModelo->uid = $usuarioRef["uid"];
               $usuarioModelo->nombre = $usuarioRef["nombre"];
@@ -214,29 +219,31 @@ class EventoController extends Controller {
               $usuarioModelo->verificado = $usuarioRef["verificado"];
               $usuarioModelo->creado = new Expression('now()');
 
-              if(!$usuarioModelo->save()) {
-                $this->stdoutln('Ocurrió un error al guardar un usuario. '.Json::encode($usuarioModelo->getFirstErrors()));
+              if (!$usuarioModelo->save()) {
+                $this->stdoutln('Ocurrió un error al guardar un usuario. ' . Json::encode($usuarioModelo->getFirstErrors()));
               }
             }
 
-            // Grupos
+            // UsuarioGrupo
             if ($usuarioModelo !== null && isset($usuarioRef["grupos"]) && isset($usuarioRef["grupos"][0])) {
               $modelGrupo = Grupo::findOne(['firebaseId' => $usuarioRef["grupos"][0]]);
-              $usuarioGrupo = UsuarioGrupo::find()
-                ->andWhere([
-                  "idUsuario" => $usuarioModelo->id,
-                  "idGrupo" => $modelGrupo->id
-                ])
-                ->one();
+              if (isset($modelGrupo)) {
+                $usuarioGrupo = UsuarioGrupo::find()
+                  ->andWhere([
+                    "idUsuario" => $usuarioModelo->id,
+                    "idGrupo" => $modelGrupo->id
+                  ])
+                  ->one();
 
-              if ($usuarioGrupo === null) {
-                $usuarioGrupo = new UsuarioGrupo();
+                if ($usuarioGrupo === null) {
+                  $usuarioGrupo = new UsuarioGrupo();
 
-                $usuarioGrupo->idUsuario = $usuarioModelo->id;
-                $usuarioGrupo->idGrupo = $modelGrupo->id;
+                  $usuarioGrupo->idUsuario = $usuarioModelo->id;
+                  $usuarioGrupo->idGrupo = $modelGrupo->id;
 
-                if(!$usuarioGrupo->save()) {
-                  $this->stdoutln('Ocurrió un error al guardar un usuario-grupo. '.Json::encode($usuarioGrupo->getFirstErrors()));
+                  if (!$usuarioGrupo->save()) {
+                    $this->stdoutln('Ocurrió un error al guardar un usuario-grupo. ' . Json::encode($usuarioGrupo->getFirstErrors()));
+                  }
                 }
               }
             }
@@ -244,30 +251,25 @@ class EventoController extends Controller {
             // 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()));
-                        }
-                      }
+              if (isset($resultados[$usuarioModelo->uid])) {
+                foreach ($resultados[$usuarioModelo->uid] as $_accion) {
+                  $resultadoModelo = Resultado::find()
+                    ->andWhere([
+                      "idUsuario" => $usuarioModelo->id,
+                      "idEvento" => $modelo->id,
+                      "accion" => $_accion
+                    ])
+                    ->exists();
+
+                  if (!$resultadoModelo) {
+                    $resultadoModelo = new Resultado();
+
+                    $resultadoModelo->idUsuario = $usuarioModelo->id;
+                    $resultadoModelo->idEvento = $modelo->id;
+                    $resultadoModelo->accion = $_accion;
+
+                    if (!$resultadoModelo->save()) {
+                      $this->stdoutln('Ocurrió un error al guardar un resultado. ' . Json::encode($resultadoModelo->getFirstErrors()));
                     }
                   }
                 }
@@ -276,12 +278,13 @@ class EventoController extends Controller {
 
             // Dependencias
             if ($usuarioModelo !== null && isset($usuarioRef["dependencias"]) && isset($usuarioRef["dependencias"][0])) {
-              foreach($usuarioRef["dependencias"] as $dependencia) {
+              foreach ($usuarioRef["dependencias"] as $dependencia) {
                 $dependenciaModel = Dependencia::findOne(["firebaseId" => $dependencia]);
                 if ($dependenciaModel === null) {
                   $dependenciaRef = $dependencias[$dependencia];
                   $dependenciaModel = new Dependencia();
 
+                  $dependenciaModel->firebaseId = $dependencia;
                   $dependenciaModel->nombre = $dependenciaRef['nombre'];
                   $dependenciaModel->descripcion = $dependenciaRef['descripcion'];
                   $dependenciaModel->estatus = $dependenciaRef['estatus'];
@@ -291,8 +294,8 @@ class EventoController extends Controller {
                     $dependenciaModel->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
                   }
 
-                  if(!$dependenciaModel->save()) {
-                    $this->stdoutln('Ocurrió un error al guardar una dependencia. '.Json::encode($dependenciaModel->getFirstErrors()));
+                  if (!$dependenciaModel->save()) {
+                    $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($dependenciaModel->getFirstErrors()));
                   }
                 }
 
@@ -303,15 +306,15 @@ class EventoController extends Controller {
                     "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()));
+                  if (!$usuarioDependencia->save()) {
+                    $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
                   }
                 }
               }
@@ -321,11 +324,11 @@ class EventoController extends Controller {
           $hoy = new \DateTime();
           $doc->reference()
             ->update([
-              ["path" => "sincronizado", "value" => "OK"],
-              ["path" => "sincronizadoFecha", "value" => $hoy->format("Y-m-d H:i:s")],
+              ["path" => "sincronizado", "value" => null],
+              // ["path" => "sincronizadoFecha", "value" => $hoy->format("Y-m-d H:i:s")],
             ]);
-            $this->stdoutln("Sincronizado correcto");
-        } catch(\Exception $e) {
+          $this->stdoutln("Sincronizado correcto");
+        } catch (\Exception $e) {
           $this->stdoutln("Exception: {$e->getMessage()}\n");
           $doc->reference()
             ->update([
@@ -337,11 +340,9 @@ 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);
   }
-
-}
+}

+ 4 - 0
migrations/m230131_203636_ajuste_dependencias.php

@@ -12,6 +12,8 @@ class m230131_203636_ajuste_dependencias extends Migration {
   public function safeUp() {
 
     $this->addColumn('Dependencia', 'estatus', $this->boolean());
+    $this->addColumn('Evento', 'redSocial', $this->string(100));
+    $this->alterColumn('Evento', 'nombre', $this->string(500));
   }
 
   /**
@@ -19,6 +21,8 @@ class m230131_203636_ajuste_dependencias extends Migration {
    */
   public function safeDown() {
     
+    $this->alterColumn('Evento', 'nombre', $this->string(255));
+    $this->dropColumn('Evento', 'redSocial');
     $this->dropColumn('Dependencia', 'estatus');
   }
 }

+ 4 - 3
models/Evento.php

@@ -20,6 +20,7 @@ use Yii;
  * @property string|null $eliminado
  * @property string|null $firebaseId
  * @property string|null $ciudad
+ * @property string|null $redSocial
  *
  * @property EventoAccion[] $eventoAccions
  * @property EventoGrupo[] $eventoGrupos
@@ -43,11 +44,10 @@ class Evento extends \yii\db\ActiveRecord {
       [['nombre', 'url'], 'required'],
       [['descripcion', 'fotoEvento'], 'string'],
       [['fechaInicio', 'fechaFinal', 'creado', 'modificado', 'eliminado'], 'safe'],
-      [['nombre'], 'string', 'max' => 255],
+      [['nombre'], 'string', 'max' => 500],
       [['tag', 'firebaseId'], 'string', 'max' => 50],
       [['url'], 'string', 'max' => 155],
-      [['ciudad'], 'string', 'max' => 100],
-      [['tag'], 'unique'],
+      [['ciudad', 'redSocial'], 'string', 'max' => 100],
     ];
   }
 
@@ -69,6 +69,7 @@ class Evento extends \yii\db\ActiveRecord {
       'eliminado' => 'Eliminado',
       'firebaseId' => 'Firebase ID',
       'ciudad' => 'Ciudad',
+      'redSocial' => 'Red Social',
     ];
   }
 

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

@@ -20,7 +20,8 @@ class Evento extends ModeloEvento {
       'modificado',
       'eliminado',
       'firebaseId',
-      'ciudad'
+      'ciudad',
+      'redSocial'
     ];
   }