Add contract dates to people

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
Sacha Al Himdani
2025-05-25 09:56:27 -07:00
parent 608768e668
commit cc89e76cf8
13 changed files with 384 additions and 19 deletions

View File

@@ -25,6 +25,8 @@ const createPeopleMutation = graphql`
primaryEmailAddress primaryEmailAddress
additionalEmailAddresses additionalEmailAddresses
kind kind
contractStartDate
contractEndDate
} }
} }
} }
@@ -77,6 +79,8 @@ function NewPeopleViewContent() {
primaryEmailAddress: "", primaryEmailAddress: "",
additionalEmailAddresses: [] as string[], additionalEmailAddresses: [] as string[],
kind: "EMPLOYEE" as "EMPLOYEE" | "CONTRACTOR" | "SERVICE_ACCOUNT", kind: "EMPLOYEE" as "EMPLOYEE" | "CONTRACTOR" | "SERVICE_ACCOUNT",
contractStartDate: "",
contractEndDate: "",
}); });
const handleFieldChange = (field: keyof typeof formData, value: unknown) => { const handleFieldChange = (field: keyof typeof formData, value: unknown) => {
@@ -129,6 +133,8 @@ function NewPeopleViewContent() {
primaryEmailAddress: formData.primaryEmailAddress, primaryEmailAddress: formData.primaryEmailAddress,
additionalEmailAddresses: formData.additionalEmailAddresses, additionalEmailAddresses: formData.additionalEmailAddresses,
kind: formData.kind, kind: formData.kind,
contractStartDate: formData.contractStartDate ? new Date(formData.contractStartDate).toISOString() : null,
contractEndDate: formData.contractEndDate ? new Date(formData.contractEndDate).toISOString() : null,
}, },
}, },
onCompleted: () => { onCompleted: () => {
@@ -276,6 +282,20 @@ function NewPeopleViewContent() {
</button> </button>
</div> </div>
</div> </div>
<EditableField
label="Contract Start Date"
value={formData.contractStartDate}
type="date"
onChange={(value) => handleFieldChange("contractStartDate", value)}
/>
<EditableField
label="Contract End Date"
value={formData.contractEndDate}
type="date"
onChange={(value) => handleFieldChange("contractEndDate", value)}
/>
</div> </div>
</div> </div>
</Card> </Card>

View File

@@ -35,6 +35,8 @@ const peopleViewQuery = graphql`
primaryEmailAddress primaryEmailAddress
additionalEmailAddresses additionalEmailAddresses
kind kind
contractStartDate
contractEndDate
createdAt createdAt
updatedAt updatedAt
} }
@@ -51,6 +53,8 @@ const updatePeopleMutation = graphql`
primaryEmailAddress primaryEmailAddress
additionalEmailAddresses additionalEmailAddresses
kind kind
contractStartDate
contractEndDate
updatedAt updatedAt
} }
} }
@@ -100,19 +104,34 @@ function PeopleViewContent({
primaryEmailAddress: data.node.primaryEmailAddress || "", primaryEmailAddress: data.node.primaryEmailAddress || "",
additionalEmailAddresses: data.node.additionalEmailAddresses || [], additionalEmailAddresses: data.node.additionalEmailAddresses || [],
kind: data.node.kind, 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 [commit] = useMutation(updatePeopleMutation);
const [, loadQuery] = useQueryLoader<PeopleViewQueryType>(peopleViewQuery); const [, loadQuery] = useQueryLoader<PeopleViewQueryType>(peopleViewQuery);
const { toast } = useToast(); const { toast } = useToast();
const hasChanges = editedFields.size > 0; const hasChanges = editedFields.size > 0;
const handleSave = useCallback(() => { 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({ commit({
variables: { variables: {
input: { input: {
id: data.node.id, id: data.node.id,
...formData, ...formattedData,
}, },
}, },
onCompleted: () => { onCompleted: () => {
@@ -157,6 +176,12 @@ function PeopleViewContent({
primaryEmailAddress: data.node.primaryEmailAddress || "", primaryEmailAddress: data.node.primaryEmailAddress || "",
additionalEmailAddresses: data.node.additionalEmailAddresses || [], additionalEmailAddresses: data.node.additionalEmailAddresses || [],
kind: data.node.kind, 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()); setEditedFields(new Set());
}; };
@@ -256,6 +281,29 @@ function PeopleViewContent({
</SelectContent> </SelectContent>
</Select> </Select>
</div> </div>
<EditableField
label="Contract Start Date"
value={formData.contractStartDate || ""}
type="date"
onChange={(value) =>
handleFieldChange(
"contractStartDate" as keyof typeof formData,
value,
)
}
/>
<EditableField
label="Contract End Date"
value={formData.contractEndDate || ""}
type="date"
onChange={(value) =>
handleFieldChange(
"contractEndDate" as keyof typeof formData,
value,
)
}
/>
</div> </div>
</div> </div>
</Card> </Card>

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<76fb19bfca9165a9c40d0b306e53c1de>> * @generated SignedSource<<ca6b9dbed6835dd4a9705fe3a90c4b19>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -12,6 +12,8 @@ import { ConcreteRequest } from 'relay-runtime';
export type PeopleKind = "CONTRACTOR" | "EMPLOYEE" | "SERVICE_ACCOUNT"; export type PeopleKind = "CONTRACTOR" | "EMPLOYEE" | "SERVICE_ACCOUNT";
export type CreatePeopleInput = { export type CreatePeopleInput = {
additionalEmailAddresses?: ReadonlyArray<string> | null | undefined; additionalEmailAddresses?: ReadonlyArray<string> | null | undefined;
contractEndDate?: string | null | undefined;
contractStartDate?: string | null | undefined;
fullName: string; fullName: string;
kind: PeopleKind; kind: PeopleKind;
organizationId: string; organizationId: string;
@@ -26,6 +28,8 @@ export type NewPeopleViewCreatePeopleMutation$data = {
readonly peopleEdge: { readonly peopleEdge: {
readonly node: { readonly node: {
readonly additionalEmailAddresses: ReadonlyArray<string>; readonly additionalEmailAddresses: ReadonlyArray<string>;
readonly contractEndDate: string | null | undefined;
readonly contractStartDate: string | null | undefined;
readonly fullName: string; readonly fullName: string;
readonly id: string; readonly id: string;
readonly kind: PeopleKind; readonly kind: PeopleKind;
@@ -107,6 +111,20 @@ v3 = {
"kind": "ScalarField", "kind": "ScalarField",
"name": "kind", "name": "kind",
"storageKey": null "storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "contractStartDate",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "contractEndDate",
"storageKey": null
} }
], ],
"storageKey": null "storageKey": null
@@ -180,16 +198,16 @@ return {
] ]
}, },
"params": { "params": {
"cacheID": "d9cfab5066a89013eef581dc016daf57", "cacheID": "85e329e6fd79fbc4094dd8bf03223456",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "NewPeopleViewCreatePeopleMutation", "name": "NewPeopleViewCreatePeopleMutation",
"operationKind": "mutation", "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; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<e7d3adf5f8472b181a64cfa98964984c>> * @generated SignedSource<<891422de01f5f1b88dc80d294c116c24>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -16,6 +16,8 @@ export type PeopleViewQuery$variables = {
export type PeopleViewQuery$data = { export type PeopleViewQuery$data = {
readonly node: { readonly node: {
readonly additionalEmailAddresses?: ReadonlyArray<string>; readonly additionalEmailAddresses?: ReadonlyArray<string>;
readonly contractEndDate?: string | null | undefined;
readonly contractStartDate?: string | null | undefined;
readonly createdAt?: string; readonly createdAt?: string;
readonly fullName?: string; readonly fullName?: string;
readonly id?: string; readonly id?: string;
@@ -83,10 +85,24 @@ v7 = {
"alias": null, "alias": null,
"args": null, "args": null,
"kind": "ScalarField", "kind": "ScalarField",
"name": "createdAt", "name": "contractStartDate",
"storageKey": null "storageKey": null
}, },
v8 = { 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, "alias": null,
"args": null, "args": null,
"kind": "ScalarField", "kind": "ScalarField",
@@ -117,7 +133,9 @@ return {
(v5/*: any*/), (v5/*: any*/),
(v6/*: any*/), (v6/*: any*/),
(v7/*: any*/), (v7/*: any*/),
(v8/*: any*/) (v8/*: any*/),
(v9/*: any*/),
(v10/*: any*/)
], ],
"type": "People", "type": "People",
"abstractKey": null "abstractKey": null
@@ -159,7 +177,9 @@ return {
(v5/*: any*/), (v5/*: any*/),
(v6/*: any*/), (v6/*: any*/),
(v7/*: any*/), (v7/*: any*/),
(v8/*: any*/) (v8/*: any*/),
(v9/*: any*/),
(v10/*: any*/)
], ],
"type": "People", "type": "People",
"abstractKey": null "abstractKey": null
@@ -170,16 +190,16 @@ return {
] ]
}, },
"params": { "params": {
"cacheID": "fba00a5764659b366e4e11829d75854d", "cacheID": "1a6ca0fa62d60fd18c26a5e3c868f41f",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "PeopleViewQuery", "name": "PeopleViewQuery",
"operationKind": "query", "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; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<552b78c5e34c5ce2065dd1190f47f632>> * @generated SignedSource<<86a82de5c4344cc14a120155388e4a6f>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -12,6 +12,8 @@ import { ConcreteRequest } from 'relay-runtime';
export type PeopleKind = "CONTRACTOR" | "EMPLOYEE" | "SERVICE_ACCOUNT"; export type PeopleKind = "CONTRACTOR" | "EMPLOYEE" | "SERVICE_ACCOUNT";
export type UpdatePeopleInput = { export type UpdatePeopleInput = {
additionalEmailAddresses?: ReadonlyArray<string> | null | undefined; additionalEmailAddresses?: ReadonlyArray<string> | null | undefined;
contractEndDate?: string | null | undefined;
contractStartDate?: string | null | undefined;
fullName?: string | null | undefined; fullName?: string | null | undefined;
id: string; id: string;
kind?: PeopleKind | null | undefined; kind?: PeopleKind | null | undefined;
@@ -24,6 +26,8 @@ export type PeopleViewUpdatePeopleMutation$data = {
readonly updatePeople: { readonly updatePeople: {
readonly people: { readonly people: {
readonly additionalEmailAddresses: ReadonlyArray<string>; readonly additionalEmailAddresses: ReadonlyArray<string>;
readonly contractEndDate: string | null | undefined;
readonly contractStartDate: string | null | undefined;
readonly fullName: string; readonly fullName: string;
readonly id: string; readonly id: string;
readonly kind: PeopleKind; readonly kind: PeopleKind;
@@ -103,6 +107,20 @@ v1 = [
"name": "kind", "name": "kind",
"storageKey": null "storageKey": null
}, },
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "contractStartDate",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "contractEndDate",
"storageKey": null
},
{ {
"alias": null, "alias": null,
"args": null, "args": null,
@@ -135,16 +153,16 @@ return {
"selections": (v1/*: any*/) "selections": (v1/*: any*/)
}, },
"params": { "params": {
"cacheID": "d09fc02a745b951e278cd492343e49f1", "cacheID": "398ebbc7659400cbc5d0a750ee7e66b5",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "PeopleViewUpdatePeopleMutation", "name": "PeopleViewUpdatePeopleMutation",
"operationKind": "mutation", "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; export default node;

View File

@@ -0,0 +1,3 @@
ALTER TABLE peoples
ADD COLUMN contract_start_date DATE,
ADD COLUMN contract_end_date DATE;

View File

@@ -36,6 +36,8 @@ type (
FullName string `db:"full_name"` FullName string `db:"full_name"`
PrimaryEmailAddress string `db:"primary_email_address"` PrimaryEmailAddress string `db:"primary_email_address"`
AdditionalEmailAddresses []string `db:"additional_email_addresses"` 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"` CreatedAt time.Time `db:"created_at"`
UpdatedAt time.Time `db:"updated_at"` UpdatedAt time.Time `db:"updated_at"`
} }
@@ -77,6 +79,8 @@ SELECT
full_name, full_name,
primary_email_address, primary_email_address,
additional_email_addresses, additional_email_addresses,
contract_start_date,
contract_end_date,
created_at, created_at,
updated_at updated_at
FROM FROM
@@ -122,6 +126,8 @@ func (p *People) LoadByEmail(
full_name, full_name,
primary_email_address, primary_email_address,
additional_email_addresses, additional_email_addresses,
contract_start_date,
contract_end_date,
created_at, created_at,
updated_at updated_at
FROM FROM
@@ -171,6 +177,8 @@ SELECT
full_name, full_name,
primary_email_address, primary_email_address,
additional_email_addresses, additional_email_addresses,
contract_start_date,
contract_end_date,
created_at, created_at,
updated_at updated_at
FROM FROM
@@ -221,6 +229,8 @@ INSERT INTO
full_name, full_name,
primary_email_address, primary_email_address,
additional_email_addresses, additional_email_addresses,
contract_start_date,
contract_end_date,
created_at, created_at,
updated_at updated_at
) )
@@ -233,6 +243,8 @@ VALUES (
@full_name, @full_name,
@primary_email_address, @primary_email_address,
@additional_email_addresses, @additional_email_addresses,
@contract_start_date,
@contract_end_date,
@created_at, @created_at,
@updated_at @updated_at
) )
@@ -247,6 +259,8 @@ VALUES (
"full_name": p.FullName, "full_name": p.FullName,
"primary_email_address": p.PrimaryEmailAddress, "primary_email_address": p.PrimaryEmailAddress,
"additional_email_addresses": p.AdditionalEmailAddresses, "additional_email_addresses": p.AdditionalEmailAddresses,
"contract_start_date": p.ContractStartDate,
"contract_end_date": p.ContractEndDate,
"created_at": p.CreatedAt, "created_at": p.CreatedAt,
"updated_at": p.UpdatedAt, "updated_at": p.UpdatedAt,
} }
@@ -288,6 +302,8 @@ SELECT
full_name, full_name,
primary_email_address, primary_email_address,
additional_email_addresses, additional_email_addresses,
contract_start_date,
contract_end_date,
created_at, created_at,
updated_at updated_at
FROM FROM
@@ -331,6 +347,8 @@ UPDATE peoples SET
primary_email_address = @primary_email_address, primary_email_address = @primary_email_address,
additional_email_addresses = @additional_email_addresses, additional_email_addresses = @additional_email_addresses,
kind = @kind, kind = @kind,
contract_start_date = @contract_start_date,
contract_end_date = @contract_end_date,
updated_at = @updated_at updated_at = @updated_at
WHERE %s WHERE %s
AND id = @people_id AND id = @people_id
@@ -344,6 +362,8 @@ WHERE %s
"primary_email_address": p.PrimaryEmailAddress, "primary_email_address": p.PrimaryEmailAddress,
"additional_email_addresses": p.AdditionalEmailAddresses, "additional_email_addresses": p.AdditionalEmailAddresses,
"kind": p.Kind, "kind": p.Kind,
"contract_start_date": p.ContractStartDate,
"contract_end_date": p.ContractEndDate,
"updated_at": p.UpdatedAt, "updated_at": p.UpdatedAt,
} }
maps.Copy(args, scope.SQLArguments()) maps.Copy(args, scope.SQLArguments())
@@ -381,6 +401,8 @@ SELECT
full_name, full_name,
primary_email_address, primary_email_address,
additional_email_addresses, additional_email_addresses,
contract_start_date,
contract_end_date,
created_at, created_at,
updated_at updated_at
FROM FROM

