diff --git a/app/Http/Requests/Settings/ProfileUpdateRequest.php b/app/Http/Requests/Settings/ProfileUpdateRequest.php index 64cf26b0..880e0aa7 100644 --- a/app/Http/Requests/Settings/ProfileUpdateRequest.php +++ b/app/Http/Requests/Settings/ProfileUpdateRequest.php @@ -27,6 +27,7 @@ class ProfileUpdateRequest extends FormRequest 'max:255', Rule::unique(User::class)->ignore($this->user()->id), ], + 'currency_code' => ['required', 'string', 'max:3', Rule::in(['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'CNY', 'INR', 'MXN'])], ]; } } diff --git a/app/Models/User.php b/app/Models/User.php index f58441a5..cb745c35 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -29,6 +29,7 @@ class User extends Authenticatable 'password', 'encryption_salt', 'onboarded_at', + 'currency_code', ]; /** diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index 87ce11e2..b48fe78d 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -25,6 +25,7 @@ class UserFactory extends Factory return [ 'name' => fake()->name(), 'email' => fake()->unique()->safeEmail(), + 'currency_code' => 'USD', 'email_verified_at' => now(), 'password' => static::$password ??= 'password', 'remember_token' => Str::random(10), diff --git a/database/migrations/2025_12_29_063338_add_currency_code_to_users_table.php b/database/migrations/2025_12_29_063338_add_currency_code_to_users_table.php new file mode 100644 index 00000000..df3c1a14 --- /dev/null +++ b/database/migrations/2025_12_29_063338_add_currency_code_to_users_table.php @@ -0,0 +1,28 @@ +string('currency_code', 3)->default('USD')->after('email'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('currency_code'); + }); + } +}; diff --git a/resources/js/pages/settings/account.tsx b/resources/js/pages/settings/account.tsx index f1ec1b41..843a39f5 100644 --- a/resources/js/pages/settings/account.tsx +++ b/resources/js/pages/settings/account.tsx @@ -8,6 +8,13 @@ import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; import { Separator } from '@/components/ui/separator'; import { useTwoFactorAuth } from '@/hooks/use-two-factor-auth'; import AppLayout from '@/layouts/app-layout'; @@ -16,6 +23,7 @@ import { edit as accountEdit } from '@/routes/account'; import { disable, enable } from '@/routes/two-factor'; import { send } from '@/routes/verification'; import { type BreadcrumbItem, type SharedData } from '@/types'; +import { CURRENCY_OPTIONS } from '@/types/account'; import { Transition } from '@headlessui/react'; import { Form, Head, Link, usePage } from '@inertiajs/react'; import { ShieldBan, ShieldCheck } from 'lucide-react'; @@ -114,6 +122,39 @@ export default function Account({ /> +