Skip to content

Commit

Permalink
General eslint prettier + UI lib version update (#10)
Browse files Browse the repository at this point in the history
  • Loading branch information
nphivu414 authored Nov 14, 2023
1 parent dc4daea commit b4ba380
Show file tree
Hide file tree
Showing 141 changed files with 3,484 additions and 2,597 deletions.
10 changes: 5 additions & 5 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@
"root": true,
"extends": [
"next/core-web-vitals",
"prettier",
"plugin:tailwindcss/recommended",
"plugin:@typescript-eslint/recommended"
"plugin:@typescript-eslint/recommended",
"prettier"
],
"plugins": ["tailwindcss"],
"plugins": ["tailwindcss", "prettier"],
"rules": {
"@next/next/no-html-link-for-pages": "off",
"react/jsx-key": "off",
"tailwindcss/no-custom-classname": "off",
"indent": ["error", 2],
"@typescript-eslint/no-unused-vars": "error",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-empty-function": "off"
"@typescript-eslint/no-empty-function": "off",
"prettier/prettier": "error"
},
"settings": {
"tailwindcss": {
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

<p align="center">
<a href="#tech-stacks"><strong>Tech stacks</strong></a> ·
<a href="#nstallation"><strong>Installation</strong></a> ·
<a href="#installation"><strong>Installation</strong></a> ·
<a href="#run-locally"><strong>Run Locally</strong></a> ·
<a href="#authors"><strong>Authors</strong></a>
</p>
Expand Down
16 changes: 8 additions & 8 deletions app/(auth)/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { AppLogo } from "@/components/ui/common/AppLogo"
import { AppLogo } from "@/components/ui/common/AppLogo";

type AuthLayoutProps = {
children: React.ReactNode
}
children: React.ReactNode;
};

export default function AuthLayout({ children }: AuthLayoutProps) {
return (
<div className="min-h-screen">
Expand All @@ -13,11 +13,11 @@ export default function AuthLayout({ children }: AuthLayoutProps) {
className="absolute inset-0 bg-ring bg-right-bottom brightness-50 lg:bg-center lg:brightness-100"
style={{
backgroundImage:
"url(https://images.unsplash.com/photo-1627645835237-0743e52b991f?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1587&q=80)",
"url(https://images.unsplash.com/photo-1627645835237-0743e52b991f?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1587&q=80)",
}}
/>
<div className="relative z-20 flex items-center text-lg font-medium">
<AppLogo/>
<AppLogo />
</div>
</div>
<div className="z-10 w-screen px-4 lg:w-full lg:p-8">
Expand All @@ -27,5 +27,5 @@ export default function AuthLayout({ children }: AuthLayoutProps) {
</div>
</div>
</div>
)
}
);
}
35 changes: 18 additions & 17 deletions app/(auth)/signin/page.tsx
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
import { Metadata } from "next"
import { redirect } from "next/navigation"
import { UserAuthForm } from "@/components/modules/auth/UserAuthForm"
import { getCurrentSession } from "@/lib/session"
import { createClient } from "@/lib/supabase/server"
import { cookies } from "next/headers"
import { Heading3 } from "@/components/ui/typography"
import { siteConfig } from "@/config/site"
import { Metadata } from "next";
import { cookies } from "next/headers";
import { redirect } from "next/navigation";

import { siteConfig } from "@/config/site";
import { getCurrentSession } from "@/lib/session";
import { createClient } from "@/lib/supabase/server";
import { Heading3 } from "@/components/ui/typography";
import { UserAuthForm } from "@/components/modules/auth/UserAuthForm";

export const metadata: Metadata = {
title: "Sigin",
description: "Sigin to your account",
}
};

export const runtime = "edge"
export const dynamic = 'force-dynamic'
export const runtime = "edge";
export const dynamic = "force-dynamic";

export default async function LoginPage() {
const cookieStore = cookies()
const supabase = createClient(cookieStore)
const session = await getCurrentSession(supabase)
const cookieStore = cookies();
const supabase = createClient(cookieStore);
const session = await getCurrentSession(supabase);

if (session) {
redirect(`/apps/chat`)
redirect(`/apps/chat`);
}

return (
Expand All @@ -34,5 +35,5 @@ export default async function LoginPage() {
</div>
<UserAuthForm />
</>
)
}
);
}
35 changes: 18 additions & 17 deletions app/(auth)/signup/page.tsx
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
import { Metadata } from "next"
import { redirect } from "next/navigation"
import { UserSignupForm } from "@/components/modules/auth/UserSignupForm"
import { createClient } from "@/lib/supabase/server"
import { getCurrentSession } from "@/lib/session"
import { cookies } from "next/headers"
import { Heading3 } from "@/components/ui/typography"
import { siteConfig } from "@/config/site"
import { Metadata } from "next";
import { cookies } from "next/headers";
import { redirect } from "next/navigation";

