From 95ef55470ead517753dcc1de62940eaf3c59efab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=ED=98=81=EC=84=B1?= Date: Fri, 30 Jan 2026 22:56:38 +0900 Subject: [PATCH] =?UTF-8?q?feat:=EC=95=B1=EB=B2=84=EC=A0=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20(?= =?UTF-8?q?=EB=AA=A8=EB=8B=AC,=20APK=20=ED=8C=8C=EC=9D=BC=20=EA=B5=90?= =?UTF-8?q?=EC=B2=B4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 버전코드/버전명/플랫폼/변경사항/강제업데이트/APK 파일 수정 가능 - 새 APK 업로드 시 기존 파일 삭제 후 교체 - 수정 모달 UI, PUT 라우트 추가 Co-Authored-By: Claude Opus 4.5 --- app/Http/Controllers/AppVersionController.php | 24 ++++ app/Services/AppVersionService.php | 24 ++++ resources/views/app-versions/index.blade.php | 110 +++++++++++++++++- routes/web.php | 1 + 4 files changed, 153 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/AppVersionController.php b/app/Http/Controllers/AppVersionController.php index b264fa6c..58ae8096 100644 --- a/app/Http/Controllers/AppVersionController.php +++ b/app/Http/Controllers/AppVersionController.php @@ -47,6 +47,30 @@ public function store(Request $request): RedirectResponse ->with('success', '새 버전이 등록되었습니다.'); } + /** + * 버전 수정 + */ + public function update(Request $request, int $id): RedirectResponse + { + $request->validate([ + 'version_code' => "required|integer|min:1|unique:app_versions,version_code,{$id}", + 'version_name' => 'required|string|max:20', + 'platform' => 'required|in:android,ios', + 'release_notes' => 'nullable|string', + 'force_update' => 'nullable|boolean', + 'apk_file' => 'nullable|file|max:204800', + ]); + + $this->appVersionService->update( + $id, + $request->only(['version_code', 'version_name', 'platform', 'release_notes', 'force_update']), + $request->file('apk_file') + ); + + return redirect()->route('app-versions.index') + ->with('success', '버전이 수정되었습니다.'); + } + /** * 활성 토글 */ diff --git a/app/Services/AppVersionService.php b/app/Services/AppVersionService.php index 2276acd1..3fb2febd 100644 --- a/app/Services/AppVersionService.php +++ b/app/Services/AppVersionService.php @@ -40,6 +40,30 @@ public function store(array $data, ?UploadedFile $apkFile = null): AppVersion return AppVersion::create($data); } + /** + * 버전 수정 + */ + public function update(int $id, array $data, ?UploadedFile $apkFile = null): AppVersion + { + $version = AppVersion::findOrFail($id); + + if ($apkFile) { + // 기존 APK 삭제 + if ($version->apk_path && Storage::disk('app_releases')->exists($version->apk_path)) { + Storage::disk('app_releases')->delete($version->apk_path); + } + + $data['apk_original_name'] = $apkFile->getClientOriginalName(); + $data['apk_size'] = $apkFile->getSize(); + $data['apk_path'] = $apkFile->store('apk', 'app_releases'); + } + + $data['updated_by'] = auth()->id(); + $version->update($data); + + return $version; + } + /** * 활성 토글 */ diff --git a/resources/views/app-versions/index.blade.php b/resources/views/app-versions/index.blade.php index e5526dcf..429f8ead 100644 --- a/resources/views/app-versions/index.blade.php +++ b/resources/views/app-versions/index.blade.php @@ -166,12 +166,23 @@ class="rounded border-gray-300 text-blue-600 shadow-sm focus:ring-blue-500"> @elseif(!$isTrashed) -
- @csrf - @method('DELETE') - -
+
+ +
+ @csrf + @method('DELETE') + +
+
@endif @@ -192,4 +203,91 @@ class="rounded border-gray-300 text-blue-600 shadow-sm focus:ring-blue-500"> @endif +{{-- 수정 모달 --}} + + + @endsection diff --git a/routes/web.php b/routes/web.php index a1e9d114..011e9f9c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -356,6 +356,7 @@ Route::prefix('app-versions')->name('app-versions.')->group(function () { Route::get('/', [AppVersionController::class, 'index'])->name('index'); Route::post('/', [AppVersionController::class, 'store'])->name('store'); + Route::put('/{id}', [AppVersionController::class, 'update'])->name('update'); Route::post('/{id}/toggle', [AppVersionController::class, 'toggleActive'])->name('toggle'); Route::delete('/{id}', [AppVersionController::class, 'destroy'])->name('destroy'); Route::post('/{id}/restore', [AppVersionController::class, 'restore'])->name('restore');