Compare commits

...

5 commits

Author SHA1 Message Date
Francis Cao
cb034a1371 prisma schema boards + varchar length increase
Some checks are pending
Node.js CI / build (postgresql, 18.18, 10) (push) Waiting to run
2025-12-01 11:34:43 -08:00
Mike Cao
4b954fbc7c
Merge pull request #3806 from prince0xdev/feat/thumbnail-team-memory
Add favicon icons and auto-redirect to last selected team
2025-12-01 10:43:58 -08:00
Mike Cao
f5d6d0ebaf
Merge branch 'dev' into feat/thumbnail-team-memory 2025-12-01 10:43:48 -08:00
Prince EKPINSE
e5a5aeecb5 feat(#3748): redirect user to last selected team on login 2025-11-29 16:54:45 +01:00
Prince EKPINSE
046cb6ef62 feat(#3748): restore favicon icons in websites list 2025-11-29 16:43:21 +01:00
5 changed files with 97 additions and 18 deletions

View file

@ -0,0 +1,33 @@
-- CreateTable
CREATE TABLE "board" (
"board_id" UUID NOT NULL,
"type" VARCHAR(50) NOT NULL,
"name" VARCHAR(200) NOT NULL,
"description" VARCHAR(500) NOT NULL,
"parameters" JSONB NOT NULL,
"slug" VARCHAR(100) NOT NULL,
"user_id" UUID,
"team_id" UUID,
"created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ(6),
CONSTRAINT "board_pkey" PRIMARY KEY ("board_id")
);
-- CreateIndex
CREATE UNIQUE INDEX "board_board_id_key" ON "board"("board_id");
-- CreateIndex
CREATE UNIQUE INDEX "board_slug_key" ON "board"("slug");
-- CreateIndex
CREATE INDEX "board_slug_idx" ON "board"("slug");
-- CreateIndex
CREATE INDEX "board_user_id_idx" ON "board"("user_id");
-- CreateIndex
CREATE INDEX "board_team_id_idx" ON "board"("team_id");
-- CreateIndex
CREATE INDEX "board_created_at_idx" ON "board"("created_at");

View file

@ -0,0 +1,16 @@
-- AlterTable
ALTER TABLE "website_event" ALTER COLUMN "url_path" SET DATA TYPE VARCHAR(1024),
ALTER COLUMN "url_query" SET DATA TYPE VARCHAR(1024),
ALTER COLUMN "referrer_path" SET DATA TYPE VARCHAR(1024),
ALTER COLUMN "referrer_query" SET DATA TYPE VARCHAR(1024),
ALTER COLUMN "fbclid" SET DATA TYPE VARCHAR(1024),
ALTER COLUMN "gclid" SET DATA TYPE VARCHAR(1024),
ALTER COLUMN "li_fat_id" SET DATA TYPE VARCHAR(1024),
ALTER COLUMN "msclkid" SET DATA TYPE VARCHAR(1024),
ALTER COLUMN "ttclid" SET DATA TYPE VARCHAR(1024),
ALTER COLUMN "twclid" SET DATA TYPE VARCHAR(1024),
ALTER COLUMN "utm_campaign" SET DATA TYPE VARCHAR(512),
ALTER COLUMN "utm_content" SET DATA TYPE VARCHAR(512),
ALTER COLUMN "utm_medium" SET DATA TYPE VARCHAR(512),
ALTER COLUMN "utm_source" SET DATA TYPE VARCHAR(512),
ALTER COLUMN "utm_term" SET DATA TYPE VARCHAR(512);

View file

@ -27,6 +27,7 @@ model User {
pixels Pixel[] @relation("user") pixels Pixel[] @relation("user")
teams TeamUser[] teams TeamUser[]
reports Report[] reports Report[]
boards Board[] @relation("user")
@@map("user") @@map("user")
} }
@ -99,23 +100,23 @@ model WebsiteEvent {
sessionId String @map("session_id") @db.Uuid sessionId String @map("session_id") @db.Uuid
visitId String @map("visit_id") @db.Uuid visitId String @map("visit_id") @db.Uuid
createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6) createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
urlPath String @map("url_path") @db.VarChar(500) urlPath String @map("url_path") @db.VarChar(1024)
urlQuery String? @map("url_query") @db.VarChar(500) urlQuery String? @map("url_query") @db.VarChar(1024)
utmSource String? @map("utm_source") @db.VarChar(255) utmSource String? @map("utm_source") @db.VarChar(512)
utmMedium String? @map("utm_medium") @db.VarChar(255) utmMedium String? @map("utm_medium") @db.VarChar(512)
utmCampaign String? @map("utm_campaign") @db.VarChar(255) utmCampaign String? @map("utm_campaign") @db.VarChar(512)
utmContent String? @map("utm_content") @db.VarChar(255) utmContent String? @map("utm_content") @db.VarChar(512)
utmTerm String? @map("utm_term") @db.VarChar(255) utmTerm String? @map("utm_term") @db.VarChar(512)
referrerPath String? @map("referrer_path") @db.VarChar(500) referrerPath String? @map("referrer_path") @db.VarChar(1024)
referrerQuery String? @map("referrer_query") @db.VarChar(500) referrerQuery String? @map("referrer_query") @db.VarChar(1024)
referrerDomain String? @map("referrer_domain") @db.VarChar(500) referrerDomain String? @map("referrer_domain") @db.VarChar(500)
pageTitle String? @map("page_title") @db.VarChar(500) pageTitle String? @map("page_title") @db.VarChar(500)
gclid String? @db.VarChar(255) gclid String? @db.VarChar(1024)
fbclid String? @db.VarChar(255) fbclid String? @db.VarChar(1024)
msclkid String? @db.VarChar(255) msclkid String? @db.VarChar(1024)
ttclid String? @db.VarChar(255) ttclid String? @db.VarChar(1024)
lifatid String? @map("li_fat_id") @db.VarChar(255) lifatid String? @map("li_fat_id") @db.VarChar(1024)
twclid String? @db.VarChar(255) twclid String? @db.VarChar(1024)
eventType Int @default(1) @map("event_type") @db.Integer eventType Int @default(1) @map("event_type") @db.Integer
eventName String? @map("event_name") @db.VarChar(50) eventName String? @map("event_name") @db.VarChar(50)
tag String? @db.VarChar(50) tag String? @db.VarChar(50)
@ -199,6 +200,7 @@ model Team {
members TeamUser[] members TeamUser[]
links Link[] links Link[]
pixels Pixel[] pixels Pixel[]
boards Board[]
@@index([accessCode]) @@index([accessCode])
@@map("team") @@map("team")
@ -316,3 +318,25 @@ model Pixel {
@@index([createdAt]) @@index([createdAt])
@@map("pixel") @@map("pixel")
} }
model Board {
id String @id() @unique() @map("board_id") @db.Uuid
type String @db.VarChar(50)
name String @db.VarChar(200)
description String @db.VarChar(500)
parameters Json
slug String @unique() @db.VarChar(100)
userId String? @map("user_id") @db.Uuid
teamId String? @map("team_id") @db.Uuid
createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
updatedAt DateTime? @updatedAt @map("updated_at") @db.Timestamptz(6)
user User? @relation("user", fields: [userId], references: [id])
team Team? @relation(fields: [teamId], references: [id])
@@index([slug])
@@index([userId])
@@index([teamId])
@@index([createdAt])
@@map("board")
}

View file

@ -1,6 +1,8 @@
import Link from 'next/link'; import Link from 'next/link';
import { DataGrid } from '@/components/common/DataGrid'; import { DataGrid } from '@/components/common/DataGrid';
import { useLoginQuery, useNavigation, useUserWebsitesQuery } from '@/components/hooks'; import { useLoginQuery, useNavigation, useUserWebsitesQuery } from '@/components/hooks';
import { Favicon } from '@/index';
import { Icon, Row } from '@umami/react-zen';
import { WebsitesTable } from './WebsitesTable'; import { WebsitesTable } from './WebsitesTable';
export function WebsitesDataTable({ export function WebsitesDataTable({
@ -21,7 +23,12 @@ export function WebsitesDataTable({
const { renderUrl } = useNavigation(); const { renderUrl } = useNavigation();
const renderLink = (row: any) => ( const renderLink = (row: any) => (
<Link href={renderUrl(`/websites/${row.id}`, false)}>{row.name}</Link> <Row alignItems="center" gap="3">
<Icon size="md" color="muted">
<Favicon domain={row.domain} />
</Icon>
<Link href={renderUrl(`/websites/${row.id}`, false)}>{row.name}</Link>
</Row>
); );
return ( return (

View file

@ -25,8 +25,7 @@ export function LoginForm() {
onSuccess: async ({ token, user }) => { onSuccess: async ({ token, user }) => {
setClientAuthToken(token); setClientAuthToken(token);
setUser(user); setUser(user);
router.push('/');
router.push('/websites');
}, },
}); });
}; };