Bläddra i källkod

Enhance TareasController with error handling, update and enable/delete task functionality, and modify getAllTareas method to include subject and task type information

EmilianoChavarria 1 månad sedan
förälder
incheckning
62aa607498

+ 138 - 5
Back/backendP-Educativa/app/Http/Controllers/Api/TareasController.php

@@ -26,14 +26,28 @@ class TareasController extends Controller
 
     public function getAllTareas()
     {
-        $tareas = DB::table('tareas')
-            ->where('idEscuela', 'COlEGIOABC')
-            ->orderBy('fechaPublicacion', 'desc')
-            ->get();
+        try {
+            $tareas = DB::table('tareas as t')
+                ->join('materias as m', 't.idMateriaTarea', '=', 'm.idMateria')
+                ->join('tareas_tipos as tt', 't.idTipoTarea', '=', 'tt.idTareasTipos')
+                ->select(
+                    'm.nombreMateria as materia',
+                    'tt.nombreTareasTipos as tipo_tarea',
+                    't.*'
+                )
+                ->distinct()
+                ->orderBy('t.fechaPublicacion', 'desc')
+                ->get();
 
-        return response()->json($tareas);
+            return response()->json($tareas);
+        } catch (\Exception $e) {
+            return response()->json([
+                'mensaje' => 'Error al obtener las tareas: ' . $e->getMessage()
+            ], 500);
+        }
     }
 
+
     public function crear(Request $request)
     {
 
@@ -112,6 +126,89 @@ class TareasController extends Controller
         }
     }
 
+    public function actualizar(Request $request, $idTarea)
+    {
+        $carpetaBase = config('custom.s3_carpeta_base');
+
+        $periodoService = new PeriodoService();
+        $carpetaPeriodo = $periodoService->obtenerPeriodoActivoNombre();
+
+        $rutaBucket = 'tareas/';
+
+        try {
+            // Recuperar tarea existente
+            $tareaExistente = DB::table('tareas')->where('idTarea', $idTarea)->first();
+            if (!$tareaExistente) {
+                return response()->json(['mensaje' => 'Tarea no encontrada'], 404);
+            }
+
+            // Adjuntos (si vienen)
+            $adjuntos = json_decode($tareaExistente->adjuntoTarea ?? '[]', true);
+
+            if ($request->has('bases64')) {
+                foreach ($request->bases64 as $file) {
+                    $fileInfo = explode(';', $file['base64'])[0];
+                    $fileExtension = explode('/', $fileInfo)[1];
+
+                    switch ($fileExtension) {
+                        case 'vnd.openxmlformats-officedocument.wordprocessingml.document':
+                            $fileExtension = 'docx';
+                            break;
+                        case 'vnd.openxmlformats-officedocument.spreadsheetml.sheet':
+                            $fileExtension = 'xlsx';
+                            break;
+                        case 'vnd.openxmlformats-officedocument.presentationml.presentation':
+                            $fileExtension = 'pptx';
+                            break;
+                    }
+
+                    $fileData = substr($file['base64'], strpos($file['base64'], ',') + 1);
+                    $fileData = str_replace(' ', '+', $fileData);
+                    $contenidoArchivo = base64_decode($fileData);
+
+                    $fileName = $file['id'] . '-' . $file['nombre'] . '.' . $fileExtension;
+                    $pathS3 = $carpetaBase . '/' . $carpetaPeriodo . '/' . $rutaBucket . $fileName;
+
+                    Storage::disk('s3')->put($pathS3, $contenidoArchivo, 'public');
+
+                    $adjuntos[] = [
+                        'id' => $file['id'],
+                        'nombre' => $file['nombre'],
+                        'ruta' => Storage::disk('s3')->url($pathS3)
+                    ];
+                }
+            }
+
+            // Actualizar tarea en DB
+            DB::table('tareas')
+                ->where('idTarea', $idTarea)
+                ->update([
+                    'idMateriaTarea' => $request->idMateriaTarea ?? $tareaExistente->idMateriaTarea,
+                    'idTipoTarea' => $request->idTipoTarea ?? $tareaExistente->idTipoTarea,
+                    'tituloTarea' => $request->tituloTarea ?? $tareaExistente->tituloTarea,
+                    'descripcionTarea' => $request->descripcionTarea ?? $tareaExistente->descripcionTarea,
+                    'vinculoTarea' => $request->vinculoTarea ?? $tareaExistente->vinculoTarea,
+                    'adjuntoTarea' => json_encode($adjuntos),
+                    'fechaPublicacion' => $request->fechaPublicacion ?? $tareaExistente->fechaPublicacion,
+                    'fechaEntrega' => $request->fechaEntrega ?? $tareaExistente->fechaEntrega,
+                    'entregaDigital' => $request->entregaDigital ?? $tareaExistente->entregaDigital,
+                    'calificacion' => $request->calificacion ?? $tareaExistente->calificacion,
+                    'retroalimentacion' => $request->retroalimentacion ?? $tareaExistente->retroalimentacion,
+                    'descargarTareas' => $request->descargarTareas ?? $tareaExistente->descargarTareas,
+                    'estado' => $request->estado ?? $tareaExistente->estado,
+                    'idUsuario' => $request->idUsuario ?? $tareaExistente->idUsuario,
+                ]);
+
+            return response()->json([
+                'mensaje' => 'Tarea actualizada exitosamente',
+                'idTarea' => $idTarea
+            ], 200);
+        } catch (\Exception $e) {
+            return response()->json(['mensaje' => 'Error al actualizar la tarea: ' . $e->getMessage()], 500);
+        }
+    }
+
+
     public function obtenerAlumnosPorMateria($idMateria)
     {
         // Primero obtenemos el grado o grupo relacionado con la materia
@@ -185,5 +282,41 @@ class TareasController extends Controller
         }
     }
 
