This commit is contained in:
Omer Sabic 2024-06-07 12:39:11 +02:00
parent f8af4a5df7
commit 0484c1dfc7
5 changed files with 88 additions and 50 deletions

View File

@ -43,7 +43,7 @@ export const sites = pgTable("sites", {
text_color_hex: varchar("text_color_hex", { length: 6 }).default('ffffff').notNull(), text_color_hex: varchar("text_color_hex", { length: 6 }).default('ffffff').notNull(),
title: text("title").default("The best blog in the world!"), title: text("title").default("The best blog in the world!"),
subtitle: text("subtitle").default("Some extra info about the best blog in the world!"), subtitle: text("subtitle").default("Some extra info about the best blog in the world!"),
domain: text("domain").default("").unique(), domain: text("domain").default(null).unique(),
use_freebie: boolean("send_freebie").default(false), use_freebie: boolean("send_freebie").default(false),
freebie_name: text("freebie_name").default(""), freebie_name: text("freebie_name").default(""),
freebie_url: text("freebie_url").default(""), freebie_url: text("freebie_url").default(""),

View File

@ -29,19 +29,20 @@ export const authRoutes = (fastify, _, done) => {
const [existing_user] = await db.select().from(usersTable).where(eq(usersTable.google_id, user_info.id)); const [existing_user] = await db.select().from(usersTable).where(eq(usersTable.google_id, user_info.id));
let user; let user;
await db.transaction(async tx => {
try {
if (existing_user) { if (existing_user) {
user = existing_user; user = existing_user;
if (token.refresh_token) { if (token.refresh_token) {
await db.update(sessions).set({ await tx.update(sessions).set({
refresh_token: token.refresh_token refresh_token: token.refresh_token
}).where(eq(sessions.user_id, user.id)); }).where(eq(sessions.user_id, user.id));
} }
} }
else { else {
const customer = await createCustomer(user_info.email, user_info.name); const customer = await createCustomer(user_info.email, user_info.name);
[user] = await db.insert(usersTable).values({ [user] = await tx.insert(usersTable).values({
name: user_info.name, name: user_info.name,
google_id: user_info.id, google_id: user_info.id,
email: user_info.email, email: user_info.email,
@ -50,7 +51,7 @@ export const authRoutes = (fastify, _, done) => {
stripe_id: customer.id stripe_id: customer.id
}).returning({ id: usersTable.id }); }).returning({ id: usersTable.id });
await db.insert(sites).values({ await tx.insert(sites).values({
name: `${user_info.name}'s Website`, name: `${user_info.name}'s Website`,
user_id: user.id user_id: user.id
}); });
@ -66,18 +67,24 @@ export const authRoutes = (fastify, _, done) => {
access_token: token.access_token, access_token: token.access_token,
refresh_token: token.refresh_token, refresh_token: token.refresh_token,
expires_at: new Date(token.expires_at) expires_at: new Date(token.expires_at)
}); }, tx);
session_id = session_info.session_id; session_id = session_info.session_id;
} }
else { else {
let session_info = await db.select().from(users).leftJoin(sessions, eq(sessions.user_id, users.id)).where(eq(users.google_id, user_info.id)); let session_info = await tx.select().from(users).leftJoin(sessions, eq(sessions.user_id, users.id)).where(eq(users.google_id, user_info.id));
if (session_info.length == 0) { if (session_info.length == 0) {
response.status(400).send({ success: false, message: "Problem when creating user account" }); response.status(400).send({ success: false, message: "Problem when creating user account" });
return; return;
} }
session_id = session_info[0].sessions.id session_id = session_info[0].sessions.id
} }
} catch (e) {
console.log(e);
await tx.rollback();
return;
}
})
// response.setCookie("token", session_id, { // response.setCookie("token", session_id, {
// httpOnly: false, // httpOnly: false,

View File

@ -1,6 +1,6 @@
/** @typedef {import("fastify").FastifyInstance} FastifyInstance */ /** @typedef {import("fastify").FastifyInstance} FastifyInstance */
import { desc, eq, getTableColumns, sql } from "drizzle-orm"; import { and, desc, eq, getTableColumns, sql } from "drizzle-orm";
import { db } from "../db/index.js"; import { db } from "../db/index.js";
import { articles, articles as articlesTable, signups as signupsTable, sites, users } from "../db/schemas.js"; import { articles, articles as articlesTable, signups as signupsTable, sites, users } from "../db/schemas.js";
import { authMiddleware, authMiddlewareFn } from "../modules/middleware.js"; import { authMiddleware, authMiddlewareFn } from "../modules/middleware.js";
@ -147,6 +147,37 @@ export const dashboardRoutes = (fastify, _, done) => {
return; return;
}); });
fastify.delete("/article", {
schema: {
querystring: {
type: "object",
properties: {
id: {
type: "string"
}
},
required: ["id"]
}
}
}, async (req, reply) => {
const [article] = await db.select(getTableColumns(articles)).from(articles).leftJoin(sites, eq(sites.id, articles.site_id)).where(and(eq(sites.user_id, req.session.user_id), eq(articles.id, req.query.id)));
if (!article) {
reply.status(404).send({
success: false,
message: "This article does not exist."
});
return;
}
await db.delete(articles).where(eq(articles.id, article.id));
reply.send({
success: true
});
return;
});
fastify.post("/create", { fastify.post("/create", {
schema: { schema: {
body: { body: {

View File

@ -12,7 +12,7 @@ const envSchema = z.object({
GOOGLE_CLIENT_ID: z.string(), GOOGLE_CLIENT_ID: z.string(),
GOOGLE_SECRET: z.string(), GOOGLE_SECRET: z.string(),
OPENAI_TOKEN: z.string(), OPENAI_TOKEN: z.string(),
CERTS_URL: z.string() CERTS_URL: z.string().nullable().default(null)
}); });
export const env = envSchema.parse(process.env); export const env = envSchema.parse(process.env);

View File

@ -12,9 +12,9 @@ import { sessions } from "../db/schemas.js";
export async function createSession(user_id, { export async function createSession(user_id, {
access_token, access_token,
refresh_token, refresh_token,
expires_at expires_at,
}) { }, tx = db) {
const [existing_session] = await db.select().from(sessions).where(eq(sessions.user_id, user_id)); const [existing_session] = await tx.select().from(sessions).where(eq(sessions.user_id, user_id));
if(existing_session) { if(existing_session) {
return { return {
@ -22,7 +22,7 @@ export async function createSession(user_id, {
} }
} }
const token = await db.insert(sessions).values({ const token = await tx.insert(sessions).values({
user_id, user_id,
access_token: access_token, access_token: access_token,
refresh_token: refresh_token, refresh_token: refresh_token,