From c79c1ff5f64ba4f9c7c3c17c5379774ba57e1adc Mon Sep 17 00:00:00 2001 From: Faye Date: Fri, 27 Sep 2024 01:35:10 +0200 Subject: [PATCH] remove unused routes, fix get device --- src/app/[locale]/(main)/app/page.client.tsx | 38 +++++++++++-------- .../api/account/gallery/singleImage/route.ts | 21 ---------- src/app/api/device/route.ts | 6 +++ src/app/api/events/route.ts | 14 ------- src/app/layout.tsx | 15 +++++++- 5 files changed, 43 insertions(+), 51 deletions(-) delete mode 100644 src/app/api/account/gallery/singleImage/route.ts create mode 100644 src/app/api/device/route.ts delete mode 100644 src/app/api/events/route.ts diff --git a/src/app/[locale]/(main)/app/page.client.tsx b/src/app/[locale]/(main)/app/page.client.tsx index 629f4747..cc2ec225 100644 --- a/src/app/[locale]/(main)/app/page.client.tsx +++ b/src/app/[locale]/(main)/app/page.client.tsx @@ -6,27 +6,35 @@ import { DownloadIcon } from 'lucide-react' import { Button } from '@/components/ui/button' import Link from 'next/link' -const isMobileDevice = () => { - const userAgent = - navigator.userAgent || navigator.vendor || (window as any).opera - if (/android/i.test(userAgent)) { - return 'android' - } - if (/iPad|iPhone|iPod/.test(userAgent) && !(window as any).MSStream) { - return 'ios' +interface DeviceType { + model?: string + type?: string + vendor?: string +} + +const isMobileDevice = async () => { + const deviceType: DeviceType = await fetch('/api/device').then((res) => + res.json() + ) + + if (deviceType.type === 'mobile') { + if (deviceType.vendor === 'Apple') { + window.location.href = 'https://apps.apple.com/app/headpat/id6502715063' + } else if (deviceType.vendor === 'Google') { + window.location.href = + 'https://play.google.com/store/apps/details?id=com.headpat.app' + } } - return null + return 'unknown' } export default function PageClient() { useEffect(() => { - const deviceType = isMobileDevice() - if (deviceType === 'android') { - window.location.href = - 'https://play.google.com/store/apps/details?id=com.headpat.app' - } else if (deviceType === 'ios') { - window.location.href = 'https://apps.apple.com/app/headpat/id6502715063' + const fetchDevice = async () => { + await isMobileDevice() } + + fetchDevice().then() }, []) return ( diff --git a/src/app/api/account/gallery/singleImage/route.ts b/src/app/api/account/gallery/singleImage/route.ts deleted file mode 100644 index e3c0f3d2..00000000 --- a/src/app/api/account/gallery/singleImage/route.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { createSessionClient } from '@/app/appwrite-session' - -export const runtime = 'edge' - -export async function GET(request: Request) { - if ( - request.headers - .get('referer') - ?.includes(process.env.NEXT_PUBLIC_DOMAIN as string) - ) { - return Response.json({ error: 'Unauthorized' }, { status: 401 }) - } - const { account } = await createSessionClient(request) - - try { - const user = await account.get() - return Response.json(user) - } catch (error) { - return Response.json(error) - } -} diff --git a/src/app/api/device/route.ts b/src/app/api/device/route.ts new file mode 100644 index 00000000..a4caf14f --- /dev/null +++ b/src/app/api/device/route.ts @@ -0,0 +1,6 @@ +import { NextRequest, NextResponse, userAgent } from 'next/server' + +export async function GET(request: NextRequest) { + const { device } = userAgent(request) + return NextResponse.json(device) +} diff --git a/src/app/api/events/route.ts b/src/app/api/events/route.ts deleted file mode 100644 index 8e4df662..00000000 --- a/src/app/api/events/route.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { createSessionClient } from '@/app/appwrite-session' - -export const runtime = 'edge' - -export async function GET(request: Request) { - const { databases } = await createSessionClient(request) - - try { - const eventList = await databases.listDocuments('hp_db', 'events') - return Response.json(eventList) - } catch (error) { - return Response.json(error) - } -} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 91f820eb..00cf1ed1 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -5,10 +5,11 @@ import { Toaster } from '@/components/ui/toaster' import { Toaster as SonnerToaster } from '@/components/ui/sonner' import { cn } from '@/lib/utils' import { UserProvider } from '@/components/contexts/UserContext' +import { Metadata } from 'next' const inter = Inter({ subsets: ['latin'] }) -export async function generateMetadata() { +export async function generateMetadata(): Promise { return { title: { default: 'Headpat Community', @@ -29,6 +30,7 @@ export async function generateMetadata() { ], icons: { icon: '/logos/Headpat_Logo_web_1024x1024_240518-02.png', + apple: '/logos/Headpat_Logo_web_1024x1024_240518-02.png', }, openGraph: { title: 'Headpat Community', @@ -37,6 +39,17 @@ export async function generateMetadata() { images: '/logos/Headpat_Logo_web_1024x1024_240518-02.png', type: 'website', }, + appLinks: { + android: { + url: 'https://play.google.com/store/apps/details?id=com.headpat.app', + package: 'com.headpat.app', + }, + ios: { + url: 'https://apps.apple.com/app/headpat/id6502715063', + app_store_id: '6502715063', + }, + }, + generator: 'Headpat', metadataBase: new URL(process.env.NEXT_PUBLIC_DOMAIN), } }