66 lines
2.0 KiB
TypeScript
66 lines
2.0 KiB
TypeScript
import { createServerFn } from "@tanstack/react-start";
|
|
import {
|
|
researchKeywordsSchema,
|
|
saveKeywordsSchema,
|
|
getSavedKeywordsSchema,
|
|
removeSavedKeywordsSchema,
|
|
serpAnalysisSchema,
|
|
} from "@/types/schemas/keywords";
|
|
import { KeywordResearchService } from "@/server/features/keywords/services/KeywordResearchService";
|
|
import { requireProjectContext } from "@/serverFunctions/middleware";
|
|
|
|
export const researchKeywords = createServerFn({ method: "POST" })
|
|
.middleware(requireProjectContext)
|
|
.inputValidator((data: unknown) => researchKeywordsSchema.parse(data))
|
|
.handler(async ({ data, context }) => {
|
|
return KeywordResearchService.research(
|
|
{
|
|
...data,
|
|
projectId: context.projectId,
|
|
},
|
|
context,
|
|
);
|
|
});
|
|
|
|
export const saveKeywords = createServerFn({ method: "POST" })
|
|
.middleware(requireProjectContext)
|
|
.inputValidator((data: unknown) => saveKeywordsSchema.parse(data))
|
|
.handler(async ({ data, context }) => {
|
|
return KeywordResearchService.saveKeywords({
|
|
...data,
|
|
projectId: context.projectId,
|
|
});
|
|
});
|
|
|
|
export const getSavedKeywords = createServerFn({ method: "POST" })
|
|
.middleware(requireProjectContext)
|
|
.inputValidator((data: unknown) => getSavedKeywordsSchema.parse(data))
|
|
.handler(async ({ data, context }) => {
|
|
return KeywordResearchService.getSavedKeywords({
|
|
...data,
|
|
projectId: context.projectId,
|
|
});
|
|
});
|
|
|
|
export const removeSavedKeywords = createServerFn({
|
|
method: "POST",
|
|
})
|
|
.middleware(requireProjectContext)
|
|
.inputValidator((data: unknown) => removeSavedKeywordsSchema.parse(data))
|
|
.handler(async ({ data, context }) => {
|
|
return KeywordResearchService.removeSavedKeywords(context.projectId, data);
|
|
});
|
|
|
|
export const getSerpAnalysis = createServerFn({ method: "POST" })
|
|
.middleware(requireProjectContext)
|
|
.inputValidator((data: unknown) => serpAnalysisSchema.parse(data))
|
|
.handler(async ({ data, context }) =>
|
|
KeywordResearchService.getSerpAnalysis(
|
|
{
|
|
...data,
|
|
projectId: context.projectId,
|
|
},
|
|
context,
|
|
),
|
|
);
|