feat: add user fields

This commit is contained in:
2026-05-21 12:02:02 +02:00
parent 9d67a2c335
commit 6ac36e3de4
12 changed files with 262 additions and 15 deletions
+45 -14
View File
@@ -12,6 +12,7 @@ use Illuminate\Auth\Events\Verified;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
@@ -29,12 +30,12 @@ class AuthController extends Controller
$avatarPath = $request->file('avatar')->store('avatars', 'public');
}
$user = User::create([
'name' => $data['name'],
'email' => strtolower($data['email']),
'password' => Hash::make($data['password']),
'avatar_url' => $avatarPath,
]);
$userAttributes = $this->userAttributesFromRequestData($data);
$userAttributes['email'] = strtolower($data['email']);
$userAttributes['password'] = Hash::make($data['password']);
$userAttributes['avatar_url'] = $avatarPath;
$user = User::create($userAttributes);
$user->sendEmailVerificationNotification();
@@ -158,18 +159,17 @@ class AuthController extends Controller
$data['avatar_url'] = $path;
}
unset($data['avatar']);
unset($data['nutritionGoals']);
$userAttributes = $this->userAttributesFromRequestData($data);
if (is_array($nutritionGoals)) {
$data['daily_calorie_goal'] = $nutritionGoals['calories'];
$data['daily_protein_goal'] = $nutritionGoals['proteins'];
$data['daily_carbs_goal'] = $nutritionGoals['carbs'];
$data['daily_fats_goal'] = $nutritionGoals['fats'];
$userAttributes['daily_calorie_goal'] = $nutritionGoals['calories'];
$userAttributes['daily_protein_goal'] = $nutritionGoals['proteins'];
$userAttributes['daily_carbs_goal'] = $nutritionGoals['carbs'];
$userAttributes['daily_fats_goal'] = $nutritionGoals['fats'];
}
if (! empty($data)) {
$user->update($data);
if (! empty($userAttributes)) {
$user->update($userAttributes);
}
return new UserResource($user->fresh());
@@ -212,4 +212,35 @@ class AuthController extends Controller
{
return filled($path) && ! Str::startsWith($path, ['http://', 'https://']);
}
/**
* @param array<string, mixed> $data
* @return array<string, mixed>
*/
private function userAttributesFromRequestData(array $data): array
{
$attributes = Arr::only($data, [
'name',
'avatar_url',
'height',
'bio',
'sex',
'date_of_birth',
]);
$attributeMap = [
'physicalActivityLevel' => 'physical_activity_level',
'weightGoal' => 'weight_goal',
'pacePreference' => 'pace_preference',
'dateOfBirth' => 'date_of_birth',
];
foreach ($attributeMap as $requestKey => $attribute) {
if (array_key_exists($requestKey, $data)) {
$attributes[$attribute] = $data[$requestKey];
}
}
return $attributes;
}
}