Premier commit
This commit is contained in:
58
app/Http/Controllers/DocumentController.php
Normal file
58
app/Http/Controllers/DocumentController.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Contract;
|
||||
use App\Models\Document;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class DocumentController extends Controller
|
||||
{
|
||||
/**
|
||||
* Store a new document for a contract.
|
||||
*/
|
||||
public function store(Request $request, Contract $contract)
|
||||
{
|
||||
// Simple validation
|
||||
$request->validate([
|
||||
'file' => 'required|file|mimes:pdf,docx,jpg,png|max:10240', // 10MB limit
|
||||
'description' => 'nullable|string|max:255',
|
||||
]);
|
||||
|
||||
if ($request->hasFile('file')) {
|
||||
$path = $request->file('file')->store('contracts/' . $contract->id, 'public');
|
||||
|
||||
$contract->documents()->create([
|
||||
'filename' => $request->file('file')->getClientOriginalName(),
|
||||
'path' => $path,
|
||||
'mime_type' => $request->file('file')->getMimeType(),
|
||||
'size' => $request->file('file')->getSize(),
|
||||
'description' => $request->input('description'),
|
||||
'uploaded_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
return back()->with('success', 'Document uploaded successfully.');
|
||||
}
|
||||
|
||||
return back()->with('error', 'No file uploaded.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a document.
|
||||
*/
|
||||
public function destroy(Document $document)
|
||||
{
|
||||
// Check permission (manager or admin or uploader?)
|
||||
if (!auth()->user()->isManager() && auth()->id() !== $document->uploaded_by) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
// Delete from storage
|
||||
Storage::disk('public')->delete($document->path);
|
||||
|
||||
$document->delete();
|
||||
|
||||
return back()->with('success', 'Document deleted.');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user