diff --git a/app/Http/Controllers/Repuve/AppController.php b/app/Http/Controllers/Repuve/AppController.php new file mode 100644 index 0000000..650a404 --- /dev/null +++ b/app/Http/Controllers/Repuve/AppController.php @@ -0,0 +1,64 @@ +file('apk'); + + // Eliminar APK anterior si existe + $existingFiles = Storage::disk('public')->files('apk'); + foreach ($existingFiles as $existingFile) { + Storage::disk('public')->delete($existingFile); + } + + // Guardar el nuevo APK + $fileName = 'repuve-app-' . now()->format('Y-m-d') . '.apk'; + $file->storeAs('apk', $fileName, 'public'); + + return ApiResponse::OK->response([ + 'message' => 'APK subido correctamente', + 'file' => $fileName, + ]); + } + + /** + * Descargar APK de la aplicación móvil + */ + public function download(): BinaryFileResponse + { + $files = Storage::disk('public')->files('apk'); + + if (empty($files)) { + abort(404, 'No hay APK disponible para descargar.'); + } + + $latestFile = end($files); + $path = Storage::disk('public')->path($latestFile); + + return response()->download($path); + } +} diff --git a/app/Http/Requests/Repuve/ApkStorageRequest.php b/app/Http/Requests/Repuve/ApkStorageRequest.php new file mode 100644 index 0000000..1edc7f3 --- /dev/null +++ b/app/Http/Requests/Repuve/ApkStorageRequest.php @@ -0,0 +1,29 @@ + 'required|file|max:102400', + ]; + } + + public function messages() + { + return [ + 'apk.required' => 'El archivo APK es obligatorio', + 'apk.file' => 'El archivo debe ser un archivo válido', + 'apk.max' => 'El archivo no debe superar los 100MB', + ]; + } +} diff --git a/database/seeders/RoleSeeder.php b/database/seeders/RoleSeeder.php index f7c073d..b0248f3 100644 --- a/database/seeders/RoleSeeder.php +++ b/database/seeders/RoleSeeder.php @@ -50,6 +50,12 @@ public function run(): void $rolePermissions = $this->onPermission('roles.permissions', 'Permisos de roles', $roles, 'api'); + // === APK === + $apk = PermissionType::updateOrCreate(['name' => 'App Móvil']); + + $apkUpload = $this->onPermission('apk.upload', 'Subir APK de la aplicación móvil', $apk, 'api'); + $apkDownload = $this->onPermission('apk.download', 'Descargar APK de la aplicación móvil', $apk, 'api'); + // === MÓDULOS === $modules = PermissionType::updateOrCreate(['name' => 'Módulos']); @@ -183,6 +189,8 @@ public function run(): void $packageIndex, $packageCreate, $packageEdit, $packageDestroy, $packageBoxTags, // Constancias $tagIndex, $tagCreate, $tagEdit, $tagDestroy, + //app + $apkUpload, $apkDownload, ); // Encargado @@ -207,6 +215,8 @@ public function run(): void $packageIndex, $packageCreate, $packageEdit, $packageDestroy, $packageBoxTags, // Constancias $tagIndex, $tagCreate, $tagEdit, $tagDestroy, $tagAssignToModule, + //app + $apkDownload, ); // Perito diff --git a/routes/api.php b/routes/api.php index 98a4916..f6fd0df 100644 --- a/routes/api.php +++ b/routes/api.php @@ -14,6 +14,7 @@ use App\Http\Controllers\Repuve\ExcelController; use App\Http\Controllers\Repuve\PackageController; use App\Http\Controllers\Repuve\TagsController; +use App\Http\Controllers\Repuve\AppController; use App\Http\Controllers\System\SettingsController; /** @@ -95,4 +96,9 @@ }); /** Rutas públicas */ -// Tus rutas públicas +Route::get('app/download', [AppController::class, 'download']); + +/** Rutas protegidas - App móvil */ +Route::middleware('auth:api')->group(function() { + Route::post('app/upload', [AppController::class, 'upload']); +});