feat: formulaire de suggestions créant un ticket Gitea
CI - Intégration continue / quality-and-tests (push) Successful in 3m56s
CD - Déploiement continu / deploy (push) Successful in 3m6s

Les utilisateurs connectés peuvent proposer une modification / un ajout /
une correction via un formulaire. La soumission crée automatiquement une
issue dans le dépôt Gitea via son API (GiteaIssueService), avec le titre
préfixé par le type et l'auteur dans le corps.

- config/services.php + .env.example : GITEA_URL/TOKEN/REPO (token secret)
- SuggestionController (create/store) + validation
- vue suggestions/create + lien dans le header (utilisateurs connectés)
- tests: auth requise, création OK, validation, échec API

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 20:00:12 +02:00
parent 54f2c0e9ab
commit dede70f70f
8 changed files with 336 additions and 0 deletions
@@ -0,0 +1,58 @@
<?php
namespace App\Http\Controllers;
use App\Models\Utilisateur;
use App\Services\GiteaIssueService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
class SuggestionController extends Controller
{
// Afficher le formulaire de suggestion
public function create()
{
return view('suggestions.create');
}
// Traiter la suggestion et créer un ticket dans Gitea
public function store(Request $request, GiteaIssueService $gitea)
{
$data = $request->validate([
'type' => ['required', Rule::in(['Modification', 'Ajout', 'Correction'])],
'titre' => ['required', 'string', 'min:5', 'max:120'],
'description' => ['required', 'string', 'min:10', 'max:5000'],
], [
'type.required' => 'Veuillez choisir un type de demande.',
'type.in' => 'Type de demande invalide.',
'titre.required' => 'Le titre est requis.',
'titre.min' => 'Le titre doit contenir au moins 5 caractères.',
'titre.max' => 'Le titre ne peut pas dépasser 120 caractères.',
'description.required' => 'La description est requise.',
'description.min' => 'Merci de détailler un peu plus votre suggestion (10 caractères minimum).',
]);
/** @var Utilisateur $user */
$user = Auth::user();
$auteur = $user->Pseudo ?? 'Utilisateur';
$title = "[{$data['type']}] {$data['titre']}";
$body = "**Type de demande :** {$data['type']}\n"
."**Proposé par :** {$auteur} (via le site (RE)Sources Relationnelles)\n\n"
."### Description\n"
.$data['description']."\n\n"
."---\n"
.'_Ticket créé automatiquement depuis le formulaire de suggestions du site._';
if ($gitea->createIssue($title, $body)) {
return redirect()->route('suggestions.create')
->with('success', 'Merci ! Votre suggestion a bien été transmise à l\'équipe.');
}
return back()->withInput()->withErrors([
'gitea' => "L'envoi de votre suggestion a échoué. Merci de réessayer plus tard.",
]);
}
}