#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" cmd="${1:-help}" shift 2>/dev/null || true usage() { cat < Commands: install Install the dispatch packages (systemd user units + application files in /opt/dispatch). start Start dispatch-api and dispatch-frontend. If already running, restart instead. Prints the frontend URL when ready. stop Stop dispatch-api and dispatch-frontend. status Show status of both services. logs Tail journal output for both services. After install, configure /etc/dispatch/dispatch-api.conf before starting. EOF } install() { echo "==> Building fresh package..." "$PROJECT_DIR/bin/build-pkg" echo "" echo "==> Installing..." "$PROJECT_DIR/bin/install-pkg" systemctl --user daemon-reload echo "" echo "==> Installed. Edit /etc/dispatch/dispatch-api.conf, then run:" echo " bin/service start" } have_units() { systemctl --user cat dispatch-api.service &>/dev/null } start() { if ! have_units; then echo "dispatch services not installed. Run: bin/service install" return 1 fi local api_active frontend_active api_active=$(systemctl --user is-active dispatch-api 2>/dev/null || echo "inactive") frontend_active=$(systemctl --user is-active dispatch-frontend 2>/dev/null || echo "inactive") if [ "$api_active" = "active" ] || [ "$frontend_active" = "active" ]; then echo "==> Services already running (api=$api_active frontend=$frontend_active) — restarting" systemctl --user restart dispatch-api dispatch-frontend else systemctl --user start dispatch-api dispatch-frontend fi echo "dispatch-api + dispatch-frontend $( [ "$api_active" = "active" ] || [ "$frontend_active" = "active" ] && echo restarted || echo started )" echo " → http://localhost:18391" } status() { if ! have_units; then echo "dispatch services not installed." return 1 fi systemctl --user status dispatch-api dispatch-frontend --no-pager 2>/dev/null || true } logs() { journalctl --user -u dispatch-api -u dispatch-frontend -f "$@" } case "$cmd" in install) install ;; start) start ;; stop) stop ;; status) status ;; logs) logs "$@" ;; help|--help|-h) usage ;; *) echo "Unknown command: $cmd"; echo; usage; exit 1 ;; esac