Simplify product
This commit is contained in:
@@ -67,7 +67,6 @@ const submit = async (event: FormSubmitEvent<typeof formData>) => {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<UForm
|
<UForm
|
||||||
:disabled="!user.premium"
|
|
||||||
ref="form"
|
ref="form"
|
||||||
@submit="submit"
|
@submit="submit"
|
||||||
:validate="validate"
|
:validate="validate"
|
||||||
@@ -78,14 +77,6 @@ const submit = async (event: FormSubmitEvent<typeof formData>) => {
|
|||||||
<UContainer class="max-w-2xl py-8 flex flex-col gap-4">
|
<UContainer class="max-w-2xl py-8 flex flex-col gap-4">
|
||||||
<div class="flex justify-between items-center">
|
<div class="flex justify-between items-center">
|
||||||
<div class="font-bold text-lg">🔄 Re-write activity</div>
|
<div class="font-bold text-lg">🔄 Re-write activity</div>
|
||||||
<UTooltip
|
|
||||||
arrow
|
|
||||||
:disabled="user.premium"
|
|
||||||
text="This feature is enabled for premium users. You can upgrade to
|
|
||||||
premium by supporting Ghostwriter."
|
|
||||||
>
|
|
||||||
<UBadge variant="soft">Premium only</UBadge>
|
|
||||||
</UTooltip>
|
|
||||||
</div>
|
</div>
|
||||||
<UCard>
|
<UCard>
|
||||||
<div class="grid gap-4">
|
<div class="grid gap-4">
|
||||||
|
|||||||
@@ -118,8 +118,6 @@ const saveOp = watchPausable(
|
|||||||
</UCard>
|
</UCard>
|
||||||
</UContainer>
|
</UContainer>
|
||||||
|
|
||||||
<RewriteCard />
|
|
||||||
|
|
||||||
<UContainer class="max-w-2xl py-8 flex flex-col gap-4">
|
<UContainer class="max-w-2xl py-8 flex flex-col gap-4">
|
||||||
<div class="font-bold text-lg">🪪 Your connected Strava account</div>
|
<div class="font-bold text-lg">🪪 Your connected Strava account</div>
|
||||||
<UCard class="bg-neutral-50 dark:bg-slate-800">
|
<UCard class="bg-neutral-50 dark:bg-slate-800">
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
export default defineEventHandler(async (event) => {
|
|
||||||
const session = await requireUserSession(event);
|
|
||||||
|
|
||||||
const db = useDrizzle();
|
|
||||||
|
|
||||||
const query = getQuery(event);
|
|
||||||
|
|
||||||
const user = await db.query.users.findFirst({
|
|
||||||
where: (f, o) => o.eq(f.id, session.user.id),
|
|
||||||
with: {
|
|
||||||
preferences: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!user?.premium) {
|
|
||||||
throw createError({
|
|
||||||
statusCode: 400,
|
|
||||||
message: "Premium membership required.",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const activityId = (query.activity as string).replace(
|
|
||||||
/https:\/\/(www\.)?strava\.com\/activities\//,
|
|
||||||
"",
|
|
||||||
);
|
|
||||||
|
|
||||||
const strava = await useStrava(session.user.id);
|
|
||||||
|
|
||||||
const currentActivity = await strava!<any>(`/activities/${activityId}`);
|
|
||||||
const [, ...previousActivities] = await strava!<any[]>(`/activities`);
|
|
||||||
|
|
||||||
const [aiError, stravaRequestBody] = await createActivityContent({
|
|
||||||
currentActivity,
|
|
||||||
previousActivities,
|
|
||||||
user: user!,
|
|
||||||
});
|
|
||||||
if (aiError) {
|
|
||||||
throw createError({
|
|
||||||
statusCode: 500,
|
|
||||||
message: `OPENAI API: ${aiError.message}`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
await strava!(`activities/${activityId}`, {
|
|
||||||
method: "PUT",
|
|
||||||
body: stravaRequestBody,
|
|
||||||
}).catch((error) => {
|
|
||||||
throw createError({
|
|
||||||
statusCode: 500,
|
|
||||||
message: `Strava API: ${error.message}`,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
sendNoContent(event);
|
|
||||||
});
|
|
||||||
1
server/auth.d.ts
vendored
1
server/auth.d.ts
vendored
@@ -16,7 +16,6 @@ declare module "#auth-utils" {
|
|||||||
sex: string;
|
sex: string;
|
||||||
weight: number;
|
weight: number;
|
||||||
avatar: string;
|
avatar: string;
|
||||||
premium: boolean;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import {
|
|||||||
numeric,
|
numeric,
|
||||||
timestamp,
|
timestamp,
|
||||||
jsonb,
|
jsonb,
|
||||||
boolean,
|
|
||||||
} from "drizzle-orm/pg-core";
|
} from "drizzle-orm/pg-core";
|
||||||
|
|
||||||
export const users = pgTable("users", {
|
export const users = pgTable("users", {
|
||||||
@@ -16,9 +15,6 @@ export const users = pgTable("users", {
|
|||||||
city: text("city"),
|
city: text("city"),
|
||||||
country: text("country"),
|
country: text("country"),
|
||||||
sex: text("sex"),
|
sex: text("sex"),
|
||||||
premium: boolean("premium")
|
|
||||||
.notNull()
|
|
||||||
.$defaultFn(() => false),
|
|
||||||
weight: numeric("weight", {
|
weight: numeric("weight", {
|
||||||
mode: "number",
|
mode: "number",
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ export default defineOAuthStravaEventHandler({
|
|||||||
sex: auth.user.sex,
|
sex: auth.user.sex,
|
||||||
weight: auth.user.weight,
|
weight: auth.user.weight,
|
||||||
avatar: auth.user.profile,
|
avatar: auth.user.profile,
|
||||||
premium: false,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const db = useDrizzle();
|
const db = useDrizzle();
|
||||||
@@ -42,7 +41,7 @@ export default defineOAuthStravaEventHandler({
|
|||||||
.values(userPayload)
|
.values(userPayload)
|
||||||
.onConflictDoUpdate({
|
.onConflictDoUpdate({
|
||||||
target: tables.users.id,
|
target: tables.users.id,
|
||||||
set: omit(userPayload, ["id", "premium"]),
|
set: omit(userPayload, ["id"]),
|
||||||
})
|
})
|
||||||
.returning();
|
.returning();
|
||||||
|
|
||||||
@@ -78,7 +77,7 @@ export default defineOAuthStravaEventHandler({
|
|||||||
.onConflictDoNothing();
|
.onConflictDoNothing();
|
||||||
|
|
||||||
await setUserSession(event, {
|
await setUserSession(event, {
|
||||||
user: { ...userPayload, premium: user.premium },
|
user: userPayload,
|
||||||
});
|
});
|
||||||
|
|
||||||
sendRedirect(event, "/");
|
sendRedirect(event, "/");
|
||||||
|
|||||||
Reference in New Issue
Block a user