feat: add ai roadmap slug (#5529)
* Update * Add stats and health endpoints * Add pre-render * fix: redirect to the error page * Fix generate-renderer issue * Rename * Fix best practice topics not loading * Handle SSR for static pages * Refactor faqs * Refactor best practices * Fix absolute import * Fix stats * Add custom roadmap page * Minor UI change * feat: custom roadmap slug routes (#4987) * feat: replace roadmap slug * fix: remove roadmap slug * feat: username route * fix: user public page * feat: show roadmap progress * feat: update public profile * fix: replace with toast * feat: user public profile page * feat: implement profile form * feat: implement user profile roadmap page * refactor: remove logs * fix: increase progress gap * fix: remove title margin * fix: breakpoint for roadmaps * Update dependencies * Upgrade dependencies * fix: improper avatars * fix: heatmap focus * wip: remove `getStaticPaths` * fix: add disable props * wip * feat: add email icon * fix: update pnpm lock * fix: implement author page * Fix beginner roadmaps not working * Changes to form * Refactor profile and form * Refactor public profile form * Rearrange sidebar items * Update UI for public form * Minor text update * Refactor public profile form * Error page for user * Revamp UI for profile page * Add public profile page * Fix vite warnings * Add private profile banner * feat: on blur check username * Update fetch depth * Add error detail * Use hybrid mode of rendering * Do not pre-render stats pages * Update deployment workflow * Update deployment workflow * wip * wip * wip * feat: add slug navigation * feat: add ai roadmap slug * feat: add explore page slug --------- Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>fix/ai-slug
parent
6326a80b22
commit
961d398b8d
6 changed files with 148 additions and 31 deletions
@ -0,0 +1,20 @@ |
|||||||
|
import { type APIContext } from 'astro'; |
||||||
|
import { api } from './api.ts'; |
||||||
|
|
||||||
|
export type GetAIRoadmapBySlugResponse = { |
||||||
|
id: string; |
||||||
|
term: string; |
||||||
|
title: string; |
||||||
|
data: string; |
||||||
|
isAuthenticatedUser: boolean; |
||||||
|
}; |
||||||
|
|
||||||
|
export function aiRoadmapApi(context: APIContext) { |
||||||
|
return { |
||||||
|
getAIRoadmapBySlug: async function (roadmapSlug: string) { |
||||||
|
return api(context).get<GetAIRoadmapBySlugResponse>( |
||||||
|
`${import.meta.env.PUBLIC_API_URL}/v1-get-ai-roadmap-by-slug/${roadmapSlug}`, |
||||||
|
); |
||||||
|
}, |
||||||
|
}; |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
--- |
||||||
|
import { aiRoadmapApi } from '../../api/ai-roadmap'; |
||||||
|
import BaseLayout from '../../layouts/BaseLayout.astro'; |
||||||
|
import { GenerateRoadmap } from '../../components/GenerateRoadmap/GenerateRoadmap'; |
||||||
|
|
||||||
|
export const prerender = false; |
||||||
|
|
||||||
|
interface Params extends Record<string, string | undefined> { |
||||||
|
aiRoadmapSlug: string; |
||||||
|
} |
||||||
|
|
||||||
|
const { aiRoadmapSlug } = Astro.params as Params; |
||||||
|
if (!aiRoadmapSlug) { |
||||||
|
return Astro.redirect('/404'); |
||||||
|
} |
||||||
|
|
||||||
|
const aiRoadmapClient = aiRoadmapApi(Astro as any); |
||||||
|
const { response: roadmap, error } = |
||||||
|
await aiRoadmapClient.getAIRoadmapBySlug(aiRoadmapSlug); |
||||||
|
|
||||||
|
let errorMessage = ''; |
||||||
|
if (error || !roadmap) { |
||||||
|
errorMessage = error?.message || 'Error loading AI Roadmap'; |
||||||
|
} |
||||||
|
const title = roadmap?.title || 'Roadmap AI'; |
||||||
|
--- |
||||||
|
|
||||||
|
<BaseLayout title={title}> |
||||||
|
<GenerateRoadmap |
||||||
|
roadmapId={roadmap?.id} |
||||||
|
isAuthenticatedUser={roadmap?.isAuthenticatedUser} |
||||||
|
client:load |
||||||
|
/> |
||||||
|
</BaseLayout> |
Loading…
Reference in new issue