User-Wunsch: auf Profile Avatar + Nickname ändern können. Avatar entweder
preset aus signup-list ODER eigene Foto mit cropper.
New files:
- app/profile/edit.tsx — vollständiger Edit-Screen (Avatar-Gallery + Photo-Picker
+ Nickname TextInput + Save-Button)
- lib/avatars.ts — HERO_AVATARS preset-list (matched mit Nuxt-app Signup) +
getAvatarUrl helper
- lib/resolveAvatar.ts — resolveAvatar(avatarId, nickname): URL für
preset-id ODER fallback auf nickname-initial-tile
Profile-Page wiring:
- Avatar-Tap + Nickname-Tap pushen jetzt zu /profile/edit (statt Alert-stub)
- Nach successful save: useMe.reload() + router.back()
Edit-Flow:
- Preset (HERO_AVATARS, 12 items): tap-grid mit selected-State + brand-Border
- Eigenes Photo: expo-image-picker mit allowsEditing+aspect[1,1] (OS-nativer
Crop-Dialog), expo-file-system/legacy für base64-Konvertierung, upload via
POST /api/avatar/upload (writes Supabase-Storage rebreak-avatars + updated
Profile)
- Save: PATCH /api/auth/me { nickname, avatar }
i18n: profile.edit_* keys DE+EN
Backend-API:
- PATCH /api/auth/me — existiert (apps/admin/composables nicht — backend!)
- POST /api/avatar/upload — existiert
TS-fixes:
- expo-file-system → /legacy import (SDK 54 breaking change, siehe Task #14)
- ?? + || mixing fixed mit klammern
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
59 lines
2.0 KiB
Bash
Executable File
59 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# deploy-admin-from-artifact.sh -- Server-side Deploy fuer rebreak-admin-staging.
|
|
#
|
|
# Wird via SSH von .github/workflows/deploy-admin-staging.yml aufgerufen.
|
|
# Erwartet: /srv/rebreak/apps/admin/.output-incoming.tar.gz (via scp vom GA-Runner).
|
|
#
|
|
# Kein Build-Schritt (laeuft auf GA-Runner), kein prisma-migrate (admin hat kein DB-Schema).
|
|
# Atomic mv Pattern identisch zu deploy-from-artifact.sh.
|
|
|
|
set -euo pipefail
|
|
|
|
REPO_ROOT="/srv/rebreak"
|
|
ADMIN_DIR="${REPO_ROOT}/apps/admin"
|
|
ARTIFACT="${ADMIN_DIR}/.output-incoming.tar.gz"
|
|
PM2_BIN="/root/.nvm/versions/node/v24.11.1/bin/pm2"
|
|
|
|
log() { echo "[deploy-admin] $(date '+%H:%M:%S') $*"; }
|
|
log_err() { echo "[deploy-admin:err] $(date '+%H:%M:%S') $*" >&2; }
|
|
|
|
log "=== Rebreak Admin Deploy-from-Artifact gestartet ==="
|
|
|
|
export PATH="/root/.nvm/versions/node/v24.11.1/bin:$PATH"
|
|
|
|
# 0. Sanity-Check: Artifact muss da sein
|
|
[[ -f "$ARTIFACT" ]] || { log_err "Artifact $ARTIFACT fehlt -- abort"; exit 1; }
|
|
|
|
# 1. Ziel-Verzeichnis sicherstellen
|
|
mkdir -p "${ADMIN_DIR}"
|
|
|
|
# 2. Artifact extrahieren -- atomisches mv
|
|
log "Step 1: Artifact extrahieren..."
|
|
rm -rf "${ADMIN_DIR}/.output-staging-new"
|
|
mkdir -p "${ADMIN_DIR}/.output-staging-new"
|
|
tar xzf "$ARTIFACT" -C "${ADMIN_DIR}/.output-staging-new"
|
|
|
|
# Sanity-Check: Nuxt-SSR-Server muss vorhanden sein
|
|
[[ -f "${ADMIN_DIR}/.output-staging-new/server/index.mjs" ]] || {
|
|
log_err "Ungueltiges Artifact -- server/index.mjs fehlt"
|
|
rm -rf "${ADMIN_DIR}/.output-staging-new"
|
|
exit 1
|
|
}
|
|
|
|
rm -rf "${ADMIN_DIR}/.output-staging"
|
|
mv "${ADMIN_DIR}/.output-staging-new" "${ADMIN_DIR}/.output-staging"
|
|
rm -f "$ARTIFACT"
|
|
log ".output-staging aktualisiert"
|
|
|
|
# 3. pm2 restart (oder erstmaliger Start via ecosystem)
|
|
log "Step 2: pm2 restart rebreak-admin-staging..."
|
|
"${PM2_BIN}" restart rebreak-admin-staging --update-env 2>/dev/null || \
|
|
"${PM2_BIN}" start "${REPO_ROOT}/ecosystem.config.js" --only rebreak-admin-staging
|
|
|
|
log "rebreak-admin-staging restarted"
|
|
|
|
# 4. pm2 save
|
|
"${PM2_BIN}" save 2>/dev/null || true
|
|
|
|
log "=== Admin Deploy erfolgreich ==="
|