feat: add updatedBy field to track last record modifier (#16807)

<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Implements last-modifier tracking and unified actor injection.
> 
> - New `ActorFromAuthContextService` replaces createdBy-only logic;
pre-query hooks now inject both `createdBy` and `updatedBy` on create
and `updatedBy` on update
> - Add `updatedBy` standard field to core/custom objects (e.g.,
`person`, `company`, `task`, `note`, `attachment`, `dashboard`,
`workflow`, `workflowRun`) with IDs, metadata builders, and ORM entity
fields
> - Record CRUD: `create` now sets both `createdBy` and `updatedBy`;
`update` sets `updatedBy`; workflow actions use a shared workflow actor
builder; REST base handler uses the new actor service
> - Seeder data and snapshots updated to include `updatedBy`; GraphQL
result formatting adds defaults/handling for empty composite fields
(incl. actor)
> - Frontend `useUpdateOneRecord` upserts returned record into the local
store after mutation
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
1f283778e9cb28a35bf84632a1a2997250bb3131. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
Co-authored-by: Félix Malfait <felix@twenty.com>
This commit is contained in:
Abdul Rahman
2025-12-29 14:35:17 +05:30
committed by GitHub
parent 0da5cf29de
commit 01e0502fcf
58 changed files with 1516 additions and 118 deletions
@@ -15,6 +15,9 @@ type AttachmentDataSeed = {
createdBySource: string;
createdByWorkspaceMemberId: string;
createdByName: string;
updatedBySource: string;
updatedByWorkspaceMemberId: string;
updatedByName: string;
personId: string | null;
companyId: string | null;
noteId: string | null;
@@ -30,6 +33,9 @@ export const ATTACHMENT_DATA_SEED_COLUMNS: (keyof AttachmentDataSeed)[] = [
'createdBySource',
'createdByWorkspaceMemberId',
'createdByName',
'updatedBySource',
'updatedByWorkspaceMemberId',
'updatedByName',
'personId',
'companyId',
'noteId',
@@ -251,6 +257,9 @@ const GENERATE_ATTACHMENT_SEEDS = (): AttachmentDataSeed[] => {
createdBySource: FieldActorSource.MANUAL,
createdByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
createdByName: 'Tim A',
updatedBySource: FieldActorSource.MANUAL,
updatedByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
updatedByName: 'Tim A',
personId,
companyId,
noteId,
@@ -11,6 +11,9 @@ type CompanyDataSeed = {
createdByWorkspaceMemberId: string;
createdByName: string;
accountOwnerId: string;
updatedBySource: string;
updatedByWorkspaceMemberId: string;
updatedByName: string;
position: number;
};
@@ -25,6 +28,9 @@ export const COMPANY_DATA_SEED_COLUMNS: (keyof CompanyDataSeed)[] = [
'createdByWorkspaceMemberId',
'createdByName',
'accountOwnerId',
'updatedBySource',
'updatedByWorkspaceMemberId',
'updatedByName',
'position',
];
@@ -8524,6 +8530,9 @@ const COMPANY_DATA_SEEDS_RAW = [
export const COMPANY_DATA_SEEDS: CompanyDataSeed[] = COMPANY_DATA_SEEDS_RAW.map(
(company, index) => ({
...company,
updatedBySource: company.createdBySource,
updatedByWorkspaceMemberId: company.createdByWorkspaceMemberId,
updatedByName: company.createdByName,
position: index + 1,
}),
);
@@ -9,6 +9,9 @@ type DashboardDataSeed = {
createdBySource: string;
createdByWorkspaceMemberId: string;
createdByName: string;
updatedBySource: string;
updatedByWorkspaceMemberId: string;
updatedByName: string;
position: number;
};
@@ -19,6 +22,9 @@ export const DASHBOARD_DATA_SEED_COLUMNS: (keyof DashboardDataSeed)[] = [
'createdBySource',
'createdByWorkspaceMemberId',
'createdByName',
'updatedBySource',
'updatedByWorkspaceMemberId',
'updatedByName',
'position',
];
@@ -41,6 +47,9 @@ export const getDashboardDataSeeds = (
createdBySource: 'MANUAL',
createdByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
createdByName: 'Tim Apple',
updatedBySource: 'MANUAL',
updatedByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
updatedByName: 'Tim Apple',
position: 0,
},
{
@@ -53,6 +62,9 @@ export const getDashboardDataSeeds = (
createdBySource: 'MANUAL',
createdByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.JONY,
createdByName: 'Jony Ive',
updatedBySource: 'MANUAL',
updatedByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.JONY,
updatedByName: 'Jony Ive',
position: 1,
},
{
@@ -62,6 +74,9 @@ export const getDashboardDataSeeds = (
createdBySource: 'MANUAL',
createdByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.PHIL,
createdByName: 'Phil Schiller',
updatedBySource: 'MANUAL',
updatedByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.PHIL,
updatedByName: 'Phil Schiller',
position: 2,
},
];
@@ -10,6 +10,9 @@ type NoteDataSeed = {
createdByWorkspaceMemberId: string;
createdByName: string;
createdByContext: string | null;
updatedBySource: string;
updatedByWorkspaceMemberId: string;
updatedByName: string;
};
export const NOTE_DATA_SEED_COLUMNS: (keyof NoteDataSeed)[] = [
@@ -22,6 +25,9 @@ export const NOTE_DATA_SEED_COLUMNS: (keyof NoteDataSeed)[] = [
'createdByWorkspaceMemberId',
'createdByName',
'createdByContext',
'updatedBySource',
'updatedByWorkspaceMemberId',
'updatedByName',
];
const GENERATE_NOTE_IDS = (): Record<string, string> => {
@@ -161,6 +167,9 @@ const GENERATE_NOTE_SEEDS = (): NoteDataSeed[] => {
createdByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
createdByName: 'Tim A',
createdByContext: null,
updatedBySource: 'MANUAL',
updatedByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
updatedByName: 'Tim A',
});
}
@@ -191,6 +200,9 @@ const GENERATE_NOTE_SEEDS = (): NoteDataSeed[] => {
createdByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
createdByName: 'Tim A',
createdByContext: null,
updatedBySource: 'MANUAL',
updatedByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
updatedByName: 'Tim A',
});
}
@@ -15,6 +15,9 @@ type OpportunityDataSeed = {
createdBySource: string;
createdByWorkspaceMemberId: string;
createdByName: string;
updatedBySource: string;
updatedByWorkspaceMemberId: string;
updatedByName: string;
};
export const OPPORTUNITY_DATA_SEED_COLUMNS: (keyof OpportunityDataSeed)[] = [
@@ -30,6 +33,9 @@ export const OPPORTUNITY_DATA_SEED_COLUMNS: (keyof OpportunityDataSeed)[] = [
'createdBySource',
'createdByWorkspaceMemberId',
'createdByName',
'updatedBySource',
'updatedByWorkspaceMemberId',
'updatedByName',
];
const GENERATE_OPPORTUNITY_IDS = (): Record<string, string> => {
@@ -188,6 +194,9 @@ const GENERATE_OPPORTUNITY_SEEDS = (): OpportunityDataSeed[] => {
createdBySource: 'MANUAL',
createdByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
createdByName: 'Tim Cook',
updatedBySource: 'MANUAL',
updatedByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
updatedByName: 'Tim Cook',
});
}
@@ -17,6 +17,9 @@ type PersonDataSeed = {
phonesPrimaryPhoneNumber: string;
phonesPrimaryPhoneCountryCode: string;
phonesPrimaryPhoneCallingCode: string;
updatedBySource: string;
updatedByWorkspaceMemberId: string;
updatedByName: string;
position: number;
};
@@ -36,6 +39,9 @@ export const PERSON_DATA_SEED_COLUMNS: (keyof PersonDataSeed)[] = [
'phonesPrimaryPhoneNumber',
'phonesPrimaryPhoneCountryCode',
'phonesPrimaryPhoneCallingCode',
'updatedBySource',
'updatedByWorkspaceMemberId',
'updatedByName',
'position',
];
@@ -21650,6 +21656,9 @@ const PERSON_DATA_SEEDS_RAW = [
export const PERSON_DATA_SEEDS: PersonDataSeed[] = PERSON_DATA_SEEDS_RAW.map(
(person, index) => ({
...person,
updatedBySource: person.createdBySource,
updatedByWorkspaceMemberId: person.createdByWorkspaceMemberId,
updatedByName: person.createdByName,
position: index + 1,
}),
);
@@ -12,6 +12,9 @@ type TaskDataSeed = {
createdBySource: string;
createdByWorkspaceMemberId: string;
createdByName: string;
updatedBySource: string;
updatedByWorkspaceMemberId: string;
updatedByName: string;
};
export const TASK_DATA_SEED_COLUMNS: (keyof TaskDataSeed)[] = [
@@ -26,6 +29,9 @@ export const TASK_DATA_SEED_COLUMNS: (keyof TaskDataSeed)[] = [
'createdBySource',
'createdByWorkspaceMemberId',
'createdByName',
'updatedBySource',
'updatedByWorkspaceMemberId',
'updatedByName',
];
// Generate all task IDs
@@ -210,6 +216,9 @@ const GENERATE_TASK_SEEDS = (): TaskDataSeed[] => {
createdBySource: 'MANUAL',
createdByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
createdByName: 'Tim A',
updatedBySource: 'MANUAL',
updatedByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
updatedByName: 'Tim A',
});
}
@@ -242,6 +251,9 @@ const GENERATE_TASK_SEEDS = (): TaskDataSeed[] => {
createdBySource: 'MANUAL',
createdByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
createdByName: 'Tim A',
updatedBySource: 'MANUAL',
updatedByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
updatedByName: 'Tim A',
});
}
@@ -29,6 +29,9 @@ export const prefillCompanies = async (
'createdBySource',
'createdByWorkspaceMemberId',
'createdByName',
'updatedBySource',
'updatedByWorkspaceMemberId',
'updatedByName',
])
.orIgnore()
.values([
@@ -47,6 +50,9 @@ export const prefillCompanies = async (
createdBySource: FieldActorSource.SYSTEM,
createdByWorkspaceMemberId: null,
createdByName: 'System',
updatedBySource: FieldActorSource.SYSTEM,
updatedByWorkspaceMemberId: null,
updatedByName: 'System',
},
{
id: ANTHROPIC_ID,
@@ -63,6 +69,9 @@ export const prefillCompanies = async (
createdBySource: FieldActorSource.SYSTEM,
createdByWorkspaceMemberId: null,
createdByName: 'System',
updatedBySource: FieldActorSource.SYSTEM,
updatedByWorkspaceMemberId: null,
updatedByName: 'System',
},
{
id: STRIPE_ID,
@@ -79,6 +88,9 @@ export const prefillCompanies = async (
createdBySource: FieldActorSource.SYSTEM,
createdByWorkspaceMemberId: null,
createdByName: 'System',
updatedBySource: FieldActorSource.SYSTEM,
updatedByWorkspaceMemberId: null,
updatedByName: 'System',
},
{
id: FIGMA_ID,
@@ -95,6 +107,9 @@ export const prefillCompanies = async (
createdBySource: FieldActorSource.SYSTEM,
createdByWorkspaceMemberId: null,
createdByName: 'System',
updatedBySource: FieldActorSource.SYSTEM,
updatedByWorkspaceMemberId: null,
updatedByName: 'System',
},
{
id: NOTION_ID,
@@ -111,6 +126,9 @@ export const prefillCompanies = async (
createdBySource: FieldActorSource.SYSTEM,
createdByWorkspaceMemberId: null,
createdByName: 'System',
updatedBySource: FieldActorSource.SYSTEM,
updatedByWorkspaceMemberId: null,
updatedByName: 'System',
},
])
.returning('*')
@@ -26,6 +26,9 @@ export const prefillPeople = async (
'createdBySource',
'createdByWorkspaceMemberId',
'createdByName',
'updatedBySource',
'updatedByWorkspaceMemberId',
'updatedByName',
'phonesPrimaryPhoneNumber',
'phonesPrimaryPhoneCallingCode',
'companyId',
@@ -43,6 +46,9 @@ export const prefillPeople = async (
createdBySource: FieldActorSource.SYSTEM,
createdByWorkspaceMemberId: null,
createdByName: 'System',
updatedBySource: FieldActorSource.SYSTEM,
updatedByWorkspaceMemberId: null,
updatedByName: 'System',
phonesPrimaryPhoneNumber: '123456789',
phonesPrimaryPhoneCallingCode: '+1',
companyId: AIRBNB_ID,
@@ -58,6 +64,9 @@ export const prefillPeople = async (
createdBySource: FieldActorSource.SYSTEM,
createdByWorkspaceMemberId: null,
createdByName: 'System',
updatedBySource: FieldActorSource.SYSTEM,
updatedByWorkspaceMemberId: null,
updatedByName: 'System',
phonesPrimaryPhoneNumber: '555123456',
phonesPrimaryPhoneCallingCode: '+1',
companyId: ANTHROPIC_ID,
@@ -73,6 +82,9 @@ export const prefillPeople = async (
createdBySource: FieldActorSource.SYSTEM,
createdByWorkspaceMemberId: null,
createdByName: 'System',
updatedBySource: FieldActorSource.SYSTEM,
updatedByWorkspaceMemberId: null,
updatedByName: 'System',
phonesPrimaryPhoneNumber: '987625341',
phonesPrimaryPhoneCallingCode: '+1',
companyId: STRIPE_ID,
@@ -88,6 +100,9 @@ export const prefillPeople = async (
createdBySource: FieldActorSource.SYSTEM,
createdByWorkspaceMemberId: null,
createdByName: 'System',
updatedBySource: FieldActorSource.SYSTEM,
updatedByWorkspaceMemberId: null,
updatedByName: 'System',
phonesPrimaryPhoneNumber: '098822619',
phonesPrimaryPhoneCallingCode: '+1',
companyId: FIGMA_ID,
@@ -103,6 +118,9 @@ export const prefillPeople = async (
createdBySource: FieldActorSource.SYSTEM,
createdByWorkspaceMemberId: null,
createdByName: 'System',
updatedBySource: FieldActorSource.SYSTEM,
updatedByWorkspaceMemberId: null,
updatedByName: 'System',
phonesPrimaryPhoneNumber: '882261739',
phonesPrimaryPhoneCallingCode: '+1',
companyId: NOTION_ID,
@@ -54,6 +54,9 @@ export const prefillWorkflows = async (
'createdByWorkspaceMemberId',
'createdByName',
'createdByContext',
'updatedBySource',
'updatedByWorkspaceMemberId',
'updatedByName',
])
.orIgnore()
.values([
@@ -67,6 +70,9 @@ export const prefillWorkflows = async (
createdByWorkspaceMemberId: null,
createdByName: 'System',
createdByContext: {},
updatedBySource: FieldActorSource.SYSTEM,
updatedByWorkspaceMemberId: null,
updatedByName: 'System',
},
])
.returning('*')
@@ -54,6 +54,9 @@ export const STANDARD_OBJECTS = {
createdBy: {
universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.createdBy,
},
updatedBy: {
universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.updatedBy,
},
task: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.task },
note: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.note },
person: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.person },
@@ -397,6 +400,7 @@ export const STANDARD_OBJECTS = {
},
position: { universalIdentifier: COMPANY_STANDARD_FIELD_IDS.position },
createdBy: { universalIdentifier: COMPANY_STANDARD_FIELD_IDS.createdBy },
updatedBy: { universalIdentifier: COMPANY_STANDARD_FIELD_IDS.updatedBy },
people: { universalIdentifier: COMPANY_STANDARD_FIELD_IDS.people },
accountOwner: {
universalIdentifier: COMPANY_STANDARD_FIELD_IDS.accountOwner,
@@ -549,6 +553,9 @@ export const STANDARD_OBJECTS = {
createdBy: {
universalIdentifier: DASHBOARD_STANDARD_FIELD_IDS.createdBy,
},
updatedBy: {
universalIdentifier: DASHBOARD_STANDARD_FIELD_IDS.updatedBy,
},
timelineActivities: {
universalIdentifier: DASHBOARD_STANDARD_FIELD_IDS.timelineActivities,
},
@@ -1029,6 +1036,7 @@ export const STANDARD_OBJECTS = {
title: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.title },
bodyV2: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.bodyV2 },
createdBy: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.createdBy },
updatedBy: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.updatedBy },
noteTargets: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.noteTargets },
attachments: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.attachments },
timelineActivities: {
@@ -1127,6 +1135,9 @@ export const STANDARD_OBJECTS = {
createdBy: {
universalIdentifier: OPPORTUNITY_STANDARD_FIELD_IDS.createdBy,
},
updatedBy: {
universalIdentifier: OPPORTUNITY_STANDARD_FIELD_IDS.updatedBy,
},
pointOfContact: {
universalIdentifier: OPPORTUNITY_STANDARD_FIELD_IDS.pointOfContact,
},
@@ -1255,6 +1266,7 @@ export const STANDARD_OBJECTS = {
avatarUrl: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.avatarUrl },
position: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.position },
createdBy: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.createdBy },
updatedBy: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.updatedBy },
company: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.company },
pointOfContactForOpportunities: {
universalIdentifier:
@@ -1352,6 +1364,7 @@ export const STANDARD_OBJECTS = {
dueAt: { universalIdentifier: TASK_STANDARD_FIELD_IDS.dueAt },
status: { universalIdentifier: TASK_STANDARD_FIELD_IDS.status },
createdBy: { universalIdentifier: TASK_STANDARD_FIELD_IDS.createdBy },
updatedBy: { universalIdentifier: TASK_STANDARD_FIELD_IDS.updatedBy },
taskTargets: { universalIdentifier: TASK_STANDARD_FIELD_IDS.taskTargets },
attachments: { universalIdentifier: TASK_STANDARD_FIELD_IDS.attachments },
assignee: { universalIdentifier: TASK_STANDARD_FIELD_IDS.assignee },
@@ -1670,6 +1683,7 @@ export const STANDARD_OBJECTS = {
universalIdentifier: WORKFLOW_STANDARD_FIELD_IDS.attachments,
},
createdBy: { universalIdentifier: WORKFLOW_STANDARD_FIELD_IDS.createdBy },
updatedBy: { universalIdentifier: WORKFLOW_STANDARD_FIELD_IDS.updatedBy },
searchVector: {
universalIdentifier: WORKFLOW_STANDARD_FIELD_IDS.searchVector,
},
@@ -1772,6 +1786,9 @@ export const STANDARD_OBJECTS = {
createdBy: {
universalIdentifier: WORKFLOW_RUN_STANDARD_FIELD_IDS.createdBy,
},
updatedBy: {
universalIdentifier: WORKFLOW_RUN_STANDARD_FIELD_IDS.updatedBy,
},
output: { universalIdentifier: WORKFLOW_RUN_STANDARD_FIELD_IDS.output },
context: { universalIdentifier: WORKFLOW_RUN_STANDARD_FIELD_IDS.context },
state: { universalIdentifier: WORKFLOW_RUN_STANDARD_FIELD_IDS.state },
@@ -207,6 +207,28 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({
twentyStandardApplicationId,
now,
}),
updatedBy: createStandardFieldFlatMetadata({
objectName,
workspaceId,
context: {
fieldName: 'updatedBy',
type: FieldMetadataType.ACTOR,
label: 'Updated by',
description: 'The workspace member who last updated the record',
icon: 'IconUserCircle',
isUIReadOnly: true,
isNullable: false,
defaultValue: {
source: "'MANUAL'",
name: "'System'",
workspaceMemberId: null,
},
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
twentyStandardApplicationId,
now,
}),
// Relation fields
task: createStandardRelationFieldFlatMetadata({
@@ -286,6 +286,28 @@ export const buildCompanyStandardFlatFieldMetadatas = ({
twentyStandardApplicationId,
now,
}),
updatedBy: createStandardFieldFlatMetadata({
objectName,
workspaceId,
context: {
fieldName: 'updatedBy',
type: FieldMetadataType.ACTOR,
label: 'Updated by',
description: 'The workspace member who last updated the record',
icon: 'IconUserCircle',
isUIReadOnly: true,
isNullable: false,
defaultValue: {
source: "'MANUAL'",
name: "'System'",
workspaceMemberId: null,
},
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
twentyStandardApplicationId,
now,
}),
searchVector: createStandardFieldFlatMetadata({
objectName,
workspaceId,
@@ -176,6 +176,28 @@ export const buildDashboardStandardFlatFieldMetadatas = ({
twentyStandardApplicationId,
now,
}),
updatedBy: createStandardFieldFlatMetadata({
objectName,
workspaceId,
context: {
fieldName: 'updatedBy',
type: FieldMetadataType.ACTOR,
label: 'Updated by',
description: 'The workspace member who last updated the record',
icon: 'IconUserCircle',
isUIReadOnly: true,
isNullable: false,
defaultValue: {
source: "'MANUAL'",
name: "'System'",
workspaceMemberId: null,
},
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
twentyStandardApplicationId,
now,
}),
searchVector: createStandardFieldFlatMetadata({
objectName,
workspaceId,
@@ -181,6 +181,28 @@ export const buildNoteStandardFlatFieldMetadatas = ({
twentyStandardApplicationId,
now,
}),
updatedBy: createStandardFieldFlatMetadata({
objectName,
workspaceId,
context: {
fieldName: 'updatedBy',
type: FieldMetadataType.ACTOR,
label: 'Updated by',
description: 'The workspace member who last updated the record',
icon: 'IconUserCircle',
isUIReadOnly: true,
isNullable: false,
defaultValue: {
source: "'MANUAL'",
name: "'System'",
workspaceMemberId: null,
},
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
twentyStandardApplicationId,
now,
}),
searchVector: createStandardFieldFlatMetadata({
objectName,
workspaceId,
@@ -232,6 +232,28 @@ export const buildOpportunityStandardFlatFieldMetadatas = ({
twentyStandardApplicationId,
now,
}),
updatedBy: createStandardFieldFlatMetadata({
objectName,
workspaceId,
context: {
fieldName: 'updatedBy',
type: FieldMetadataType.ACTOR,
label: 'Updated by',
description: 'The workspace member who last updated the record',
icon: 'IconUserCircle',
isUIReadOnly: true,
isNullable: false,
defaultValue: {
source: "'MANUAL'",
name: "'System'",
workspaceMemberId: null,
},
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
twentyStandardApplicationId,
now,
}),
searchVector: createStandardFieldFlatMetadata({
objectName,
workspaceId,
@@ -286,6 +286,28 @@ export const buildPersonStandardFlatFieldMetadatas = ({
twentyStandardApplicationId,
now,
}),
updatedBy: createStandardFieldFlatMetadata({
objectName,
workspaceId,
context: {
fieldName: 'updatedBy',
type: FieldMetadataType.ACTOR,
label: 'Updated by',
description: 'The workspace member who last updated the record',
icon: 'IconUserCircle',
isUIReadOnly: true,
isNullable: false,
defaultValue: {
source: "'MANUAL'",
name: "'System'",
workspaceMemberId: null,
},
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
twentyStandardApplicationId,
now,
}),
// Relation fields
company: createStandardRelationFieldFlatMetadata({
@@ -225,6 +225,28 @@ export const buildTaskStandardFlatFieldMetadatas = ({
twentyStandardApplicationId,
now,
}),
updatedBy: createStandardFieldFlatMetadata({
objectName,
workspaceId,
context: {
fieldName: 'updatedBy',
type: FieldMetadataType.ACTOR,
label: 'Updated by',
description: 'The workspace member who last updated the record',
icon: 'IconUserCircle',
isUIReadOnly: true,
isNullable: false,
defaultValue: {
source: "'MANUAL'",
name: "'System'",
workspaceMemberId: null,
},
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
twentyStandardApplicationId,
now,
}),
searchVector: createStandardFieldFlatMetadata({
objectName,
workspaceId,
@@ -223,6 +223,28 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({
twentyStandardApplicationId,
now,
}),
updatedBy: createStandardFieldFlatMetadata({
objectName,
workspaceId,
context: {
fieldName: 'updatedBy',
type: FieldMetadataType.ACTOR,
label: 'Updated by',
description: 'The workspace member who last updated the record',
icon: 'IconUserCircle',
isUIReadOnly: true,
isNullable: false,
defaultValue: {
source: "'MANUAL'",
name: "'System'",
workspaceMemberId: null,
},
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
twentyStandardApplicationId,
now,
}),
state: createStandardFieldFlatMetadata({
objectName,
workspaceId,
@@ -200,6 +200,28 @@ export const buildWorkflowStandardFlatFieldMetadatas = ({
twentyStandardApplicationId,
now,
}),
updatedBy: createStandardFieldFlatMetadata({
objectName,
workspaceId,
context: {
fieldName: 'updatedBy',
type: FieldMetadataType.ACTOR,
label: 'Updated by',
description: 'The workspace member who last updated the record',
icon: 'IconUserCircle',
isUIReadOnly: true,
isNullable: false,
defaultValue: {
source: "'MANUAL'",
name: "'System'",
workspaceMemberId: null,
},
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
twentyStandardApplicationId,
now,
}),
searchVector: createStandardFieldFlatMetadata({
objectName,
workspaceId,
@@ -35,6 +35,7 @@ export const ATTACHMENT_STANDARD_FIELD_IDS = {
type: '20202020-a417-49b8-a40b-f6a7874caa0d',
fileCategory: '20202020-8c3f-4d9e-9a1b-2e5f7a8c9d0e',
createdBy: '395be3bd-a5c9-463d-aafe-9bc3bbec3f15',
updatedBy: '376239d1-3e65-4cb6-b5d8-e0917d43cc93',
author: '20202020-6501-4ac5-a4ef-b2f8522ef6cd',
activity: '20202020-b569-481b-a13f-9b94e47e54fe',
task: '20202020-51e5-4621-9cf8-215487951c4b',
@@ -128,6 +129,7 @@ export const COMPANY_STANDARD_FIELD_IDS = {
idealCustomerProfile: '20202020-ba6b-438a-8213-2c5ba28d76a2',
position: '20202020-9b4e-462b-991d-a0ee33326454',
createdBy: '20202020-fabc-451d-ab7d-412170916baa',
updatedBy: '7444022e-b38f-4d4f-801b-cd664abc4834',
people: '20202020-3213-4ddf-9494-6422bcff8d7c',
accountOwner: '20202020-95b8-4e10-9881-edb5d4765f9d',
// TODO: check if activityTargets field can be deleted
@@ -280,6 +282,7 @@ export const NOTE_STANDARD_FIELD_IDS = {
body: '20202020-e63d-4e70-95be-a78cd9abe7ef',
bodyV2: '20202020-a7bb-4d94-be51-8f25181502c8',
createdBy: '20202020-0d79-4e21-ab77-5a394eff97be',
updatedBy: '9b446e89-2484-4044-a3b5-420f6b578c0c',
noteTargets: '20202020-1f25-43fe-8b00-af212fdde823',
attachments: '20202020-4986-4c92-bf19-39934b149b16',
timelineActivities: '20202020-7030-42f8-929c-1a57b25d6bce',
@@ -303,6 +306,7 @@ export const OPPORTUNITY_STANDARD_FIELD_IDS = {
stage: '20202020-6f76-477d-8551-28cd65b2b4b9',
position: '20202020-806d-493a-bbc6-6313e62958e2',
createdBy: '20202020-a63e-4a62-8e63-42a51828f831',
updatedBy: '3c8a6095-3f64-4e81-a59e-66c2bd181e11',
pointOfContact: '20202020-8dfb-42fc-92b6-01afb759ed16',
company: '20202020-cbac-457e-b565-adece5fc815f',
favorites: '20202020-a1c2-4500-aaae-83ba8a0e827a',
@@ -328,6 +332,7 @@ export const PERSON_STANDARD_FIELD_IDS = {
avatarUrl: '20202020-b8a6-40df-961c-373dc5d2ec21',
position: '20202020-fcd5-4231-aff5-fff583eaa0b1',
createdBy: '20202020-f6ab-4d98-af24-a3d5b664148a',
updatedBy: 'e9e0dd35-184c-4742-84da-afadf45ce59a',
company: '20202020-e2f3-448e-b34c-2d625f0025fd',
pointOfContactForOpportunities: '20202020-911b-4a7d-b67b-918aa9a5b33a',
// TODO: check if activityTargets field can be deleted
@@ -350,6 +355,7 @@ export const TASK_STANDARD_FIELD_IDS = {
dueAt: '20202020-fd99-40da-951b-4cb9a352fce3',
status: '20202020-70bc-48f9-89c5-6aa730b151e0',
createdBy: '20202020-1a04-48ab-a567-576965ae5387',
updatedBy: '9e8bf518-f4ab-433e-9674-efb75fba2802',
taskTargets: '20202020-de9c-4d0e-a452-713d4a3e5fc7',
attachments: '20202020-794d-4783-a8ff-cecdb15be139',
assignee: '20202020-065a-4f42-a906-e20422c1753f',
@@ -449,6 +455,7 @@ export const WORKFLOW_STANDARD_FIELD_IDS = {
timelineActivities: '20202020-906e-486a-a798-131a5f081faf',
attachments: '20202020-4a8c-4e2d-9b1c-7e5f3a2b4c6d',
createdBy: '20202020-6007-401a-8aa5-e6f48581a6f3',
updatedBy: '3559831e-caf2-4eb5-9db1-b47bf968c774',
searchVector: '20202020-535d-4ffa-b7f3-4fa0d5da1b7a',
} as const;
@@ -462,6 +469,7 @@ export const WORKFLOW_RUN_STANDARD_FIELD_IDS = {
status: '20202020-6b3e-4f9c-8c2b-2e5b8e6d6f3b',
position: '20202020-7802-4c40-ae89-1f506fe3365c',
createdBy: '20202020-6007-401a-8aa5-e6f38581a6f3',
updatedBy: '730dc1c9-34f5-4c22-84a6-bcb55b7604e2',
output: '20202020-7be4-4db2-8ac6-3ff0d740843d',
context: '20202020-189c-478a-b867-d72feaf5926a',
state: '20202020-611f-45f3-9cde-d64927e8ec57',
@@ -516,6 +524,7 @@ export const CUSTOM_OBJECT_STANDARD_FIELD_IDS = {
name: '20202020-ba07-4ffd-ba63-009491f5749c',
position: '20202020-c2bd-4e16-bb9a-c8b0411bf49d',
createdBy: '20202020-be0e-4971-865b-32ca87cbb315',
updatedBy: 'd047ccb4-9469-4514-a982-29c4ae49317d',
// TODO: check if activityTargets field can be deleted
activityTargets: '20202020-7f42-40ae-b96c-c8a61acc83bf',
noteTargets: '20202020-01fd-4f37-99dc-9427a444018a',
@@ -531,6 +540,7 @@ export const DASHBOARD_STANDARD_FIELD_IDS = {
position: '20202020-38af-409b-95f0-7f08aa5f420f',
pageLayoutId: '20202020-bb53-4648-aa36-1d9d54e6f7f2',
createdBy: '20202020-ff32-4fa1-b7ad-407cc6aa0734',
updatedBy: '53ee42e7-f157-42b5-b278-a5fa9b378307',
timelineActivities: '20202020-9b0c-5d6e-7f8a-9b0c1d2e3f4a',
favorites: '20202020-f032-478f-88fa-6426ff6f1e4c',
attachments: '20202020-bf6f-4220-8c55-2764f1175870',