Added Team with 'pro' and 'free' as members (#1063)
* Added Team with 'pro' and 'free' as members * Teams fundamentally changes event-type behaviour and requires seperate userspull/1066/head
parent
5af159cf4e
commit
94f3ae1c64
|
@ -1,4 +1,4 @@
|
||||||
import { Prisma, PrismaClient, UserPlan } from "@prisma/client";
|
import { MembershipRole, Prisma, PrismaClient, UserPlan } from "@prisma/client";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { uuid } from "short-uuid";
|
import { uuid } from "short-uuid";
|
||||||
|
|
||||||
|
@ -34,8 +34,9 @@ async function createUserAndEventType(opts: {
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
`👤 Upserted '${opts.user.username}' with email "${opts.user.email}" & password "${opts.user.password}". Booking page 👉 http://localhost:3000/${opts.user.username}`
|
`👤 Upserted '${opts.user.username}' with email "${opts.user.email}" & password "${opts.user.password}". Booking page 👉 ${process.env.BASE_URL}/${opts.user.username}`
|
||||||
);
|
);
|
||||||
|
|
||||||
for (const eventTypeInput of opts.eventTypes) {
|
for (const eventTypeInput of opts.eventTypes) {
|
||||||
const { _bookings: bookingInputs = [], ...eventTypeData } = eventTypeInput;
|
const { _bookings: bookingInputs = [], ...eventTypeData } = eventTypeInput;
|
||||||
eventTypeData.userId = user.id;
|
eventTypeData.userId = user.id;
|
||||||
|
@ -57,7 +58,7 @@ async function createUserAndEventType(opts: {
|
||||||
|
|
||||||
if (eventType) {
|
if (eventType) {
|
||||||
console.log(
|
console.log(
|
||||||
`\t📆 Event type ${eventTypeData.slug} already seems seeded - http://localhost:3000/${user.username}/${eventTypeData.slug}`
|
`\t📆 Event type ${eventTypeData.slug} already seems seeded - ${process.env.BASE_URL}/${user.username}/${eventTypeData.slug}`
|
||||||
);
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -66,7 +67,7 @@ async function createUserAndEventType(opts: {
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
`\t📆 Event type ${eventTypeData.slug}, length ${eventTypeData.length}min - http://localhost:3000/${user.username}/${eventTypeData.slug}`
|
`\t📆 Event type ${eventTypeData.slug}, length ${eventTypeData.length}min - ${process.env.BASE_URL}/${user.username}/${eventTypeData.slug}`
|
||||||
);
|
);
|
||||||
for (const bookingInput of bookingInputs) {
|
for (const bookingInput of bookingInputs) {
|
||||||
await prisma.booking.create({
|
await prisma.booking.create({
|
||||||
|
@ -99,6 +100,49 @@ async function createUserAndEventType(opts: {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function createTeamAndAddUsers(
|
||||||
|
teamInput: Prisma.TeamCreateInput,
|
||||||
|
users: { id: number; username: string; role?: MembershipRole }[]
|
||||||
|
) {
|
||||||
|
const createTeam = async (team: Prisma.TeamCreateInput) => {
|
||||||
|
try {
|
||||||
|
return await prisma.team.create({
|
||||||
|
data: {
|
||||||
|
...team,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
} catch (_err) {
|
||||||
|
if (_err instanceof Error && _err.message.indexOf("Unique constraint failed on the fields") !== -1) {
|
||||||
|
console.log(`Team '${team.name}' already exists, skipping.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
throw _err;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const team = await createTeam(teamInput);
|
||||||
|
if (!team) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`🏢 Created team '${teamInput.name}' - ${process.env.BASE_URL}/team/${team.slug}`);
|
||||||
|
|
||||||
|
for (const user of users) {
|
||||||
|
const { role = MembershipRole.OWNER, id, username } = user;
|
||||||
|
await prisma.membership.create({
|
||||||
|
data: {
|
||||||
|
teamId: team.id,
|
||||||
|
userId: id,
|
||||||
|
role: role,
|
||||||
|
accepted: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
console.log(`\t👤 Added '${teamInput.name}' membership for '${username}' with role '${role}'`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
|
@ -218,6 +262,45 @@ async function main() {
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const freeUserTeam = await createUserAndEventType({
|
||||||
|
user: {
|
||||||
|
email: "teamfree@example.com",
|
||||||
|
password: "teamfree",
|
||||||
|
username: "teamfree",
|
||||||
|
name: "Team Free Example",
|
||||||
|
plan: "FREE",
|
||||||
|
},
|
||||||
|
eventTypes: [],
|
||||||
|
});
|
||||||
|
|
||||||
|
const proUserTeam = await createUserAndEventType({
|
||||||
|
user: {
|
||||||
|
email: "teampro@example.com",
|
||||||
|
password: "teampro",
|
||||||
|
username: "teampro",
|
||||||
|
name: "Team Pro Example",
|
||||||
|
plan: "PRO",
|
||||||
|
},
|
||||||
|
eventTypes: [],
|
||||||
|
});
|
||||||
|
|
||||||
|
await createTeamAndAddUsers(
|
||||||
|
{
|
||||||
|
name: "Seeded Team",
|
||||||
|
slug: "seeded-team",
|
||||||
|
},
|
||||||
|
[
|
||||||
|
{
|
||||||
|
id: proUserTeam.id,
|
||||||
|
username: proUserTeam.name || "Unknown",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: freeUserTeam.id,
|
||||||
|
username: freeUserTeam.name || "Unknown",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
await prisma.$disconnect();
|
await prisma.$disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue