mirror of
https://github.com/umami-software/umami.git
synced 2025-12-08 05:12:36 +01:00
add revenue table and save
This commit is contained in:
parent
883fd2580f
commit
49b4948d0f
4 changed files with 105 additions and 0 deletions
31
db/postgresql/migrations/13_add_revenue/migration.sql
Normal file
31
db/postgresql/migrations/13_add_revenue/migration.sql
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "segment" ADD COLUMN "type" VARCHAR(200) NOT NULL;
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "revenue" (
|
||||||
|
"revenue_id" UUID NOT NULL,
|
||||||
|
"website_id" UUID NOT NULL,
|
||||||
|
"session_id" UUID NOT NULL,
|
||||||
|
"event_id" UUID NOT NULL,
|
||||||
|
"event_name" VARCHAR(50) NOT NULL,
|
||||||
|
"currency" VARCHAR(100) NOT NULL,
|
||||||
|
"revenue" DECIMAL(19,4),
|
||||||
|
"created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "revenue_pkey" PRIMARY KEY ("revenue_id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "revenue_revenue_id_key" ON "revenue"("revenue_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE INDEX "revenue_website_id_idx" ON "revenue"("website_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE INDEX "revenue_session_id_idx" ON "revenue"("session_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE INDEX "revenue_website_id_created_at_idx" ON "revenue"("website_id", "created_at");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE INDEX "revenue_website_id_session_id_created_at_idx" ON "revenue"("website_id", "session_id", "created_at");
|
||||||
|
|
@ -43,6 +43,7 @@ model Session {
|
||||||
|
|
||||||
websiteEvent WebsiteEvent[]
|
websiteEvent WebsiteEvent[]
|
||||||
sessionData SessionData[]
|
sessionData SessionData[]
|
||||||
|
revenue Revenue[]
|
||||||
|
|
||||||
@@index([createdAt])
|
@@index([createdAt])
|
||||||
@@index([websiteId])
|
@@index([websiteId])
|
||||||
|
|
@ -76,6 +77,7 @@ model Website {
|
||||||
team Team? @relation(fields: [teamId], references: [id])
|
team Team? @relation(fields: [teamId], references: [id])
|
||||||
eventData EventData[]
|
eventData EventData[]
|
||||||
report Report[]
|
report Report[]
|
||||||
|
revenue Revenue[]
|
||||||
sessionData SessionData[]
|
sessionData SessionData[]
|
||||||
segment Segment[]
|
segment Segment[]
|
||||||
|
|
||||||
|
|
@ -236,6 +238,7 @@ model Report {
|
||||||
model Segment {
|
model Segment {
|
||||||
id String @id() @unique() @map("segment_id") @db.Uuid
|
id String @id() @unique() @map("segment_id") @db.Uuid
|
||||||
websiteId String @map("website_id") @db.Uuid
|
websiteId String @map("website_id") @db.Uuid
|
||||||
|
type String @db.VarChar(200)
|
||||||
name String @db.VarChar(200)
|
name String @db.VarChar(200)
|
||||||
filters Json
|
filters Json
|
||||||
createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
|
createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
|
||||||
|
|
@ -246,3 +249,23 @@ model Segment {
|
||||||
@@index([websiteId])
|
@@index([websiteId])
|
||||||
@@map("segment")
|
@@map("segment")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model Revenue {
|
||||||
|
id String @id() @unique() @map("revenue_id") @db.Uuid
|
||||||
|
websiteId String @map("website_id") @db.Uuid
|
||||||
|
sessionId String @map("session_id") @db.Uuid
|
||||||
|
eventId String @map("event_id") @db.Uuid
|
||||||
|
eventName String @map("event_name") @db.VarChar(50)
|
||||||
|
currency String @db.VarChar(100)
|
||||||
|
revenue Decimal? @db.Decimal(19, 4)
|
||||||
|
createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
|
||||||
|
|
||||||
|
website Website @relation(fields: [websiteId], references: [id])
|
||||||
|
session Session @relation(fields: [sessionId], references: [id])
|
||||||
|
|
||||||
|
@@index([websiteId])
|
||||||
|
@@index([sessionId])
|
||||||
|
@@index([websiteId, createdAt])
|
||||||
|
@@index([websiteId, sessionId, createdAt])
|
||||||
|
@@map("revenue")
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,7 @@ import kafka from '@/lib/kafka';
|
||||||
import prisma from '@/lib/prisma';
|
import prisma from '@/lib/prisma';
|
||||||
import { uuid } from '@/lib/crypto';
|
import { uuid } from '@/lib/crypto';
|
||||||
import { saveEventData } from './saveEventData';
|
import { saveEventData } from './saveEventData';
|
||||||
|
import { saveRevenue } from './saveRevenue';
|
||||||
|
|
||||||
export interface SaveEventArgs {
|
export interface SaveEventArgs {
|
||||||
websiteId: string;
|
websiteId: string;
|
||||||
|
|
@ -130,6 +131,20 @@ async function relationalQuery({
|
||||||
eventData,
|
eventData,
|
||||||
createdAt,
|
createdAt,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { revenue, currency } = eventData;
|
||||||
|
|
||||||
|
if (revenue > 0 && currency) {
|
||||||
|
await saveRevenue({
|
||||||
|
websiteId,
|
||||||
|
sessionId,
|
||||||
|
eventId: websiteEventId,
|
||||||
|
eventName: eventName?.substring(0, EVENT_NAME_LENGTH),
|
||||||
|
currency,
|
||||||
|
revenue,
|
||||||
|
createdAt,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
36
src/queries/sql/events/saveRevenue.ts
Normal file
36
src/queries/sql/events/saveRevenue.ts
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
import { uuid } from '@/lib/crypto';
|
||||||
|
import { PRISMA, runQuery } from '@/lib/db';
|
||||||
|
import prisma from '@/lib/prisma';
|
||||||
|
|
||||||
|
export interface SaveRevenueArgs {
|
||||||
|
websiteId: string;
|
||||||
|
sessionId: string;
|
||||||
|
eventId: string;
|
||||||
|
eventName: string;
|
||||||
|
currency: string;
|
||||||
|
revenue: number;
|
||||||
|
createdAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function saveRevenue(data: SaveRevenueArgs) {
|
||||||
|
return runQuery({
|
||||||
|
[PRISMA]: () => relationalQuery(data),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function relationalQuery(data: SaveRevenueArgs) {
|
||||||
|
const { websiteId, sessionId, eventId, eventName, currency, revenue, createdAt } = data;
|
||||||
|
|
||||||
|
await prisma.client.revenue.create({
|
||||||
|
data: {
|
||||||
|
id: uuid(),
|
||||||
|
websiteId,
|
||||||
|
sessionId,
|
||||||
|
eventId,
|
||||||
|
eventName,
|
||||||
|
currency,
|
||||||
|
revenue,
|
||||||
|
createdAt,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue