#!/usr/bin/env bash set -euo pipefail ROOT="/root/codex/source-gamepanel" PNPM="/root/.nvm/versions/node/v24.13.1/bin/pnpm" SERVICES=( "source-gamepanel-api.service" "source-gamepanel-web.service" "source-gamepanel-daemon.service" ) usage() { cat <<'EOF' Usage: panelctl Commands: start Start all services stop Stop all services restart Restart all services status Show status of all services logs Tail logs of all services rebuild Rebuild API/Web/Daemon binaries update Pull latest code, rebuild, migrate DB, restart services deploy Rebuild current code, migrate DB, restart services EOF } rebuild_all() { cd "$ROOT" "$PNPM" install --frozen-lockfile "$PNPM" --filter @source/api build "$PNPM" --filter @source/web build source "$HOME/.cargo/env" cd "$ROOT/apps/daemon" cargo build --release } migrate_db() { cd "$ROOT" "$PNPM" db:migrate } cmd="${1:-}" case "$cmd" in start) systemctl start "${SERVICES[@]}" ;; stop) systemctl stop "${SERVICES[@]}" ;; restart) systemctl restart "${SERVICES[@]}" ;; status) systemctl --no-pager --full status "${SERVICES[@]}" ;; logs) journalctl -u "${SERVICES[0]}" -u "${SERVICES[1]}" -u "${SERVICES[2]}" -f ;; rebuild) rebuild_all ;; update) cd "$ROOT" git pull --ff-only rebuild_all migrate_db systemctl restart "${SERVICES[@]}" systemctl --no-pager --full status "${SERVICES[@]}" ;; deploy) rebuild_all migrate_db systemctl restart "${SERVICES[@]}" systemctl --no-pager --full status "${SERVICES[@]}" ;; *) usage exit 1 ;; esac