Compare commits

...

4 commits

Author SHA1 Message Date
Francis Cao
b0f38b266b truncate large legend labels
Some checks are pending
Node.js CI / build (postgresql, 18.18, 10) (push) Waiting to run
Closes #3813
2025-12-02 14:44:10 -08:00
Mike Cao
e7cb613cec Merge remote-tracking branch 'origin/dev' into dev 2025-12-02 13:47:01 -08:00
Mike Cao
170821e2f9 Populate teams on login.
Closes #3796
2025-12-02 13:45:49 -08:00
Francis Cao
935517ce3a add cascading deletes to revenue/segment table
Closes #3798
2025-12-02 09:41:46 -08:00
3 changed files with 51 additions and 32 deletions

View file

@ -7,7 +7,7 @@ import { checkPassword } from '@/lib/password';
import redis from '@/lib/redis'; import redis from '@/lib/redis';
import { parseRequest } from '@/lib/request'; import { parseRequest } from '@/lib/request';
import { json, unauthorized } from '@/lib/response'; import { json, unauthorized } from '@/lib/response';
import { getUserByUsername } from '@/queries/prisma'; import { getAllUserTeams, getUserByUsername } from '@/queries/prisma';
export async function POST(request: Request) { export async function POST(request: Request) {
const schema = z.object({ const schema = z.object({
@ -39,8 +39,10 @@ export async function POST(request: Request) {
token = createSecureToken({ userId: user.id, role }, secret()); token = createSecureToken({ userId: user.id, role }, secret());
} }
const teams = await getAllUserTeams(id);
return json({ return json({
token, token,
user: { id, username, role, createdAt, isAdmin: role === ROLES.admin }, user: { id, username, role, createdAt, isAdmin: role === ROLES.admin, teams },
}); });
} }

View file

@ -22,7 +22,12 @@ export function Legend({
return ( return (
<Row key={text} onClick={() => onClick(item)}> <Row key={text} onClick={() => onClick(item)}>
<StatusLight color={color.alpha(color.alpha() + 0.2).toHex()}> <StatusLight color={color.alpha(color.alpha() + 0.2).toHex()}>
<Text size="2" color={hidden ? 'disabled' : undefined} wrap="nowrap"> <Text
size="2"
color={hidden ? 'disabled' : undefined}
truncate={true}
style={{ maxWidth: '300px' }}
>
{text} {text}
</Text> </Text>
</StatusLight> </StatusLight>

View file

@ -137,6 +137,9 @@ export async function resetWebsite(websiteId: string) {
return transaction( return transaction(
[ [
client.revenue.deleteMany({
where: { websiteId },
}),
client.eventData.deleteMany({ client.eventData.deleteMany({
where: { websiteId }, where: { websiteId },
}), }),
@ -175,35 +178,44 @@ export async function deleteWebsite(websiteId: string) {
const { client, transaction } = prisma; const { client, transaction } = prisma;
const cloudMode = !!process.env.CLOUD_MODE; const cloudMode = !!process.env.CLOUD_MODE;
return transaction([ return transaction(
client.eventData.deleteMany({ [
where: { websiteId }, client.revenue.deleteMany({
}), where: { websiteId },
client.sessionData.deleteMany({ }),
where: { websiteId }, client.eventData.deleteMany({
}), where: { websiteId },
client.websiteEvent.deleteMany({ }),
where: { websiteId }, client.sessionData.deleteMany({
}), where: { websiteId },
client.session.deleteMany({ }),
where: { websiteId }, client.websiteEvent.deleteMany({
}), where: { websiteId },
client.report.deleteMany({ }),
where: { client.session.deleteMany({
websiteId, where: { websiteId },
}, }),
}), client.report.deleteMany({
cloudMode where: { websiteId },
? client.website.update({ }),
data: { client.segment.deleteMany({
deletedAt: new Date(), where: { websiteId },
}, }),
where: { id: websiteId }, cloudMode
}) ? client.website.update({
: client.website.delete({ data: {
where: { id: websiteId }, deletedAt: new Date(),
}), },
]).then(async data => { where: { id: websiteId },
})
: client.website.delete({
where: { id: websiteId },
}),
],
{
timeout: 30000,
},
).then(async data => {
if (cloudMode) { if (cloudMode) {
await redis.client.del(`website:${websiteId}`); await redis.client.del(`website:${websiteId}`);
} }