From 5b3bc59dd0025cd6a0ec4c9afa10a887c0a6cd32 Mon Sep 17 00:00:00 2001 From: Murtaza Sadriwala Date: Wed, 9 Oct 2024 22:01:43 +0530 Subject: [PATCH 1/2] Tagline Generation resolved --- ai/generateTagline.js | 41 +++++++++++---------- src/app/api/ai/route.js | 79 ++++++++++++++++++++--------------------- src/app/page.jsx | 29 +++++++++++++-- 3 files changed, 85 insertions(+), 64 deletions(-) diff --git a/ai/generateTagline.js b/ai/generateTagline.js index e8b4985..5b6083e 100644 --- a/ai/generateTagline.js +++ b/ai/generateTagline.js @@ -1,28 +1,27 @@ const { GoogleGenerativeAI } = require("@google/generative-ai"); -const genAI = new GoogleGenerativeAI(process.env.GEMINI_KEY); +const genAI = new GoogleGenerativeAI(process.env.API_enter_here); const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" }); export async function generateUserTagline(username, contributions) { - const prompt = ` - Generate a custom tagline for the GitHub user "${username}" based on the following activity and contribution patterns: - - Total Contributions: ${contributions.totalCommitContributions} - - Active Coding Days: ${contributions.contributionCalendar.totalContributions} - - Most Used Programming Languages: (You can add logic to fetch this info if needed) - - The tagline should be consistent, meaningful, and provide an at-a-glance summary of the user's work. - `; + const prompt = ` + Generate a custom tagline for the GitHub user "${username}" based on the following activity and contribution patterns: + - Total Contributions: ${contributions.totalCommitContributions} + - Active Coding Days: ${contributions.contributionCalendar.totalContributions} + - Most Used Programming Languages: ${topLanguages} + + The tagline should be consistent, meaningful, and provide an at-a-glance summary of the user's work. + `; - try { - const result = await model.generateContent(prompt); - // Assuming the API returns a JSON object with a 'tagline' field - if (result.response) { - return result.response.text; - } else { - throw new Error("Tagline not found in the response"); - } - } catch (error) { - console.error("Error generating tagline:", error); - return "No tagline available"; // Fallback message + try { + const result = await model.generateContent(prompt); + if (result.response) { + return result.response.text; + } else { + throw new Error("Tagline not found in the response"); } -} + } catch (error) { + console.error("Error generating tagline:", error); + return "No tagline available"; + } +} \ No newline at end of file diff --git a/src/app/api/ai/route.js b/src/app/api/ai/route.js index e6cc7da..b81842e 100644 --- a/src/app/api/ai/route.js +++ b/src/app/api/ai/route.js @@ -2,13 +2,13 @@ import { NextResponse } from "next/server"; const GITHUB_API_URL = "https://api.github.com/graphql"; export async function POST(req) { - const { username } = await req.json(); + const { username } = await req.json(); - if (!username) { - return new NextResponse("Username required", { status: 400 }); - } + if (!username) { + return new NextResponse("Username required", { status: 400 }); + } - const query = ` + const query = ` query ($login: String!) { user(login: $login) { login @@ -35,41 +35,40 @@ export async function POST(req) { } `; - try { - const response = await fetch(GITHUB_API_URL, { - method: "POST", - headers: { - Accept: "application/json", - Authorization: `Bearer ${process.env.GITHUB_TOKEN}`, - "Content-Type": "application/json", - }, - body: JSON.stringify({ - query, - variables: { login: username }, - }), - }); + try { + const response = await fetch(GITHUB_API_URL, { + method: "POST", + headers: { + Accept: "application/json", + Authorization: `Bearer ${process.env.GITHUB_TOKEN}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + query, + variables: { login: username }, + }), + }); - if (!response.ok) { - return new NextResponse(await response.text(), { - status: response.status, - }); - } + if (!response.ok) { + return new NextResponse(await response.text(), { + status: response.status, + }); + } - const data = await response.json(); - console.log(data); - if (data.data.user) { - const contributions = data.data.user.contributionsCollection; - return NextResponse.json({ - exists: true, - totalContributions: contributions.totalCommitContributions, - activeCodingDays: contributions.contributionCalendar.totalContributions - }); - } else { - return NextResponse.json({ exists: false }); - } - } catch (error) { - console.error("Error checking GitHub username:", error); - return new NextResponse("Internal Server Error", { status: 500 }); + const data = await response.json(); + console.log(data); + if (data.data.user) { + const contributions = data.data.user.contributionsCollection; + const tagline = await generateUserTagline(username, contributions); + return NextResponse.json({ + exists: true, + tagline, + }); + } else { + return NextResponse.json({ exists: false }); } -} -export default contributions; + } catch (error) { + console.error("Error checking GitHub username:", error); + return new NextResponse("Internal Server Error", { status: 500 }); + } +} \ No newline at end of file diff --git a/src/app/page.jsx b/src/app/page.jsx index ba52dc2..0798532 100644 --- a/src/app/page.jsx +++ b/src/app/page.jsx @@ -1,7 +1,30 @@ -import Home from "../../components/Home"; +import { useState, useEffect } from "react"; +import { useRouter } from "next/navigation"; +import { generateUserTagline } from "../api/ai/route"; + +function UserPage({ params }) { + const { username } = params; + const router = useRouter(); + const [tagline, setTagline] = useState(""); + + useEffect(() => { + const fetchTagline = async () => { + const response = await fetch(`/api/ai?username=${username}`); + const data = await response.json(); + if (data.exists) { + setTagline(data.tagline); + } else { + setTagline("No tagline available"); + } + }; + fetchTagline(); + }, [username]); -export default function Page() { return ( - +
+

{tagline}

+
); } + +export default UserPage; \ No newline at end of file From a0cd3e17024d1ae2b90cf694eafe3215694f31da Mon Sep 17 00:00:00 2001 From: Murtaza Sadriwala Date: Thu, 10 Oct 2024 00:28:59 +0530 Subject: [PATCH 2/2] Issues Resolved --- src/app/page.jsx | 31 ++++--------------------------- 1 file changed, 4 insertions(+), 27 deletions(-) diff --git a/src/app/page.jsx b/src/app/page.jsx index 0798532..7c4058d 100644 --- a/src/app/page.jsx +++ b/src/app/page.jsx @@ -1,30 +1,7 @@ -import { useState, useEffect } from "react"; -import { useRouter } from "next/navigation"; -import { generateUserTagline } from "../api/ai/route"; - -function UserPage({ params }) { - const { username } = params; - const router = useRouter(); - const [tagline, setTagline] = useState(""); - - useEffect(() => { - const fetchTagline = async () => { - const response = await fetch(`/api/ai?username=${username}`); - const data = await response.json(); - if (data.exists) { - setTagline(data.tagline); - } else { - setTagline("No tagline available"); - } - }; - fetchTagline(); - }, [username]); +import Home from "../../components/Home"; +export default function Page() { return ( -
-

{tagline}

-
+ ); -} - -export default UserPage; \ No newline at end of file +} \ No newline at end of file