+    public function habilitar($id)
+    {
+        
+        try {
+            //code...
+            DB::table('tareas')
+                ->updateOrInsert(
+                    ['idTarea' => $id],
+                    ['estado' => 'Completa']
+                );
+
+            return response()->json(['mensaje' => 'Tarea habilitada exitosamente'], 201);
+        } catch (\Exception $e) {
+            //throw $th;
+            return response()->json(['mensaje' => 'Error al habilitar la tarea: ' . $e->getMessage()], 500);
+        }
+
+    }
+    public function eliminar($id)
+    {
+        try {
+            //code...
+            DB::table('tareas')
+                ->updateOrInsert(
+                    ['idTarea' => $id],
+                    ['estado' => 'Eliminada']
+                );
+
+            return response()->json(['mensaje' => 'Tarea eliminada exitosamente'], 201);
+        } catch (\Exception $e) {
+            //throw $th;
+            return response()->json(['mensaje' => 'Error al eliminar la tarea: ' . $e->getMessage()], 500);
+        }
+
+    }
+
 
 }

+ 4 - 0
Back/backendP-Educativa/routes/api.php

@@ -292,10 +292,14 @@ Route::middleware(['auth:sanctum'])->group(function () {
 
 
     // Rutas para tareas
+    Route::get('/getAllTareas', [TareasController::class, 'getAllTareas']);
     Route::post('/crearTarea', [TareasController::class, 'crear']);
+    Route::put('/tareas/{idTarea}', [TareasController::class, 'actualizar']);
     Route::get('/materias/{id}/alumnos', [TareasController::class, 'obtenerAlumnosPorMateria']);
     Route::post('/tareas-usuarios', [TareasController::class, 'asignarTareaUsuario']);
     Route::get('/tareas/usuario/{idUsuario}', [TareasController::class, 'getTareasPorUsuario']);
+    Route::put('tareaDelete/{id}', [TareasController::class, 'eliminar']);
+    Route::put('tareaEnable/{id}', [TareasController::class, 'habilitar']);
 
 
 });