- Move 12 markdown files from root to docs/ subdirectories - Organize documentation by category: • docs/troubleshooting/ (1 file) - Technical troubleshooting guides • docs/deployment/ (4 files) - Deployment and security documentation • docs/guides/ (3 files) - Feature-specific guides • docs/planning/ (4 files) - Planning and improvement proposals Root directory cleanup: - Reduced from 16 to 4 markdown files in root - Only essential project files remain: • CLAUDE.md (AI instructions) • README.md (Main project readme) • CLEANUP_PLAN.md (Current cleanup plan) • SRC_STRUCTURE_IMPROVEMENTS.md (Structure improvements) This improves: ✅ Documentation discoverability ✅ Logical organization by purpose ✅ Clean root directory ✅ Better maintainability
76 lines
2.2 KiB
PHP
76 lines
2.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Application\Contact;
|
|
|
|
use App\Framework\Attributes\Route;
|
|
use App\Framework\CommandBus\CommandBus;
|
|
use App\Framework\Http\Method;
|
|
use App\Framework\Meta\MetaData;
|
|
use App\Framework\Meta\StaticPageMetaResolver;
|
|
use App\Framework\OpenApi\Attributes\ApiEndpoint;
|
|
use App\Framework\OpenApi\Attributes\ApiRequestBody;
|
|
use App\Framework\OpenApi\Attributes\ApiResponse;
|
|
use App\Framework\Router\ActionResult;
|
|
use App\Framework\Router\Result\Redirect;
|
|
use App\Framework\Router\Result\ViewResult;
|
|
use App\Framework\Router\WebRoutes;
|
|
|
|
final readonly class ShowContact
|
|
{
|
|
#[Route(path: '/kontakt', name: WebRoutes::CONTACT)]
|
|
public function __invoke(): ViewResult
|
|
{
|
|
return new ViewResult(
|
|
'contact',
|
|
new StaticPageMetaResolver(
|
|
'Kontakt',
|
|
'Kontaktseite!',
|
|
)(),
|
|
);
|
|
}
|
|
|
|
#[Route(path: '/kontakt', method: Method::POST)]
|
|
#[ApiEndpoint(
|
|
summary: 'Submit contact form',
|
|
description: 'Submit a contact form message',
|
|
tags: ['Contact'],
|
|
)]
|
|
#[ApiRequestBody(
|
|
description: 'Contact form data',
|
|
required: true,
|
|
example: [
|
|
'name' => 'John Doe',
|
|
'email' => 'john@example.com',
|
|
'subject' => 'Question about services',
|
|
'message' => 'I would like to know more about your services.',
|
|
],
|
|
)]
|
|
#[ApiResponse(
|
|
statusCode: 200,
|
|
description: 'Contact form submitted successfully',
|
|
example: ['success' => true, 'message' => 'Thank you for your message'],
|
|
)]
|
|
#[ApiResponse(
|
|
statusCode: 400,
|
|
description: 'Validation error - Invalid form data',
|
|
)]
|
|
public function senden(ContactRequest $request, CommandBus $commandBus): ActionResult
|
|
{
|
|
$command = new StoreContact(
|
|
$request->email,
|
|
$request->name,
|
|
$request->subject,
|
|
$request->message,
|
|
);
|
|
|
|
$commandBus->dispatch($command);
|
|
|
|
// Success! Clear form data and redirect
|
|
return new ViewResult('contact-success', new MetaData(
|
|
title: 'Kontakt | <NAME>',
|
|
), data: ['message' => 'Vielen Dank für Ihre Nachricht!']);
|
|
}
|
|
}
|