View File

@@ -37,6 +37,8 @@ type (
FullName *string FullName *string
PrimaryEmailAddress *string PrimaryEmailAddress *string
AdditionalEmailAddresses *[]string AdditionalEmailAddresses *[]string
ContractStartDate **time.Time
ContractEndDate **time.Time
} }
CreatePeopleRequest struct { CreatePeopleRequest struct {
@@ -46,6 +48,8 @@ type (
PrimaryEmailAddress string PrimaryEmailAddress string
AdditionalEmailAddresses []string AdditionalEmailAddresses []string
Kind coredata.PeopleKind Kind coredata.PeopleKind
ContractStartDate *time.Time
ContractEndDate *time.Time
} }
) )
@@ -149,6 +153,14 @@ func (s PeopleService) Update(
people.AdditionalEmailAddresses = *req.AdditionalEmailAddresses people.AdditionalEmailAddresses = *req.AdditionalEmailAddresses
} }
if req.ContractStartDate != nil {
people.ContractStartDate = *req.ContractStartDate
}
if req.ContractEndDate != nil {
people.ContractEndDate = *req.ContractEndDate
}
people.UpdatedAt = time.Now() people.UpdatedAt = time.Now()
return people.Update(ctx, conn, s.svc.scope) return people.Update(ctx, conn, s.svc.scope)
@@ -176,6 +188,8 @@ func (s PeopleService) Create(
PrimaryEmailAddress: req.PrimaryEmailAddress, PrimaryEmailAddress: req.PrimaryEmailAddress,
AdditionalEmailAddresses: req.AdditionalEmailAddresses, AdditionalEmailAddresses: req.AdditionalEmailAddresses,
UserID: req.UserID, UserID: req.UserID,
ContractStartDate: req.ContractStartDate,
ContractEndDate: req.ContractEndDate,
CreatedAt: now, CreatedAt: now,
UpdatedAt: now, UpdatedAt: now,
} }

