
* Email input UX improvements * Makes email queries case insensitive * Lowercases all emails * Type fixes * Re adds lowercase email to login * Removes citext dependency * Updates schema * Migration fixes * Added failsafes to team invites * Team invite improvements * Deleting the index, lowercasing ``` calendso=> UPDATE users SET email=LOWER(email); ERROR: duplicate key value violates unique constraint "users.email_unique" DETAIL: Key (email)=(free@example.com) already exists. ``` vs. ``` calendso=> CREATE UNIQUE INDEX "users.email_unique" ON "users" (email); ERROR: could not create unique index "users.email_unique" DETAIL: Key (email)=(Free@example.com) is duplicated. ``` I think it'll be easier to rectify for users if they try to run the migrations if the index stays in place. Co-authored-by: Alex van Andel <me@alexvanandel.com>
37 lines
898 B
TypeScript
37 lines
898 B
TypeScript
import dayjs from "dayjs";
|
|
import type { NextApiRequest, NextApiResponse } from "next";
|
|
|
|
import prisma from "@lib/prisma";
|
|
|
|
const TRIAL_LIMIT_DAYS = 14;
|
|
|
|
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
|
|
const apiKey = req.headers.authorization || req.query.apiKey;
|
|
if (process.env.CRON_API_KEY !== apiKey) {
|
|
res.status(401).json({ message: "Not authenticated" });
|
|
return;
|
|
}
|
|
if (req.method !== "POST") {
|
|
res.status(405).json({ message: "Invalid method" });
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* TODO:
|
|
* We should add and extra check for non-paying customers in Stripe so we can
|
|
* downgrade them here.
|
|
*/
|
|
|
|
await prisma.user.updateMany({
|
|
data: {
|
|
plan: "FREE",
|
|
},
|
|
where: {
|
|
plan: "TRIAL",
|
|
createdDate: {
|
|
lt: dayjs().subtract(TRIAL_LIMIT_DAYS, "day").toDate(),
|
|
},
|
|
},
|
|
});
|
|
res.json({ ok: true });
|
|
}
|