63 lines
1.9 KiB
TypeScript

import { createServerFn } from "@tanstack/react-start";
import { BacklinksService } from "@/server/features/backlinks/services/BacklinksService";
import { requireProjectContext } from "@/serverFunctions/middleware";
import {
backlinksOverviewInputSchema,
backlinksRowsPageRequestSchema,
referringDomainsPageRequestSchema,
topPagesPageRequestSchema,
} from "@/types/schemas/backlinks";
// The web UI exposes spam score as a regular user filter, so the implicit
// DataForSEO spam-score cutoff stays off for all web requests.
const WEB_SPAM_OPTIONS = { hideSpam: false };
export const getBacklinksOverview = createServerFn({
method: "POST",
})
.middleware(requireProjectContext)
.inputValidator((data: unknown) => backlinksOverviewInputSchema.parse(data))
.handler(async ({ data, context }) => {
const profile = await BacklinksService.profileOverview(
{
target: data.target,
scope: data.scope,
},
context,
);
return profile.overview;
});
export const getBacklinksRows = createServerFn({
method: "POST",
})
.middleware(requireProjectContext)
.inputValidator((data: unknown) => backlinksRowsPageRequestSchema.parse(data))
.handler(({ data, context }) =>
BacklinksService.profileBacklinksPage(data, context, WEB_SPAM_OPTIONS),
);
export const getBacklinksReferringDomains = createServerFn({
method: "POST",
})
.middleware(requireProjectContext)
.inputValidator((data: unknown) =>
referringDomainsPageRequestSchema.parse(data),
)
.handler(({ data, context }) =>
BacklinksService.profileReferringDomainsPage(
data,
context,
WEB_SPAM_OPTIONS,
),
);
export const getBacklinksTopPages = createServerFn({
method: "POST",
})
.middleware(requireProjectContext)
.inputValidator((data: unknown) => topPagesPageRequestSchema.parse(data))
.handler(({ data, context }) =>
BacklinksService.profileTopPagesPage(data, context),
);