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(),
title: text("title").default("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),
freebie_name: text("freebie_name").default(""),
freebie_url: text("freebie_url").default(""),

View File

@ -29,55 +29,62 @@ export const authRoutes = (fastify, _, done) => {
const [existing_user] = await db.select().from(usersTable).where(eq(usersTable.google_id, user_info.id));
let user;
await db.transaction(async tx => {
try {
if (existing_user) {
user = existing_user;
if (existing_user) {
user = existing_user;
if (token.refresh_token) {
await tx.update(sessions).set({
refresh_token: token.refresh_token
}).where(eq(sessions.user_id, user.id));
}
}
else {
const customer = await createCustomer(user_info.email, user_info.name);
[user] = await tx.insert(usersTable).values({
name: user_info.name,
google_id: user_info.id,
email: user_info.email,
channel_id: channel_info.id,
uploads_playlist_id: channel_info.contentDetails.relatedPlaylists.uploads,
stripe_id: customer.id
}).returning({ id: usersTable.id });
if (token.refresh_token) {
await db.update(sessions).set({
refresh_token: token.refresh_token
}).where(eq(sessions.user_id, user.id));
}
}
else {
const customer = await createCustomer(user_info.email, user_info.name);
[user] = await db.insert(usersTable).values({
name: user_info.name,
google_id: user_info.id,
email: user_info.email,
channel_id: channel_info.id,
uploads_playlist_id: channel_info.contentDetails.relatedPlaylists.uploads,
stripe_id: customer.id
}).returning({ id: usersTable.id });
await tx.insert(sites).values({
name: `${user_info.name}'s Website`,
user_id: user.id
});
await db.insert(sites).values({
name: `${user_info.name}'s Website`,
user_id: user.id
});
if (user.length == 0) {
response.status(400).send({ success: false, message: "Problem when creating user account" });
return;
}
}
let session_id;
if (token.refresh_token) {
let session_info = await createSession(user.id, {
access_token: token.access_token,
refresh_token: token.refresh_token,
expires_at: new Date(token.expires_at)
}, tx);
if (user.length == 0) {
response.status(400).send({ success: false, message: "Problem when creating user account" });
session_id = session_info.session_id;
}
else {
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) {
response.status(400).send({ success: false, message: "Problem when creating user account" });
return;
}
session_id = session_info[0].sessions.id
}
} catch (e) {
console.log(e);
await tx.rollback();
return;
}
}
let session_id;
if (token.refresh_token) {
let session_info = await createSession(user.id, {
access_token: token.access_token,
refresh_token: token.refresh_token,
expires_at: new Date(token.expires_at)
});
session_id = session_info.session_id;
}
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));
if (session_info.length == 0) {
response.status(400).send({ success: false, message: "Problem when creating user account" });
return;
}
session_id = session_info[0].sessions.id
}
})
// response.setCookie("token", session_id, {
// httpOnly: false,

View File

@ -1,6 +1,6 @@
/** @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 { articles, articles as articlesTable, signups as signupsTable, sites, users } from "../db/schemas.js";
import { authMiddleware, authMiddlewareFn } from "../modules/middleware.js";
@ -147,6 +147,37 @@ export const dashboardRoutes = (fastify, _, done) => {
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", {
schema: {
body: {

View File

@ -12,7 +12,7 @@ const envSchema = z.object({
GOOGLE_CLIENT_ID: z.string(),
GOOGLE_SECRET: z.string(),
OPENAI_TOKEN: z.string(),
CERTS_URL: z.string()
CERTS_URL: z.string().nullable().default(null)
});
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, {
access_token,
refresh_token,
expires_at
}) {
const [existing_session] = await db.select().from(sessions).where(eq(sessions.user_id, user_id));
expires_at,
}, tx = db) {
const [existing_session] = await tx.select().from(sessions).where(eq(sessions.user_id, user_id));
if(existing_session) {
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,
access_token: access_token,
refresh_token: refresh_token,