export const runtime = "edge"
import { siteConfig } from "@/config/site";
import { getCurrentSession } from "@/lib/session";
import { createClient } from "@/lib/supabase/server";
import { Heading3 } from "@/components/ui/typography";
import { UserSignupForm } from "@/components/modules/auth/UserSignupForm";

export const runtime = "edge";
export const metadata: Metadata = {
title: "Signup",
description: "Signup a new account",
}
};

export const dynamic = 'force-dynamic'
export const dynamic = "force-dynamic";

export default async function LoginPage() {
const cookieStore = cookies()
const supabase = createClient(cookieStore)
const session = await getCurrentSession(supabase)
const cookieStore = cookies();
const supabase = createClient(cookieStore);
const session = await getCurrentSession(supabase);

if (session) {
redirect(`/apps/chat`)
redirect(`/apps/chat`);
}

return (
Expand All @@ -34,5 +35,5 @@ export default async function LoginPage() {
</div>
<UserSignupForm />
</>
)
}
);
}
19 changes: 10 additions & 9 deletions app/api/auth/callback/route.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
import { NextResponse } from 'next/server'
import { cookies } from 'next/headers'
import { createClient } from '@/lib/supabase/server'
import { cookies } from "next/headers";
import { NextResponse } from "next/server";

import { createClient } from "@/lib/supabase/server";

export async function GET(request: Request) {
// The `/auth/callback` route is required for the server-side auth flow implemented
// by the Auth Helpers package. It exchanges an auth code for the user's session.
// https://supabase.com/docs/guides/auth/auth-helpers/nextjs#managing-sign-in-with-code-exchange
const requestUrl = new URL(request.url)
const code = requestUrl.searchParams.get('code')
const requestUrl = new URL(request.url);
const code = requestUrl.searchParams.get("code");

if (code) {
const cookieStore = cookies()
const supabase = createClient(cookieStore)
await supabase.auth.exchangeCodeForSession(code)
const cookieStore = cookies();
const supabase = createClient(cookieStore);
await supabase.auth.exchangeCodeForSession(code);
}

// URL to redirect to after sign in process completes
return NextResponse.redirect(requestUrl.origin)
return NextResponse.redirect(requestUrl.origin);
}
23 changes: 12 additions & 11 deletions app/api/auth/logout/route.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
import { createClient } from '@/lib/supabase/server'
import { cookies } from 'next/headers'
import { type NextRequest, NextResponse } from 'next/server'
import { cookies } from "next/headers";
import { NextResponse, type NextRequest } from "next/server";

export const dynamic = 'force-dynamic'
import { createClient } from "@/lib/supabase/server";

export const dynamic = "force-dynamic";

export async function POST(req: NextRequest) {
const cookieStore = cookies()
const supabase = createClient(cookieStore)
const cookieStore = cookies();
const supabase = createClient(cookieStore);

// Check if we have a session
const {
data: { session },
} = await supabase.auth.getSession()
} = await supabase.auth.getSession();

if (session) {
await supabase.auth.signOut()
await supabase.auth.signOut();
}