View File

@@ -529,6 +529,8 @@ type People implements Node {
primaryEmailAddress: String! primaryEmailAddress: String!
additionalEmailAddresses: [String!]! additionalEmailAddresses: [String!]!
kind: PeopleKind! kind: PeopleKind!
contractStartDate: Datetime
contractEndDate: Datetime
createdAt: Datetime! createdAt: Datetime!
updatedAt: Datetime! updatedAt: Datetime!
} }
@@ -1152,6 +1154,8 @@ input CreatePeopleInput {
primaryEmailAddress: String! primaryEmailAddress: String!
additionalEmailAddresses: [String!] additionalEmailAddresses: [String!]
kind: PeopleKind! kind: PeopleKind!
contractStartDate: Datetime
contractEndDate: Datetime
} }
input UpdatePeopleInput { input UpdatePeopleInput {
@@ -1160,6 +1164,8 @@ input UpdatePeopleInput {
primaryEmailAddress: String primaryEmailAddress: String
additionalEmailAddresses: [String!] additionalEmailAddresses: [String!]
kind: PeopleKind kind: PeopleKind
contractStartDate: Datetime
contractEndDate: Datetime
} }
input DeletePeopleInput { input DeletePeopleInput {

View File

@@ -419,6 +419,8 @@ type ComplexityRoot struct {
People struct { People struct {
AdditionalEmailAddresses func(childComplexity int) int AdditionalEmailAddresses func(childComplexity int) int
ContractEndDate func(childComplexity int) int
ContractStartDate func(childComplexity int) int
CreatedAt func(childComplexity int) int CreatedAt func(childComplexity int) int
FullName func(childComplexity int) int FullName func(childComplexity int) int
ID 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 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": case "People.createdAt":
if e.complexity.People.CreatedAt == nil { if e.complexity.People.CreatedAt == nil {
break break
@@ -4564,6 +4580,8 @@ type People implements Node {
primaryEmailAddress: String! primaryEmailAddress: String!
additionalEmailAddresses: [String!]! additionalEmailAddresses: [String!]!
kind: PeopleKind! kind: PeopleKind!
contractStartDate: Datetime
contractEndDate: Datetime
createdAt: Datetime! createdAt: Datetime!
updatedAt: Datetime! updatedAt: Datetime!
} }
@@ -5187,6 +5205,8 @@ input CreatePeopleInput {
primaryEmailAddress: String! primaryEmailAddress: String!
additionalEmailAddresses: [String!] additionalEmailAddresses: [String!]
kind: PeopleKind! kind: PeopleKind!
contractStartDate: Datetime
contractEndDate: Datetime
} }
input UpdatePeopleInput { input UpdatePeopleInput {
@@ -5195,6 +5215,8 @@ input UpdatePeopleInput {
primaryEmailAddress: String primaryEmailAddress: String
additionalEmailAddresses: [String!] additionalEmailAddresses: [String!]
kind: PeopleKind kind: PeopleKind
contractStartDate: Datetime
contractEndDate: Datetime
} }
input DeletePeopleInput { input DeletePeopleInput {
@@ -19518,6 +19540,88 @@ func (ec *executionContext) fieldContext_People_kind(_ context.Context, field gr
return fc, nil 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) { 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) fc, err := ec.fieldContext_People_createdAt(ctx, field)
if err != nil { if err != nil {
@@ -19803,6 +19907,10 @@ func (ec *executionContext) fieldContext_PeopleEdge_node(_ context.Context, fiel
return ec.fieldContext_People_additionalEmailAddresses(ctx, field) return ec.fieldContext_People_additionalEmailAddresses(ctx, field)
case "kind": case "kind":
return ec.fieldContext_People_kind(ctx, field) 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": case "createdAt":
return ec.fieldContext_People_createdAt(ctx, field) return ec.fieldContext_People_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
@@ -20036,6 +20144,10 @@ func (ec *executionContext) fieldContext_Policy_owner(_ context.Context, field g
return ec.fieldContext_People_additionalEmailAddresses(ctx, field) return ec.fieldContext_People_additionalEmailAddresses(ctx, field)
case "kind": case "kind":
return ec.fieldContext_People_kind(ctx, field) 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": case "createdAt":
return ec.fieldContext_People_createdAt(ctx, field) return ec.fieldContext_People_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
@@ -20938,6 +21050,10 @@ func (ec *executionContext) fieldContext_PolicyVersion_publishedBy(_ context.Con
return ec.fieldContext_People_additionalEmailAddresses(ctx, field) return ec.fieldContext_People_additionalEmailAddresses(ctx, field)
case "kind": case "kind":
return ec.fieldContext_People_kind(ctx, field) 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": case "createdAt":
return ec.fieldContext_People_createdAt(ctx, field) return ec.fieldContext_People_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
@@ -21499,6 +21615,10 @@ func (ec *executionContext) fieldContext_PolicyVersionSignature_signedBy(_ conte
return ec.fieldContext_People_additionalEmailAddresses(ctx, field) return ec.fieldContext_People_additionalEmailAddresses(ctx, field)
case "kind": case "kind":
return ec.fieldContext_People_kind(ctx, field) 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": case "createdAt":
return ec.fieldContext_People_createdAt(ctx, field) return ec.fieldContext_People_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
@@ -21644,6 +21764,10 @@ func (ec *executionContext) fieldContext_PolicyVersionSignature_requestedBy(_ co
return ec.fieldContext_People_additionalEmailAddresses(ctx, field) return ec.fieldContext_People_additionalEmailAddresses(ctx, field)
case "kind": case "kind":
return ec.fieldContext_People_kind(ctx, field) 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": case "createdAt":
return ec.fieldContext_People_createdAt(ctx, field) return ec.fieldContext_People_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
@@ -23045,6 +23169,10 @@ func (ec *executionContext) fieldContext_Risk_owner(_ context.Context, field gra
return ec.fieldContext_People_additionalEmailAddresses(ctx, field) return ec.fieldContext_People_additionalEmailAddresses(ctx, field)
case "kind": case "kind":
return ec.fieldContext_People_kind(ctx, field) 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": case "createdAt":
return ec.fieldContext_People_createdAt(ctx, field) return ec.fieldContext_People_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
@@ -24028,6 +24156,10 @@ func (ec *executionContext) fieldContext_Task_assignedTo(_ context.Context, fiel
return ec.fieldContext_People_additionalEmailAddresses(ctx, field) return ec.fieldContext_People_additionalEmailAddresses(ctx, field)
case "kind": case "kind":
return ec.fieldContext_People_kind(ctx, field) 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": case "createdAt":
return ec.fieldContext_People_createdAt(ctx, field) return ec.fieldContext_People_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
@@ -24862,6 +24994,10 @@ func (ec *executionContext) fieldContext_UpdatePeoplePayload_people(_ context.Co
return ec.fieldContext_People_additionalEmailAddresses(ctx, field) return ec.fieldContext_People_additionalEmailAddresses(ctx, field)
case "kind": case "kind":
return ec.fieldContext_People_kind(ctx, field) 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": case "createdAt":
return ec.fieldContext_People_createdAt(ctx, field) return ec.fieldContext_People_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
@@ -25663,6 +25799,10 @@ func (ec *executionContext) fieldContext_User_people(ctx context.Context, field
return ec.fieldContext_People_additionalEmailAddresses(ctx, field) return ec.fieldContext_People_additionalEmailAddresses(ctx, field)
case "kind": case "kind":
return ec.fieldContext_People_kind(ctx, field) 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": case "createdAt":
return ec.fieldContext_People_createdAt(ctx, field) return ec.fieldContext_People_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
@@ -26262,6 +26402,10 @@ func (ec *executionContext) fieldContext_Vendor_businessOwner(_ context.Context,
return ec.fieldContext_People_additionalEmailAddresses(ctx, field) return ec.fieldContext_People_additionalEmailAddresses(ctx, field)
case "kind": case "kind":
return ec.fieldContext_People_kind(ctx, field) 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": case "createdAt":
return ec.fieldContext_People_createdAt(ctx, field) return ec.fieldContext_People_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
@@ -26319,6 +26463,10 @@ func (ec *executionContext) fieldContext_Vendor_securityOwner(_ context.Context,
return ec.fieldContext_People_additionalEmailAddresses(ctx, field) return ec.fieldContext_People_additionalEmailAddresses(ctx, field)
case "kind": case "kind":
return ec.fieldContext_People_kind(ctx, field) 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": case "createdAt":
return ec.fieldContext_People_createdAt(ctx, field) return ec.fieldContext_People_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
@@ -27982,6 +28130,10 @@ func (ec *executionContext) fieldContext_VendorRiskAssessment_assessedBy(_ conte
return ec.fieldContext_People_additionalEmailAddresses(ctx, field) return ec.fieldContext_People_additionalEmailAddresses(ctx, field)
case "kind": case "kind":
return ec.fieldContext_People_kind(ctx, field) 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": case "createdAt":
return ec.fieldContext_People_createdAt(ctx, field) return ec.fieldContext_People_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
@@ -30991,7 +31143,7 @@ func (ec *executionContext) unmarshalInputCreatePeopleInput(ctx context.Context,
asMap[k] = v asMap[k] = v
} }
fieldsInOrder := [...]string{"organizationId", "fullName", "primaryEmailAddress", "additionalEmailAddresses", "kind"} fieldsInOrder := [...]string{"organizationId", "fullName", "primaryEmailAddress", "additionalEmailAddresses", "kind", "contractStartDate", "contractEndDate"}
for _, k := range fieldsInOrder { for _, k := range fieldsInOrder {
v, ok := asMap[k] v, ok := asMap[k]
if !ok { if !ok {
@@ -31033,6 +31185,20 @@ func (ec *executionContext) unmarshalInputCreatePeopleInput(ctx context.Context,
return it, err return it, err
} }
it.Kind = data 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 asMap[k] = v
} }
fieldsInOrder := [...]string{"id", "fullName", "primaryEmailAddress", "additionalEmailAddresses", "kind"} fieldsInOrder := [...]string{"id", "fullName", "primaryEmailAddress", "additionalEmailAddresses", "kind", "contractStartDate", "contractEndDate"}
for _, k := range fieldsInOrder { for _, k := range fieldsInOrder {
v, ok := asMap[k] v, ok := asMap[k]
if !ok { if !ok {
@@ -32855,6 +33021,20 @@ func (ec *executionContext) unmarshalInputUpdatePeopleInput(ctx context.Context,
return it, err return it, err
} }
it.Kind = data 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 { if out.Values[i] == graphql.Null {
out.Invalids++ 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": case "createdAt":
out.Values[i] = ec._People_createdAt(ctx, field, obj) out.Values[i] = ec._People_createdAt(ctx, field, obj)
if out.Values[i] == graphql.Null { if out.Values[i] == graphql.Null {

View File

@@ -50,6 +50,8 @@ func NewPeople(p *coredata.People) *People {
PrimaryEmailAddress: p.PrimaryEmailAddress, PrimaryEmailAddress: p.PrimaryEmailAddress,
AdditionalEmailAddresses: p.AdditionalEmailAddresses, AdditionalEmailAddresses: p.AdditionalEmailAddresses,
Kind: p.Kind, Kind: p.Kind,
ContractStartDate: p.ContractStartDate,
ContractEndDate: p.ContractEndDate,
CreatedAt: p.CreatedAt, CreatedAt: p.CreatedAt,
UpdatedAt: p.UpdatedAt, UpdatedAt: p.UpdatedAt,
} }

View File

@@ -164,6 +164,8 @@ type CreatePeopleInput struct {
PrimaryEmailAddress string `json:"primaryEmailAddress"` PrimaryEmailAddress string `json:"primaryEmailAddress"`
AdditionalEmailAddresses []string `json:"additionalEmailAddresses,omitempty"` AdditionalEmailAddresses []string `json:"additionalEmailAddresses,omitempty"`
Kind coredata.PeopleKind `json:"kind"` Kind coredata.PeopleKind `json:"kind"`
ContractStartDate *time.Time `json:"contractStartDate,omitempty"`
ContractEndDate *time.Time `json:"contractEndDate,omitempty"`
} }
type CreatePeoplePayload struct { type CreatePeoplePayload struct {
@@ -567,6 +569,8 @@ type People struct {
PrimaryEmailAddress string `json:"primaryEmailAddress"` PrimaryEmailAddress string `json:"primaryEmailAddress"`
AdditionalEmailAddresses []string `json:"additionalEmailAddresses"` AdditionalEmailAddresses []string `json:"additionalEmailAddresses"`
Kind coredata.PeopleKind `json:"kind"` Kind coredata.PeopleKind `json:"kind"`
ContractStartDate *time.Time `json:"contractStartDate,omitempty"`
ContractEndDate *time.Time `json:"contractEndDate,omitempty"`
CreatedAt time.Time `json:"createdAt"` CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"` UpdatedAt time.Time `json:"updatedAt"`
} }
@@ -833,6 +837,8 @@ type UpdatePeopleInput struct {
PrimaryEmailAddress *string `json:"primaryEmailAddress,omitempty"` PrimaryEmailAddress *string `json:"primaryEmailAddress,omitempty"`
AdditionalEmailAddresses []string `json:"additionalEmailAddresses,omitempty"` AdditionalEmailAddresses []string `json:"additionalEmailAddresses,omitempty"`
Kind *coredata.PeopleKind `json:"kind,omitempty"` Kind *coredata.PeopleKind `json:"kind,omitempty"`
ContractStartDate *time.Time `json:"contractStartDate,omitempty"`
ContractEndDate *time.Time `json:"contractEndDate,omitempty"`
} }
type UpdatePeoplePayload struct { type UpdatePeoplePayload struct {

View File

@@ -424,6 +424,8 @@ func (r *mutationResolver) CreatePeople(ctx context.Context, input types.CreateP
PrimaryEmailAddress: input.PrimaryEmailAddress, PrimaryEmailAddress: input.PrimaryEmailAddress,
AdditionalEmailAddresses: []string{}, AdditionalEmailAddresses: []string{},
Kind: input.Kind, Kind: input.Kind,
ContractStartDate: input.ContractStartDate,
ContractEndDate: input.ContractEndDate,
}) })
if err != nil { if err != nil {
@@ -445,6 +447,8 @@ func (r *mutationResolver) UpdatePeople(ctx context.Context, input types.UpdateP
PrimaryEmailAddress: input.PrimaryEmailAddress, PrimaryEmailAddress: input.PrimaryEmailAddress,
AdditionalEmailAddresses: &input.AdditionalEmailAddresses, AdditionalEmailAddresses: &input.AdditionalEmailAddresses,
Kind: input.Kind, Kind: input.Kind,
ContractStartDate: &input.ContractStartDate,
ContractEndDate: &input.ContractEndDate,
}) })
if err != nil { if err != nil {
return nil, fmt.Errorf("cannot update people: %w", err) return nil, fmt.Errorf("cannot update people: %w", err)