ycxc
All checks were successful
Deploy / deploy (push) Successful in 51s

This commit is contained in:
2026-07-24 21:00:47 +02:00
parent d507ae7bc7
commit 5256dd4080
14 changed files with 471 additions and 19 deletions

View File

@@ -28,6 +28,22 @@ final class ProfileSettings
$this->columnCache['user_profiles.location_tracking_preference'] = true;
}
$avatarColumns = [
'avatar_skin_tone' => "ALTER TABLE user_profiles ADD COLUMN avatar_skin_tone VARCHAR(24) NOT NULL DEFAULT 'warm' AFTER location_tracking_preference",
'avatar_hair_style' => "ALTER TABLE user_profiles ADD COLUMN avatar_hair_style VARCHAR(24) NOT NULL DEFAULT 'short' AFTER avatar_skin_tone",
'avatar_hair_color' => "ALTER TABLE user_profiles ADD COLUMN avatar_hair_color VARCHAR(24) NOT NULL DEFAULT 'brown' AFTER avatar_hair_style",
'avatar_eye_color' => "ALTER TABLE user_profiles ADD COLUMN avatar_eye_color VARCHAR(24) NOT NULL DEFAULT 'brown' AFTER avatar_hair_color",
'avatar_beard_style' => "ALTER TABLE user_profiles ADD COLUMN avatar_beard_style VARCHAR(24) NOT NULL DEFAULT 'none' AFTER avatar_eye_color",
'avatar_glasses_style' => "ALTER TABLE user_profiles ADD COLUMN avatar_glasses_style VARCHAR(24) NOT NULL DEFAULT 'none' AFTER avatar_beard_style",
'avatar_head_shape' => "ALTER TABLE user_profiles ADD COLUMN avatar_head_shape VARCHAR(24) NOT NULL DEFAULT 'round' AFTER avatar_glasses_style",
];
foreach ($avatarColumns as $column => $sql) {
if (!$this->hasColumn('user_profiles', $column)) {
$this->pdo->exec($sql);
$this->columnCache['user_profiles.' . $column] = true;
}
}
$this->schemaEnsured = true;
}
@@ -59,6 +75,38 @@ final class ProfileSettings
]);
}
public function updateAvatar(int $userId, array $avatarConfig): void
{
if ($userId <= 0) {
return;
}
$this->ensureSchema();
$avatar = Avatar::normalize($avatarConfig);
$stmt = $this->pdo->prepare(
'UPDATE user_profiles
SET avatar_skin_tone = :skin,
avatar_hair_style = :hairStyle,
avatar_hair_color = :hairColor,
avatar_eye_color = :eyeColor,
avatar_beard_style = :beardStyle,
avatar_glasses_style = :glassesStyle,
avatar_head_shape = :headShape,
updated_at = NOW()
WHERE user_id = :id'
);
$stmt->execute([
'skin' => $avatar['avatar_skin_tone'],
'hairStyle' => $avatar['avatar_hair_style'],
'hairColor' => $avatar['avatar_hair_color'],
'eyeColor' => $avatar['avatar_eye_color'],
'beardStyle' => $avatar['avatar_beard_style'],
'glassesStyle' => $avatar['avatar_glasses_style'],
'headShape' => $avatar['avatar_head_shape'],
'id' => $userId,
]);
}
private function hasColumn(string $table, string $column): bool
{
$cacheKey = $table . '.' . $column;