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

@@ -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"`
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

View File

@@ -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,
}

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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,
}

View File

@@ -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 {

View File

@@ -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)