feat(accounting): document colleague trades on configured accounts

Post Montzar-covered buy/sell to Zarin/Tahesab/Pargar using montzar_account_* settings, and harden public storage URL/MIME handling for uploads.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-26 16:59:27 +03:30
co-authored by Cursor
parent ad78545ebd
commit 885ed33e6e
10 changed files with 457 additions and 34 deletions
+32 -3
View File
@@ -40,9 +40,7 @@ class FileController extends Controller
$path = $this->createDir();
$originalName = $uploaded->getClientOriginalName();
$ext = $uploaded->getClientOriginalExtension()
?: $uploaded->extension()
?: 'jpg';
$ext = $this->resolveUploadExtension($uploaded);
$title = $request->input('title') ?: $originalName;
$file_name_src = md5(time().$originalName);
$file_name = $file_name_src.'.'.$ext;
@@ -70,4 +68,35 @@ class FileController extends Controller
return response()->json($payload);
}
/**
* پسوند واقعی فایل (MIME)، نه اسم اصلی مرورگر — آپلود بنر WebP است.
*/
private function resolveUploadExtension(\Illuminate\Http\UploadedFile $uploaded): string
{
$mime = strtolower((string) ($uploaded->getMimeType() ?: $uploaded->getClientMimeType()));
$fromMime = match (true) {
str_contains($mime, 'webp') => 'webp',
str_contains($mime, 'png') => 'png',
str_contains($mime, 'jpeg'), str_contains($mime, 'jpg') => 'jpg',
str_contains($mime, 'gif') => 'gif',
str_contains($mime, 'svg') => 'svg',
default => null,
};
if ($fromMime) {
return $fromMime;
}
$client = strtolower((string) $uploaded->getClientOriginalExtension());
if (in_array($client, ['webp', 'png', 'jpg', 'jpeg', 'gif', 'svg'], true)) {
return $client === 'jpeg' ? 'jpg' : $client;
}
$guessed = strtolower((string) $uploaded->extension());
if (in_array($guessed, ['webp', 'png', 'jpg', 'jpeg', 'gif', 'svg'], true)) {
return $guessed === 'jpeg' ? 'jpg' : $guessed;
}
return 'jpg';
}
}