Przeglądaj źródła

Se agregaron columnas a tabla media

Jose Cienfuegos 8 miesięcy temu
rodzic
commit
accbcae871

+ 26 - 0
migrations/m240820_185211_columnas_tabla_media.php

@@ -0,0 +1,26 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m240820_185211_columnas_tabla_media
+ */
+class m240820_185211_columnas_tabla_media extends Migration
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function safeUp()
+    {
+        $this->addColumn('Media', 'uuid', $this->string(50));
+        $this->addColumn('Media', 'extension', $this->string());
+        $this->addColumn('Media', 'ubicacionFisica', $this->string());
+    }
+
+    public function safeDown()
+    {
+       $this->dropColumn('Media', 'uuid');
+       $this->dropColumn('Media', 'extension');
+       $this->dropColumn('Media', 'ubicacionFisica');
+    }
+}

+ 3 - 2
models/Media.php

@@ -22,7 +22,7 @@ use Yii;
  * 
  * @property Usuario $usuario
  */
-class Media extends ModeloBase {
+class Media extends \yii\db\ActiveRecord {
   /**
    * {@inheritdoc}
    */
@@ -37,7 +37,7 @@ class Media extends ModeloBase {
     return [
       [['nombre'], 'required'],
       [['creado', 'modificado', 'eliminado'], 'safe'],
-      [['idUsuario'], 'string', 'max' => 50],
+      [['idUsuario', 'extension'], 'string', 'max' => 50],
       [['nombre', 'uuid', 'size', 'mimetype', 'ruta'], 'string', 'max' => 100],
       [['descripcion'], 'string', 'max' => 500],
       [['idUsuario'], 'exist', 'skipOnError' => true, 'targetClass' => Usuario::class, 'targetAttribute' => ['idUsuario' => 'id']],
@@ -60,6 +60,7 @@ class Media extends ModeloBase {
       'creado' => 'Creado',
       'modificado' => 'Modificado',
       'eliminado' => 'Eliminado',
+      'extension' => 'Extension',
     ];
   }
 

+ 77 - 23
modules/v1/controllers/MediaController.php

@@ -5,6 +5,12 @@ namespace v1\controllers;
 use common\data\Respuesta;
 use common\rest\AuthController;
 use yii\db\Expression;
+use Ramsey\Uuid\Uuid;
+use v1\models\Media;
+use yii\web\NotFoundHttpException;
+use yii\web\Response;
+use yii\web\UploadedFile;
+use Yii;
 
 class MediaController extends AuthController {
 
@@ -34,19 +40,63 @@ class MediaController extends AuthController {
   }
 
   public function actionGuardar() {
-    $id = intval($this->req->getBodyParam("id", null));
-    $modelo = null;
+    if (!$this->req->isPost) {
+      throw new NotFoundHttpException();
+    }
 
-    if($id > 0) {
-      $modelo = $this->modelClass::findOne($id);
+    $usuario = \Yii::$app->getUser()->getIdentity();
+
+    $this->res->format = Response::FORMAT_JSON;
+    $archivo = UploadedFile::getInstanceByName('archivo');
+    if ($archivo === null) {
+      return (new Respuesta())
+        ->esError()
+        ->mensaje("No se recibió el archivo");
+    }
+
+    $sec = \Yii::$app->getSecurity();
+    $base = \Yii::getAlias("@app") . "/web/assets/";
+
+    $ruta = "recurso/";
+    if (!is_dir($base . $ruta)) {
+      mkdir($base . $ruta);
+    }
+
+    $ruta .= date("Y/");
+    if (!is_dir($base . $ruta)) {
+      mkdir($base . $ruta);
     }
-    if($modelo === null) {
-      $modelo = new $this->modelClass();
-      $modelo->creado = new Expression('now()');
-    } else {
-      $modelo->modificado = new Expression('now()');
+
+    $ruta .= date("m/");
+    if (!is_dir($base . $ruta)) {
+      mkdir($base . $ruta);
+    }
+
+    $dominio = \Yii::$app->getRequest()->getHostInfo() . "/assets/";
+    do {
+      $nombreArchivo = str_replace("-", "", $ruta . $sec->generateRandomString());
+      if ($archivo->extension) {
+        $nombreArchivo .= "." . $archivo->extension;
+      }
+    } while (is_file($base . $nombreArchivo));
+    if (!$archivo->saveAs($base . $nombreArchivo)) {
+      return (new Respuesta())
+        ->mensaje("Ocurrió un problema al guardar el archivo");
     }
 
+    $uuid = Uuid::uuid4();
+
+    $modelo = new Media();
+
+    $modelo->uuid();
+    $modelo->creado = new Expression('now()');
+    $modelo->idUsuario = $usuario->id;
+    $modelo->uuid = $uuid->toString();
+    $modelo->nombre = $archivo->name;
+    $modelo->mimetype = $archivo->type;
+    $modelo->extension = $archivo->extension;
+    $modelo->ruta = $dominio . $nombreArchivo;
+
     $modelo->load($this->req->getBodyParams(), '');
     if (!$modelo->save()) {
       return (new Respuesta($modelo))
@@ -54,29 +104,33 @@ class MediaController extends AuthController {
     }
 
     $modelo->refresh();
-    return (new Respuesta($modelo))
-      ->mensaje("Media guardada");
+
+    return (new Respuesta())
+      ->mensaje("Archivo subido correctamente")
+      ->detalle($modelo);
   }
 
   public function actionEliminar() {
-    $id = intval($this->req->getBodyParam("id", null));
+    $id = trim($this->req->getBodyParam("id", null));
+    $user = Yii::$app->getUser()->getId();
     $modelo = null;
+    $entro = false;
 
-    if($id > 0) {
-      $modelo = $this->modelClass::findOne(["id" => $id]);
+    if (!empty($id)) {
+      $entro = true;
+      $modelo = Media::find()->andWhere(["id" => $id])->one();
     }
-    if($modelo === null) {
-      return (new Respuesta())
-        ->esError()
-        ->mensaje("Media no encontrada");
+
+    if ($modelo === null) {
+      return (new Respuesta(["id" => $id, "entro" => $entro, "modelo" => $modelo]))->esError()->mensaje("Archivo no encontrado");
     }
+
+    $modelo->idUsuario = $user;
     $modelo->eliminado = new Expression('now()');
-    if(!$modelo->save()) {
+    if (!$modelo->save()) {
       return (new Respuesta($modelo))
-        ->mensaje("No se pudo eliminar Media");
+        ->mensaje("No se pudo eliminar Archivo");
     }
-
-    return (new Respuesta())
-      ->mensaje("Media eliminada");
+    return (new Respuesta())->mensaje("Archivo eliminado");
   }
 }