Commit Graph

8 Commits

Author SHA1 Message Date
80c0fc7ff1 Activity as standard object (#6219)
In this PR I layout the first steps to migrate Activity to a traditional
Standard objects

Since this is a big transition, I'd rather split it into several
deployments / PRs

<img width="1512" alt="image"
src="https://github.com/user-attachments/assets/012e2bbf-9d1b-4723-aaf6-269ef588b050">

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
Co-authored-by: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Co-authored-by: Weiko <corentin@twenty.com>
Co-authored-by: Faisal-imtiyaz123 <142205282+Faisal-imtiyaz123@users.noreply.github.com>
Co-authored-by: Prateek Jain <prateekj1171998@gmail.com>
2024-07-31 15:36:11 +02:00
364caf0fdf fix: remove usage of probability field (#5877)
- fixes #5735

---------

Co-authored-by: Marie Stoppa <marie.stoppa@essec.edu>
2024-07-16 10:24:35 +02:00
de51e653fc Authorize 0 depth (#6171)
Authorize depth 0


![image](https://github.com/twentyhq/twenty/assets/29927851/2e82eaba-01b4-440f-8412-d2878007a3b1)

![image](https://github.com/twentyhq/twenty/assets/29927851/f0137671-20dc-4e44-97b8-7a8e4c583493)

## Edit
### Depth = 0
```
{
  "data": {
    "people": [
      {
        "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
        "email": "christoph.calisto@linkedin.com",
        "jobTitle": "",
        "phone": "+33789012345",
        "city": "Seattle",
        "avatarUrl": "",
        "position": 1,
        "createdAt": "2024-07-08T16:08:50.011Z",
        "updatedAt": "2024-07-08T16:08:50.011Z",
        "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
        "name": {
          "firstName": "Christoph",
          "lastName": "Callisto"
        },
        "linkedinLink": {
          "label": "",
          "url": ""
        },
        "xLink": {
          "label": "",
          "url": ""
        }
      },
...
]}
```

### Depth = 1
```
{
  "data": {
    "people": [
      {
        "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
        "email": "christoph.calisto@linkedin.com",
        "jobTitle": "",
        "phone": "+33789012345",
        "city": "Seattle",
        "avatarUrl": "",
        "position": 1,
        "createdAt": "2024-07-08T16:08:50.011Z",
        "updatedAt": "2024-07-08T16:08:50.011Z",
        "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
        "name": {
          "firstName": "Christoph",
          "lastName": "Callisto"
        },
        "linkedinLink": {
          "label": "",
          "url": ""
        },
        "xLink": {
          "label": "",
          "url": ""
        },
        "activityTargets": [],
        "favorites": [],
        "attachments": [],
        "timelineActivities": [],
        "company": {
          "id": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
          "name": "Linkedin",
          "domainName": "linkedin.com",
          "address": "",
          "employees": null,
          "idealCustomerProfile": false,
          "position": 1,
          "createdAt": "2024-07-08T16:08:50.011Z",
          "updatedAt": "2024-07-08T16:08:50.011Z",
          "accountOwnerId": null,
          "linkedinLink": {
            "label": "",
            "url": ""
          },
          "xLink": {
            "label": "",
            "url": ""
          },
          "annualRecurringRevenue": {
            "amountMicros": null,
            "currencyCode": ""
          }
        },
        "messageParticipants": [
          {
            "id": "20202020-0f2a-49d8-8aa2-ec8786153a0b",
            "role": "from",
            "handle": "outgoing",
            "displayName": "Christoph",
            "createdAt": "2024-07-08T16:08:50.028Z",
            "updatedAt": "2024-07-08T16:08:50.028Z",
            "messageId": "20202020-2b8a-405d-8f42-e820ca921421",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": "20202020-0687-4c41-b707-ed1bfca972a7"
          },
          {
            "id": "20202020-fc7d-4ad8-9aea-b78bcbf79cdd",
            "role": "from",
            "handle": "outgoing",
            "displayName": "Christoph",
            "createdAt": "2024-07-08T16:08:50.028Z",
            "updatedAt": "2024-07-08T16:08:50.028Z",
            "messageId": "20202020-04c8-4f24-93f2-764948e95014",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": "20202020-0687-4c41-b707-ed1bfca972a7"
          }
        ],
        "calendarEventParticipants": [
          {
            "id": "da8f47c3-8055-49ad-b7e4-9c9d5bbc1ecc",
            "handle": "christoph.calisto@linkedin.com",
            "displayName": "Christoph Calisto",
            "isOrganizer": true,
            "responseStatus": "ACCEPTED",
            "createdAt": "2024-07-08T16:08:50.011Z",
            "updatedAt": "2024-07-08T16:08:50.011Z",
            "calendarEventId": "86083141-1c0e-494c-a1b6-85b1c6fefaa5",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": null
          }
        ],
        "pointOfContactForOpportunities": [
          {
            "id": "20202020-be10-412b-a663-16bd3c2228e1",
            "name": "Opportunity 1",
            "closeDate": "2024-07-08T16:08:50.018Z",
            "probability": "0.5",
            "stage": "NEW",
            "position": 1,
            "createdAt": "2024-07-08T16:08:50.011Z",
            "updatedAt": "2024-07-08T16:08:50.011Z",
            "pointOfContactId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
            "amount": {
              "amountMicros": 100000,
              "currencyCode": "USD"
            }
          }
        ]
      },
...
]}
```
### Depth = 2
```
{
  "data": {
    "people": [
      {
        "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
        "email": "christoph.calisto@linkedin.com",
        "jobTitle": "",
        "phone": "+33789012345",
        "city": "Seattle",
        "avatarUrl": "",
        "position": 1,
        "createdAt": "2024-07-08T16:08:50.011Z",
        "updatedAt": "2024-07-08T16:08:50.011Z",
        "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
        "name": {
          "firstName": "Christoph",
          "lastName": "Callisto"
        },
        "linkedinLink": {
          "label": "",
          "url": ""
        },
        "xLink": {
          "label": "",
          "url": ""
        },
        "activityTargets": [],
        "favorites": [],
        "attachments": [],
        "timelineActivities": [],
        "company": {
          "id": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
          "name": "Linkedin",
          "domainName": "linkedin.com",
          "address": "",
          "employees": null,
          "idealCustomerProfile": false,
          "position": 1,
          "createdAt": "2024-07-08T16:08:50.011Z",
          "updatedAt": "2024-07-08T16:08:50.011Z",
          "accountOwnerId": null,
          "accountOwner": null,
          "linkedinLink": {
            "label": "",
            "url": ""
          },
          "xLink": {
            "label": "",
            "url": ""
          },
          "annualRecurringRevenue": {
            "amountMicros": null,
            "currencyCode": ""
          },
          "activityTargets": [],
          "favorites": [],
          "attachments": [],
          "timelineActivities": [],
          "people": [
            {
              "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "email": "christoph.calisto@linkedin.com",
              "jobTitle": "",
              "phone": "+33789012345",
              "city": "Seattle",
              "avatarUrl": "",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Christoph",
                "lastName": "Callisto"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            },
            {
              "id": "20202020-ac73-4797-824e-87a1f5aea9e0",
              "email": "sylvie.palmer@linkedin.com",
              "jobTitle": "",
              "phone": "+33780123456",
              "city": "Los Angeles",
              "avatarUrl": "",
              "position": 2,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Sylvie",
                "lastName": "Palmer"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            }
          ],
          "opportunities": [
            {
              "id": "20202020-be10-412b-a663-16bd3c2228e1",
              "name": "Opportunity 1",
              "closeDate": "2024-07-08T16:08:50.018Z",
              "probability": "0.5",
              "stage": "NEW",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "pointOfContactId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "amount": {
                "amountMicros": 100000,
                "currencyCode": "USD"
              }
            }
          ]
        },
        "pointOfContactForOpportunities": [
          {
            "id": "20202020-be10-412b-a663-16bd3c2228e1",
            "name": "Opportunity 1",
            "closeDate": "2024-07-08T16:08:50.018Z",
            "probability": "0.5",
            "stage": "NEW",
            "position": 1,
            "createdAt": "2024-07-08T16:08:50.011Z",
            "updatedAt": "2024-07-08T16:08:50.011Z",
            "pointOfContactId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
            "amount": {
              "amountMicros": 100000,
              "currencyCode": "USD"
            },
            "favorites": [],
            "activityTargets": [],
            "attachments": [],
            "timelineActivities": [],
            "pointOfContact": {
              "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "email": "christoph.calisto@linkedin.com",
              "jobTitle": "",
              "phone": "+33789012345",
              "city": "Seattle",
              "avatarUrl": "",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Christoph",
                "lastName": "Callisto"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            },
            "company": {
              "id": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": "Linkedin",
              "domainName": "linkedin.com",
              "address": "",
              "employees": null,
              "idealCustomerProfile": false,
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "accountOwnerId": null,
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              },
              "annualRecurringRevenue": {
                "amountMicros": null,
                "currencyCode": ""
              }
            }
          }
        ],
        "messageParticipants": [
          {
            "id": "20202020-0f2a-49d8-8aa2-ec8786153a0b",
            "role": "from",
            "handle": "outgoing",
            "displayName": "Christoph",
            "createdAt": "2024-07-08T16:08:50.028Z",
            "updatedAt": "2024-07-08T16:08:50.028Z",
            "messageId": "20202020-2b8a-405d-8f42-e820ca921421",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": "20202020-0687-4c41-b707-ed1bfca972a7",
            "message": {
              "id": "20202020-2b8a-405d-8f42-e820ca921421",
              "headerMessageId": "99ef24a8-2b8a-405d-8f42-e820ca921421",
              "direction": "outgoing",
              "subject": "Meeting Request",
              "text": "Hello, \n I hope this email finds you well. I am writing to request a meeting. I believe it would be beneficial for both parties to collaborate and explore potential opportunities. Would you be available for a meeting sometime next week? Please let me know your availability, and I will arrange a suitable time. \n Looking forward to your response.\n Best regards",
              "receivedAt": "2024-07-08T16:08:50.022Z",
              "createdAt": "2024-07-08T16:08:50.022Z",
              "updatedAt": "2024-07-08T16:08:50.022Z",
              "messageThreadId": "20202020-8bfa-453b-b99b-bc435a7d4da8"
            },
            "person": {
              "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "email": "christoph.calisto@linkedin.com",
              "jobTitle": "",
              "phone": "+33789012345",
              "city": "Seattle",
              "avatarUrl": "",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Christoph",
                "lastName": "Callisto"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            },
            "workspaceMember": {
              "id": "20202020-0687-4c41-b707-ed1bfca972a7",
              "colorScheme": "Light",
              "locale": "en",
              "avatarUrl": "",
              "userEmail": "tim@apple.dev",
              "userId": "20202020-9e3b-46d4-a556-88b9ddc2b034",
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "name": {
                "firstName": "Tim",
                "lastName": "Apple"
              }
            }
          },
          {
            "id": "20202020-fc7d-4ad8-9aea-b78bcbf79cdd",
            "role": "from",
            "handle": "outgoing",
            "displayName": "Christoph",
            "createdAt": "2024-07-08T16:08:50.028Z",
            "updatedAt": "2024-07-08T16:08:50.028Z",
            "messageId": "20202020-04c8-4f24-93f2-764948e95014",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": "20202020-0687-4c41-b707-ed1bfca972a7",
            "message": {
              "id": "20202020-04c8-4f24-93f2-764948e95014",
              "headerMessageId": "8f804a9a-04c8-4f24-93f2-764948e95014",
              "direction": "outgoing",
              "subject": "Inquiry Regarding Topic",
              "text": "Good Morning,\n I am writing to inquire about information. Could you please provide me with details regarding this topic? \n Your assistance in this matter would be greatly appreciated. Thank you in advance for your prompt response. \n Best regards,Tim",
              "receivedAt": "2024-07-08T16:08:50.022Z",
              "createdAt": "2024-07-08T16:08:50.022Z",
              "updatedAt": "2024-07-08T16:08:50.022Z",
              "messageThreadId": "20202020-634a-4fde-aa7c-28a0eaf203ca"
            },
            "person": {
              "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "email": "christoph.calisto@linkedin.com",
              "jobTitle": "",
              "phone": "+33789012345",
              "city": "Seattle",
              "avatarUrl": "",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Christoph",
                "lastName": "Callisto"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            },
            "workspaceMember": {
              "id": "20202020-0687-4c41-b707-ed1bfca972a7",
              "colorScheme": "Light",
              "locale": "en",
              "avatarUrl": "",
              "userEmail": "tim@apple.dev",
              "userId": "20202020-9e3b-46d4-a556-88b9ddc2b034",
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "name": {
                "firstName": "Tim",
                "lastName": "Apple"
              }
            }
          }
        ],
        "calendarEventParticipants": [
          {
            "id": "da8f47c3-8055-49ad-b7e4-9c9d5bbc1ecc",
            "handle": "christoph.calisto@linkedin.com",
            "displayName": "Christoph Calisto",
            "isOrganizer": true,
            "responseStatus": "ACCEPTED",
            "createdAt": "2024-07-08T16:08:50.011Z",
            "updatedAt": "2024-07-08T16:08:50.011Z",
            "calendarEventId": "86083141-1c0e-494c-a1b6-85b1c6fefaa5",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": null,
            "workspaceMember": null,
            "calendarEvent": {
              "id": "86083141-1c0e-494c-a1b6-85b1c6fefaa5",
              "title": "Meeting with Christoph",
              "isCanceled": false,
              "isFullDay": false,
              "startsAt": "2024-07-08T08:00:50.030Z",
              "endsAt": "2024-07-08T09:00:50.030Z",
              "externalCreatedAt": "2024-07-08T16:08:50.030Z",
              "externalUpdatedAt": "2024-07-08T16:08:50.030Z",
              "description": "Discuss project progress",
              "location": "Seattle",
              "iCalUID": "event1@calendar.com",
              "conferenceSolution": "Zoom",
              "recurringEventExternalId": "recurring1",
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "conferenceLink": {
                "label": "https://zoom.us/j/1234567890",
                "url": "https://zoom.us/j/1234567890"
              }
            },
            "person": {
              "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "email": "christoph.calisto@linkedin.com",
              "jobTitle": "",
              "phone": "+33789012345",
              "city": "Seattle",
              "avatarUrl": "",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Christoph",
                "lastName": "Callisto"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            }
          }
        ]
      },
...
]}
```
2024-07-09 14:55:05 +02:00
5c15fcd249 5805 typing issue in rest api (#5818)
Fixed types for:
- uuid
- email
- datetime
- date
- number
- currency.amountMicros
- select
- multiSelect

## Before

![image](https://github.com/twentyhq/twenty/assets/29927851/4bfa3a6d-a26f-47e4-a46f-7a5582825482)


## After

![image](https://github.com/twentyhq/twenty/assets/29927851/0bbab32f-4172-4525-91d1-76c37f299ac0)
2024-06-11 14:54:02 +02:00
01991fe717 4902 bug fix fix api filter for enum (#4909)
- Handle NUMERIC, SELECT, PROBABILITY, RATING FieldMetadataTypes

Those filters now works:
- http://localhost:3000/rest/opportunities?filter=stage[eq]:MEETING
-
http://localhost:3000/rest/opportunities?filter=stage[in]:[MEETING,NEW]

When providing wrong enum values, the following error messages are
returned:
- http://localhost:3000/rest/opportunities?filter=stage[eq]:MEETINGG
> BadRequestException: 'filter' enum value 'MEETINGG' not available in
'stage' enum. Available enum values are ['NEW', 'SCREENING', 'MEETING',
'PROPOSAL', 'CUSTOMER']
-
http://localhost:3000/rest/opportunities?filter=stage[in]:[MEETING,NEWW]
> BadRequestException: 'filter' enum value 'NEWW' not available in
'stage' enum. Available enum values are ['NEW', 'SCREENING', 'MEETING',
'PROPOSAL', 'CUSTOMER']
2024-04-10 18:54:55 +02:00
5019b5febc feat: drop target column map (#4670)
This PR is dropping the column `targetColumnMap` of fieldMetadata
entities.
The goal of this column was to properly map field to their respecting
column in the table.
We decide to drop it and instead compute the column name on the fly when
we need it, as it's more easier to support.
Some parts of the code has been refactored to try making implementation
of composite type more easier to understand and maintain.

Fix #3760

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2024-04-08 16:00:28 +02:00
e5c1309e8c feat: wip server folder structure (#4573)
* feat: wip server folder structure

* fix: merge

* fix: wrong merge

* fix: remove unused file

* fix: comment

* fix: lint

* fix: merge

* fix: remove console.log

* fix: metadata graphql arguments broken
2024-03-20 16:23:46 +01:00
2c09096edd Refactor backend folder structure (#4505)
* Refactor backend folder structure

Co-authored-by: Charles Bochet <charles@twenty.com>

* fix tests

* fix

* move yoga hooks

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2024-03-15 18:37:09 +01:00