mirror of
https://github.com/lingble/twenty.git
synced 2025-11-03 14:17:58 +00:00
Delete unused objects (#7823)
Fixes #7113 --------- Co-authored-by: Weiko <corentin@twenty.com>
This commit is contained in:
@@ -5,7 +5,6 @@ export type Attachment = {
|
|||||||
type: AttachmentType;
|
type: AttachmentType;
|
||||||
companyId: string;
|
companyId: string;
|
||||||
personId: string;
|
personId: string;
|
||||||
activityId: string;
|
|
||||||
authorId: string;
|
authorId: string;
|
||||||
createdAt: string;
|
createdAt: string;
|
||||||
__typename: string;
|
__typename: string;
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ const mockActivityTarget = {
|
|||||||
updatedAt: '2021-08-03T19:20:06.000Z',
|
updatedAt: '2021-08-03T19:20:06.000Z',
|
||||||
createdAt: '2021-08-03T19:20:06.000Z',
|
createdAt: '2021-08-03T19:20:06.000Z',
|
||||||
personId: '1',
|
personId: '1',
|
||||||
activityId: '234',
|
|
||||||
companyId: '1',
|
companyId: '1',
|
||||||
id: '123',
|
id: '123',
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ const mocks: MockedResponse[] = [
|
|||||||
edges {
|
edges {
|
||||||
node {
|
node {
|
||||||
__typename
|
__typename
|
||||||
activityId
|
|
||||||
authorId
|
authorId
|
||||||
companyId
|
companyId
|
||||||
createdAt
|
createdAt
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ const mocks: MockedResponse[] = [
|
|||||||
edges {
|
edges {
|
||||||
node {
|
node {
|
||||||
__typename
|
__typename
|
||||||
activityId
|
|
||||||
authorId
|
authorId
|
||||||
companyId
|
companyId
|
||||||
createdAt
|
createdAt
|
||||||
@@ -138,6 +137,9 @@ const mocks: MockedResponse[] = [
|
|||||||
rocketId
|
rocketId
|
||||||
taskId
|
taskId
|
||||||
updatedAt
|
updatedAt
|
||||||
|
workflowId
|
||||||
|
workflowRunId
|
||||||
|
workflowVersionId
|
||||||
workspaceMemberId
|
workspaceMemberId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -317,6 +317,219 @@ export const mocks = [
|
|||||||
workspaceMemberId
|
workspaceMemberId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
companyId
|
||||||
|
createdAt
|
||||||
|
deletedAt
|
||||||
|
id
|
||||||
|
note {
|
||||||
|
__typename
|
||||||
|
body
|
||||||
|
createdAt
|
||||||
|
createdBy {
|
||||||
|
source
|
||||||
|
workspaceMemberId
|
||||||
|
name
|
||||||
|
}
|
||||||
|
deletedAt
|
||||||
|
id
|
||||||
|
position
|
||||||
|
title
|
||||||
|
updatedAt
|
||||||
|
}
|
||||||
|
noteId
|
||||||
|
opportunity {
|
||||||
|
__typename
|
||||||
|
amount {
|
||||||
|
amountMicros
|
||||||
|
currencyCode
|
||||||
|
}
|
||||||
|
closeDate
|
||||||
|
companyId
|
||||||
|
createdAt
|
||||||
|
createdBy {
|
||||||
|
source
|
||||||
|
workspaceMemberId
|
||||||
|
name
|
||||||
|
}
|
||||||
|
deletedAt
|
||||||
|
id
|
||||||
|
name
|
||||||
|
pointOfContactId
|
||||||
|
position
|
||||||
|
stage
|
||||||
|
updatedAt
|
||||||
|
}
|
||||||
|
opportunityId
|
||||||
|
person {
|
||||||
|
__typename
|
||||||
|
avatarUrl
|
||||||
|
city
|
||||||
|
companyId
|
||||||
|
createdAt
|
||||||
|
createdBy {
|
||||||
|
source
|
||||||
|
workspaceMemberId
|
||||||
|
name
|
||||||
|
}
|
||||||
|
deletedAt
|
||||||
|
emails {
|
||||||
|
primaryEmail
|
||||||
|
additionalEmails
|
||||||
|
}
|
||||||
|
id
|
||||||
|
intro
|
||||||
|
jobTitle
|
||||||
|
linkedinLink {
|
||||||
|
primaryLinkUrl
|
||||||
|
primaryLinkLabel
|
||||||
|
secondaryLinks
|
||||||
|
}
|
||||||
|
name {
|
||||||
|
firstName
|
||||||
|
lastName
|
||||||
|
}
|
||||||
|
performanceRating
|
||||||
|
phones {
|
||||||
|
primaryPhoneNumber
|
||||||
|
primaryPhoneCountryCode
|
||||||
|
additionalPhones
|
||||||
|
}
|
||||||
|
position
|
||||||
|
updatedAt
|
||||||
|
whatsapp {
|
||||||
|
primaryPhoneNumber
|
||||||
|
primaryPhoneCountryCode
|
||||||
|
additionalPhones
|
||||||
|
}
|
||||||
|
workPreference
|
||||||
|
xLink {
|
||||||
|
primaryLinkUrl
|
||||||
|
primaryLinkLabel
|
||||||
|
secondaryLinks
|
||||||
|
}
|
||||||
|
}
|
||||||
|
personId
|
||||||
|
position
|
||||||
|
rocket {
|
||||||
|
__typename
|
||||||
|
createdAt
|
||||||
|
createdBy {
|
||||||
|
source
|
||||||
|
workspaceMemberId
|
||||||
|
name
|
||||||
|
}
|
||||||
|
deletedAt
|
||||||
|
id
|
||||||
|
name
|
||||||
|
position
|
||||||
|
updatedAt
|
||||||
|
}
|
||||||
|
rocketId
|
||||||
|
task {
|
||||||
|
__typename
|
||||||
|
assigneeId
|
||||||
|
body
|
||||||
|
createdAt
|
||||||
|
createdBy {
|
||||||
|
source
|
||||||
|
workspaceMemberId
|
||||||
|
name
|
||||||
|
}
|
||||||
|
deletedAt
|
||||||
|
dueAt
|
||||||
|
id
|
||||||
|
position
|
||||||
|
status
|
||||||
|
title
|
||||||
|
updatedAt
|
||||||
|
}
|
||||||
|
taskId
|
||||||
|
updatedAt
|
||||||
|
view {
|
||||||
|
__typename
|
||||||
|
createdAt
|
||||||
|
deletedAt
|
||||||
|
icon
|
||||||
|
id
|
||||||
|
isCompact
|
||||||
|
kanbanFieldMetadataId
|
||||||
|
key
|
||||||
|
name
|
||||||
|
objectMetadataId
|
||||||
|
position
|
||||||
|
type
|
||||||
|
updatedAt
|
||||||
|
}
|
||||||
|
viewId
|
||||||
|
workflow {
|
||||||
|
__typename
|
||||||
|
createdAt
|
||||||
|
deletedAt
|
||||||
|
id
|
||||||
|
lastPublishedVersionId
|
||||||
|
name
|
||||||
|
position
|
||||||
|
statuses
|
||||||
|
updatedAt
|
||||||
|
}
|
||||||
|
workflowId
|
||||||
|
workflowRun {
|
||||||
|
__typename
|
||||||
|
createdAt
|
||||||
|
createdBy {
|
||||||
|
source
|
||||||
|
workspaceMemberId
|
||||||
|
name
|
||||||
|
}
|
||||||
|
deletedAt
|
||||||
|
endedAt
|
||||||
|
id
|
||||||
|
name
|
||||||
|
output
|
||||||
|
position
|
||||||
|
startedAt
|
||||||
|
status
|
||||||
|
updatedAt
|
||||||
|
workflowId
|
||||||
|
workflowVersionId
|
||||||
|
}
|
||||||
|
workflowRunId
|
||||||
|
workflowVersion {
|
||||||
|
__typename
|
||||||
|
createdAt
|
||||||
|
deletedAt
|
||||||
|
id
|
||||||
|
name
|
||||||
|
position
|
||||||
|
status
|
||||||
|
steps
|
||||||
|
trigger
|
||||||
|
updatedAt
|
||||||
|
workflowId
|
||||||
|
}
|
||||||
|
workflowVersionId
|
||||||
|
workspaceMember {
|
||||||
|
__typename
|
||||||
|
avatarUrl
|
||||||
|
colorScheme
|
||||||
|
createdAt
|
||||||
|
dateFormat
|
||||||
|
deletedAt
|
||||||
|
id
|
||||||
|
locale
|
||||||
|
name {
|
||||||
|
firstName
|
||||||
|
lastName
|
||||||
|
}
|
||||||
|
timeFormat
|
||||||
|
timeZone
|
||||||
|
updatedAt
|
||||||
|
userEmail
|
||||||
|
userId
|
||||||
|
}
|
||||||
|
workspaceMemberId
|
||||||
|
}
|
||||||
|
}
|
||||||
`,
|
`,
|
||||||
variables: {
|
variables: {
|
||||||
input: {
|
input: {
|
||||||
@@ -575,6 +788,41 @@ export const mocks = [
|
|||||||
updatedAt
|
updatedAt
|
||||||
}
|
}
|
||||||
workflowId
|
workflowId
|
||||||
|
workflowRun {
|
||||||
|
__typename
|
||||||
|
createdAt
|
||||||
|
createdBy {
|
||||||
|
source
|
||||||
|
workspaceMemberId
|
||||||
|
name
|
||||||
|
}
|
||||||
|
deletedAt
|
||||||
|
endedAt
|
||||||
|
id
|
||||||
|
name
|
||||||
|
output
|
||||||
|
position
|
||||||
|
startedAt
|
||||||
|
status
|
||||||
|
updatedAt
|
||||||
|
workflowId
|
||||||
|
workflowVersionId
|
||||||
|
}
|
||||||
|
workflowRunId
|
||||||
|
workflowVersion {
|
||||||
|
__typename
|
||||||
|
createdAt
|
||||||
|
deletedAt
|
||||||
|
id
|
||||||
|
name
|
||||||
|
position
|
||||||
|
status
|
||||||
|
steps
|
||||||
|
trigger
|
||||||
|
updatedAt
|
||||||
|
workflowId
|
||||||
|
}
|
||||||
|
workflowVersionId
|
||||||
workspaceMember {
|
workspaceMember {
|
||||||
__typename
|
__typename
|
||||||
avatarUrl
|
avatarUrl
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
|||||||
export const mapSoftDeleteFieldsToGraphQLQuery = (
|
export const mapSoftDeleteFieldsToGraphQLQuery = (
|
||||||
objectMetadataItem: Pick<ObjectMetadataItem, 'fields'>,
|
objectMetadataItem: Pick<ObjectMetadataItem, 'fields'>,
|
||||||
): string => {
|
): string => {
|
||||||
const softDeleteFields = ['id', 'deletedAt'];
|
const softDeleteFields = ['deletedAt', 'id'];
|
||||||
|
|
||||||
const fieldsThatShouldBeQueried = objectMetadataItem.fields.filter(
|
const fieldsThatShouldBeQueried = objectMetadataItem.fields.filter(
|
||||||
(field) => field.isActive && softDeleteFields.includes(field.name),
|
(field) => field.isActive && softDeleteFields.includes(field.name),
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export const PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS = `
|
|||||||
id
|
id
|
||||||
intro
|
intro
|
||||||
jobTitle
|
jobTitle
|
||||||
linkedinLink{
|
linkedinLink {
|
||||||
primaryLinkUrl
|
primaryLinkUrl
|
||||||
primaryLinkLabel
|
primaryLinkLabel
|
||||||
secondaryLinks
|
secondaryLinks
|
||||||
@@ -49,27 +49,10 @@ export const PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS = `
|
|||||||
|
|
||||||
export const PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS = `
|
export const PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS = `
|
||||||
__typename
|
__typename
|
||||||
activityTargets {
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
__typename
|
|
||||||
activityId
|
|
||||||
companyId
|
|
||||||
createdAt
|
|
||||||
deletedAt
|
|
||||||
id
|
|
||||||
opportunityId
|
|
||||||
personId
|
|
||||||
rocketId
|
|
||||||
updatedAt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
attachments {
|
attachments {
|
||||||
edges {
|
edges {
|
||||||
node {
|
node {
|
||||||
__typename
|
__typename
|
||||||
activityId
|
|
||||||
authorId
|
authorId
|
||||||
companyId
|
companyId
|
||||||
createdAt
|
createdAt
|
||||||
@@ -190,6 +173,8 @@ export const PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS = `
|
|||||||
updatedAt
|
updatedAt
|
||||||
viewId
|
viewId
|
||||||
workflowId
|
workflowId
|
||||||
|
workflowRunId
|
||||||
|
workflowVersionId
|
||||||
workspaceMemberId
|
workspaceMemberId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -308,6 +293,9 @@ export const PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS = `
|
|||||||
rocketId
|
rocketId
|
||||||
taskId
|
taskId
|
||||||
updatedAt
|
updatedAt
|
||||||
|
workflowId
|
||||||
|
workflowRunId
|
||||||
|
workflowVersionId
|
||||||
workspaceMemberId
|
workspaceMemberId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,5 +15,7 @@ export const variables = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const responseData = {
|
export const responseData = {
|
||||||
|
__typename: 'Person',
|
||||||
|
deletedAt: '2024-02-14T09:45:00Z',
|
||||||
id: 'a7286b9a-c039-4a89-9567-2dfa7953cda9',
|
id: 'a7286b9a-c039-4a89-9567-2dfa7953cda9',
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -99,20 +99,6 @@ export const query = gql`
|
|||||||
}
|
}
|
||||||
city
|
city
|
||||||
email
|
email
|
||||||
activityTargets {
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
__typename
|
|
||||||
id
|
|
||||||
updatedAt
|
|
||||||
createdAt
|
|
||||||
personId
|
|
||||||
activityId
|
|
||||||
companyId
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
jobTitle
|
jobTitle
|
||||||
favorites {
|
favorites {
|
||||||
edges {
|
edges {
|
||||||
@@ -137,7 +123,6 @@ export const query = gql`
|
|||||||
createdAt
|
createdAt
|
||||||
name
|
name
|
||||||
personId
|
personId
|
||||||
activityId
|
|
||||||
companyId
|
companyId
|
||||||
id
|
id
|
||||||
authorId
|
authorId
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ const expectedQueryTemplate = `
|
|||||||
mutation DeleteOnePerson($idToDelete: ID!) {
|
mutation DeleteOnePerson($idToDelete: ID!) {
|
||||||
deletePerson(id: $idToDelete) {
|
deletePerson(id: $idToDelete) {
|
||||||
__typename
|
__typename
|
||||||
deletedAt
|
|
||||||
id
|
id
|
||||||
|
deletedAt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`.replace(/\s/g, '');
|
`.replace(/\s/g, '');
|
||||||
|
|||||||
@@ -47,22 +47,6 @@ const mocks: MockedResponse[] = [
|
|||||||
userId
|
userId
|
||||||
}
|
}
|
||||||
accountOwnerId
|
accountOwnerId
|
||||||
activityTargets {
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
__typename
|
|
||||||
activityId
|
|
||||||
companyId
|
|
||||||
createdAt
|
|
||||||
deletedAt
|
|
||||||
id
|
|
||||||
opportunityId
|
|
||||||
personId
|
|
||||||
rocketId
|
|
||||||
updatedAt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
address {
|
address {
|
||||||
addressStreet1
|
addressStreet1
|
||||||
addressStreet2
|
addressStreet2
|
||||||
@@ -81,7 +65,6 @@ const mocks: MockedResponse[] = [
|
|||||||
edges {
|
edges {
|
||||||
node {
|
node {
|
||||||
__typename
|
__typename
|
||||||
activityId
|
|
||||||
authorId
|
authorId
|
||||||
companyId
|
companyId
|
||||||
createdAt
|
createdAt
|
||||||
@@ -129,6 +112,8 @@ const mocks: MockedResponse[] = [
|
|||||||
updatedAt
|
updatedAt
|
||||||
viewId
|
viewId
|
||||||
workflowId
|
workflowId
|
||||||
|
workflowRunId
|
||||||
|
workflowVersionId
|
||||||
workspaceMemberId
|
workspaceMemberId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -278,6 +263,9 @@ const mocks: MockedResponse[] = [
|
|||||||
rocketId
|
rocketId
|
||||||
taskId
|
taskId
|
||||||
updatedAt
|
updatedAt
|
||||||
|
workflowId
|
||||||
|
workflowRunId
|
||||||
|
workflowVersionId
|
||||||
workspaceMemberId
|
workspaceMemberId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,22 +46,6 @@ const companyMocks = [
|
|||||||
userId
|
userId
|
||||||
}
|
}
|
||||||
accountOwnerId
|
accountOwnerId
|
||||||
activityTargets {
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
__typename
|
|
||||||
activityId
|
|
||||||
companyId
|
|
||||||
createdAt
|
|
||||||
deletedAt
|
|
||||||
id
|
|
||||||
opportunityId
|
|
||||||
personId
|
|
||||||
rocketId
|
|
||||||
updatedAt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
address {
|
address {
|
||||||
addressStreet1
|
addressStreet1
|
||||||
addressStreet2
|
addressStreet2
|
||||||
@@ -80,7 +64,6 @@ const companyMocks = [
|
|||||||
edges {
|
edges {
|
||||||
node {
|
node {
|
||||||
__typename
|
__typename
|
||||||
activityId
|
|
||||||
authorId
|
authorId
|
||||||
companyId
|
companyId
|
||||||
createdAt
|
createdAt
|
||||||
|
|||||||
@@ -88,19 +88,6 @@ export const query = gql`
|
|||||||
}
|
}
|
||||||
city
|
city
|
||||||
email
|
email
|
||||||
activityTargets {
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
id
|
|
||||||
updatedAt
|
|
||||||
createdAt
|
|
||||||
personId
|
|
||||||
activityId
|
|
||||||
companyId
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
jobTitle
|
jobTitle
|
||||||
favorites {
|
favorites {
|
||||||
edges {
|
edges {
|
||||||
@@ -124,7 +111,6 @@ export const query = gql`
|
|||||||
createdAt
|
createdAt
|
||||||
name
|
name
|
||||||
personId
|
personId
|
||||||
activityId
|
|
||||||
companyId
|
companyId
|
||||||
id
|
id
|
||||||
authorId
|
authorId
|
||||||
|
|||||||
@@ -88,35 +88,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: null,
|
secondaryLinks: null,
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [
|
|
||||||
{
|
|
||||||
__typename: 'ActivityTargetEdge',
|
|
||||||
node: {
|
|
||||||
__typename: 'ActivityTarget',
|
|
||||||
id: '97114d7e-2a80-4401-af58-36c88e13e852',
|
|
||||||
activityId: '737a6c31-610a-457b-b087-791ac700fa46',
|
|
||||||
createdAt: '2023-11-24T13:15:03.523Z',
|
|
||||||
updatedAt: '2023-11-24T13:15:03.523Z',
|
|
||||||
companyId: '04b2e9f5-0713-40a5-8216-82802401d33e',
|
|
||||||
personId: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
__typename: 'ActivityTargetEdge',
|
|
||||||
node: {
|
|
||||||
__typename: 'ActivityTarget',
|
|
||||||
id: 'cb29d37a-3d5e-4efb-afa3-38f4bff69912',
|
|
||||||
activityId: '3c6ea4a3-f71d-4c31-9dfa-f868a5de4091',
|
|
||||||
createdAt: '2023-11-24T13:14:57.628Z',
|
|
||||||
updatedAt: '2023-11-24T13:14:57.628Z',
|
|
||||||
companyId: '04b2e9f5-0713-40a5-8216-82802401d33e',
|
|
||||||
personId: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
@@ -339,10 +310,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: [],
|
secondaryLinks: [],
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
@@ -489,10 +456,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: [],
|
secondaryLinks: [],
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
@@ -554,10 +517,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: [],
|
secondaryLinks: [],
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
@@ -755,10 +714,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: [],
|
secondaryLinks: [],
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
@@ -820,10 +775,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: [],
|
secondaryLinks: [],
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
@@ -885,10 +836,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: [],
|
secondaryLinks: [],
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
@@ -950,10 +897,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: [],
|
secondaryLinks: [],
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
@@ -1048,10 +991,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: [],
|
secondaryLinks: [],
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
@@ -1146,10 +1085,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: [],
|
secondaryLinks: [],
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
@@ -1211,10 +1146,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: [],
|
secondaryLinks: [],
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
@@ -1276,10 +1207,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: [],
|
secondaryLinks: [],
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
@@ -1426,10 +1353,6 @@ export const SIGN_IN_BACKGROUND_MOCK_COMPANIES = [
|
|||||||
secondaryLinks: [],
|
secondaryLinks: [],
|
||||||
__typename: 'Links',
|
__typename: 'Links',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
|
||||||
__typename: 'ActivityTargetConnection',
|
|
||||||
edges: [],
|
|
||||||
},
|
|
||||||
annualRecurringRevenue: {
|
annualRecurringRevenue: {
|
||||||
__typename: 'Currency',
|
__typename: 'Currency',
|
||||||
amountMicros: null,
|
amountMicros: null,
|
||||||
|
|||||||
@@ -40,21 +40,6 @@ const meta: Meta<PageDecoratorArgs> = {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
graphql.query('FindManyActivityTargets', () => {
|
|
||||||
return HttpResponse.json({
|
|
||||||
data: {
|
|
||||||
activityTargets: {
|
|
||||||
edges: [],
|
|
||||||
pageInfo: {
|
|
||||||
hasNextPage: false,
|
|
||||||
startCursor: '',
|
|
||||||
endCursor: '',
|
|
||||||
},
|
|
||||||
totalCount: 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}),
|
|
||||||
graphql.query('FindOneworkspaceMember', () => {
|
graphql.query('FindOneworkspaceMember', () => {
|
||||||
return HttpResponse.json({
|
return HttpResponse.json({
|
||||||
data: {
|
data: {
|
||||||
|
|||||||
@@ -259,9 +259,13 @@ export const graphqlMocks = {
|
|||||||
edges: [],
|
edges: [],
|
||||||
__typename: 'OpportunityConnection',
|
__typename: 'OpportunityConnection',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
taskTargets: {
|
||||||
edges: [],
|
edges: [],
|
||||||
__typename: 'ActivityTargetConnection',
|
__typename: 'TaskTargetConnection',
|
||||||
|
},
|
||||||
|
noteTargets: {
|
||||||
|
edges: [],
|
||||||
|
__typename: 'NoteTargetConnection',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
cursor: null,
|
cursor: null,
|
||||||
@@ -301,9 +305,13 @@ export const graphqlMocks = {
|
|||||||
edges: [],
|
edges: [],
|
||||||
__typename: 'OpportunityConnection',
|
__typename: 'OpportunityConnection',
|
||||||
},
|
},
|
||||||
activityTargets: {
|
taskTargets: {
|
||||||
edges: [],
|
edges: [],
|
||||||
__typename: 'ActivityTargetConnection',
|
__typename: 'TaskTargetConnection',
|
||||||
|
},
|
||||||
|
noteTargets: {
|
||||||
|
edges: [],
|
||||||
|
__typename: 'NoteTargetConnection',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
cursor: null,
|
cursor: null,
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ import { EnvironmentService } from 'src/engine/core-modules/environment/environm
|
|||||||
import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
|
import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
|
||||||
import { KeyValuePair } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity';
|
import { KeyValuePair } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity';
|
||||||
import { PostgresCredentials } from 'src/engine/core-modules/postgres-credentials/postgres-credentials.entity';
|
import { PostgresCredentials } from 'src/engine/core-modules/postgres-credentials/postgres-credentials.entity';
|
||||||
|
import { WorkspaceSSOIdentityProvider } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity';
|
||||||
import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity';
|
import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity';
|
||||||
import { User } from 'src/engine/core-modules/user/user.entity';
|
import { User } from 'src/engine/core-modules/user/user.entity';
|
||||||
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||||
import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity';
|
import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity';
|
||||||
import { WorkspaceSSOIdentityProvider } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class TypeORMService implements OnModuleInit, OnModuleDestroy {
|
export class TypeORMService implements OnModuleInit, OnModuleDestroy {
|
||||||
|
|||||||
@@ -386,7 +386,6 @@ export class ObjectMetadataService extends TypeOrmQueryService<ObjectMetadataEnt
|
|||||||
) {
|
) {
|
||||||
const relatedObjectTypes = [
|
const relatedObjectTypes = [
|
||||||
'timelineActivity',
|
'timelineActivity',
|
||||||
'activityTarget',
|
|
||||||
'favorite',
|
'favorite',
|
||||||
'attachment',
|
'attachment',
|
||||||
'noteTarget',
|
'noteTarget',
|
||||||
|
|||||||
@@ -1,28 +1,27 @@
|
|||||||
import { InjectRepository } from '@nestjs/typeorm';
|
|
||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
|
||||||
import { In, Repository } from 'typeorm';
|
import { In, Repository } from 'typeorm';
|
||||||
|
|
||||||
import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
|
import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
|
||||||
|
|
||||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
|
||||||
import { generateMigrationName } from 'src/engine/metadata-modules/workspace-migration/utils/generate-migration-name.util';
|
|
||||||
import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service';
|
|
||||||
import {
|
import {
|
||||||
FieldMetadataEntity,
|
FieldMetadataEntity,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
} from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
} from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||||
import { createForeignKeyDeterministicUuid } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/create-deterministic-uuid.util';
|
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||||
|
import { createRelationForeignKeyFieldMetadataName } from 'src/engine/metadata-modules/relation-metadata/utils/create-relation-foreign-key-field-metadata-name.util';
|
||||||
|
import { buildMigrationsToCreateRemoteTableRelations } from 'src/engine/metadata-modules/remote-server/remote-table/remote-table-relations/utils/build-migrations-to-create-remote-table-relations.util';
|
||||||
|
import { buildMigrationsToRemoveRemoteTableRelations } from 'src/engine/metadata-modules/remote-server/remote-table/remote-table-relations/utils/build-migrations-to-remove-remote-table-relations.util';
|
||||||
|
import { mapUdtNameToFieldType } from 'src/engine/metadata-modules/remote-server/remote-table/utils/udt-name-mapper.util';
|
||||||
|
import { generateMigrationName } from 'src/engine/metadata-modules/workspace-migration/utils/generate-migration-name.util';
|
||||||
|
import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service';
|
||||||
import {
|
import {
|
||||||
ACTIVITY_TARGET_STANDARD_FIELD_IDS,
|
|
||||||
ATTACHMENT_STANDARD_FIELD_IDS,
|
ATTACHMENT_STANDARD_FIELD_IDS,
|
||||||
FAVORITE_STANDARD_FIELD_IDS,
|
FAVORITE_STANDARD_FIELD_IDS,
|
||||||
TIMELINE_ACTIVITY_STANDARD_FIELD_IDS,
|
TIMELINE_ACTIVITY_STANDARD_FIELD_IDS,
|
||||||
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
|
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
|
||||||
import { buildMigrationsToCreateRemoteTableRelations } from 'src/engine/metadata-modules/remote-server/remote-table/remote-table-relations/utils/build-migrations-to-create-remote-table-relations.util';
|
import { createForeignKeyDeterministicUuid } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/create-deterministic-uuid.util';
|
||||||
import { buildMigrationsToRemoveRemoteTableRelations } from 'src/engine/metadata-modules/remote-server/remote-table/remote-table-relations/utils/build-migrations-to-remove-remote-table-relations.util';
|
|
||||||
import { mapUdtNameToFieldType } from 'src/engine/metadata-modules/remote-server/remote-table/utils/udt-name-mapper.util';
|
|
||||||
import { createRelationForeignKeyFieldMetadataName } from 'src/engine/metadata-modules/relation-metadata/utils/create-relation-foreign-key-field-metadata-name.util';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class RemoteTableRelationsService {
|
export class RemoteTableRelationsService {
|
||||||
@@ -54,14 +53,6 @@ export class RemoteTableRelationsService {
|
|||||||
objectPrimaryKeyFieldSettings,
|
objectPrimaryKeyFieldSettings,
|
||||||
);
|
);
|
||||||
|
|
||||||
const activityTargetObjectMetadata =
|
|
||||||
await this.createActivityTargetRelation(
|
|
||||||
workspaceId,
|
|
||||||
remoteObjectMetadata,
|
|
||||||
objectPrimaryKeyFieldType,
|
|
||||||
objectPrimaryKeyFieldSettings,
|
|
||||||
);
|
|
||||||
|
|
||||||
const attachmentObjectMetadata = await this.createAttachmentRelation(
|
const attachmentObjectMetadata = await this.createAttachmentRelation(
|
||||||
workspaceId,
|
workspaceId,
|
||||||
remoteObjectMetadata,
|
remoteObjectMetadata,
|
||||||
@@ -87,7 +78,6 @@ export class RemoteTableRelationsService {
|
|||||||
remoteObjectMetadata.nameSingular,
|
remoteObjectMetadata.nameSingular,
|
||||||
[
|
[
|
||||||
favoriteObjectMetadata,
|
favoriteObjectMetadata,
|
||||||
activityTargetObjectMetadata,
|
|
||||||
attachmentObjectMetadata,
|
attachmentObjectMetadata,
|
||||||
timelineActivityObjectMetadata,
|
timelineActivityObjectMetadata,
|
||||||
],
|
],
|
||||||
@@ -107,12 +97,6 @@ export class RemoteTableRelationsService {
|
|||||||
workspaceId: workspaceId,
|
workspaceId: workspaceId,
|
||||||
});
|
});
|
||||||
|
|
||||||
const activityTargetObjectMetadata =
|
|
||||||
await this.objectMetadataRepository.findOneByOrFail({
|
|
||||||
nameSingular: 'activityTarget',
|
|
||||||
workspaceId: workspaceId,
|
|
||||||
});
|
|
||||||
|
|
||||||
const attachmentObjectMetadata =
|
const attachmentObjectMetadata =
|
||||||
await this.objectMetadataRepository.findOneByOrFail({
|
await this.objectMetadataRepository.findOneByOrFail({
|
||||||
nameSingular: 'attachment',
|
nameSingular: 'attachment',
|
||||||
@@ -136,7 +120,6 @@ export class RemoteTableRelationsService {
|
|||||||
name: targetColumnName,
|
name: targetColumnName,
|
||||||
objectMetadataId: In([
|
objectMetadataId: In([
|
||||||
favoriteObjectMetadata.id,
|
favoriteObjectMetadata.id,
|
||||||
activityTargetObjectMetadata.id,
|
|
||||||
attachmentObjectMetadata.id,
|
attachmentObjectMetadata.id,
|
||||||
timelineActivityObjectMetadata.id,
|
timelineActivityObjectMetadata.id,
|
||||||
]),
|
]),
|
||||||
@@ -158,53 +141,12 @@ export class RemoteTableRelationsService {
|
|||||||
workspaceId,
|
workspaceId,
|
||||||
buildMigrationsToRemoveRemoteTableRelations(targetColumnName, [
|
buildMigrationsToRemoveRemoteTableRelations(targetColumnName, [
|
||||||
favoriteObjectMetadata,
|
favoriteObjectMetadata,
|
||||||
activityTargetObjectMetadata,
|
|
||||||
attachmentObjectMetadata,
|
attachmentObjectMetadata,
|
||||||
timelineActivityObjectMetadata,
|
timelineActivityObjectMetadata,
|
||||||
]),
|
]),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async createActivityTargetRelation(
|
|
||||||
workspaceId: string,
|
|
||||||
createdObjectMetadata: ObjectMetadataEntity,
|
|
||||||
objectPrimaryKeyType: FieldMetadataType,
|
|
||||||
objectPrimaryKeyFieldSettings:
|
|
||||||
| FieldMetadataSettings<FieldMetadataType | 'default'>
|
|
||||||
| undefined,
|
|
||||||
) {
|
|
||||||
const activityTargetObjectMetadata =
|
|
||||||
await this.objectMetadataRepository.findOneByOrFail({
|
|
||||||
nameSingular: 'activityTarget',
|
|
||||||
workspaceId: workspaceId,
|
|
||||||
});
|
|
||||||
|
|
||||||
await this.fieldMetadataRepository.save(
|
|
||||||
// Foreign key
|
|
||||||
{
|
|
||||||
standardId: createForeignKeyDeterministicUuid({
|
|
||||||
objectId: createdObjectMetadata.id,
|
|
||||||
standardId: ACTIVITY_TARGET_STANDARD_FIELD_IDS.custom,
|
|
||||||
}),
|
|
||||||
objectMetadataId: activityTargetObjectMetadata.id,
|
|
||||||
workspaceId: workspaceId,
|
|
||||||
isCustom: false,
|
|
||||||
isActive: true,
|
|
||||||
type: objectPrimaryKeyType,
|
|
||||||
name: `${createdObjectMetadata.nameSingular}Id`,
|
|
||||||
label: `${createdObjectMetadata.labelSingular} ID (foreign key)`,
|
|
||||||
description: `ActivityTarget ${createdObjectMetadata.labelSingular} id foreign key`,
|
|
||||||
icon: undefined,
|
|
||||||
isNullable: true,
|
|
||||||
isSystem: true,
|
|
||||||
defaultValue: undefined,
|
|
||||||
settings: { ...objectPrimaryKeyFieldSettings, isForeignKey: true },
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
return activityTargetObjectMetadata;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async createAttachmentRelation(
|
private async createAttachmentRelation(
|
||||||
workspaceId: string,
|
workspaceId: string,
|
||||||
createdObjectMetadata: ObjectMetadataEntity,
|
createdObjectMetadata: ObjectMetadataEntity,
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||||
import {
|
import {
|
||||||
WorkspaceMigrationTableAction,
|
|
||||||
WorkspaceMigrationTableActionType,
|
|
||||||
WorkspaceMigrationColumnActionType,
|
WorkspaceMigrationColumnActionType,
|
||||||
WorkspaceMigrationColumnDrop,
|
WorkspaceMigrationColumnDrop,
|
||||||
|
WorkspaceMigrationTableAction,
|
||||||
|
WorkspaceMigrationTableActionType,
|
||||||
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
|
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
|
||||||
import { computeTableName } from 'src/engine/utils/compute-table-name.util';
|
import { computeTableName } from 'src/engine/utils/compute-table-name.util';
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import {
|
|||||||
FieldTypeAndNameMetadata,
|
FieldTypeAndNameMetadata,
|
||||||
getTsVectorColumnExpressionFromFields,
|
getTsVectorColumnExpressionFromFields,
|
||||||
} from 'src/engine/workspace-manager/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
} from 'src/engine/workspace-manager/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
import { ActivityTargetWorkspaceEntity } from 'src/modules/activity/standard-objects/activity-target.workspace-entity';
|
|
||||||
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
||||||
import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity';
|
import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity';
|
||||||
import { NoteTargetWorkspaceEntity } from 'src/modules/note/standard-objects/note-target.workspace-entity';
|
import { NoteTargetWorkspaceEntity } from 'src/modules/note/standard-objects/note-target.workspace-entity';
|
||||||
@@ -71,19 +70,6 @@ export class CustomWorkspaceEntity extends BaseWorkspaceEntity {
|
|||||||
})
|
})
|
||||||
createdBy: ActorMetadata;
|
createdBy: ActorMetadata;
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: CUSTOM_OBJECT_STANDARD_FIELD_IDS.activityTargets,
|
|
||||||
label: 'Activities',
|
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
|
||||||
description: (objectMetadata) =>
|
|
||||||
`Activities tied to the ${objectMetadata.labelSingular}`,
|
|
||||||
icon: 'IconCheckbox',
|
|
||||||
inverseSideTarget: () => ActivityTargetWorkspaceEntity,
|
|
||||||
onDelete: RelationOnDeleteAction.CASCADE,
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
activityTargets: ActivityTargetWorkspaceEntity[];
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
@WorkspaceRelation({
|
||||||
standardId: CUSTOM_OBJECT_STANDARD_FIELD_IDS.noteTargets,
|
standardId: CUSTOM_OBJECT_STANDARD_FIELD_IDS.noteTargets,
|
||||||
label: 'Notes',
|
label: 'Notes',
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ export const notesAllView = (
|
|||||||
TODO: Add later, since we don't have real-time it probably doesn't work well?
|
TODO: Add later, since we don't have real-time it probably doesn't work well?
|
||||||
{
|
{
|
||||||
fieldMetadataId:
|
fieldMetadataId:
|
||||||
objectMetadataMap[STANDARD_OBJECT_IDS.activity].fields[
|
objectMetadataMap[STANDARD_OBJECT_IDS.note].fields[
|
||||||
BASE_OBJECT_STANDARD_FIELD_IDS.updatedAt
|
BASE_OBJECT_STANDARD_FIELD_IDS.updatedAt
|
||||||
],
|
],
|
||||||
position: 0,
|
position: 0,
|
||||||
|
|||||||
@@ -4,15 +4,16 @@ import { WorkspaceMigrationBuilderAction } from 'src/engine/workspace-manager/wo
|
|||||||
|
|
||||||
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||||
|
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
||||||
|
import { generateMigrationName } from 'src/engine/metadata-modules/workspace-migration/utils/generate-migration-name.util';
|
||||||
import {
|
import {
|
||||||
WorkspaceMigrationColumnActionType,
|
WorkspaceMigrationColumnActionType,
|
||||||
WorkspaceMigrationEntity,
|
WorkspaceMigrationEntity,
|
||||||
WorkspaceMigrationTableAction,
|
WorkspaceMigrationTableAction,
|
||||||
WorkspaceMigrationTableActionType,
|
WorkspaceMigrationTableActionType,
|
||||||
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
|
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
|
||||||
import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util';
|
|
||||||
import { WorkspaceMigrationFactory } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.factory';
|
import { WorkspaceMigrationFactory } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.factory';
|
||||||
import { generateMigrationName } from 'src/engine/metadata-modules/workspace-migration/utils/generate-migration-name.util';
|
import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util';
|
||||||
|
|
||||||
export interface ObjectMetadataUpdate {
|
export interface ObjectMetadataUpdate {
|
||||||
current: ObjectMetadataEntity;
|
current: ObjectMetadataEntity;
|
||||||
@@ -27,9 +28,7 @@ export class WorkspaceMigrationObjectFactory {
|
|||||||
|
|
||||||
async create(
|
async create(
|
||||||
objectMetadataCollection: ObjectMetadataEntity[],
|
objectMetadataCollection: ObjectMetadataEntity[],
|
||||||
action:
|
action: WorkspaceMigrationBuilderAction.CREATE,
|
||||||
| WorkspaceMigrationBuilderAction.CREATE
|
|
||||||
| WorkspaceMigrationBuilderAction.DELETE,
|
|
||||||
): Promise<Partial<WorkspaceMigrationEntity>[]>;
|
): Promise<Partial<WorkspaceMigrationEntity>[]>;
|
||||||
|
|
||||||
async create(
|
async create(
|
||||||
@@ -37,11 +36,24 @@ export class WorkspaceMigrationObjectFactory {
|
|||||||
action: WorkspaceMigrationBuilderAction.UPDATE,
|
action: WorkspaceMigrationBuilderAction.UPDATE,
|
||||||
): Promise<Partial<WorkspaceMigrationEntity>[]>;
|
): Promise<Partial<WorkspaceMigrationEntity>[]>;
|
||||||
|
|
||||||
|
async create(
|
||||||
|
objectMetadataCollection: ObjectMetadataEntity[],
|
||||||
|
action: WorkspaceMigrationBuilderAction.DELETE,
|
||||||
|
relationMetadataByFromObjectMetadataId: Record<
|
||||||
|
string,
|
||||||
|
RelationMetadataEntity[]
|
||||||
|
>,
|
||||||
|
): Promise<Partial<WorkspaceMigrationEntity>[]>;
|
||||||
|
|
||||||
async create(
|
async create(
|
||||||
objectMetadataCollectionOrObjectMetadataUpdateCollection:
|
objectMetadataCollectionOrObjectMetadataUpdateCollection:
|
||||||
| ObjectMetadataEntity[]
|
| ObjectMetadataEntity[]
|
||||||
| ObjectMetadataUpdate[],
|
| ObjectMetadataUpdate[],
|
||||||
action: WorkspaceMigrationBuilderAction,
|
action: WorkspaceMigrationBuilderAction,
|
||||||
|
relationMetadataByFromObjectMetadataId?: Record<
|
||||||
|
string,
|
||||||
|
RelationMetadataEntity[]
|
||||||
|
>,
|
||||||
): Promise<Partial<WorkspaceMigrationEntity>[]> {
|
): Promise<Partial<WorkspaceMigrationEntity>[]> {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case WorkspaceMigrationBuilderAction.CREATE:
|
case WorkspaceMigrationBuilderAction.CREATE:
|
||||||
@@ -55,6 +67,10 @@ export class WorkspaceMigrationObjectFactory {
|
|||||||
case WorkspaceMigrationBuilderAction.DELETE:
|
case WorkspaceMigrationBuilderAction.DELETE:
|
||||||
return this.deleteObjectMigration(
|
return this.deleteObjectMigration(
|
||||||
objectMetadataCollectionOrObjectMetadataUpdateCollection as ObjectMetadataEntity[],
|
objectMetadataCollectionOrObjectMetadataUpdateCollection as ObjectMetadataEntity[],
|
||||||
|
relationMetadataByFromObjectMetadataId as Record<
|
||||||
|
string,
|
||||||
|
RelationMetadataEntity[]
|
||||||
|
>,
|
||||||
);
|
);
|
||||||
default:
|
default:
|
||||||
return [];
|
return [];
|
||||||
@@ -136,22 +152,43 @@ export class WorkspaceMigrationObjectFactory {
|
|||||||
|
|
||||||
private async deleteObjectMigration(
|
private async deleteObjectMigration(
|
||||||
objectMetadataCollection: ObjectMetadataEntity[],
|
objectMetadataCollection: ObjectMetadataEntity[],
|
||||||
|
relationMetadataByFromObjectMetadataId: Record<
|
||||||
|
string,
|
||||||
|
RelationMetadataEntity[]
|
||||||
|
>,
|
||||||
): Promise<Partial<WorkspaceMigrationEntity>[]> {
|
): Promise<Partial<WorkspaceMigrationEntity>[]> {
|
||||||
const workspaceMigrations: Partial<WorkspaceMigrationEntity>[] = [];
|
const workspaceMigrations: Partial<WorkspaceMigrationEntity>[] = [];
|
||||||
|
|
||||||
for (const objectMetadata of objectMetadataCollection) {
|
for (const objectMetadata of objectMetadataCollection) {
|
||||||
const migrations: WorkspaceMigrationTableAction[] = [
|
const relationMetadataCollection =
|
||||||
{
|
relationMetadataByFromObjectMetadataId[objectMetadata.id];
|
||||||
name: computeObjectTargetTable(objectMetadata),
|
|
||||||
action: WorkspaceMigrationTableActionType.DROP,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
workspaceMigrations.push({
|
workspaceMigrations.push({
|
||||||
workspaceId: objectMetadata.workspaceId,
|
workspaceId: objectMetadata.workspaceId,
|
||||||
name: generateMigrationName(`delete-${objectMetadata.nameSingular}`),
|
name: generateMigrationName(`delete-${objectMetadata.nameSingular}`),
|
||||||
isCustom: false,
|
isCustom: false,
|
||||||
migrations,
|
migrations: [
|
||||||
|
...(relationMetadataCollection ?? []).map(
|
||||||
|
(relationMetadata) =>
|
||||||
|
({
|
||||||
|
name: computeObjectTargetTable(
|
||||||
|
relationMetadata.toObjectMetadata,
|
||||||
|
),
|
||||||
|
action: WorkspaceMigrationTableActionType.ALTER,
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
action: WorkspaceMigrationColumnActionType.DROP_FOREIGN_KEY,
|
||||||
|
columnName: `${relationMetadata.toFieldMetadata.name}Id`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}) satisfies WorkspaceMigrationTableAction,
|
||||||
|
),
|
||||||
|
{
|
||||||
|
name: computeObjectTargetTable(objectMetadata),
|
||||||
|
action: WorkspaceMigrationTableActionType.DROP,
|
||||||
|
columns: [],
|
||||||
|
} satisfies WorkspaceMigrationTableAction,
|
||||||
|
],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
* For readability keys can be edited but the values should not be changed.
|
* For readability keys can be edited but the values should not be changed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// TODO: check if this can be deleted
|
||||||
export const ACTIVITY_TARGET_STANDARD_FIELD_IDS = {
|
export const ACTIVITY_TARGET_STANDARD_FIELD_IDS = {
|
||||||
activity: '20202020-ca58-478c-a4f5-ae825671c30e',
|
activity: '20202020-ca58-478c-a4f5-ae825671c30e',
|
||||||
person: '20202020-4afd-4ae7-99c2-de57d795a93f',
|
person: '20202020-4afd-4ae7-99c2-de57d795a93f',
|
||||||
@@ -13,6 +14,7 @@ export const ACTIVITY_TARGET_STANDARD_FIELD_IDS = {
|
|||||||
custom: '20202020-7f21-442f-94be-32462281b1ca',
|
custom: '20202020-7f21-442f-94be-32462281b1ca',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO: check if this can be deleted
|
||||||
export const ACTIVITY_STANDARD_FIELD_IDS = {
|
export const ACTIVITY_STANDARD_FIELD_IDS = {
|
||||||
title: '20202020-24a1-4d94-a071-617f3eeed7b0',
|
title: '20202020-24a1-4d94-a071-617f3eeed7b0',
|
||||||
body: '20202020-209b-440a-b2a8-043fa36a7d37',
|
body: '20202020-209b-440a-b2a8-043fa36a7d37',
|
||||||
@@ -109,6 +111,7 @@ export const CALENDAR_EVENT_STANDARD_FIELD_IDS = {
|
|||||||
calendarEventParticipants: '20202020-e07e-4ccb-88f5-6f3d00458eec',
|
calendarEventParticipants: '20202020-e07e-4ccb-88f5-6f3d00458eec',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO: check if this can be deleted
|
||||||
export const COMMENT_STANDARD_FIELD_IDS = {
|
export const COMMENT_STANDARD_FIELD_IDS = {
|
||||||
body: '20202020-d5eb-49d2-b3e0-1ed04145ebb7',
|
body: '20202020-d5eb-49d2-b3e0-1ed04145ebb7',
|
||||||
author: '20202020-2ab1-427e-a981-cf089de3a9bd',
|
author: '20202020-2ab1-427e-a981-cf089de3a9bd',
|
||||||
@@ -129,6 +132,7 @@ export const COMPANY_STANDARD_FIELD_IDS = {
|
|||||||
createdBy: '20202020-fabc-451d-ab7d-412170916baa',
|
createdBy: '20202020-fabc-451d-ab7d-412170916baa',
|
||||||
people: '20202020-3213-4ddf-9494-6422bcff8d7c',
|
people: '20202020-3213-4ddf-9494-6422bcff8d7c',
|
||||||
accountOwner: '20202020-95b8-4e10-9881-edb5d4765f9d',
|
accountOwner: '20202020-95b8-4e10-9881-edb5d4765f9d',
|
||||||
|
// TODO: check if activityTargets field can be deleted
|
||||||
activityTargets: '20202020-c2a5-4c9b-9d9a-582bcd57fbc8',
|
activityTargets: '20202020-c2a5-4c9b-9d9a-582bcd57fbc8',
|
||||||
taskTargets: '20202020-cb17-4a61-8f8f-3be6730480de',
|
taskTargets: '20202020-cb17-4a61-8f8f-3be6730480de',
|
||||||
noteTargets: '20202020-bae0-4556-a74a-a9c686f77a88',
|
noteTargets: '20202020-bae0-4556-a74a-a9c686f77a88',
|
||||||
@@ -304,6 +308,7 @@ export const OPPORTUNITY_STANDARD_FIELD_IDS = {
|
|||||||
pointOfContact: '20202020-8dfb-42fc-92b6-01afb759ed16',
|
pointOfContact: '20202020-8dfb-42fc-92b6-01afb759ed16',
|
||||||
company: '20202020-cbac-457e-b565-adece5fc815f',
|
company: '20202020-cbac-457e-b565-adece5fc815f',
|
||||||
favorites: '20202020-a1c2-4500-aaae-83ba8a0e827a',
|
favorites: '20202020-a1c2-4500-aaae-83ba8a0e827a',
|
||||||
|
// TODO: check if activityTargets field can be deleted
|
||||||
activityTargets: '20202020-220a-42d6-8261-b2102d6eab35',
|
activityTargets: '20202020-220a-42d6-8261-b2102d6eab35',
|
||||||
taskTargets: '20202020-59c0-4179-a208-4a255f04a5be',
|
taskTargets: '20202020-59c0-4179-a208-4a255f04a5be',
|
||||||
noteTargets: '20202020-dd3f-42d5-a382-db58aabf43d3',
|
noteTargets: '20202020-dd3f-42d5-a382-db58aabf43d3',
|
||||||
@@ -327,6 +332,7 @@ export const PERSON_STANDARD_FIELD_IDS = {
|
|||||||
createdBy: '20202020-f6ab-4d98-af24-a3d5b664148a',
|
createdBy: '20202020-f6ab-4d98-af24-a3d5b664148a',
|
||||||
company: '20202020-e2f3-448e-b34c-2d625f0025fd',
|
company: '20202020-e2f3-448e-b34c-2d625f0025fd',
|
||||||
pointOfContactForOpportunities: '20202020-911b-4a7d-b67b-918aa9a5b33a',
|
pointOfContactForOpportunities: '20202020-911b-4a7d-b67b-918aa9a5b33a',
|
||||||
|
// TODO: check if activityTargets field can be deleted
|
||||||
activityTargets: '20202020-dee7-4b7f-b50a-1f50bd3be452',
|
activityTargets: '20202020-dee7-4b7f-b50a-1f50bd3be452',
|
||||||
taskTargets: '20202020-584b-4d3e-88b6-53ab1fa03c3a',
|
taskTargets: '20202020-584b-4d3e-88b6-53ab1fa03c3a',
|
||||||
noteTargets: '20202020-c8fc-4258-8250-15905d3fcfec',
|
noteTargets: '20202020-c8fc-4258-8250-15905d3fcfec',
|
||||||
@@ -498,6 +504,7 @@ export const CUSTOM_OBJECT_STANDARD_FIELD_IDS = {
|
|||||||
name: '20202020-ba07-4ffd-ba63-009491f5749c',
|
name: '20202020-ba07-4ffd-ba63-009491f5749c',
|
||||||
position: '20202020-c2bd-4e16-bb9a-c8b0411bf49d',
|
position: '20202020-c2bd-4e16-bb9a-c8b0411bf49d',
|
||||||
createdBy: '20202020-be0e-4971-865b-32ca87cbb315',
|
createdBy: '20202020-be0e-4971-865b-32ca87cbb315',
|
||||||
|
// TODO: check if activityTargets field can be deleted
|
||||||
activityTargets: '20202020-7f42-40ae-b96c-c8a61acc83bf',
|
activityTargets: '20202020-7f42-40ae-b96c-c8a61acc83bf',
|
||||||
noteTargets: '20202020-01fd-4f37-99dc-9427a444018a',
|
noteTargets: '20202020-01fd-4f37-99dc-9427a444018a',
|
||||||
taskTargets: '20202020-0860-4566-b865-bff3c626c303',
|
taskTargets: '20202020-0860-4566-b865-bff3c626c303',
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export const STANDARD_OBJECT_IDS = {
|
export const STANDARD_OBJECT_IDS = {
|
||||||
|
// TODO: check if activity, activityTarget and comment can be deleted
|
||||||
activityTarget: '20202020-2945-440e-8d1a-f84672d33d5e',
|
activityTarget: '20202020-2945-440e-8d1a-f84672d33d5e',
|
||||||
activity: '20202020-39aa-4a89-843b-eb5f2a8b677f',
|
activity: '20202020-39aa-4a89-843b-eb5f2a8b677f',
|
||||||
apiKey: '20202020-4c00-401d-8cda-ec6a4c41cd7d',
|
apiKey: '20202020-4c00-401d-8cda-ec6a4c41cd7d',
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {
|
|||||||
FindOptionsWhere,
|
FindOptionsWhere,
|
||||||
In,
|
In,
|
||||||
ObjectLiteral,
|
ObjectLiteral,
|
||||||
|
Repository,
|
||||||
} from 'typeorm';
|
} from 'typeorm';
|
||||||
import { DeepPartial } from 'typeorm/common/DeepPartial';
|
import { DeepPartial } from 'typeorm/common/DeepPartial';
|
||||||
import { v4 as uuidV4 } from 'uuid';
|
import { v4 as uuidV4 } from 'uuid';
|
||||||
@@ -127,6 +128,11 @@ export class WorkspaceMetadataUpdaterService {
|
|||||||
updatedFieldMetadataCollection: FieldMetadataUpdate[];
|
updatedFieldMetadataCollection: FieldMetadataUpdate[];
|
||||||
}> {
|
}> {
|
||||||
const fieldMetadataRepository = manager.getRepository(FieldMetadataEntity);
|
const fieldMetadataRepository = manager.getRepository(FieldMetadataEntity);
|
||||||
|
const indexFieldMetadataRepository = manager.getRepository(
|
||||||
|
IndexFieldMetadataEntity,
|
||||||
|
);
|
||||||
|
const indexMetadataRepository = manager.getRepository(IndexMetadataEntity);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update field metadata
|
* Update field metadata
|
||||||
*/
|
*/
|
||||||
@@ -157,6 +163,12 @@ export class WorkspaceMetadataUpdaterService {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (fieldMetadataDeleteCollectionWithoutRelationType.length > 0) {
|
if (fieldMetadataDeleteCollectionWithoutRelationType.length > 0) {
|
||||||
|
await this.deleteIndexFieldMetadata(
|
||||||
|
fieldMetadataDeleteCollectionWithoutRelationType,
|
||||||
|
indexFieldMetadataRepository,
|
||||||
|
indexMetadataRepository,
|
||||||
|
);
|
||||||
|
|
||||||
await fieldMetadataRepository.delete(
|
await fieldMetadataRepository.delete(
|
||||||
fieldMetadataDeleteCollectionWithoutRelationType.map(
|
fieldMetadataDeleteCollectionWithoutRelationType.map(
|
||||||
(field) => field.id,
|
(field) => field.id,
|
||||||
@@ -171,6 +183,33 @@ export class WorkspaceMetadataUpdaterService {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async deleteIndexFieldMetadata(
|
||||||
|
fieldMetadataDeleteCollectionWithoutRelationType: Partial<FieldMetadataEntity>[],
|
||||||
|
indexFieldMetadataRepository: Repository<IndexFieldMetadataEntity>,
|
||||||
|
indexMetadataRepository: Repository<IndexMetadataEntity>,
|
||||||
|
) {
|
||||||
|
const indexFieldMetadatas = await indexFieldMetadataRepository.find({
|
||||||
|
where: {
|
||||||
|
fieldMetadataId: In(
|
||||||
|
fieldMetadataDeleteCollectionWithoutRelationType.map(
|
||||||
|
(field) => field.id,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
relations: {
|
||||||
|
indexMetadata: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const uniqueIndexMetadataIds = [
|
||||||
|
...new Set(indexFieldMetadatas.map((field) => field.indexMetadataId)),
|
||||||
|
];
|
||||||
|
|
||||||
|
if (uniqueIndexMetadataIds.length > 0) {
|
||||||
|
await indexMetadataRepository.delete(uniqueIndexMetadataIds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async updateRelationMetadata(
|
async updateRelationMetadata(
|
||||||
manager: EntityManager,
|
manager: EntityManager,
|
||||||
storage: WorkspaceSyncStorage,
|
storage: WorkspaceSyncStorage,
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { ComparatorAction } from 'src/engine/workspace-manager/workspace-sync-me
|
|||||||
import { WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface';
|
import { WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface';
|
||||||
|
|
||||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||||
|
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
||||||
import { WorkspaceMigrationEntity } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
|
import { WorkspaceMigrationEntity } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
|
||||||
import { WorkspaceMigrationObjectFactory } from 'src/engine/workspace-manager/workspace-migration-builder/factories/workspace-migration-object.factory';
|
import { WorkspaceMigrationObjectFactory } from 'src/engine/workspace-manager/workspace-migration-builder/factories/workspace-migration-object.factory';
|
||||||
import { WorkspaceObjectComparator } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/workspace-object.comparator';
|
import { WorkspaceObjectComparator } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/workspace-object.comparator';
|
||||||
@@ -37,6 +38,10 @@ export class WorkspaceSyncObjectMetadataService {
|
|||||||
const objectMetadataRepository =
|
const objectMetadataRepository =
|
||||||
manager.getRepository(ObjectMetadataEntity);
|
manager.getRepository(ObjectMetadataEntity);
|
||||||
|
|
||||||
|
const relationMetadataRepository = manager.getRepository(
|
||||||
|
RelationMetadataEntity,
|
||||||
|
);
|
||||||
|
|
||||||
// Retrieve object metadata collection from DB
|
// Retrieve object metadata collection from DB
|
||||||
const originalObjectMetadataCollection =
|
const originalObjectMetadataCollection =
|
||||||
await objectMetadataRepository.find({
|
await objectMetadataRepository.find({
|
||||||
@@ -47,6 +52,33 @@ export class WorkspaceSyncObjectMetadataService {
|
|||||||
relations: ['dataSource', 'fields'],
|
relations: ['dataSource', 'fields'],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Retrieve relation metadata collection from DB
|
||||||
|
const originalRelationMetadataCollection =
|
||||||
|
await relationMetadataRepository.find({
|
||||||
|
where: {
|
||||||
|
workspaceId: context.workspaceId,
|
||||||
|
},
|
||||||
|
relations: ['toObjectMetadata', 'toFieldMetadata'],
|
||||||
|
});
|
||||||
|
|
||||||
|
const relationMetadataByFromObjectMetadataId: Record<
|
||||||
|
string,
|
||||||
|
RelationMetadataEntity[]
|
||||||
|
> = originalRelationMetadataCollection.reduce(
|
||||||
|
(acc, relationMetadata) => {
|
||||||
|
const fromObjectMetadataId = relationMetadata.fromObjectMetadataId;
|
||||||
|
|
||||||
|
if (!acc[fromObjectMetadataId]) {
|
||||||
|
acc[fromObjectMetadataId] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
acc[fromObjectMetadataId].push(relationMetadata);
|
||||||
|
|
||||||
|
return acc;
|
||||||
|
},
|
||||||
|
{} as Record<string, RelationMetadataEntity[]>,
|
||||||
|
);
|
||||||
|
|
||||||
// Create standard object metadata collection
|
// Create standard object metadata collection
|
||||||
const standardObjectMetadataCollection = this.standardObjectFactory.create(
|
const standardObjectMetadataCollection = this.standardObjectFactory.create(
|
||||||
standardObjectMetadataDefinitions,
|
standardObjectMetadataDefinitions,
|
||||||
@@ -129,6 +161,7 @@ export class WorkspaceSyncObjectMetadataService {
|
|||||||
await this.workspaceMigrationObjectFactory.create(
|
await this.workspaceMigrationObjectFactory.create(
|
||||||
storage.objectMetadataDeleteCollection,
|
storage.objectMetadataDeleteCollection,
|
||||||
WorkspaceMigrationBuilderAction.DELETE,
|
WorkspaceMigrationBuilderAction.DELETE,
|
||||||
|
relationMetadataByFromObjectMetadataId,
|
||||||
);
|
);
|
||||||
|
|
||||||
this.logger.log('Saving migrations');
|
this.logger.log('Saving migrations');
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
import { ActivityTargetWorkspaceEntity } from 'src/modules/activity/standard-objects/activity-target.workspace-entity';
|
|
||||||
import { ActivityWorkspaceEntity } from 'src/modules/activity/standard-objects/activity.workspace-entity';
|
|
||||||
import { CommentWorkspaceEntity } from 'src/modules/activity/standard-objects/comment.workspace-entity';
|
|
||||||
import { ApiKeyWorkspaceEntity } from 'src/modules/api-key/standard-objects/api-key.workspace-entity';
|
import { ApiKeyWorkspaceEntity } from 'src/modules/api-key/standard-objects/api-key.workspace-entity';
|
||||||
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
||||||
import { BlocklistWorkspaceEntity } from 'src/modules/blocklist/standard-objects/blocklist.workspace-entity';
|
import { BlocklistWorkspaceEntity } from 'src/modules/blocklist/standard-objects/blocklist.workspace-entity';
|
||||||
@@ -41,8 +38,6 @@ import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/sta
|
|||||||
|
|
||||||
// TODO: Maybe we should automate this with the DiscoverService of Nest.JS
|
// TODO: Maybe we should automate this with the DiscoverService of Nest.JS
|
||||||
export const standardObjectMetadataDefinitions = [
|
export const standardObjectMetadataDefinitions = [
|
||||||
ActivityTargetWorkspaceEntity,
|
|
||||||
ActivityWorkspaceEntity,
|
|
||||||
ApiKeyWorkspaceEntity,
|
ApiKeyWorkspaceEntity,
|
||||||
AuditLogWorkspaceEntity,
|
AuditLogWorkspaceEntity,
|
||||||
AttachmentWorkspaceEntity,
|
AttachmentWorkspaceEntity,
|
||||||
@@ -52,7 +47,6 @@ export const standardObjectMetadataDefinitions = [
|
|||||||
CalendarChannelWorkspaceEntity,
|
CalendarChannelWorkspaceEntity,
|
||||||
CalendarChannelEventAssociationWorkspaceEntity,
|
CalendarChannelEventAssociationWorkspaceEntity,
|
||||||
CalendarEventParticipantWorkspaceEntity,
|
CalendarEventParticipantWorkspaceEntity,
|
||||||
CommentWorkspaceEntity,
|
|
||||||
CompanyWorkspaceEntity,
|
CompanyWorkspaceEntity,
|
||||||
ConnectedAccountWorkspaceEntity,
|
ConnectedAccountWorkspaceEntity,
|
||||||
FavoriteWorkspaceEntity,
|
FavoriteWorkspaceEntity,
|
||||||
|
|||||||
@@ -1,104 +0,0 @@
|
|||||||
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
|
|
||||||
|
|
||||||
import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
|
||||||
import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity';
|
|
||||||
import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-entity';
|
|
||||||
import { WorkspaceDynamicRelation } from 'src/engine/twenty-orm/decorators/workspace-dynamic-relation.decorator';
|
|
||||||
import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator';
|
|
||||||
import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator';
|
|
||||||
import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator';
|
|
||||||
import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator';
|
|
||||||
import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator';
|
|
||||||
import { ACTIVITY_TARGET_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
|
|
||||||
import { STANDARD_OBJECT_ICONS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons';
|
|
||||||
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
|
|
||||||
import { ActivityWorkspaceEntity } from 'src/modules/activity/standard-objects/activity.workspace-entity';
|
|
||||||
import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity';
|
|
||||||
import { OpportunityWorkspaceEntity } from 'src/modules/opportunity/standard-objects/opportunity.workspace-entity';
|
|
||||||
import { PersonWorkspaceEntity } from 'src/modules/person/standard-objects/person.workspace-entity';
|
|
||||||
|
|
||||||
@WorkspaceEntity({
|
|
||||||
standardId: STANDARD_OBJECT_IDS.activityTarget,
|
|
||||||
namePlural: 'activityTargets',
|
|
||||||
labelSingular: 'Activity Target',
|
|
||||||
labelPlural: 'Activity Targets',
|
|
||||||
description: 'An activity target',
|
|
||||||
icon: STANDARD_OBJECT_ICONS.activityTarget,
|
|
||||||
})
|
|
||||||
@WorkspaceIsSystem()
|
|
||||||
export class ActivityTargetWorkspaceEntity extends BaseWorkspaceEntity {
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: ACTIVITY_TARGET_STANDARD_FIELD_IDS.activity,
|
|
||||||
type: RelationMetadataType.MANY_TO_ONE,
|
|
||||||
label: 'Activity',
|
|
||||||
description: 'ActivityTarget activity',
|
|
||||||
icon: 'IconNotes',
|
|
||||||
inverseSideTarget: () => ActivityWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'activityTargets',
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
activity: Relation<ActivityWorkspaceEntity> | null;
|
|
||||||
|
|
||||||
@WorkspaceJoinColumn('activity')
|
|
||||||
activityId: string | null;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: ACTIVITY_TARGET_STANDARD_FIELD_IDS.person,
|
|
||||||
type: RelationMetadataType.MANY_TO_ONE,
|
|
||||||
label: 'Person',
|
|
||||||
description: 'ActivityTarget person',
|
|
||||||
icon: 'IconUser',
|
|
||||||
inverseSideTarget: () => PersonWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'activityTargets',
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
person: Relation<PersonWorkspaceEntity> | null;
|
|
||||||
|
|
||||||
@WorkspaceJoinColumn('person')
|
|
||||||
personId: string | null;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: ACTIVITY_TARGET_STANDARD_FIELD_IDS.company,
|
|
||||||
type: RelationMetadataType.MANY_TO_ONE,
|
|
||||||
label: 'Company',
|
|
||||||
description: 'ActivityTarget company',
|
|
||||||
icon: 'IconBuildingSkyscraper',
|
|
||||||
inverseSideTarget: () => CompanyWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'activityTargets',
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
company: Relation<CompanyWorkspaceEntity> | null;
|
|
||||||
|
|
||||||
@WorkspaceJoinColumn('company')
|
|
||||||
companyId: string | null;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: ACTIVITY_TARGET_STANDARD_FIELD_IDS.opportunity,
|
|
||||||
type: RelationMetadataType.MANY_TO_ONE,
|
|
||||||
label: 'Opportunity',
|
|
||||||
description: 'ActivityTarget opportunity',
|
|
||||||
icon: 'IconTargetArrow',
|
|
||||||
inverseSideTarget: () => OpportunityWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'activityTargets',
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
opportunity: Relation<OpportunityWorkspaceEntity> | null;
|
|
||||||
|
|
||||||
@WorkspaceJoinColumn('opportunity')
|
|
||||||
opportunityId: string | null;
|
|
||||||
|
|
||||||
@WorkspaceDynamicRelation({
|
|
||||||
type: RelationMetadataType.MANY_TO_ONE,
|
|
||||||
argsFactory: (oppositeObjectMetadata) => ({
|
|
||||||
standardId: ACTIVITY_TARGET_STANDARD_FIELD_IDS.custom,
|
|
||||||
name: oppositeObjectMetadata.nameSingular,
|
|
||||||
label: oppositeObjectMetadata.labelSingular,
|
|
||||||
description: `ActivityTarget ${oppositeObjectMetadata.labelSingular}`,
|
|
||||||
joinColumn: `${oppositeObjectMetadata.nameSingular}Id`,
|
|
||||||
icon: 'IconBuildingSkyscraper',
|
|
||||||
}),
|
|
||||||
inverseSideTarget: () => CustomWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'activityTargets',
|
|
||||||
})
|
|
||||||
custom: Relation<CustomWorkspaceEntity>;
|
|
||||||
}
|
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
|
|
||||||
|
|
||||||
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
|
||||||
import {
|
|
||||||
RelationMetadataType,
|
|
||||||
RelationOnDeleteAction,
|
|
||||||
} from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
|
||||||
import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity';
|
|
||||||
import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator';
|
|
||||||
import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator';
|
|
||||||
import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator';
|
|
||||||
import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator';
|
|
||||||
import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator';
|
|
||||||
import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator';
|
|
||||||
import { ACTIVITY_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
|
|
||||||
import { STANDARD_OBJECT_ICONS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons';
|
|
||||||
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
|
|
||||||
import { ActivityTargetWorkspaceEntity } from 'src/modules/activity/standard-objects/activity-target.workspace-entity';
|
|
||||||
import { CommentWorkspaceEntity } from 'src/modules/activity/standard-objects/comment.workspace-entity';
|
|
||||||
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
|
||||||
import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
|
|
||||||
|
|
||||||
@WorkspaceEntity({
|
|
||||||
standardId: STANDARD_OBJECT_IDS.activity,
|
|
||||||
namePlural: 'activities',
|
|
||||||
labelSingular: 'Activity',
|
|
||||||
labelPlural: 'Activities',
|
|
||||||
description: 'An activity',
|
|
||||||
icon: STANDARD_OBJECT_ICONS.activity,
|
|
||||||
labelIdentifierStandardId: ACTIVITY_STANDARD_FIELD_IDS.title,
|
|
||||||
})
|
|
||||||
@WorkspaceIsSystem()
|
|
||||||
export class ActivityWorkspaceEntity extends BaseWorkspaceEntity {
|
|
||||||
@WorkspaceField({
|
|
||||||
standardId: ACTIVITY_STANDARD_FIELD_IDS.title,
|
|
||||||
type: FieldMetadataType.TEXT,
|
|
||||||
label: 'Title',
|
|
||||||
description: 'Activity title',
|
|
||||||
icon: 'IconNotes',
|
|
||||||
})
|
|
||||||
title: string;
|
|
||||||
|
|
||||||
@WorkspaceField({
|
|
||||||
standardId: ACTIVITY_STANDARD_FIELD_IDS.body,
|
|
||||||
type: FieldMetadataType.TEXT,
|
|
||||||
label: 'Body',
|
|
||||||
description: 'Activity body',
|
|
||||||
icon: 'IconList',
|
|
||||||
})
|
|
||||||
body: string;
|
|
||||||
|
|
||||||
@WorkspaceField({
|
|
||||||
standardId: ACTIVITY_STANDARD_FIELD_IDS.type,
|
|
||||||
type: FieldMetadataType.TEXT,
|
|
||||||
label: 'Type',
|
|
||||||
description: 'Activity type',
|
|
||||||
icon: 'IconCheckbox',
|
|
||||||
defaultValue: "'Note'",
|
|
||||||
})
|
|
||||||
type: string;
|
|
||||||
|
|
||||||
@WorkspaceField({
|
|
||||||
standardId: ACTIVITY_STANDARD_FIELD_IDS.reminderAt,
|
|
||||||
type: FieldMetadataType.DATE_TIME,
|
|
||||||
label: 'Reminder Date',
|
|
||||||
description: 'Activity reminder date',
|
|
||||||
icon: 'IconCalendarEvent',
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
reminderAt: Date | null;
|
|
||||||
|
|
||||||
@WorkspaceField({
|
|
||||||
standardId: ACTIVITY_STANDARD_FIELD_IDS.dueAt,
|
|
||||||
type: FieldMetadataType.DATE_TIME,
|
|
||||||
label: 'Due Date',
|
|
||||||
description: 'Activity due date',
|
|
||||||
icon: 'IconCalendarEvent',
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
dueAt: Date | null;
|
|
||||||
|
|
||||||
@WorkspaceField({
|
|
||||||
standardId: ACTIVITY_STANDARD_FIELD_IDS.completedAt,
|
|
||||||
type: FieldMetadataType.DATE_TIME,
|
|
||||||
label: 'Completion Date',
|
|
||||||
description: 'Activity completion date',
|
|
||||||
icon: 'IconCheck',
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
completedAt: Date | null;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: ACTIVITY_STANDARD_FIELD_IDS.activityTargets,
|
|
||||||
label: 'Targets',
|
|
||||||
description: 'Activity targets',
|
|
||||||
icon: 'IconCheckbox',
|
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
|
||||||
inverseSideTarget: () => ActivityTargetWorkspaceEntity,
|
|
||||||
onDelete: RelationOnDeleteAction.SET_NULL,
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
activityTargets: Relation<ActivityTargetWorkspaceEntity[]>;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: ACTIVITY_STANDARD_FIELD_IDS.attachments,
|
|
||||||
label: 'Attachments',
|
|
||||||
description: 'Activity attachments',
|
|
||||||
icon: 'IconFileImport',
|
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
|
||||||
inverseSideTarget: () => AttachmentWorkspaceEntity,
|
|
||||||
onDelete: RelationOnDeleteAction.SET_NULL,
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
attachments: Relation<AttachmentWorkspaceEntity[]>;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: ACTIVITY_STANDARD_FIELD_IDS.comments,
|
|
||||||
label: 'Comments',
|
|
||||||
description: 'Activity comments',
|
|
||||||
icon: 'IconComment',
|
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
|
||||||
inverseSideTarget: () => CommentWorkspaceEntity,
|
|
||||||
onDelete: RelationOnDeleteAction.CASCADE,
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
comments: Relation<CommentWorkspaceEntity[]>;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: ACTIVITY_STANDARD_FIELD_IDS.author,
|
|
||||||
label: 'Author',
|
|
||||||
description: 'Activity author',
|
|
||||||
icon: 'IconUserCircle',
|
|
||||||
type: RelationMetadataType.MANY_TO_ONE,
|
|
||||||
inverseSideTarget: () => WorkspaceMemberWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'authoredActivities',
|
|
||||||
onDelete: RelationOnDeleteAction.SET_NULL,
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
author: Relation<WorkspaceMemberWorkspaceEntity> | null;
|
|
||||||
|
|
||||||
@WorkspaceJoinColumn('author')
|
|
||||||
authorId: string | null;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: ACTIVITY_STANDARD_FIELD_IDS.assignee,
|
|
||||||
label: 'Assignee',
|
|
||||||
description: 'Activity assignee',
|
|
||||||
icon: 'IconUserCircle',
|
|
||||||
type: RelationMetadataType.MANY_TO_ONE,
|
|
||||||
inverseSideTarget: () => WorkspaceMemberWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'assignedActivities',
|
|
||||||
onDelete: RelationOnDeleteAction.SET_NULL,
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
assignee: Relation<WorkspaceMemberWorkspaceEntity> | null;
|
|
||||||
|
|
||||||
@WorkspaceJoinColumn('assignee')
|
|
||||||
assigneeId: string | null;
|
|
||||||
}
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
|
|
||||||
|
|
||||||
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
|
||||||
import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
|
||||||
import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity';
|
|
||||||
import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator';
|
|
||||||
import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator';
|
|
||||||
import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator';
|
|
||||||
import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator';
|
|
||||||
import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator';
|
|
||||||
import { COMMENT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
|
|
||||||
import { STANDARD_OBJECT_ICONS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons';
|
|
||||||
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
|
|
||||||
import { ActivityWorkspaceEntity } from 'src/modules/activity/standard-objects/activity.workspace-entity';
|
|
||||||
import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
|
|
||||||
|
|
||||||
@WorkspaceEntity({
|
|
||||||
standardId: STANDARD_OBJECT_IDS.comment,
|
|
||||||
namePlural: 'comments',
|
|
||||||
labelSingular: 'Comment',
|
|
||||||
labelPlural: 'Comments',
|
|
||||||
description: 'A comment',
|
|
||||||
icon: STANDARD_OBJECT_ICONS.comment,
|
|
||||||
})
|
|
||||||
@WorkspaceIsSystem()
|
|
||||||
export class CommentWorkspaceEntity extends BaseWorkspaceEntity {
|
|
||||||
@WorkspaceField({
|
|
||||||
standardId: COMMENT_STANDARD_FIELD_IDS.body,
|
|
||||||
type: FieldMetadataType.TEXT,
|
|
||||||
label: 'Body',
|
|
||||||
description: 'Comment body',
|
|
||||||
icon: 'IconLink',
|
|
||||||
})
|
|
||||||
body: string;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: COMMENT_STANDARD_FIELD_IDS.author,
|
|
||||||
type: RelationMetadataType.MANY_TO_ONE,
|
|
||||||
label: 'Author',
|
|
||||||
description: 'Comment author',
|
|
||||||
icon: 'IconCircleUser',
|
|
||||||
inverseSideTarget: () => WorkspaceMemberWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'authoredComments',
|
|
||||||
})
|
|
||||||
author: Relation<WorkspaceMemberWorkspaceEntity>;
|
|
||||||
|
|
||||||
@WorkspaceJoinColumn('author')
|
|
||||||
authorId: string;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: COMMENT_STANDARD_FIELD_IDS.activity,
|
|
||||||
type: RelationMetadataType.MANY_TO_ONE,
|
|
||||||
label: 'Activity',
|
|
||||||
description: 'Comment activity',
|
|
||||||
icon: 'IconNotes',
|
|
||||||
inverseSideTarget: () => ActivityWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'comments',
|
|
||||||
})
|
|
||||||
activity: Relation<ActivityWorkspaceEntity>;
|
|
||||||
|
|
||||||
@WorkspaceJoinColumn('activity')
|
|
||||||
activityId: string;
|
|
||||||
}
|
|
||||||
@@ -15,7 +15,6 @@ import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-re
|
|||||||
import { ATTACHMENT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
|
import { ATTACHMENT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
|
||||||
import { STANDARD_OBJECT_ICONS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons';
|
import { STANDARD_OBJECT_ICONS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons';
|
||||||
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
|
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
|
||||||
import { ActivityWorkspaceEntity } from 'src/modules/activity/standard-objects/activity.workspace-entity';
|
|
||||||
import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity';
|
import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity';
|
||||||
import { NoteWorkspaceEntity } from 'src/modules/note/standard-objects/note.workspace-entity';
|
import { NoteWorkspaceEntity } from 'src/modules/note/standard-objects/note.workspace-entity';
|
||||||
import { OpportunityWorkspaceEntity } from 'src/modules/opportunity/standard-objects/opportunity.workspace-entity';
|
import { OpportunityWorkspaceEntity } from 'src/modules/opportunity/standard-objects/opportunity.workspace-entity';
|
||||||
@@ -76,21 +75,6 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
|
|||||||
@WorkspaceJoinColumn('author')
|
@WorkspaceJoinColumn('author')
|
||||||
authorId: string;
|
authorId: string;
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: ATTACHMENT_STANDARD_FIELD_IDS.activity,
|
|
||||||
type: RelationMetadataType.MANY_TO_ONE,
|
|
||||||
label: 'Activity',
|
|
||||||
description: 'Attachment activity',
|
|
||||||
icon: 'IconNotes',
|
|
||||||
inverseSideTarget: () => ActivityWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'attachments',
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
activity: Relation<ActivityWorkspaceEntity> | null;
|
|
||||||
|
|
||||||
@WorkspaceJoinColumn('activity')
|
|
||||||
activityId: string | null;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
@WorkspaceRelation({
|
||||||
standardId: ATTACHMENT_STANDARD_FIELD_IDS.task,
|
standardId: ATTACHMENT_STANDARD_FIELD_IDS.task,
|
||||||
type: RelationMetadataType.MANY_TO_ONE,
|
type: RelationMetadataType.MANY_TO_ONE,
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import {
|
|||||||
FieldTypeAndNameMetadata,
|
FieldTypeAndNameMetadata,
|
||||||
getTsVectorColumnExpressionFromFields,
|
getTsVectorColumnExpressionFromFields,
|
||||||
} from 'src/engine/workspace-manager/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
} from 'src/engine/workspace-manager/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
import { ActivityTargetWorkspaceEntity } from 'src/modules/activity/standard-objects/activity-target.workspace-entity';
|
|
||||||
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
||||||
import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity';
|
import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity';
|
||||||
import { NoteTargetWorkspaceEntity } from 'src/modules/note/standard-objects/note-target.workspace-entity';
|
import { NoteTargetWorkspaceEntity } from 'src/modules/note/standard-objects/note-target.workspace-entity';
|
||||||
@@ -198,19 +197,6 @@ export class CompanyWorkspaceEntity extends BaseWorkspaceEntity {
|
|||||||
@WorkspaceJoinColumn('accountOwner')
|
@WorkspaceJoinColumn('accountOwner')
|
||||||
accountOwnerId: string | null;
|
accountOwnerId: string | null;
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: COMPANY_STANDARD_FIELD_IDS.activityTargets,
|
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
|
||||||
label: 'Activities',
|
|
||||||
description: 'Activities tied to the company',
|
|
||||||
icon: 'IconCheckbox',
|
|
||||||
inverseSideTarget: () => ActivityTargetWorkspaceEntity,
|
|
||||||
onDelete: RelationOnDeleteAction.CASCADE,
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
@WorkspaceIsSystem()
|
|
||||||
activityTargets: Relation<ActivityTargetWorkspaceEntity[]>;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
@WorkspaceRelation({
|
||||||
standardId: COMPANY_STANDARD_FIELD_IDS.taskTargets,
|
standardId: COMPANY_STANDARD_FIELD_IDS.taskTargets,
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
type: RelationMetadataType.ONE_TO_MANY,
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import {
|
|||||||
FieldTypeAndNameMetadata,
|
FieldTypeAndNameMetadata,
|
||||||
getTsVectorColumnExpressionFromFields,
|
getTsVectorColumnExpressionFromFields,
|
||||||
} from 'src/engine/workspace-manager/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
} from 'src/engine/workspace-manager/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
import { ActivityTargetWorkspaceEntity } from 'src/modules/activity/standard-objects/activity-target.workspace-entity';
|
|
||||||
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
||||||
import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity';
|
import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity';
|
||||||
import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity';
|
import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity';
|
||||||
@@ -177,19 +176,6 @@ export class OpportunityWorkspaceEntity extends BaseWorkspaceEntity {
|
|||||||
@WorkspaceIsSystem()
|
@WorkspaceIsSystem()
|
||||||
favorites: Relation<FavoriteWorkspaceEntity[]>;
|
favorites: Relation<FavoriteWorkspaceEntity[]>;
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: OPPORTUNITY_STANDARD_FIELD_IDS.activityTargets,
|
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
|
||||||
label: 'Activities',
|
|
||||||
description: 'Activities tied to the opportunity',
|
|
||||||
icon: 'IconCheckbox',
|
|
||||||
inverseSideTarget: () => ActivityTargetWorkspaceEntity,
|
|
||||||
onDelete: RelationOnDeleteAction.CASCADE,
|
|
||||||
})
|
|
||||||
@WorkspaceIsNullable()
|
|
||||||
@WorkspaceIsSystem()
|
|
||||||
activityTargets: Relation<ActivityTargetWorkspaceEntity[]>;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
@WorkspaceRelation({
|
||||||
standardId: OPPORTUNITY_STANDARD_FIELD_IDS.taskTargets,
|
standardId: OPPORTUNITY_STANDARD_FIELD_IDS.taskTargets,
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
type: RelationMetadataType.ONE_TO_MANY,
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ import {
|
|||||||
FieldTypeAndNameMetadata,
|
FieldTypeAndNameMetadata,
|
||||||
getTsVectorColumnExpressionFromFields,
|
getTsVectorColumnExpressionFromFields,
|
||||||
} from 'src/engine/workspace-manager/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
} from 'src/engine/workspace-manager/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
import { ActivityTargetWorkspaceEntity } from 'src/modules/activity/standard-objects/activity-target.workspace-entity';
|
|
||||||
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
||||||
import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity';
|
import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity';
|
||||||
import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity';
|
import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity';
|
||||||
@@ -205,18 +204,6 @@ export class PersonWorkspaceEntity extends BaseWorkspaceEntity {
|
|||||||
})
|
})
|
||||||
pointOfContactForOpportunities: Relation<OpportunityWorkspaceEntity[]>;
|
pointOfContactForOpportunities: Relation<OpportunityWorkspaceEntity[]>;
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: PERSON_STANDARD_FIELD_IDS.activityTargets,
|
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
|
||||||
label: 'Activities',
|
|
||||||
description: 'Activities tied to the contact',
|
|
||||||
icon: 'IconCheckbox',
|
|
||||||
inverseSideTarget: () => ActivityTargetWorkspaceEntity,
|
|
||||||
onDelete: RelationOnDeleteAction.CASCADE,
|
|
||||||
})
|
|
||||||
@WorkspaceIsSystem()
|
|
||||||
activityTargets: Relation<ActivityTargetWorkspaceEntity[]>;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
@WorkspaceRelation({
|
||||||
standardId: PERSON_STANDARD_FIELD_IDS.taskTargets,
|
standardId: PERSON_STANDARD_FIELD_IDS.taskTargets,
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
type: RelationMetadataType.ONE_TO_MANY,
|
||||||
|
|||||||
@@ -2,10 +2,9 @@ import { WorkspaceQueryHookInstance } from 'src/engine/api/graphql/workspace-que
|
|||||||
import { DeleteOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
import { DeleteOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||||
|
|
||||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||||
import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager';
|
|
||||||
import { CommentWorkspaceEntity } from 'src/modules/activity/standard-objects/comment.workspace-entity';
|
|
||||||
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
|
||||||
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||||
|
import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager';
|
||||||
|
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
||||||
|
|
||||||
@WorkspaceQueryHook(`workspaceMember.deleteOne`)
|
@WorkspaceQueryHook(`workspaceMember.deleteOne`)
|
||||||
export class WorkspaceMemberDeleteOnePreQueryHook
|
export class WorkspaceMemberDeleteOnePreQueryHook
|
||||||
@@ -24,21 +23,12 @@ export class WorkspaceMemberDeleteOnePreQueryHook
|
|||||||
'attachment',
|
'attachment',
|
||||||
);
|
);
|
||||||
|
|
||||||
const commentRepository =
|
|
||||||
await this.twentyORMManager.getRepository<CommentWorkspaceEntity>(
|
|
||||||
'comment',
|
|
||||||
);
|
|
||||||
|
|
||||||
const authorId = payload.id;
|
const authorId = payload.id;
|
||||||
|
|
||||||
await attachmentRepository.delete({
|
await attachmentRepository.delete({
|
||||||
authorId,
|
authorId,
|
||||||
});
|
});
|
||||||
|
|
||||||
await commentRepository.delete({
|
|
||||||
authorId,
|
|
||||||
});
|
|
||||||
|
|
||||||
return payload;
|
return payload;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,8 +27,6 @@ import {
|
|||||||
FieldTypeAndNameMetadata,
|
FieldTypeAndNameMetadata,
|
||||||
getTsVectorColumnExpressionFromFields,
|
getTsVectorColumnExpressionFromFields,
|
||||||
} from 'src/engine/workspace-manager/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
} from 'src/engine/workspace-manager/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
import { ActivityWorkspaceEntity } from 'src/modules/activity/standard-objects/activity.workspace-entity';
|
|
||||||
import { CommentWorkspaceEntity } from 'src/modules/activity/standard-objects/comment.workspace-entity';
|
|
||||||
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
|
||||||
import { BlocklistWorkspaceEntity } from 'src/modules/blocklist/standard-objects/blocklist.workspace-entity';
|
import { BlocklistWorkspaceEntity } from 'src/modules/blocklist/standard-objects/blocklist.workspace-entity';
|
||||||
import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity';
|
import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity';
|
||||||
@@ -142,30 +140,6 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity {
|
|||||||
userId: string;
|
userId: string;
|
||||||
|
|
||||||
// Relations
|
// Relations
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: WORKSPACE_MEMBER_STANDARD_FIELD_IDS.authoredActivities,
|
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
|
||||||
label: 'Authored activities',
|
|
||||||
description: 'Activities created by the workspace member',
|
|
||||||
icon: 'IconCheckbox',
|
|
||||||
inverseSideTarget: () => ActivityWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'author',
|
|
||||||
onDelete: RelationOnDeleteAction.SET_NULL,
|
|
||||||
})
|
|
||||||
authoredActivities: Relation<ActivityWorkspaceEntity[]>;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: WORKSPACE_MEMBER_STANDARD_FIELD_IDS.assignedActivities,
|
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
|
||||||
label: 'Assigned activities',
|
|
||||||
description: 'Activities assigned to the workspace member',
|
|
||||||
icon: 'IconCheckbox',
|
|
||||||
inverseSideTarget: () => ActivityWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'assignee',
|
|
||||||
onDelete: RelationOnDeleteAction.SET_NULL,
|
|
||||||
})
|
|
||||||
assignedActivities: Relation<ActivityWorkspaceEntity[]>;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
@WorkspaceRelation({
|
||||||
standardId: WORKSPACE_MEMBER_STANDARD_FIELD_IDS.assignedTasks,
|
standardId: WORKSPACE_MEMBER_STANDARD_FIELD_IDS.assignedTasks,
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
type: RelationMetadataType.ONE_TO_MANY,
|
||||||
@@ -227,18 +201,6 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity {
|
|||||||
})
|
})
|
||||||
authoredAttachments: Relation<AttachmentWorkspaceEntity[]>;
|
authoredAttachments: Relation<AttachmentWorkspaceEntity[]>;
|
||||||
|
|
||||||
@WorkspaceRelation({
|
|
||||||
standardId: WORKSPACE_MEMBER_STANDARD_FIELD_IDS.authoredComments,
|
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
|
||||||
label: 'Authored comments',
|
|
||||||
description: 'Authored comments',
|
|
||||||
icon: 'IconComment',
|
|
||||||
inverseSideTarget: () => CommentWorkspaceEntity,
|
|
||||||
inverseSideFieldKey: 'author',
|
|
||||||
onDelete: RelationOnDeleteAction.SET_NULL,
|
|
||||||
})
|
|
||||||
authoredComments: Relation<CommentWorkspaceEntity[]>;
|
|
||||||
|
|
||||||
@WorkspaceRelation({
|
@WorkspaceRelation({
|
||||||
standardId: WORKSPACE_MEMBER_STANDARD_FIELD_IDS.connectedAccounts,
|
standardId: WORKSPACE_MEMBER_STANDARD_FIELD_IDS.connectedAccounts,
|
||||||
type: RelationMetadataType.ONE_TO_MANY,
|
type: RelationMetadataType.ONE_TO_MANY,
|
||||||
|
|||||||
@@ -1,67 +0,0 @@
|
|||||||
import request from 'supertest';
|
|
||||||
|
|
||||||
const client = request(`http://localhost:${APP_PORT}`);
|
|
||||||
|
|
||||||
describe('activitiesResolver (e2e)', () => {
|
|
||||||
it('should find many activities', () => {
|
|
||||||
const queryData = {
|
|
||||||
query: `
|
|
||||||
query activities {
|
|
||||||
activities {
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
title
|
|
||||||
body
|
|
||||||
type
|
|
||||||
reminderAt
|
|
||||||
dueAt
|
|
||||||
completedAt
|
|
||||||
id
|
|
||||||
createdAt
|
|
||||||
updatedAt
|
|
||||||
deletedAt
|
|
||||||
authorId
|
|
||||||
assigneeId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
};
|
|
||||||
|
|
||||||
return client
|
|
||||||
.post('/graphql')
|
|
||||||
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
|
|
||||||
.send(queryData)
|
|
||||||
.expect(200)
|
|
||||||
.expect((res) => {
|
|
||||||
expect(res.body.data).toBeDefined();
|
|
||||||
expect(res.body.errors).toBeUndefined();
|
|
||||||
})
|
|
||||||
.expect((res) => {
|
|
||||||
const data = res.body.data.activities;
|
|
||||||
|
|
||||||
expect(data).toBeDefined();
|
|
||||||
expect(Array.isArray(data.edges)).toBe(true);
|
|
||||||
|
|
||||||
const edges = data.edges;
|
|
||||||
|
|
||||||
if (edges.length > 0) {
|
|
||||||
const activities = edges[0].node;
|
|
||||||
|
|
||||||
expect(activities).toHaveProperty('title');
|
|
||||||
expect(activities).toHaveProperty('body');
|
|
||||||
expect(activities).toHaveProperty('type');
|
|
||||||
expect(activities).toHaveProperty('reminderAt');
|
|
||||||
expect(activities).toHaveProperty('dueAt');
|
|
||||||
expect(activities).toHaveProperty('completedAt');
|
|
||||||
expect(activities).toHaveProperty('id');
|
|
||||||
expect(activities).toHaveProperty('createdAt');
|
|
||||||
expect(activities).toHaveProperty('updatedAt');
|
|
||||||
expect(activities).toHaveProperty('deletedAt');
|
|
||||||
expect(activities).toHaveProperty('authorId');
|
|
||||||
expect(activities).toHaveProperty('assigneeId');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
import request from 'supertest';
|
|
||||||
|
|
||||||
const client = request(`http://localhost:${APP_PORT}`);
|
|
||||||
|
|
||||||
describe('activityTargetsResolver (e2e)', () => {
|
|
||||||
it('should find many activityTargets', () => {
|
|
||||||
const queryData = {
|
|
||||||
query: `
|
|
||||||
query activityTargets {
|
|
||||||
activityTargets {
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
id
|
|
||||||
createdAt
|
|
||||||
updatedAt
|
|
||||||
deletedAt
|
|
||||||
activityId
|
|
||||||
personId
|
|
||||||
companyId
|
|
||||||
opportunityId
|
|
||||||
rocketId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
};
|
|
||||||
|
|
||||||
return client
|
|
||||||
.post('/graphql')
|
|
||||||
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
|
|
||||||
.send(queryData)
|
|
||||||
.expect(200)
|
|
||||||
.expect((res) => {
|
|
||||||
expect(res.body.data).toBeDefined();
|
|
||||||
expect(res.body.errors).toBeUndefined();
|
|
||||||
})
|
|
||||||
.expect((res) => {
|
|
||||||
const data = res.body.data.activityTargets;
|
|
||||||
|
|
||||||
expect(data).toBeDefined();
|
|
||||||
expect(Array.isArray(data.edges)).toBe(true);
|
|
||||||
|
|
||||||
const edges = data.edges;
|
|
||||||
|
|
||||||
if (edges.length > 0) {
|
|
||||||
const activityTargets = edges[0].node;
|
|
||||||
|
|
||||||
expect(activityTargets).toHaveProperty('id');
|
|
||||||
expect(activityTargets).toHaveProperty('createdAt');
|
|
||||||
expect(activityTargets).toHaveProperty('updatedAt');
|
|
||||||
expect(activityTargets).toHaveProperty('deletedAt');
|
|
||||||
expect(activityTargets).toHaveProperty('activityId');
|
|
||||||
expect(activityTargets).toHaveProperty('personId');
|
|
||||||
expect(activityTargets).toHaveProperty('companyId');
|
|
||||||
expect(activityTargets).toHaveProperty('opportunityId');
|
|
||||||
expect(activityTargets).toHaveProperty('rocketId');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -18,7 +18,6 @@ describe('attachmentsResolver (e2e)', () => {
|
|||||||
updatedAt
|
updatedAt
|
||||||
deletedAt
|
deletedAt
|
||||||
authorId
|
authorId
|
||||||
activityId
|
|
||||||
taskId
|
taskId
|
||||||
noteId
|
noteId
|
||||||
personId
|
personId
|
||||||
@@ -60,7 +59,6 @@ describe('attachmentsResolver (e2e)', () => {
|
|||||||
expect(attachments).toHaveProperty('updatedAt');
|
expect(attachments).toHaveProperty('updatedAt');
|
||||||
expect(attachments).toHaveProperty('deletedAt');
|
expect(attachments).toHaveProperty('deletedAt');
|
||||||
expect(attachments).toHaveProperty('authorId');
|
expect(attachments).toHaveProperty('authorId');
|
||||||
expect(attachments).toHaveProperty('activityId');
|
|
||||||
expect(attachments).toHaveProperty('taskId');
|
expect(attachments).toHaveProperty('taskId');
|
||||||
expect(attachments).toHaveProperty('noteId');
|
expect(attachments).toHaveProperty('noteId');
|
||||||
expect(attachments).toHaveProperty('personId');
|
expect(attachments).toHaveProperty('personId');
|
||||||
|
|||||||
@@ -1,57 +0,0 @@
|
|||||||
import request from 'supertest';
|
|
||||||
|
|
||||||
const client = request(`http://localhost:${APP_PORT}`);
|
|
||||||
|
|
||||||
describe('commentsResolver (e2e)', () => {
|
|
||||||
it('should find many comments', () => {
|
|
||||||
const queryData = {
|
|
||||||
query: `
|
|
||||||
query comments {
|
|
||||||
comments {
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
body
|
|
||||||
id
|
|
||||||
createdAt
|
|
||||||
updatedAt
|
|
||||||
deletedAt
|
|
||||||
authorId
|
|
||||||
activityId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
};
|
|
||||||
|
|
||||||
return client
|
|
||||||
.post('/graphql')
|
|
||||||
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
|
|
||||||
.send(queryData)
|
|
||||||
.expect(200)
|
|
||||||
.expect((res) => {
|
|
||||||
expect(res.body.data).toBeDefined();
|
|
||||||
expect(res.body.errors).toBeUndefined();
|
|
||||||
})
|
|
||||||
.expect((res) => {
|
|
||||||
const data = res.body.data.comments;
|
|
||||||
|
|
||||||
expect(data).toBeDefined();
|
|
||||||
expect(Array.isArray(data.edges)).toBe(true);
|
|
||||||
|
|
||||||
const edges = data.edges;
|
|
||||||
|
|
||||||
if (edges.length > 0) {
|
|
||||||
const comments = edges[0].node;
|
|
||||||
|
|
||||||
expect(comments).toHaveProperty('body');
|
|
||||||
expect(comments).toHaveProperty('id');
|
|
||||||
expect(comments).toHaveProperty('createdAt');
|
|
||||||
expect(comments).toHaveProperty('updatedAt');
|
|
||||||
expect(comments).toHaveProperty('deletedAt');
|
|
||||||
expect(comments).toHaveProperty('authorId');
|
|
||||||
expect(comments).toHaveProperty('activityId');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
import request from 'supertest';
|
|
||||||
|
|
||||||
const client = request(`http://localhost:${APP_PORT}`);
|
|
||||||
|
|
||||||
describe('searchActivitiesResolver (e2e)', () => {
|
|
||||||
it('should find many searchActivities', () => {
|
|
||||||
const queryData = {
|
|
||||||
query: `
|
|
||||||
query searchActivities {
|
|
||||||
searchActivities {
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
title
|
|
||||||
body
|
|
||||||
type
|
|
||||||
reminderAt
|
|
||||||
dueAt
|
|
||||||
completedAt
|
|
||||||
id
|
|
||||||
createdAt
|
|
||||||
updatedAt
|
|
||||||
deletedAt
|
|
||||||
authorId
|
|
||||||
assigneeId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
};
|
|
||||||
|
|
||||||
return client
|
|
||||||
.post('/graphql')
|
|
||||||
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
|
|
||||||
.send(queryData)
|
|
||||||
.expect(200)
|
|
||||||
.expect((res) => {
|
|
||||||
expect(res.body.data).toBeDefined();
|
|
||||||
expect(res.body.errors).toBeUndefined();
|
|
||||||
})
|
|
||||||
.expect((res) => {
|
|
||||||
const data = res.body.data.searchActivities;
|
|
||||||
|
|
||||||
expect(data).toBeDefined();
|
|
||||||
expect(Array.isArray(data.edges)).toBe(true);
|
|
||||||
|
|
||||||
const edges = data.edges;
|
|
||||||
|
|
||||||
if (edges.length > 0) {
|
|
||||||
const searchActivities = edges[0].node;
|
|
||||||
|
|
||||||
expect(searchActivities).toHaveProperty('title');
|
|
||||||
expect(searchActivities).toHaveProperty('body');
|
|
||||||
expect(searchActivities).toHaveProperty('type');
|
|
||||||
expect(searchActivities).toHaveProperty('reminderAt');
|
|
||||||
expect(searchActivities).toHaveProperty('dueAt');
|
|
||||||
expect(searchActivities).toHaveProperty('completedAt');
|
|
||||||
expect(searchActivities).toHaveProperty('id');
|
|
||||||
expect(searchActivities).toHaveProperty('createdAt');
|
|
||||||
expect(searchActivities).toHaveProperty('updatedAt');
|
|
||||||
expect(searchActivities).toHaveProperty('deletedAt');
|
|
||||||
expect(searchActivities).toHaveProperty('authorId');
|
|
||||||
expect(searchActivities).toHaveProperty('assigneeId');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
import request from 'supertest';
|
|
||||||
|
|
||||||
const client = request(`http://localhost:${APP_PORT}`);
|
|
||||||
|
|
||||||
describe('searchActivityTargetsResolver (e2e)', () => {
|
|
||||||
it('should find many searchActivityTargets', () => {
|
|
||||||
const queryData = {
|
|
||||||
query: `
|
|
||||||
query searchActivityTargets {
|
|
||||||
searchActivityTargets {
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
id
|
|
||||||
createdAt
|
|
||||||
updatedAt
|
|
||||||
deletedAt
|
|
||||||
activityId
|
|
||||||
personId
|
|
||||||
companyId
|
|
||||||
opportunityId
|
|
||||||
rocketId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
};
|
|
||||||
|
|
||||||
return client
|
|
||||||
.post('/graphql')
|
|
||||||
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
|
|
||||||
.send(queryData)
|
|
||||||
.expect(200)
|
|
||||||
.expect((res) => {
|
|
||||||
expect(res.body.data).toBeDefined();
|
|
||||||
expect(res.body.errors).toBeUndefined();
|
|
||||||
})
|
|
||||||
.expect((res) => {
|
|
||||||
const data = res.body.data.searchActivityTargets;
|
|
||||||
|
|
||||||
expect(data).toBeDefined();
|
|
||||||
expect(Array.isArray(data.edges)).toBe(true);
|
|
||||||
|
|
||||||
const edges = data.edges;
|
|
||||||
|
|
||||||
if (edges.length > 0) {
|
|
||||||
const searchActivityTargets = edges[0].node;
|
|
||||||
|
|
||||||
expect(searchActivityTargets).toHaveProperty('id');
|
|
||||||
expect(searchActivityTargets).toHaveProperty('createdAt');
|
|
||||||
expect(searchActivityTargets).toHaveProperty('updatedAt');
|
|
||||||
expect(searchActivityTargets).toHaveProperty('deletedAt');
|
|
||||||
expect(searchActivityTargets).toHaveProperty('activityId');
|
|
||||||
expect(searchActivityTargets).toHaveProperty('personId');
|
|
||||||
expect(searchActivityTargets).toHaveProperty('companyId');
|
|
||||||
expect(searchActivityTargets).toHaveProperty('opportunityId');
|
|
||||||
expect(searchActivityTargets).toHaveProperty('rocketId');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -18,7 +18,6 @@ describe('searchAttachmentsResolver (e2e)', () => {
|
|||||||
updatedAt
|
updatedAt
|
||||||
deletedAt
|
deletedAt
|
||||||
authorId
|
authorId
|
||||||
activityId
|
|
||||||
taskId
|
taskId
|
||||||
noteId
|
noteId
|
||||||
personId
|
personId
|
||||||
@@ -60,7 +59,6 @@ describe('searchAttachmentsResolver (e2e)', () => {
|
|||||||
expect(searchAttachments).toHaveProperty('updatedAt');
|
expect(searchAttachments).toHaveProperty('updatedAt');
|
||||||
expect(searchAttachments).toHaveProperty('deletedAt');
|
expect(searchAttachments).toHaveProperty('deletedAt');
|
||||||
expect(searchAttachments).toHaveProperty('authorId');
|
expect(searchAttachments).toHaveProperty('authorId');
|
||||||
expect(searchAttachments).toHaveProperty('activityId');
|
|
||||||
expect(searchAttachments).toHaveProperty('taskId');
|
expect(searchAttachments).toHaveProperty('taskId');
|
||||||
expect(searchAttachments).toHaveProperty('noteId');
|
expect(searchAttachments).toHaveProperty('noteId');
|
||||||
expect(searchAttachments).toHaveProperty('personId');
|
expect(searchAttachments).toHaveProperty('personId');
|
||||||
|
|||||||
@@ -1,57 +0,0 @@
|
|||||||
import request from 'supertest';
|
|
||||||
|
|
||||||
const client = request(`http://localhost:${APP_PORT}`);
|
|
||||||
|
|
||||||
describe('searchCommentsResolver (e2e)', () => {
|
|
||||||
it('should find many searchComments', () => {
|
|
||||||
const queryData = {
|
|
||||||
query: `
|
|
||||||
query searchComments {
|
|
||||||
searchComments {
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
body
|
|
||||||
id
|
|
||||||
createdAt
|
|
||||||
updatedAt
|
|
||||||
deletedAt
|
|
||||||
authorId
|
|
||||||
activityId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
};
|
|
||||||
|
|
||||||
return client
|
|
||||||
.post('/graphql')
|
|
||||||
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
|
|
||||||
.send(queryData)
|
|
||||||
.expect(200)
|
|
||||||
.expect((res) => {
|
|
||||||
expect(res.body.data).toBeDefined();
|
|
||||||
expect(res.body.errors).toBeUndefined();
|
|
||||||
})
|
|
||||||
.expect((res) => {
|
|
||||||
const data = res.body.data.searchComments;
|
|
||||||
|
|
||||||
expect(data).toBeDefined();
|
|
||||||
expect(Array.isArray(data.edges)).toBe(true);
|
|
||||||
|
|
||||||
const edges = data.edges;
|
|
||||||
|
|
||||||
if (edges.length > 0) {
|
|
||||||
const searchComments = edges[0].node;
|
|
||||||
|
|
||||||
expect(searchComments).toHaveProperty('body');
|
|
||||||
expect(searchComments).toHaveProperty('id');
|
|
||||||
expect(searchComments).toHaveProperty('createdAt');
|
|
||||||
expect(searchComments).toHaveProperty('updatedAt');
|
|
||||||
expect(searchComments).toHaveProperty('deletedAt');
|
|
||||||
expect(searchComments).toHaveProperty('authorId');
|
|
||||||
expect(searchComments).toHaveProperty('activityId');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
Reference in New Issue
Block a user