Skip to content

Commit 59d80cf

Browse files
authored
Create default segments for normal tenants (#889)
1 parent af6e878 commit 59d80cf

6 files changed

Lines changed: 67 additions & 7 deletions

File tree

backend/src/database/migrations/U1684497543__init-default-segments.sql

Whitespace-only changes.

backend/src/database/migrations/V1683110675__segments.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ CREATE TABLE public."memberSegments" (
5555
"memberId" uuid NOT NULL,
5656
"segmentId" uuid NOT NULL,
5757
"tenantId" uuid NOT NULL,
58-
"createdAt" timestamp with time zone NOT NULL,
58+
"createdAt" timestamp with time zone NOT NULL default now(),
5959
foreign key ("tenantId") references tenants (id),
6060
foreign key ("segmentId") references segments (id),
6161
foreign key ("memberId") references members (id),
@@ -67,7 +67,7 @@ CREATE TABLE public."organizationSegments" (
6767
"organizationId" uuid NOT NULL,
6868
"segmentId" uuid NOT NULL,
6969
"tenantId" uuid NOT NULL,
70-
"createdAt" timestamp with time zone NOT NULL,
70+
"createdAt" timestamp with time zone NOT NULL default now(),
7171
foreign key ("tenantId") references tenants (id),
7272
foreign key ("segmentId") references segments (id),
7373
foreign key ("organizationId") references organizations (id),
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
2+
INSERT INTO segments
3+
(id, name, "parentName", "grandparentName", slug, "parentSlug", "grandparentSlug", description, "sourceId", "sourceParentId", "tenantId")
4+
SELECT
5+
-- this thing generates a valid uuidv4 without `uuid-ossp` extension: https://stackoverflow.com/a/21327318
6+
uuid_in(overlay(overlay(md5(random()::text || ':' || random()::text) placing '4' from 13) placing to_hex(floor(random()*(11-8+1) + 8)::int)::text from 17)::cstring),
7+
'Default', -- name
8+
'Default', -- parentName
9+
'Default', -- grandparentName
10+
'default', -- slug
11+
'default', -- parentSlug
12+
'default', -- grandparentSlug
13+
NULL, -- description
14+
NULL, -- sourceId
15+
NULL, -- sourceParentId
16+
t.id -- tenantId
17+
FROM tenants t
18+
LEFT JOIN segments s ON s."tenantId" = t.id
19+
WHERE s.id IS NULL;
20+
21+
UPDATE activities SET "segmentId" = s.id FROM segments s WHERE s."tenantId" = activities."tenantId";
22+
UPDATE integrations SET "segmentId" = s.id FROM segments s WHERE s."tenantId" = integrations."tenantId";
23+
UPDATE conversations SET "segmentId" = s.id FROM segments s WHERE s."tenantId" = conversations."tenantId";
24+
UPDATE tags SET "segmentId" = s.id FROM segments s WHERE s."tenantId" = tags."tenantId";
25+
UPDATE tasks SET "segmentId" = s.id FROM segments s WHERE s."tenantId" = tasks."tenantId";
26+
UPDATE reports SET "segmentId" = s.id FROM segments s WHERE s."tenantId" = reports."tenantId";
27+
UPDATE widgets SET "segmentId" = s.id FROM segments s WHERE s."tenantId" = widgets."tenantId";
28+
29+
INSERT INTO "memberSegments" ("memberId", "segmentId", "tenantId")
30+
SELECT
31+
m.id,
32+
s.id,
33+
m."tenantId"
34+
FROM members m
35+
JOIN segments s ON s."tenantId" = m."tenantId";
36+
37+
INSERT INTO "organizationSegments" ("organizationId", "segmentId", "tenantId")
38+
SELECT
39+
o.id,
40+
s.id,
41+
o."tenantId"
42+
FROM organizations o
43+
JOIN segments s ON s."tenantId" = o."tenantId";
44+
45+
UPDATE "memberToMerge" mtm
46+
SET "segmentId" = s.id
47+
FROM segments s
48+
JOIN "memberSegments" ms ON ms."segmentId" = s.id
49+
WHERE ms."memberId" = mtm."memberId";
50+
51+
UPDATE "memberNoMerge" mnm
52+
SET "segmentId" = s.id
53+
FROM segments s
54+
JOIN "memberSegments" ms ON ms."segmentId" = s.id
55+
WHERE ms."memberId" = mnm."memberId";

backend/src/database/models/segment.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { DataTypes } from 'sequelize'
22

33
export default (sequelize) => {
4-
const activity = sequelize.define(
4+
const segment = sequelize.define(
55
'segment',
66
{
77
id: {
@@ -59,5 +59,13 @@ export default (sequelize) => {
5959
},
6060
)
6161

62-
return activity
62+
segment.associate = (models) => {
63+
models.segment.belongsTo(models.tenant, {
64+
foreignKey: {
65+
allowNull: false,
66+
},
67+
})
68+
}
69+
70+
return segment
6371
}

backend/src/services/activityService.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ import { logExecutionTime } from '../utils/logging'
1717
import { sendNewActivityNodeSQSMessage } from '../serverless/utils/nodeWorkerSQS'
1818
import { LoggingBase } from './loggingBase'
1919
import MemberAttributeSettingsRepository from '../database/repositories/memberAttributeSettingsRepository'
20-
import SettingsRepository from '../database/repositories/settingsRepository'
21-
import SettingsService from './settingsService'
2220
import { mapUsernameToIdentities } from '../database/repositories/types/memberTypes'
2321
import SegmentRepository from '../database/repositories/segmentRepository'
2422
import SegmentService from './segmentService'

backend/src/services/tenantService.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import TaskRepository from '../database/repositories/taskRepository'
2626
import isFeatureEnabled from '../feature-flags/isFeatureEnabled'
2727
import { FeatureFlag } from '../types/common'
2828
import SegmentRepository from '../database/repositories/segmentRepository'
29-
import SegmentService from './segmentService'
3029
import { SegmentStatus } from '../types/segmentTypes'
3130

3231
export default class TenantService {

0 commit comments

Comments
 (0)