feat: automatically generate showcase data

This commit is contained in:
DIYgod 2023-04-25 19:36:09 +01:00
parent 65ec562707
commit 763eefeedb
No known key found for this signature in database
10 changed files with 39 additions and 55 deletions

View File

@ -1,18 +0,0 @@
[
10, 33446, 572, 45, 153, 12, 506, 30, 595, 45899, 22033, 51494, 51124, 51232,
40669, 45828, 26375, 49041, 48952, 51408, 51470, 51072, 496, 38034, 47359,
33335, 50701, 50161, 470, 50312, 21052, 32022, 274, 77, 50168, 51145, 47328,
630, 383, 51383, 723, 51172, 4583, 50472, 32179, 51316, 33210, 45089, 51094,
31132, 50140, 37137, 42839, 50114, 51006, 51191, 50843, 46648, 887, 51126,
51197, 32085, 1407, 51154, 51104, 40675, 4381, 43051, 50622, 51056, 33483, 19,
50877, 33420, 50094, 49213, 33276, 50351, 42993, 50216, 50132, 50143, 43754,
32168, 500, 47399, 33538, 48951, 33471, 33396, 37223, 33458, 39133, 20004,
43625, 42787, 43258, 33462, 47109, 46939, 45701, 33233, 37346, 40671, 51552,
51585, 48937, 51379, 51460, 51084, 51509, 51478, 51639, 48910, 51139, 39329,
51683, 51077, 51374, 49120, 47356, 17096, 50708, 51430, 51935, 51756, 6558,
49392, 52186, 52055, 52282, 52270, 5825, 51351, 52233, 51308, 52388, 52280,
52718, 52951, 52103, 52314, 52336, 52816, 52766, 52760, 660, 52728, 52683,
51617, 53087, 53081, 52184, 43000, 53444, 53470, 50141, 52947, 51406, 53563,
52800, 53637, 1361, 53518, 53584, 51803, 53387, 53731, 54169, 53657, 51540,
54050, 53827, 54187, 52319, 517, 52323, 54613, 54513, 50181, 54575, 53710, 54245, 19489, 54515, 54315, 54641
]

View File

@ -11,15 +11,14 @@ import { UniLink } from "~/components/ui/UniLink"
import { getSiteLink } from "~/lib/helpers"
import {
useAccountSites,
useGetSites,
useGetShowcase,
useSubscribeToSites,
} from "~/queries/site"
import showcase from "../../../data/showcase.json"
import topics from "../../../data/topics.json"
export function MainSidebar({ hideSearch }: { hideSearch?: boolean }) {
const showcaseSites = useGetSites(showcase)
const showcaseSites = useGetShowcase()
const { t } = useTranslation("index")
const userSite = useAccountSites()

View File

@ -91,17 +91,34 @@ export const getSite = async (input: string, customUnidata?: Unidata) => {
return site
}
export const getSites = async (input: number[]) => {
export const getShowcase = async () => {
const client = createClient({
url: "https://indexer.crossbell.io/v1/graphql",
exchanges: [cacheExchange, fetchExchange],
})
const oneMonthAgo = dayjs().subtract(15, "day").toISOString()
const oneMonthAgo = dayjs().subtract(10, "day").toISOString()
const listResponse = await client
.query(
`
query getCharacters {
characters( where: { notes: { some: { stat: { viewDetailCount: { gte: 100 } }, metadata: { content: { path: "sources", array_contains: "xlog" }, AND: { content: { path: "tags", array_contains: "post" } } } } } } ) {
characterId
}
}
`,
{},
)
.toPromise()
const characterList = listResponse.data?.characters.map((c: any) =>
parseInt(c.characterId),
)
const result = await client
.query(
`
query getCharacters($identities: [Int!], $limit: Int) {
characters( where: { characterId: { in: $identities } }, orderBy: [{ updatedAt: desc }], take: $limit ) {
query getCharacters($identities: [Int!]) {
characters( where: { characterId: { in: $identities } }, orderBy: [{ updatedAt: desc }] ) {
handle
characterId
metadata {
@ -115,7 +132,7 @@ export const getSites = async (input: number[]) => {
}
}`,
{
identities: input,
identities: characterList,
},
)
.toPromise()
@ -157,6 +174,7 @@ export const getSites = async (input: number[]) => {
.sort((a: any, b: any) => {
return b.createdAt > a.createdAt ? 1 : -1
})
.slice(0, 100)
return list
}

View File

@ -14,11 +14,9 @@ import type { FeedType } from "~/models/home.model"
import { prefetchGetFeed } from "~/queries/home.server"
import { prefetchGetSites } from "~/queries/site.server"
import showcase from "../../data/showcase.json"
export const getServerSideProps: GetServerSideProps = async (ctx) => {
const queryClient = new QueryClient()
await prefetchGetSites(showcase, queryClient)
await prefetchGetSites(queryClient)
await prefetchGetFeed(
{
type: "latest",

View File

@ -14,9 +14,7 @@ import { DISCORD_LINK, GITHUB_LINK, TWITTER_LINK } from "~/lib/env"
import { getSiteLink } from "~/lib/helpers"
import { serverSidePropsHandler } from "~/lib/server-side-props"
import { useGetPagesBySite } from "~/queries/page"
import { useGetSite, useGetSites, useGetStat } from "~/queries/site"
import showcase from "../../../../data/showcase.json"
import { useGetShowcase, useGetSite, useGetStat } from "~/queries/site"
export const getServerSideProps: GetServerSideProps = serverSidePropsHandler(
async (ctx) => {
@ -72,7 +70,7 @@ export default function SubdomainIndex() {
take: 4,
})
const showcaseSites = useGetSites(showcase)
const showcaseSites = useGetShowcase()
return (
<DashboardMain title="Dashboard" className="max-w-screen-2xl">

View File

@ -29,16 +29,14 @@ import { getSiteLink } from "~/lib/helpers"
import { languageDetector } from "~/lib/language-detector"
import {
useAccountSites,
useGetSites,
useGetShowcase,
useSubscribeToSites,
} from "~/queries/site"
import { prefetchGetSites } from "~/queries/site.server"
import showcase from "../../data/showcase.json"
export const getServerSideProps: GetServerSideProps = async (ctx) => {
const queryClient = new QueryClient()
await prefetchGetSites(showcase, queryClient)
await prefetchGetSites(queryClient)
return {
props: {
@ -54,7 +52,7 @@ export const getServerSideProps: GetServerSideProps = async (ctx) => {
function Home() {
const isConnected = useAccountState((s) => !!s.computed.account)
const router = useRouter()
const showcaseSites = useGetSites(showcase)
const showcaseSites = useGetShowcase()
const { t } = useTranslation("index")
const tryNow = () => {

View File

@ -12,11 +12,9 @@ import { MainSidebar } from "~/components/main/MainSidebar"
import { languageDetector } from "~/lib/language-detector"
import { prefetchGetSites } from "~/queries/site.server"
import showcase from "../../data/showcase.json"
export const getServerSideProps: GetServerSideProps = async (ctx) => {
const queryClient = new QueryClient()
await prefetchGetSites(showcase, queryClient)
await prefetchGetSites(queryClient)
return {
props: {

View File

@ -11,12 +11,11 @@ import { MainSidebar } from "~/components/main/MainSidebar"
import { languageDetector } from "~/lib/language-detector"
import { prefetchGetSites } from "~/queries/site.server"
import showcase from "../../../data/showcase.json"
import topics from "../../../data/topics.json"
export const getServerSideProps: GetServerSideProps = async (ctx) => {
const queryClient = new QueryClient()
await prefetchGetSites(showcase, queryClient)
await prefetchGetSites(queryClient)
return {
props: {

View File

@ -70,15 +70,12 @@ export const prefetchGetSiteToSubscriptions = async (
})
}
export const prefetchGetSites = async (
input: number[],
queryClient: QueryClient,
) => {
const key = ["getSites", input]
export const prefetchGetSites = async (queryClient: QueryClient) => {
const key = ["getShowcase"]
await queryClient.fetchQuery(key, async () => {
return cacheGet({
key,
getValueFun: () => siteModel.getSites(input),
getValueFun: () => siteModel.getShowcase(),
})
})
}

View File

@ -41,12 +41,9 @@ export const useGetSite = (input?: string) => {
})
}
export const useGetSites = (input: number[]) => {
return useQuery(["getSites", input], async () => {
if (!input) {
return null
}
return siteModel.getSites(input)
export const useGetShowcase = () => {
return useQuery(["getShowcase"], async () => {
return siteModel.getShowcase()
})
}