docs: consolidate documentation into organized structure

- 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
This commit is contained in:
2025-10-05 11:05:04 +02:00
parent 887847dde6
commit 5050c7d73a
36686 changed files with 196456 additions and 12398919 deletions

View File

@@ -0,0 +1,58 @@
<?php
declare(strict_types=1);
namespace App\Application\SmartLink\Api;
use App\Domain\SmartLink\Enums\LinkType;
use App\Domain\SmartLink\Services\SmartLinkService;
use App\Domain\SmartLink\ValueObjects\LinkTitle;
use App\Framework\Attributes\Route;
use App\Framework\Http\HttpRequest;
use App\Framework\Http\Method;
use App\Framework\Http\Status;
use App\Framework\Router\Result\JsonResult;
final readonly class CreateSmartLink
{
public function __construct(
private SmartLinkService $smartLinkService
) {}
#[Route(path: '/api/smart-links', method: Method::POST)]
public function __invoke(HttpRequest $request): JsonResult
{
$data = $request->parsedBody->toArray();
// Workaround: If parsedBody is empty, try parsing JSON directly
if (empty($data)) {
$rawBody = file_get_contents('php://input');
$data = json_decode($rawBody, true) ?? [];
}
if (!isset($data['type']) || !isset($data['title'])) {
return new JsonResult([
'error' => 'Missing required fields: type and title'
], Status::BAD_REQUEST);
}
$type = LinkType::from($data['type'] ?? '');
$title = LinkTitle::fromString($data['title'] ?? '');
$smartLink = $this->smartLinkService->createLink(
type: $type,
title: $title,
userId: $data['user_id'] ?? null,
coverImageUrl: $data['cover_image_url'] ?? null
);
return new JsonResult([
'id' => $smartLink->id->toString(),
'short_code' => $smartLink->shortCode->toString(),
'type' => $smartLink->type->value,
'title' => $smartLink->title->toString(),
'status' => $smartLink->status->value,
'created_at' => $smartLink->createdAt->format('Y-m-d H:i:s')
], Status::CREATED);
}
}