Skip to content

Commit eb71d5f

Browse files
committed
feat(community) : public 상태 리포지토리 조회 프론트 작성
1 parent 9e626ef commit eb71d5f

File tree

13 files changed

+179
-47
lines changed

13 files changed

+179
-47
lines changed

front/.idea/.gitignore

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

front/.idea/front.iml

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

front/.idea/inspectionProfiles/Project_Default.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

front/.idea/misc.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

front/.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

front/.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

front/src/app/community/page.tsx

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
// 커뮤니티 사용자 분석 결과 상세 페이지, 댓글 기능 있어야 하는 곳
2-
"use client"
3-
4-
import { useCommunity } from "@/hooks/community/useCommunity"
5-
import RepoList from "@/components/community/RepoList"
6-
7-
export default function CommunityPage() {
8-
const { repos, loading, error } = useCommunity()
9-
10-
if (loading) return <div>Loading...</div>
11-
if (error) return <div>에러가 발생했습니다 😢</div>
12-
13-
return <RepoList repos={repos} />
14-
}
2+
import RepositoryList from '@/components/community/RepoList';
3+
4+
export default function HomePage() {
5+
return (
6+
<main className="max-w-3xl mx-auto p-6">
7+
<h1 className="text-3xl font-bold mb-2 text-blue-600">Portfol.ioQ</h1>
8+
<p className="text-gray-500 text-sm mb-6">커뮤니티 레포지토리 피드</p>
9+
<RepositoryList />
10+
</main>
11+
);
12+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
'use client';
2+
3+
import type { RepositoryItem } from '@/types/community';
4+
5+
export default function RepositoryCard({ item }: { item: RepositoryItem }) {
6+
return (
7+
<article className="bg-white border border-gray-200 rounded-2xl shadow-sm p-5 hover:shadow-md transition-all duration-200">
8+
{/* 사용자 정보 */}
9+
<div className="flex items-center mb-3">
10+
{item.userImage ? (
11+
<img
12+
src={item.userImage}
13+
alt={item.userName}
14+
className="w-10 h-10 rounded-full mr-3"
15+
/>
16+
) : (
17+
<div className="w-10 h-10 rounded-full bg-gray-200 flex items-center justify-center text-gray-600 font-bold mr-3">
18+
{item.userName.charAt(0).toUpperCase()}
19+
</div>
20+
)}
21+
<div>
22+
<p className="font-semibold text-sm">{item.userName}</p>
23+
<p className="text-gray-500 text-xs">@{item.userName.toLowerCase()}</p>
24+
</div>
25+
<span className="ml-auto text-gray-400 text-xs">2시간 전</span>
26+
</div>
27+
28+
{/* 레포지토리 링크 */}
29+
<a
30+
href="#"
31+
className="text-blue-600 font-semibold text-sm hover:underline"
32+
>
33+
{item.userName}/{item.repositoryName}
34+
</a>
35+
36+
{/* 요약 */}
37+
<p className="mt-2 text-gray-700 text-sm leading-relaxed">
38+
{item.summary}
39+
</p>
40+
41+
{/* 점수 */}
42+
<div className="bg-gray-50 mt-4 p-3 rounded-xl border">
43+
<p className="text-xs text-gray-500 mb-1 font-medium">Overall Score</p>
44+
<p className="text-green-600 font-bold text-2xl">{item.totalScore}</p>
45+
</div>
46+
47+
{/* 언어 태그 */}
48+
<div className="mt-3 flex flex-wrap gap-2">
49+
{item.language.map((lang, idx) => (
50+
<span
51+
key={idx}
52+
className="text-xs bg-gray-100 text-gray-800 px-2 py-1 rounded-full font-medium"
53+
>
54+
{lang}
55+
</span>
56+
))}
57+
</div>
58+
59+
{/* 하단 */}
60+
<div className="flex justify-between items-center mt-4 text-gray-500 text-sm">
61+
<div className="flex gap-4">
62+
<span>❤️ 128</span>
63+
<span>💬 24</span>
64+
<span>🔗 Share</span>
65+
</div>
66+
<button className="border px-3 py-1 rounded-full text-xs font-semibold hover:bg-gray-100">
67+
View Analysis
68+
</button>
69+
</div>
70+
</article>
71+
);
72+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
'use client';
2+
3+
import { useRepositories } from '@/hooks/community/useCommunity';
4+
import RepositoryCard from './RepoCard';
5+
6+
export default function RepositoryList() {
7+
const { data, loading, error } = useRepositories();
8+
9+
if (loading) return <p>로딩 중...</p>;
10+
if (error) return <p className="text-red-500">에러 발생: {error}</p>;
11+
12+
return (
13+
<section className="flex flex-col gap-6 mt-6">
14+
{data.map((item, i) => (
15+
<RepositoryCard key={i} item={item} />
16+
))}
17+
</section>
18+
);
19+
}
15.1 KB
Loading

0 commit comments

Comments
 (0)