diff --git a/app/Http/Controllers/ClaudeCode/NewsController.php b/app/Http/Controllers/ClaudeCode/NewsController.php new file mode 100644 index 00000000..ea7818f2 --- /dev/null +++ b/app/Http/Controllers/ClaudeCode/NewsController.php @@ -0,0 +1,42 @@ +header('HX-Request')) { + return response('', 200)->header('HX-Redirect', route('claude-code.news.index')); + } + + $releases = $this->newsService->getReleases(); + + return view('claude-code.news.index', compact('releases')); + } + + /** + * 캐시 새로고침 + */ + public function refreshCache(): RedirectResponse + { + $this->newsService->clearCache(); + + return redirect()->route('claude-code.news.index') + ->with('success', '캐시가 새로고침되었습니다.'); + } +} diff --git a/app/Services/ClaudeCodeNewsService.php b/app/Services/ClaudeCodeNewsService.php new file mode 100644 index 00000000..1bb4be4b --- /dev/null +++ b/app/Services/ClaudeCodeNewsService.php @@ -0,0 +1,74 @@ +fetchFromGitHub($perPage); + }); + } + + /** + * 캐시 클리어 + */ + public function clearCache(): void + { + Cache::forget(self::CACHE_KEY); + } + + /** + * GitHub API에서 릴리즈 정보 가져오기 + */ + private function fetchFromGitHub(int $perPage): array + { + try { + $response = Http::withHeaders([ + 'Accept' => 'application/vnd.github.v3+json', + 'User-Agent' => 'SAM-MNG-App', + ])->timeout(10)->get(self::API_URL, [ + 'per_page' => $perPage, + ]); + + if (! $response->successful()) { + return []; + } + + return collect($response->json()) + ->map(function ($release) { + return [ + 'id' => $release['id'], + 'tag_name' => $release['tag_name'], + 'name' => $release['name'] ?? $release['tag_name'], + 'body_html' => Str::markdown($release['body'] ?? ''), + 'published_at' => $release['published_at'], + 'author' => $release['author']['login'] ?? 'unknown', + 'author_avatar' => $release['author']['avatar_url'] ?? '', + 'html_url' => $release['html_url'], + 'prerelease' => $release['prerelease'] ?? false, + 'draft' => $release['draft'] ?? false, + ]; + }) + ->toArray(); + } catch (\Exception $e) { + report($e); + + return []; + } + } +} diff --git a/resources/views/claude-code/news/index.blade.php b/resources/views/claude-code/news/index.blade.php new file mode 100644 index 00000000..2403e5a2 --- /dev/null +++ b/resources/views/claude-code/news/index.blade.php @@ -0,0 +1,166 @@ +@extends('layouts.app') + +@section('title', 'Claude Code 뉴스') + +@push('styles') + +@endpush + +@section('content') +
GitHub Releases에서 최신 업데이트를 확인합니다.
+GitHub API에 접속할 수 없거나 릴리즈가 없습니다.
+