mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-11-09 05:26:24 +09:00
Migrated prisma with postgrest in project build. Got two cases - in many cases it is ok to use a couple of select queries since round trip is low - transactions can be avoided with late binding to user
75 lines
2.1 KiB
TypeScript
75 lines
2.1 KiB
TypeScript
import { prisma } from "@webstudio-is/prisma-client";
|
|
import { MarketplaceProduct } from "@webstudio-is/project-build";
|
|
import type { BuildData, MarketplaceOverviewItem } from "./types";
|
|
import {
|
|
loadApprovedProdBuildByProjectId,
|
|
parseConfig,
|
|
} from "@webstudio-is/project-build/index.server";
|
|
import type { AppContext } from "@webstudio-is/trpc-interface/index.server";
|
|
import { Project } from "@webstudio-is/project";
|
|
import { loadAssetsByProject } from "@webstudio-is/asset-uploader/index.server";
|
|
|
|
export const getBuildProdData = async (
|
|
{ projectId }: { projectId: Project["id"] },
|
|
context: AppContext
|
|
): Promise<BuildData> => {
|
|
const build = await loadApprovedProdBuildByProjectId(context, projectId);
|
|
|
|
const assets = await loadAssetsByProject(projectId, context, {
|
|
skipPermissionsCheck: true,
|
|
});
|
|
|
|
return {
|
|
assets: assets.map((asset) => [asset.id, asset]),
|
|
build,
|
|
};
|
|
};
|
|
|
|
export const getItems = async (): Promise<Array<MarketplaceOverviewItem>> => {
|
|
const approvedMarketplaceProducts =
|
|
await prisma.approvedMarketplaceProduct.findMany();
|
|
|
|
const items: MarketplaceOverviewItem[] = [];
|
|
|
|
for (const approvedMarketplaceProduct of approvedMarketplaceProducts) {
|
|
const parsedProduct = MarketplaceProduct.safeParse(
|
|
parseConfig(approvedMarketplaceProduct.marketplaceProduct)
|
|
);
|
|
|
|
if (parsedProduct.success === false) {
|
|
console.error(parsedProduct.error.formErrors.fieldErrors);
|
|
continue;
|
|
}
|
|
|
|
items.push({
|
|
projectId: approvedMarketplaceProduct.projectId,
|
|
authorizationToken:
|
|
approvedMarketplaceProduct.authorizationToken ?? undefined,
|
|
...parsedProduct.data,
|
|
});
|
|
}
|
|
const assetIds = items
|
|
.map((item) => item.thumbnailAssetId)
|
|
.filter((value): value is string => value != null);
|
|
|
|
const assets =
|
|
assetIds.length > 0
|
|
? await prisma.asset.findMany({
|
|
where: {
|
|
id: {
|
|
in: assetIds,
|
|
},
|
|
},
|
|
})
|
|
: [];
|
|
|
|
return items.map((item) => {
|
|
return {
|
|
...item,
|
|
thumbnailAssetName: assets.find(
|
|
(asset) => asset.id === item.thumbnailAssetId
|
|
)?.name,
|
|
};
|
|
});
|
|
};
|