# matsen-tool-be

# Most needed commands
    ddev exec bin/console make:migration
    ddev exec bin/console doctrine:migration:migrate
    ddev exec bin/console doctrine:fixtures:load
    ddev exec bin/console make:entity
    ddev exec bin/console make:factory
    ddev exec php bin/phpunit
    ddev exec php bin/phpunit --filter=testPostToCreateNewUserPost

# Installation:

    gehe ins root Verzeichnis des Projekts und für aus: ddev config

    gehe den Installationsprozess durch (3x Enter drücken)

    starte danach ddev mit: ddev start

    projekt installieren: ddev composer install

# Troubleshooting:

    Unable to listen on required ports, port 443 is already in use:
    -> setze andere Ports in .ddev/config.yaml z.B.
    router_http_port: 8080
    router_https_port: 8443

    - https://stackoverflow.com/questions/76507208/symfony-6-3-migration-causes-problems-with-stateless-authenticators-forcing-requ

    Xdebug not working at all:
    ddev logs -> xdebug problems? like:
        "NOTICE: PHP message: Xdebug: [Step Debug] Could not connect to debugging client. Tried: 172.27.0.1:9003 (from HTTP_X_FORWARDED_FOR HTTP header), host.docker.internal:9003 (fallback through xdebug.client_host/xdebug.client_port)."

    - https://stackoverflow.com/questions/31324981/how-to-access-host-port-from-docker-container/43541732#43541732
    -> create folder "php" in ".ddev"-folder, create a file "xdebug.ini" (here could be also a php.ini - settings made override ddev php.ini) and insert this line into xdebug.ini: xdebug.client_host=docker.for.mac.localhost
        -> ddev restart afterwards

    Xdebug: When one is not working, use the other.
      xdebug.client_host=host.docker.internal
      ;xdebug.client_host=docker.for.mac.localhost

telnet: Unable to connect to remote host: Connection refused

# PHPMyAdmin installieren:

    ddev get ddev/ddev-phpmyadmin

    ddev restart

# Symfony Konsolenbefehle mit Ddev ausführen, z.B.:

    ddev exec php bin/console make:migration

# Ddev Commands:

    ddev describe - zeigt Urls und installierte Komponenten

# Xdebug
    ddev ssh -> export XDEBUG_CONFIG="idekey=PHPSTORM"

- Cli Skript xebug läuft nicht korrekt:
    - ddev ssh
    - in Terminal:  PHP_IDE_CONFIG="serverName=matsen-tool-be.ddev.site"
    - Servername ist hier konfiguriert: ![](/Users/danielknudsen/Documents/GIT/matsen-tool-be/.docs/phpstorm_cli_xdebug_config.png)
-------------------------
# Symfony:

# User with Maker Bundle:
    - https://symfonycasts.com/screencast/api-platform/user-entity
    ddev composer require maker-bundle --dev
    ddev exec bin/console make:user -> erstellt user entity und schreibt in die security.yaml

# Entity erzeugen oder erweitern:
    ddev exec bin/console make:entity

# Foundry fixtures:
    ddev exec composer require foundry orm-fixtures --dev
    ddev exec bin/console make:factory
    ddev exec bin/console doctrine:fixtures:load

# Doctrine:
    ddev exec bin/console doctrine:database:drop --force
    ddev exec bin/console doctrine:database:create

    - Testdatenbank anlegen:
        ddev exec bin/console doctrine:database:create --env=test
        ddev exec bin/console doctrine:schema:create --env=test

    - Migrations:
    ddev exec bin/console make:migration
    ddev exec bin/console doctrine:migration:migrate

# Profiler
    ddev composer require debug

# Php Unit
    - https://symfony.com/doc/current/testing.html#configuring-a-database-for-tests
    Setup:
        # .env.test.local -> "mysql://root:root@db:3306/db?serverVersion=10.4.30-MariaDB-1:10.4.30+maria~ubu2004-log - mariadb.org binary distribution"
            -> this creates a db named db_test (it takes the name of the main database "db" and adds "_test" to its name)
        # Create db and create schema
            php bin/console --env=test doctrine:database:create
            php bin/console --env=test doctrine:schema:create

    - https://symfonycasts.com/screencast/api-platform-security/test-setup
    ddev composer require test -> testpack incl. phpunit
    ddev composer require zenstruck/browser --dev -> browser test package to imporve testing
        -> add extension to phpunit.xml.dist
                <extensions>
                    <extension class="Zenstruck\Browser\Test\BrowserExtension" />
                </extensions>

    ddev exec php bin/phpunit --filter=testPostToCreateNewUserPost

    ddev composer require --dev mtdowling/jmespath.php

    
# Api Platform
    - https://api-platform.com/docs/core/dto/
    - https://api-platform.com/docs/distribution/
    - https://api-platform.com/docs/core/extending/

    Ausführen, um openApi.yaml und openApi.json zu generieren:
    - cd export
    - php exportApi.php
    openApi.yaml und openApi.json in Frontend-Projekt (root) kopieren

# Lexik JWT
    - https://symfony.com/bundles/LexikJWTAuthenticationBundle/current/index.html
    - Nur bei NEU Installation:
        - php bin/console lexik:jwt:generate-keypair
    
    - Open Api export:
        ddev exec bin/console api:openapi:export --yaml >> openapi.yaml
    - File Uploading:
        https://api-platform.com/docs/core/file-upload/
        https://github.com/dustin10/VichUploaderBundle/blob/master/docs/index.md

# List Routes and Service Tags
    - ddev exec bin/console debug:router
    - ddev exec bin/console debug:container

# Constraints
    - https://symfony.com/doc/current/validation.html

# LIVE DEPLOYMENT
    - URL is https://matsen.spawntree.de
    - Clear DB: https://spawntree.de:8443
    - Run shell script in: /var/www/vhosts/spawntree.de/matsen-api.spawntree.de/httpdocs
    - (If JWT PEM files don't exist in /config/jwt: bin/console lexik:jwt:generate-keypair)
    - Frontend: ng build --configuration=development --aot
    - Delete all files in /matsen.spawntree.de/matsen-tool/browser via FTP
    - Copy content of /matsen-tool/dist/matsen-tool/browser into /matsen.spawntree.de/matsen-tool/browser

# PASSWORD HASH
    - bin/console security:hash-password '12345678'