From cc89e76cf8c1cdc2e7e1c03e646c3a98c6f4a0f0 Mon Sep 17 00:00:00 2001 From: Sacha Al Himdani Date: Sun, 25 May 2025 09:56:27 -0700 Subject: [PATCH] Add contract dates to people Signed-off-by: Sacha Al Himdani --- .../organizations/people/NewPeopleView.tsx | 20 ++ .../pages/organizations/people/PeopleView.tsx | 52 ++++- ...wPeopleViewCreatePeopleMutation.graphql.ts | 26 ++- .../__generated__/PeopleViewQuery.graphql.ts | 34 +++- .../PeopleViewUpdatePeopleMutation.graphql.ts | 26 ++- pkg/coredata/migrations/20250525T153316Z.sql | 3 + pkg/coredata/people.go | 22 ++ pkg/probo/people_service.go | 14 ++ pkg/server/api/console/v1/schema.graphql | 6 + pkg/server/api/console/v1/schema/schema.go | 188 +++++++++++++++++- pkg/server/api/console/v1/types/people.go | 2 + pkg/server/api/console/v1/types/types.go | 6 + pkg/server/api/console/v1/v1_resolver.go | 4 + 13 files changed, 384 insertions(+), 19 deletions(-) create mode 100644 pkg/coredata/migrations/20250525T153316Z.sql diff --git a/apps/console/src/pages/organizations/people/NewPeopleView.tsx b/apps/console/src/pages/organizations/people/NewPeopleView.tsx index 23410ee32..eb2758357 100644 --- a/apps/console/src/pages/organizations/people/NewPeopleView.tsx +++ b/apps/console/src/pages/organizations/people/NewPeopleView.tsx @@ -25,6 +25,8 @@ const createPeopleMutation = graphql` primaryEmailAddress additionalEmailAddresses kind + contractStartDate + contractEndDate } } } @@ -77,6 +79,8 @@ function NewPeopleViewContent() { primaryEmailAddress: "", additionalEmailAddresses: [] as string[], kind: "EMPLOYEE" as "EMPLOYEE" | "CONTRACTOR" | "SERVICE_ACCOUNT", + contractStartDate: "", + contractEndDate: "", }); const handleFieldChange = (field: keyof typeof formData, value: unknown) => { @@ -129,6 +133,8 @@ function NewPeopleViewContent() { primaryEmailAddress: formData.primaryEmailAddress, additionalEmailAddresses: formData.additionalEmailAddresses, kind: formData.kind, + contractStartDate: formData.contractStartDate ? new Date(formData.contractStartDate).toISOString() : null, + contractEndDate: formData.contractEndDate ? new Date(formData.contractEndDate).toISOString() : null, }, }, onCompleted: () => { @@ -276,6 +282,20 @@ function NewPeopleViewContent() { + + handleFieldChange("contractStartDate", value)} + /> + + handleFieldChange("contractEndDate", value)} + /> diff --git a/apps/console/src/pages/organizations/people/PeopleView.tsx b/apps/console/src/pages/organizations/people/PeopleView.tsx index abb52a846..109d2cb93 100644 --- a/apps/console/src/pages/organizations/people/PeopleView.tsx +++ b/apps/console/src/pages/organizations/people/PeopleView.tsx @@ -35,6 +35,8 @@ const peopleViewQuery = graphql` primaryEmailAddress additionalEmailAddresses kind + contractStartDate + contractEndDate createdAt updatedAt } @@ -51,6 +53,8 @@ const updatePeopleMutation = graphql` primaryEmailAddress additionalEmailAddresses kind + contractStartDate + contractEndDate updatedAt } } @@ -100,19 +104,34 @@ function PeopleViewContent({ primaryEmailAddress: data.node.primaryEmailAddress || "", additionalEmailAddresses: data.node.additionalEmailAddresses || [], kind: data.node.kind, + contractStartDate: data.node.contractStartDate + ? new Date(data.node.contractStartDate).toISOString().split('T')[0] + : "", + contractEndDate: data.node.contractEndDate + ? new Date(data.node.contractEndDate).toISOString().split('T')[0] + : "", }); const [commit] = useMutation(updatePeopleMutation); const [, loadQuery] = useQueryLoader(peopleViewQuery); const { toast } = useToast(); - const hasChanges = editedFields.size > 0; const handleSave = useCallback(() => { + const formattedData = { + ...formData, + contractStartDate: formData.contractStartDate + ? new Date(formData.contractStartDate).toISOString() + : null, + contractEndDate: formData.contractEndDate + ? new Date(formData.contractEndDate).toISOString() + : null, + }; + commit({ variables: { input: { id: data.node.id, - ...formData, + ...formattedData, }, }, onCompleted: () => { @@ -157,6 +176,12 @@ function PeopleViewContent({ primaryEmailAddress: data.node.primaryEmailAddress || "", additionalEmailAddresses: data.node.additionalEmailAddresses || [], kind: data.node.kind, + contractStartDate: data.node.contractStartDate + ? new Date(data.node.contractStartDate).toISOString().split('T')[0] + : "", + contractEndDate: data.node.contractEndDate + ? new Date(data.node.contractEndDate).toISOString().split('T')[0] + : "", }); setEditedFields(new Set()); }; @@ -256,6 +281,29 @@ function PeopleViewContent({ + + handleFieldChange( + "contractStartDate" as keyof typeof formData, + value, + ) + } + /> + + + handleFieldChange( + "contractEndDate" as keyof typeof formData, + value, + ) + } + /> diff --git a/apps/console/src/pages/organizations/people/__generated__/NewPeopleViewCreatePeopleMutation.graphql.ts b/apps/console/src/pages/organizations/people/__generated__/NewPeopleViewCreatePeopleMutation.graphql.ts index a03bfa508..2376d6db4 100644 --- a/apps/console/src/pages/organizations/people/__generated__/NewPeopleViewCreatePeopleMutation.graphql.ts +++ b/apps/console/src/pages/organizations/people/__generated__/NewPeopleViewCreatePeopleMutation.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<76fb19bfca9165a9c40d0b306e53c1de>> + * @generated SignedSource<> * @lightSyntaxTransform * @nogrep */ @@ -12,6 +12,8 @@ import { ConcreteRequest } from 'relay-runtime'; export type PeopleKind = "CONTRACTOR" | "EMPLOYEE" | "SERVICE_ACCOUNT"; export type CreatePeopleInput = { additionalEmailAddresses?: ReadonlyArray | null | undefined; + contractEndDate?: string | null | undefined; + contractStartDate?: string | null | undefined; fullName: string; kind: PeopleKind; organizationId: string; @@ -26,6 +28,8 @@ export type NewPeopleViewCreatePeopleMutation$data = { readonly peopleEdge: { readonly node: { readonly additionalEmailAddresses: ReadonlyArray; + readonly contractEndDate: string | null | undefined; + readonly contractStartDate: string | null | undefined; readonly fullName: string; readonly id: string; readonly kind: PeopleKind; @@ -107,6 +111,20 @@ v3 = { "kind": "ScalarField", "name": "kind", "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "contractStartDate", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "contractEndDate", + "storageKey": null } ], "storageKey": null @@ -180,16 +198,16 @@ return { ] }, "params": { - "cacheID": "d9cfab5066a89013eef581dc016daf57", + "cacheID": "85e329e6fd79fbc4094dd8bf03223456", "id": null, "metadata": {}, "name": "NewPeopleViewCreatePeopleMutation", "operationKind": "mutation", - "text": "mutation NewPeopleViewCreatePeopleMutation(\n $input: CreatePeopleInput!\n) {\n createPeople(input: $input) {\n peopleEdge {\n node {\n id\n fullName\n primaryEmailAddress\n additionalEmailAddresses\n kind\n }\n }\n }\n}\n" + "text": "mutation NewPeopleViewCreatePeopleMutation(\n $input: CreatePeopleInput!\n) {\n createPeople(input: $input) {\n peopleEdge {\n node {\n id\n fullName\n primaryEmailAddress\n additionalEmailAddresses\n kind\n contractStartDate\n contractEndDate\n }\n }\n }\n}\n" } }; })(); -(node as any).hash = "fd4b7a5907702712c654005de2a98996"; +(node as any).hash = "6afa87e237975e9574e42b46139bef29"; export default node; diff --git a/apps/console/src/pages/organizations/people/__generated__/PeopleViewQuery.graphql.ts b/apps/console/src/pages/organizations/people/__generated__/PeopleViewQuery.graphql.ts index cbc06a3de..c201c0b36 100644 --- a/apps/console/src/pages/organizations/people/__generated__/PeopleViewQuery.graphql.ts +++ b/apps/console/src/pages/organizations/people/__generated__/PeopleViewQuery.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<<891422de01f5f1b88dc80d294c116c24>> * @lightSyntaxTransform * @nogrep */ @@ -16,6 +16,8 @@ export type PeopleViewQuery$variables = { export type PeopleViewQuery$data = { readonly node: { readonly additionalEmailAddresses?: ReadonlyArray; + readonly contractEndDate?: string | null | undefined; + readonly contractStartDate?: string | null | undefined; readonly createdAt?: string; readonly fullName?: string; readonly id?: string; @@ -83,10 +85,24 @@ v7 = { "alias": null, "args": null, "kind": "ScalarField", - "name": "createdAt", + "name": "contractStartDate", "storageKey": null }, v8 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "contractEndDate", + "storageKey": null +}, +v9 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "createdAt", + "storageKey": null +}, +v10 = { "alias": null, "args": null, "kind": "ScalarField", @@ -117,7 +133,9 @@ return { (v5/*: any*/), (v6/*: any*/), (v7/*: any*/), - (v8/*: any*/) + (v8/*: any*/), + (v9/*: any*/), + (v10/*: any*/) ], "type": "People", "abstractKey": null @@ -159,7 +177,9 @@ return { (v5/*: any*/), (v6/*: any*/), (v7/*: any*/), - (v8/*: any*/) + (v8/*: any*/), + (v9/*: any*/), + (v10/*: any*/) ], "type": "People", "abstractKey": null @@ -170,16 +190,16 @@ return { ] }, "params": { - "cacheID": "fba00a5764659b366e4e11829d75854d", + "cacheID": "1a6ca0fa62d60fd18c26a5e3c868f41f", "id": null, "metadata": {}, "name": "PeopleViewQuery", "operationKind": "query", - "text": "query PeopleViewQuery(\n $peopleId: ID!\n) {\n node(id: $peopleId) {\n __typename\n ... on People {\n id\n fullName\n primaryEmailAddress\n additionalEmailAddresses\n kind\n createdAt\n updatedAt\n }\n id\n }\n}\n" + "text": "query PeopleViewQuery(\n $peopleId: ID!\n) {\n node(id: $peopleId) {\n __typename\n ... on People {\n id\n fullName\n primaryEmailAddress\n additionalEmailAddresses\n kind\n contractStartDate\n contractEndDate\n createdAt\n updatedAt\n }\n id\n }\n}\n" } }; })(); -(node as any).hash = "b7652de1ad8de6028f493255221f6ce5"; +(node as any).hash = "473792157216aa14cc6e4e3e0393090b"; export default node; diff --git a/apps/console/src/pages/organizations/people/__generated__/PeopleViewUpdatePeopleMutation.graphql.ts b/apps/console/src/pages/organizations/people/__generated__/PeopleViewUpdatePeopleMutation.graphql.ts index 74045d95e..d07cb02a2 100644 --- a/apps/console/src/pages/organizations/people/__generated__/PeopleViewUpdatePeopleMutation.graphql.ts +++ b/apps/console/src/pages/organizations/people/__generated__/PeopleViewUpdatePeopleMutation.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<552b78c5e34c5ce2065dd1190f47f632>> + * @generated SignedSource<<86a82de5c4344cc14a120155388e4a6f>> * @lightSyntaxTransform * @nogrep */ @@ -12,6 +12,8 @@ import { ConcreteRequest } from 'relay-runtime'; export type PeopleKind = "CONTRACTOR" | "EMPLOYEE" | "SERVICE_ACCOUNT"; export type UpdatePeopleInput = { additionalEmailAddresses?: ReadonlyArray | null | undefined; + contractEndDate?: string | null | undefined; + contractStartDate?: string | null | undefined; fullName?: string | null | undefined; id: string; kind?: PeopleKind | null | undefined; @@ -24,6 +26,8 @@ export type PeopleViewUpdatePeopleMutation$data = { readonly updatePeople: { readonly people: { readonly additionalEmailAddresses: ReadonlyArray; + readonly contractEndDate: string | null | undefined; + readonly contractStartDate: string | null | undefined; readonly fullName: string; readonly id: string; readonly kind: PeopleKind; @@ -103,6 +107,20 @@ v1 = [ "name": "kind", "storageKey": null }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "contractStartDate", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "contractEndDate", + "storageKey": null + }, { "alias": null, "args": null, @@ -135,16 +153,16 @@ return { "selections": (v1/*: any*/) }, "params": { - "cacheID": "d09fc02a745b951e278cd492343e49f1", + "cacheID": "398ebbc7659400cbc5d0a750ee7e66b5", "id": null, "metadata": {}, "name": "PeopleViewUpdatePeopleMutation", "operationKind": "mutation", - "text": "mutation PeopleViewUpdatePeopleMutation(\n $input: UpdatePeopleInput!\n) {\n updatePeople(input: $input) {\n people {\n id\n fullName\n primaryEmailAddress\n additionalEmailAddresses\n kind\n updatedAt\n }\n }\n}\n" + "text": "mutation PeopleViewUpdatePeopleMutation(\n $input: UpdatePeopleInput!\n) {\n updatePeople(input: $input) {\n people {\n id\n fullName\n primaryEmailAddress\n additionalEmailAddresses\n kind\n contractStartDate\n contractEndDate\n updatedAt\n }\n }\n}\n" } }; })(); -(node as any).hash = "15fece3e846bd713533b9e91a1ceffe2"; +(node as any).hash = "686c8546329ae29bd2880b0b1da9f20c"; export default node; diff --git a/pkg/coredata/migrations/20250525T153316Z.sql b/pkg/coredata/migrations/20250525T153316Z.sql new file mode 100644 index 000000000..b81c7287a --- /dev/null +++ b/pkg/coredata/migrations/20250525T153316Z.sql @@ -0,0 +1,3 @@ +ALTER TABLE peoples + ADD COLUMN contract_start_date DATE, + ADD COLUMN contract_end_date DATE; diff --git a/pkg/coredata/people.go b/pkg/coredata/people.go index 1962277b7..600505c81 100644 --- a/pkg/coredata/people.go +++ b/pkg/coredata/people.go @@ -36,6 +36,8 @@ type ( FullName string `db:"full_name"` PrimaryEmailAddress string `db:"primary_email_address"` AdditionalEmailAddresses []string `db:"additional_email_addresses"` + ContractStartDate *time.Time `db:"contract_start_date"` + ContractEndDate *time.Time `db:"contract_end_date"` CreatedAt time.Time `db:"created_at"` UpdatedAt time.Time `db:"updated_at"` } @@ -77,6 +79,8 @@ SELECT full_name, primary_email_address, additional_email_addresses, + contract_start_date, + contract_end_date, created_at, updated_at FROM @@ -122,6 +126,8 @@ func (p *People) LoadByEmail( full_name, primary_email_address, additional_email_addresses, + contract_start_date, + contract_end_date, created_at, updated_at FROM @@ -171,6 +177,8 @@ SELECT full_name, primary_email_address, additional_email_addresses, + contract_start_date, + contract_end_date, created_at, updated_at FROM @@ -221,6 +229,8 @@ INSERT INTO full_name, primary_email_address, additional_email_addresses, + contract_start_date, + contract_end_date, created_at, updated_at ) @@ -233,6 +243,8 @@ VALUES ( @full_name, @primary_email_address, @additional_email_addresses, + @contract_start_date, + @contract_end_date, @created_at, @updated_at ) @@ -247,6 +259,8 @@ VALUES ( "full_name": p.FullName, "primary_email_address": p.PrimaryEmailAddress, "additional_email_addresses": p.AdditionalEmailAddresses, + "contract_start_date": p.ContractStartDate, + "contract_end_date": p.ContractEndDate, "created_at": p.CreatedAt, "updated_at": p.UpdatedAt, } @@ -288,6 +302,8 @@ SELECT full_name, primary_email_address, additional_email_addresses, + contract_start_date, + contract_end_date, created_at, updated_at FROM @@ -331,6 +347,8 @@ UPDATE peoples SET primary_email_address = @primary_email_address, additional_email_addresses = @additional_email_addresses, kind = @kind, + contract_start_date = @contract_start_date, + contract_end_date = @contract_end_date, updated_at = @updated_at WHERE %s AND id = @people_id @@ -344,6 +362,8 @@ WHERE %s "primary_email_address": p.PrimaryEmailAddress, "additional_email_addresses": p.AdditionalEmailAddresses, "kind": p.Kind, + "contract_start_date": p.ContractStartDate, + "contract_end_date": p.ContractEndDate, "updated_at": p.UpdatedAt, } maps.Copy(args, scope.SQLArguments()) @@ -381,6 +401,8 @@ SELECT full_name, primary_email_address, additional_email_addresses, + contract_start_date, + contract_end_date, created_at, updated_at FROM diff --git a/pkg/probo/people_service.go b/pkg/probo/people_service.go index 3abb06946..1dc1a4b3a 100644 --- a/pkg/probo/people_service.go +++ b/pkg/probo/people_service.go @@ -37,6 +37,8 @@ type ( FullName *string PrimaryEmailAddress *string AdditionalEmailAddresses *[]string + ContractStartDate **time.Time + ContractEndDate **time.Time } CreatePeopleRequest struct { @@ -46,6 +48,8 @@ type ( PrimaryEmailAddress string AdditionalEmailAddresses []string Kind coredata.PeopleKind + ContractStartDate *time.Time + ContractEndDate *time.Time } ) @@ -149,6 +153,14 @@ func (s PeopleService) Update( people.AdditionalEmailAddresses = *req.AdditionalEmailAddresses } + if req.ContractStartDate != nil { + people.ContractStartDate = *req.ContractStartDate + } + + if req.ContractEndDate != nil { + people.ContractEndDate = *req.ContractEndDate + } + people.UpdatedAt = time.Now() return people.Update(ctx, conn, s.svc.scope) @@ -176,6 +188,8 @@ func (s PeopleService) Create( PrimaryEmailAddress: req.PrimaryEmailAddress, AdditionalEmailAddresses: req.AdditionalEmailAddresses, UserID: req.UserID, + ContractStartDate: req.ContractStartDate, + ContractEndDate: req.ContractEndDate, CreatedAt: now, UpdatedAt: now, } diff --git a/pkg/server/api/console/v1/schema.graphql b/pkg/server/api/console/v1/schema.graphql index 855b33129..859420407 100644 --- a/pkg/server/api/console/v1/schema.graphql +++ b/pkg/server/api/console/v1/schema.graphql @@ -529,6 +529,8 @@ type People implements Node { primaryEmailAddress: String! additionalEmailAddresses: [String!]! kind: PeopleKind! + contractStartDate: Datetime + contractEndDate: Datetime createdAt: Datetime! updatedAt: Datetime! } @@ -1152,6 +1154,8 @@ input CreatePeopleInput { primaryEmailAddress: String! additionalEmailAddresses: [String!] kind: PeopleKind! + contractStartDate: Datetime + contractEndDate: Datetime } input UpdatePeopleInput { @@ -1160,6 +1164,8 @@ input UpdatePeopleInput { primaryEmailAddress: String additionalEmailAddresses: [String!] kind: PeopleKind + contractStartDate: Datetime + contractEndDate: Datetime } input DeletePeopleInput { diff --git a/pkg/server/api/console/v1/schema/schema.go b/pkg/server/api/console/v1/schema/schema.go index 0f699c75a..1b686b259 100644 --- a/pkg/server/api/console/v1/schema/schema.go +++ b/pkg/server/api/console/v1/schema/schema.go @@ -419,6 +419,8 @@ type ComplexityRoot struct { People struct { AdditionalEmailAddresses func(childComplexity int) int + ContractEndDate func(childComplexity int) int + ContractStartDate func(childComplexity int) int CreatedAt func(childComplexity int) int FullName func(childComplexity int) int ID func(childComplexity int) int @@ -2551,6 +2553,20 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin return e.complexity.People.AdditionalEmailAddresses(childComplexity), true + case "People.contractEndDate": + if e.complexity.People.ContractEndDate == nil { + break + } + + return e.complexity.People.ContractEndDate(childComplexity), true + + case "People.contractStartDate": + if e.complexity.People.ContractStartDate == nil { + break + } + + return e.complexity.People.ContractStartDate(childComplexity), true + case "People.createdAt": if e.complexity.People.CreatedAt == nil { break @@ -4564,6 +4580,8 @@ type People implements Node { primaryEmailAddress: String! additionalEmailAddresses: [String!]! kind: PeopleKind! + contractStartDate: Datetime + contractEndDate: Datetime createdAt: Datetime! updatedAt: Datetime! } @@ -5187,6 +5205,8 @@ input CreatePeopleInput { primaryEmailAddress: String! additionalEmailAddresses: [String!] kind: PeopleKind! + contractStartDate: Datetime + contractEndDate: Datetime } input UpdatePeopleInput { @@ -5195,6 +5215,8 @@ input UpdatePeopleInput { primaryEmailAddress: String additionalEmailAddresses: [String!] kind: PeopleKind + contractStartDate: Datetime + contractEndDate: Datetime } input DeletePeopleInput { @@ -19518,6 +19540,88 @@ func (ec *executionContext) fieldContext_People_kind(_ context.Context, field gr return fc, nil } +func (ec *executionContext) _People_contractStartDate(ctx context.Context, field graphql.CollectedField, obj *types.People) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_People_contractStartDate(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return obj.ContractStartDate, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*time.Time) + fc.Result = res + return ec.marshalODatetime2ᚖtimeᚐTime(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_People_contractStartDate(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "People", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Datetime does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _People_contractEndDate(ctx context.Context, field graphql.CollectedField, obj *types.People) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_People_contractEndDate(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return obj.ContractEndDate, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*time.Time) + fc.Result = res + return ec.marshalODatetime2ᚖtimeᚐTime(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_People_contractEndDate(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "People", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Datetime does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _People_createdAt(ctx context.Context, field graphql.CollectedField, obj *types.People) (ret graphql.Marshaler) { fc, err := ec.fieldContext_People_createdAt(ctx, field) if err != nil { @@ -19803,6 +19907,10 @@ func (ec *executionContext) fieldContext_PeopleEdge_node(_ context.Context, fiel return ec.fieldContext_People_additionalEmailAddresses(ctx, field) case "kind": return ec.fieldContext_People_kind(ctx, field) + case "contractStartDate": + return ec.fieldContext_People_contractStartDate(ctx, field) + case "contractEndDate": + return ec.fieldContext_People_contractEndDate(ctx, field) case "createdAt": return ec.fieldContext_People_createdAt(ctx, field) case "updatedAt": @@ -20036,6 +20144,10 @@ func (ec *executionContext) fieldContext_Policy_owner(_ context.Context, field g return ec.fieldContext_People_additionalEmailAddresses(ctx, field) case "kind": return ec.fieldContext_People_kind(ctx, field) + case "contractStartDate": + return ec.fieldContext_People_contractStartDate(ctx, field) + case "contractEndDate": + return ec.fieldContext_People_contractEndDate(ctx, field) case "createdAt": return ec.fieldContext_People_createdAt(ctx, field) case "updatedAt": @@ -20938,6 +21050,10 @@ func (ec *executionContext) fieldContext_PolicyVersion_publishedBy(_ context.Con return ec.fieldContext_People_additionalEmailAddresses(ctx, field) case "kind": return ec.fieldContext_People_kind(ctx, field) + case "contractStartDate": + return ec.fieldContext_People_contractStartDate(ctx, field) + case "contractEndDate": + return ec.fieldContext_People_contractEndDate(ctx, field) case "createdAt": return ec.fieldContext_People_createdAt(ctx, field) case "updatedAt": @@ -21499,6 +21615,10 @@ func (ec *executionContext) fieldContext_PolicyVersionSignature_signedBy(_ conte return ec.fieldContext_People_additionalEmailAddresses(ctx, field) case "kind": return ec.fieldContext_People_kind(ctx, field) + case "contractStartDate": + return ec.fieldContext_People_contractStartDate(ctx, field) + case "contractEndDate": + return ec.fieldContext_People_contractEndDate(ctx, field) case "createdAt": return ec.fieldContext_People_createdAt(ctx, field) case "updatedAt": @@ -21644,6 +21764,10 @@ func (ec *executionContext) fieldContext_PolicyVersionSignature_requestedBy(_ co return ec.fieldContext_People_additionalEmailAddresses(ctx, field) case "kind": return ec.fieldContext_People_kind(ctx, field) + case "contractStartDate": + return ec.fieldContext_People_contractStartDate(ctx, field) + case "contractEndDate": + return ec.fieldContext_People_contractEndDate(ctx, field) case "createdAt": return ec.fieldContext_People_createdAt(ctx, field) case "updatedAt": @@ -23045,6 +23169,10 @@ func (ec *executionContext) fieldContext_Risk_owner(_ context.Context, field gra return ec.fieldContext_People_additionalEmailAddresses(ctx, field) case "kind": return ec.fieldContext_People_kind(ctx, field) + case "contractStartDate": + return ec.fieldContext_People_contractStartDate(ctx, field) + case "contractEndDate": + return ec.fieldContext_People_contractEndDate(ctx, field) case "createdAt": return ec.fieldContext_People_createdAt(ctx, field) case "updatedAt": @@ -24028,6 +24156,10 @@ func (ec *executionContext) fieldContext_Task_assignedTo(_ context.Context, fiel return ec.fieldContext_People_additionalEmailAddresses(ctx, field) case "kind": return ec.fieldContext_People_kind(ctx, field) + case "contractStartDate": + return ec.fieldContext_People_contractStartDate(ctx, field) + case "contractEndDate": + return ec.fieldContext_People_contractEndDate(ctx, field) case "createdAt": return ec.fieldContext_People_createdAt(ctx, field) case "updatedAt": @@ -24862,6 +24994,10 @@ func (ec *executionContext) fieldContext_UpdatePeoplePayload_people(_ context.Co return ec.fieldContext_People_additionalEmailAddresses(ctx, field) case "kind": return ec.fieldContext_People_kind(ctx, field) + case "contractStartDate": + return ec.fieldContext_People_contractStartDate(ctx, field) + case "contractEndDate": + return ec.fieldContext_People_contractEndDate(ctx, field) case "createdAt": return ec.fieldContext_People_createdAt(ctx, field) case "updatedAt": @@ -25663,6 +25799,10 @@ func (ec *executionContext) fieldContext_User_people(ctx context.Context, field return ec.fieldContext_People_additionalEmailAddresses(ctx, field) case "kind": return ec.fieldContext_People_kind(ctx, field) + case "contractStartDate": + return ec.fieldContext_People_contractStartDate(ctx, field) + case "contractEndDate": + return ec.fieldContext_People_contractEndDate(ctx, field) case "createdAt": return ec.fieldContext_People_createdAt(ctx, field) case "updatedAt": @@ -26262,6 +26402,10 @@ func (ec *executionContext) fieldContext_Vendor_businessOwner(_ context.Context, return ec.fieldContext_People_additionalEmailAddresses(ctx, field) case "kind": return ec.fieldContext_People_kind(ctx, field) + case "contractStartDate": + return ec.fieldContext_People_contractStartDate(ctx, field) + case "contractEndDate": + return ec.fieldContext_People_contractEndDate(ctx, field) case "createdAt": return ec.fieldContext_People_createdAt(ctx, field) case "updatedAt": @@ -26319,6 +26463,10 @@ func (ec *executionContext) fieldContext_Vendor_securityOwner(_ context.Context, return ec.fieldContext_People_additionalEmailAddresses(ctx, field) case "kind": return ec.fieldContext_People_kind(ctx, field) + case "contractStartDate": + return ec.fieldContext_People_contractStartDate(ctx, field) + case "contractEndDate": + return ec.fieldContext_People_contractEndDate(ctx, field) case "createdAt": return ec.fieldContext_People_createdAt(ctx, field) case "updatedAt": @@ -27982,6 +28130,10 @@ func (ec *executionContext) fieldContext_VendorRiskAssessment_assessedBy(_ conte return ec.fieldContext_People_additionalEmailAddresses(ctx, field) case "kind": return ec.fieldContext_People_kind(ctx, field) + case "contractStartDate": + return ec.fieldContext_People_contractStartDate(ctx, field) + case "contractEndDate": + return ec.fieldContext_People_contractEndDate(ctx, field) case "createdAt": return ec.fieldContext_People_createdAt(ctx, field) case "updatedAt": @@ -30991,7 +31143,7 @@ func (ec *executionContext) unmarshalInputCreatePeopleInput(ctx context.Context, asMap[k] = v } - fieldsInOrder := [...]string{"organizationId", "fullName", "primaryEmailAddress", "additionalEmailAddresses", "kind"} + fieldsInOrder := [...]string{"organizationId", "fullName", "primaryEmailAddress", "additionalEmailAddresses", "kind", "contractStartDate", "contractEndDate"} for _, k := range fieldsInOrder { v, ok := asMap[k] if !ok { @@ -31033,6 +31185,20 @@ func (ec *executionContext) unmarshalInputCreatePeopleInput(ctx context.Context, return it, err } it.Kind = data + case "contractStartDate": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("contractStartDate")) + data, err := ec.unmarshalODatetime2ᚖtimeᚐTime(ctx, v) + if err != nil { + return it, err + } + it.ContractStartDate = data + case "contractEndDate": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("contractEndDate")) + data, err := ec.unmarshalODatetime2ᚖtimeᚐTime(ctx, v) + if err != nil { + return it, err + } + it.ContractEndDate = data } } @@ -32813,7 +32979,7 @@ func (ec *executionContext) unmarshalInputUpdatePeopleInput(ctx context.Context, asMap[k] = v } - fieldsInOrder := [...]string{"id", "fullName", "primaryEmailAddress", "additionalEmailAddresses", "kind"} + fieldsInOrder := [...]string{"id", "fullName", "primaryEmailAddress", "additionalEmailAddresses", "kind", "contractStartDate", "contractEndDate"} for _, k := range fieldsInOrder { v, ok := asMap[k] if !ok { @@ -32855,6 +33021,20 @@ func (ec *executionContext) unmarshalInputUpdatePeopleInput(ctx context.Context, return it, err } it.Kind = data + case "contractStartDate": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("contractStartDate")) + data, err := ec.unmarshalODatetime2ᚖtimeᚐTime(ctx, v) + if err != nil { + return it, err + } + it.ContractStartDate = data + case "contractEndDate": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("contractEndDate")) + data, err := ec.unmarshalODatetime2ᚖtimeᚐTime(ctx, v) + if err != nil { + return it, err + } + it.ContractEndDate = data } } @@ -37265,6 +37445,10 @@ func (ec *executionContext) _People(ctx context.Context, sel ast.SelectionSet, o if out.Values[i] == graphql.Null { out.Invalids++ } + case "contractStartDate": + out.Values[i] = ec._People_contractStartDate(ctx, field, obj) + case "contractEndDate": + out.Values[i] = ec._People_contractEndDate(ctx, field, obj) case "createdAt": out.Values[i] = ec._People_createdAt(ctx, field, obj) if out.Values[i] == graphql.Null { diff --git a/pkg/server/api/console/v1/types/people.go b/pkg/server/api/console/v1/types/people.go index c6afb07e9..b598663e2 100644 --- a/pkg/server/api/console/v1/types/people.go +++ b/pkg/server/api/console/v1/types/people.go @@ -50,6 +50,8 @@ func NewPeople(p *coredata.People) *People { PrimaryEmailAddress: p.PrimaryEmailAddress, AdditionalEmailAddresses: p.AdditionalEmailAddresses, Kind: p.Kind, + ContractStartDate: p.ContractStartDate, + ContractEndDate: p.ContractEndDate, CreatedAt: p.CreatedAt, UpdatedAt: p.UpdatedAt, } diff --git a/pkg/server/api/console/v1/types/types.go b/pkg/server/api/console/v1/types/types.go index f69ec61ac..8c9e7a77a 100644 --- a/pkg/server/api/console/v1/types/types.go +++ b/pkg/server/api/console/v1/types/types.go @@ -164,6 +164,8 @@ type CreatePeopleInput struct { PrimaryEmailAddress string `json:"primaryEmailAddress"` AdditionalEmailAddresses []string `json:"additionalEmailAddresses,omitempty"` Kind coredata.PeopleKind `json:"kind"` + ContractStartDate *time.Time `json:"contractStartDate,omitempty"` + ContractEndDate *time.Time `json:"contractEndDate,omitempty"` } type CreatePeoplePayload struct { @@ -567,6 +569,8 @@ type People struct { PrimaryEmailAddress string `json:"primaryEmailAddress"` AdditionalEmailAddresses []string `json:"additionalEmailAddresses"` Kind coredata.PeopleKind `json:"kind"` + ContractStartDate *time.Time `json:"contractStartDate,omitempty"` + ContractEndDate *time.Time `json:"contractEndDate,omitempty"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } @@ -833,6 +837,8 @@ type UpdatePeopleInput struct { PrimaryEmailAddress *string `json:"primaryEmailAddress,omitempty"` AdditionalEmailAddresses []string `json:"additionalEmailAddresses,omitempty"` Kind *coredata.PeopleKind `json:"kind,omitempty"` + ContractStartDate *time.Time `json:"contractStartDate,omitempty"` + ContractEndDate *time.Time `json:"contractEndDate,omitempty"` } type UpdatePeoplePayload struct { diff --git a/pkg/server/api/console/v1/v1_resolver.go b/pkg/server/api/console/v1/v1_resolver.go index 96555d6f3..89ab21610 100644 --- a/pkg/server/api/console/v1/v1_resolver.go +++ b/pkg/server/api/console/v1/v1_resolver.go @@ -424,6 +424,8 @@ func (r *mutationResolver) CreatePeople(ctx context.Context, input types.CreateP PrimaryEmailAddress: input.PrimaryEmailAddress, AdditionalEmailAddresses: []string{}, Kind: input.Kind, + ContractStartDate: input.ContractStartDate, + ContractEndDate: input.ContractEndDate, }) if err != nil { @@ -445,6 +447,8 @@ func (r *mutationResolver) UpdatePeople(ctx context.Context, input types.UpdateP PrimaryEmailAddress: input.PrimaryEmailAddress, AdditionalEmailAddresses: &input.AdditionalEmailAddresses, Kind: input.Kind, + ContractStartDate: &input.ContractStartDate, + ContractEndDate: &input.ContractEndDate, }) if err != nil { return nil, fmt.Errorf("cannot update people: %w", err)