return NextResponse.redirect(new URL('/signin', req.url), {
return NextResponse.redirect(new URL("/signin", req.url), {
status: 302,
})
}
});
}
98 changes: 53 additions & 45 deletions app/api/chat/route.ts
Original file line number Diff line number Diff line change
@@ -1,33 +1,36 @@
import OpenAI from 'openai'
import { OpenAIStream, StreamingTextResponse } from 'ai'
import { pick } from 'lodash';
import { AxiomRequest, withAxiom } from 'next-axiom';
import { getCurrentSession } from '@/lib/session';
import { createNewMessage, deleteMessagesFrom, getMessageById } from '@/lib/db/message';
import { createNewChat } from '@/lib/db/chats';
import { getAppBySlug } from '@/lib/db/apps';
import { createClient } from "@/lib/supabase/server";
import { cookies } from "next/headers";
import { env } from "@/env.mjs";
import { OpenAIStream, StreamingTextResponse } from "ai";
import { pick } from "lodash";
import { AxiomRequest, withAxiom } from "next-axiom";
import OpenAI from "openai";

import { getAppBySlug } from "@/lib/db/apps";
import { createNewChat } from "@/lib/db/chats";
import {
env
} from '@/env.mjs';
createNewMessage,
deleteMessagesFrom,
getMessageById,
} from "@/lib/db/message";
import { getCurrentSession } from "@/lib/session";
import { createClient } from "@/lib/supabase/server";

export const dynamic = "force-dynamic";
export const runtime = "edge"
export const preferredRegion = "home"
export const runtime = "edge";
export const preferredRegion = "home";

const openai = new OpenAI({
apiKey: env.OPENAI_API_KEY
})
apiKey: env.OPENAI_API_KEY,
});

export const POST = withAxiom(async (req: AxiomRequest) => {
const log = req.log.with({
route: 'api/chat',
route: "api/chat",
});
const cookieStore = cookies()
const supabase = createClient(cookieStore)
const params = await req.json()

const cookieStore = cookies();
const supabase = createClient(cookieStore);
const params = await req.json();
const {
messages,
temperature,
Expand All @@ -39,18 +42,18 @@ export const POST = withAxiom(async (req: AxiomRequest) => {
chatId,
isRegenerate,
regenerateMessageId,
isNewChat
isNewChat,
} = params;

const session = await getCurrentSession(supabase)
const currentApp = await getAppBySlug(supabase, '/apps/chat')
const session = await getCurrentSession(supabase);
const currentApp = await getAppBySlug(supabase, "/apps/chat");

if (!session) {
return new Response('Unauthorized', { status: 401 })
return new Response("Unauthorized", { status: 401 });
}

const lastMessage = messages[messages.length - 1]
const profileId = session.user.id
const lastMessage = messages[messages.length - 1];
const profileId = session.user.id;

if (!isRegenerate) {
if (isNewChat && currentApp) {
Expand All @@ -59,45 +62,50 @@ export const POST = withAxiom(async (req: AxiomRequest) => {
appId: currentApp.id,
profileId,
name: lastMessage.content,
})
});
}
await createNewMessage(supabase, {
chatId,
content: lastMessage.content,
profileId,
role: 'user',
id: lastMessage.id
})
}else if (regenerateMessageId) {
const fromMessage = await getMessageById(supabase, regenerateMessageId)
role: "user",
id: lastMessage.id,
});
} else if (regenerateMessageId) {
const fromMessage = await getMessageById(supabase, regenerateMessageId);
if (fromMessage?.createdAt) {
await deleteMessagesFrom(supabase, chatId, profileId, fromMessage.createdAt)
await deleteMessagesFrom(
supabase,
chatId,
profileId,
fromMessage.createdAt
);
}
}

const response = await openai.chat.completions.create({
model,
temperature,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
messages: messages.map((message: any) => pick(message, 'content', 'role')),
messages: messages.map((message: any) => pick(message, "content", "role")),
max_tokens: maxTokens,
top_p: topP,
frequency_penalty: frequencyPenalty,
presence_penalty: presencePenalty,
stream: true
})
log.debug('Create stream');
stream: true,
});
log.debug("Create stream");

const stream = OpenAIStream(response, {
onCompletion: async (completion: string) => {
await createNewMessage(supabase, {
chatId,
content: completion,
profileId,
role: 'assistant',
})
}
})
return new StreamingTextResponse(stream)
})
role: "assistant",
});
},
});

return new StreamingTextResponse(stream);
});
Loading

0 comments on commit b4ba380

Please sign in to comment.