openapi: 3.1.0
info:
  title: Frag Fitty
  description: |
    Deutschlands größte Fitness-Studio-Vergleichsplattform.
    Suche und vergleiche über 3.200 Fitnessstudios, sieh dir Preise, Ausstattung, Bewertungen an und buche kostenlose Probetrainings.

    ## Verfügbare Daten
    - Studio-Details (Name, Adresse, Kontakt, Öffnungszeiten)
    - Mitgliedschaftspreise und Tarife
    - Ausstattung (Geräte, Kurse, Wellness, Services)
    - Google-Bewertungen
    - Probetraining-Verfügbarkeit
    - Redaktionelle Artikel

    ## Sprache
    Alle Inhalte sind auf Deutsch (de-DE).

  version: "1.0.0"
  contact:
    email: hi@fragfitty.de
servers:
  - url: https://fragfitty.de
    description: Produktionsserver

paths:
  /:
    get:
      operationId: getHomepage
      summary: Startseite mit Suche
      description: Startseite mit Studio-Suche und Vergleichsfunktion
      responses:
        "200":
          description: HTML-Seite mit Suchinterface
          content:
            text/html:
              schema:
                type: string

  /in/{city}:
    get:
      operationId: getStudiosByCity
      summary: Studios in einer Stadt suchen
      description: Gibt eine Liste von Fitnessstudios in der angegebenen Stadt zurück
      parameters:
        - name: city
          in: path
          required: true
          schema:
            type: string
          description: Deutscher Stadtname (z.B. Berlin, München, Hamburg)
          examples:
            berlin:
              value: Berlin
            muenchen:
              value: München
      responses:
        "200":
          description: HTML-Seite mit Studio-Ergebnissen
          content:
            text/html:
              schema:
                type: string

  /in/{city}/{radius}:
    get:
      operationId: getStudiosByCityRadius
      summary: Studios mit Umkreisfilter suchen
      description: Gibt Studios innerhalb eines bestimmten Umkreises zurück
      parameters:
        - name: city
          in: path
          required: true
          schema:
            type: string
          description: Deutscher Stadtname
        - name: radius
          in: path
          required: true
          schema:
            type: string
            enum: ["2km", "5km", "10km", "20km"]
          description: Suchradius vom Stadtzentrum
      responses:
        "200":
          description: HTML-Seite mit gefilterten Studio-Ergebnissen
          content:
            text/html:
              schema:
                type: string

  /gym/{slug}:
    get:
      operationId: getStudioDetails
      summary: Studio-Details abrufen
      description: |
        Gibt detaillierte Informationen zu einem Fitnessstudio zurück:
        - Kontaktdaten und Adresse
        - Öffnungszeiten
        - Mitgliedschaftspreise und Tarife
        - Ausstattung und Geräte
        - Google-Bewertung
        - Probetraining-Optionen
      parameters:
        - name: slug
          in: path
          required: true
          schema:
            type: string
          description: URL-freundlicher Studio-Bezeichner
      responses:
        "200":
          description: HTML-Seite mit vollständigen Studio-Details
          content:
            text/html:
              schema:
                type: string

  /artikel/{slug}:
    get:
      operationId: getArticle
      summary: Artikel-Inhalt abrufen
      description: Gibt redaktionellen Inhalt zu einem Fitness-Thema zurück
      parameters:
        - name: slug
          in: path
          required: true
          schema:
            type: string
          description: Artikel-Slug (z.B. hyrox)
      responses:
        "200":
          description: HTML-Seite mit Artikel-Inhalt
          content:
            text/html:
              schema:
                type: string

  /llms.txt:
    get:
      operationId: getLLMContext
      summary: LLM-Kontext-Datei
      description: Maschinenlesbarer Kontext über die Website für KI-Assistenten
      responses:
        "200":
          description: Klartext-Kontextdatei
          content:
            text/plain:
              schema:
                type: string

  /llms-full.txt:
    get:
      operationId: getLLMContextFull
      summary: Erweiterte LLM-Kontext-Datei
      description: Erweiterte Version mit Beispieldaten für KI-Assistenten
      responses:
        "200":
          description: Erweiterte Klartext-Kontextdatei
          content:
            text/plain:
              schema:
                type: string

  /structured-data.json:
    get:
      operationId: getStructuredDataManifest
      summary: Schema.org-Manifest
      description: JSON-LD-Strukturdaten-Übersicht der Website
      responses:
        "200":
          description: JSON Schema.org-Manifest
          content:
            application/json:
              schema:
                type: object

components:
  schemas:
    Studio:
      type: object
      description: Ein Fitnessstudio
      properties:
        name:
          type: string
          description: Studio-Name
        city:
          type: string
          description: Standort (Stadt)
        address:
          type: string
          description: Vollständige Adresse
        rating:
          type: number
          description: Google-Bewertung (1-5)
        priceRange:
          type: string
          description: Preiskategorie (€, €€, €€€)
        features:
          type: array
          items:
            type: string
          description: Verfügbare Ausstattung und Geräte
        trialBookingAvailable:
          type: boolean
          description: Ob Probetrainings buchbar sind
