Skip to content

Instantly share code, notes, and snippets.

@alancriaxyz
Created April 20, 2023 08:07
Show Gist options
  • Save alancriaxyz/26c1959a8cd9886c4b18886f0c189603 to your computer and use it in GitHub Desktop.
Save alancriaxyz/26c1959a8cd9886c4b18886f0c189603 to your computer and use it in GitHub Desktop.
/// <reference types="google-spreadsheet" />
import { GoogleSpreadsheet } from "google-spreadsheet";
import { Tool } from "@prisma/client";
import { prisma } from "../../app/clients/prisma";
import slugify from 'slugify';
require("dotenv").config();
async function main() {
// Autenticação do Google Sheets API
const doc = new GoogleSpreadsheet("");
await doc.useServiceAccountAuth({
client_email: process.env.GOOGLE_SERVICE_ACCOUNT_EMAIL || "",
private_key: process.env.GOOGLE_PRIVATE_KEY || "".replace(/\\n/g, "\n"),
});
// Carrega as informações da planilha
await doc.loadInfo();
// Seleciona a primeira guia da planilha
const sheet = doc.sheetsByTitle['tools'];
sheet.getRows({limit: 10, offset: 10}).then(rows => {
rows.map(async row => {
if (!!row.name && !!row.tags && !!row.link) {
let linkObject = new URL(row.link);
let recordBuild: Pick<Tool, 'name' | 'link' | 'summary' | 'description' | 'youtube' | 'price' | 'active' | 'slug'> = {
name: row.name,
link: linkObject.origin,
summary: row.summary,
description: row.description.replace(/(<([^>]+)>)/gi, ""),
youtube: row.youtube,
price: row.price,
active: (row.active.toLowerCase() === "true") ? true : false,
slug: createSlug(row.name)
}
let toolTeste = await prisma.tool.upsert({
create: recordBuild,
update: recordBuild,
where: { slug: recordBuild.slug }
});
await prisma.tool.update({
data: { tags: { deleteMany: {} } },
where: { id: toolTeste.id }
})
const tagsArray = row.tags.split(',');
const tagSlugs = tagsArray.map((tag: string) => createSlug(tag));
const existingTags = await prisma.tag.findMany({
select: { id: true },
where: { slug: { in: tagSlugs } }
});
await prisma.tool.update({
where: { id: toolTeste.id },
data: {
tags: {
create: existingTags.map(({ id }) => ({
tag: {
connect: {
id: id
}
}
}))
}
},
});
if (recordBuild.slug != row.slug) {
row.slug = recordBuild.slug;
row.description = recordBuild.description;
row.save();
console.log(`Tool ${recordBuild.name} atualizada com sucesso!`);
}
}
});
})
console.log('Tools atualizadas com sucesso!');
}
function createSlug(input: string): string {
return slugify(input, {
replacement: '-',
lower: true,
strict: true,
trim: true
});
}
main()
.catch((e) => {
console.error(e);
})
.finally(async () => {
await prisma.$disconnect();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment