feat(01-02): create MemberNoteController and routes

- MemberNoteController with index() and store() methods
- StoreNoteRequest with Traditional Chinese validation messages
- Routes registered at admin.members.notes.index/store
- JSON responses for AJAX consumption in Phase 2
- DB::transaction wrapper with AuditLogger::log
This commit is contained in:
2026-02-13 12:09:09 +08:00
parent 181c395b3c
commit e8bef5bc06
3 changed files with 94 additions and 0 deletions

View File

@@ -27,6 +27,7 @@ use App\Http\Controllers\Admin\ArticleController;
use App\Http\Controllers\Admin\ArticleCategoryController;
use App\Http\Controllers\Admin\ArticleTagController;
use App\Http\Controllers\Admin\PageController;
use App\Http\Controllers\Admin\MemberNoteController;
use App\Http\Controllers\PublicBugReportController;
use App\Http\Controllers\IncomeController;
use Illuminate\Support\Facades\Route;
@@ -138,6 +139,10 @@ Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(fun
Route::delete('/members/{member}/payments/{payment}', [AdminPaymentController::class, 'destroy'])->name('members.payments.destroy');
Route::get('/members/{member}/payments/{payment}/receipt', [AdminPaymentController::class, 'receipt'])->name('members.payments.receipt');
// Member Notes (會員備忘錄)
Route::get('/members/{member}/notes', [MemberNoteController::class, 'index'])->name('members.notes.index');
Route::post('/members/{member}/notes', [MemberNoteController::class, 'store'])->name('members.notes.store');
Route::get('/finance-documents', [FinanceDocumentController::class, 'index'])->name('finance.index');
Route::get('/finance-documents/create', [FinanceDocumentController::class, 'create'])->name('finance.create');
Route::post('/finance-documents', [FinanceDocumentController::class, 'store'])->name('finance.store');