diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php
index fd0591dd..21ced1d7 100644
--- a/app/Http/Resources/UserResource.php
+++ b/app/Http/Resources/UserResource.php
@@ -21,7 +21,9 @@ class UserResource extends JsonResource
public function toArray($request): array
{
return [
- 'name' => $this->name,
+ 'firstname' => $this->firstname,
+ 'lastname' => $this->lastname,
+ 'avatar_url' => $this->getGravatarUrl(),
'email' => $this->email,
'avatar' => [
'src' => Storage::url('avatar.png'),
diff --git a/app/User.php b/app/User.php
index 690c256a..bb1bdc3c 100644
--- a/app/User.php
+++ b/app/User.php
@@ -22,4 +22,9 @@ class User extends Authenticatable
{
$this->notify(new ResetPassword($token));
}
+
+ public function getGravatarUrl(): string
+ {
+ return 'https://www.gravatar.com/avatar/' . hash('sha256', $this->email);
+ }
}
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
index 58673ba5..a8bd37bb 100644
--- a/database/factories/UserFactory.php
+++ b/database/factories/UserFactory.php
@@ -23,7 +23,8 @@ class UserFactory extends Factory
return [
'email' => $this->faker->safeEmail,
'password' => Hash::make('password'),
- 'name' => $this->faker->firstName,
+ 'firstname' => $this->faker->firstName,
+ 'lastname' => $this->faker->lastName,
];
}
}
diff --git a/database/migrations/2024_07_31_215841_update_users_names.php b/database/migrations/2024_07_31_215841_update_users_names.php
new file mode 100644
index 00000000..e81e21be
--- /dev/null
+++ b/database/migrations/2024_07_31_215841_update_users_names.php
@@ -0,0 +1,56 @@
+string('firstname')->after('name')->nullable();
+ $table->string('lastname')->after('name')->nullable();
+ });
+
+ foreach (User::get() as $user) {
+ $user->update([]);
+ }
+
+ foreach (DB::table('users')->get() as $user) {
+ [$firstname, $lastname] = explode(' ', $user->name);
+ DB::table('users')->where('id', $user->id)->update(['firstname' => $firstname, 'lastname' => $lastname]);
+ }
+
+ Schema::table('users', function (Blueprint $table) {
+ $table->string('firstname')->nullable(false)->change();
+ $table->string('lastname')->nullable(false)->change();
+ $table->dropColumn('name');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('users', function (Blueprint $table) {
+ $table->string('name');
+ });
+ foreach (DB::table('users')->get() as $user) {
+ DB::table('users')->where('id', $user->id)->update(['name' => $user->firstname . ' ' . $user->lastname]);
+ }
+ Schema::table('users', function (Blueprint $table) {
+ $table->dropColumn('firstname');
+ $table->dropColumn('lastname');
+ });
+ }
+};
diff --git a/resources/js/components/page/Header.vue b/resources/js/components/page/Header.vue
index a12e87e1..c0ac1fd9 100644
--- a/resources/js/components/page/Header.vue
+++ b/resources/js/components/page/Header.vue
@@ -5,7 +5,7 @@