jobs/v3/howto/basic_job_sample.go (121 lines of code) (raw):
// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package howto
import (
"context"
"fmt"
"io"
"log"
"golang.org/x/oauth2/google"
talent "google.golang.org/api/jobs/v3"
)
// [START job_create_job]
// createJob create a job as given.
func createJob(w io.Writer, projectID string, jobToCreate *talent.Job) (*talent.Job, error) {
ctx := context.Background()
client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
if err != nil {
return nil, fmt.Errorf("google.DefaultClient: %w", err)
}
// Create the jobs service client.
service, err := talent.New(client)
if err != nil {
return nil, fmt.Errorf("talent.New: %w", err)
}
parent := "projects/" + projectID
req := &talent.CreateJobRequest{
Job: jobToCreate,
}
job, err := service.Projects.Jobs.Create(parent, req).Do()
if err != nil {
return nil, fmt.Errorf("Failed to create job %q, Err: %w", jobToCreate.RequisitionId, err)
}
return job, err
}
// [END job_create_job]
// [START job_get_job]
// getJob gets a job by name.
func getJob(w io.Writer, jobName string) (*talent.Job, error) {
ctx := context.Background()
client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
if err != nil {
return nil, fmt.Errorf("google.DefaultClient: %w", err)
}
// Create the jobs service client.
service, err := talent.New(client)
if err != nil {
return nil, fmt.Errorf("talent.New: %w", err)
}
job, err := service.Projects.Jobs.Get(jobName).Do()
if err != nil {
return nil, fmt.Errorf("Failed to get job %s: %w", jobName, err)
}
fmt.Fprintf(w, "Job: %q", job.Name)
return job, err
}
// [END job_get_job]
// [START job_update_job]
// updateJob update a job with all fields except name.
func updateJob(w io.Writer, jobName string, jobToUpdate *talent.Job) (*talent.Job, error) {
ctx := context.Background()
client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
if err != nil {
return nil, fmt.Errorf("google.DefaultClient: %w", err)
}
// Create the jobs service client.
service, err := talent.New(client)
if err != nil {
return nil, fmt.Errorf("talent.New: %w", err)
}
req := &talent.UpdateJobRequest{
Job: jobToUpdate,
}
job, err := service.Projects.Jobs.Patch(jobName, req).Do()
if err != nil {
return nil, fmt.Errorf("Failed to update job %s: %w", jobName, err)
}
return job, err
}
// [END job_update_job]
// [START job_update_job_with_field_mask]
// updateJobWithMask updates a job by name with specific fields.
// mask is a comma separated list top-level fields of talent.Job.
func updateJobWithMask(w io.Writer, jobName string, mask string, jobToUpdate *talent.Job) (*talent.Job, error) {
ctx := context.Background()
client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
if err != nil {
return nil, fmt.Errorf("google.DefaultClient: %w", err)
}
// Create the jobs service client.
service, err := talent.New(client)
if err != nil {
return nil, fmt.Errorf("talent.New: %w", err)
}
req := &talent.UpdateJobRequest{
Job: jobToUpdate,
UpdateMask: mask,
}
job, err := service.Projects.Jobs.Patch(jobName, req).Do()
if err != nil {
log.Fatalf("Failed to update job %s with field mask %s, Err: %v", jobName, mask, err)
}
return job, err
}
// [END job_update_job_with_field_mask]
// [START job_delete_job]
// deleteJob deletes an existing job by name.
func deleteJob(w io.Writer, jobName string) error {
ctx := context.Background()
client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
if err != nil {
return fmt.Errorf("google.DefaultClient: %w", err)
}
// Create the jobs service client.
service, err := talent.New(client)
if err != nil {
return fmt.Errorf("talent.New: %w", err)
}
if _, err := service.Projects.Jobs.Delete(jobName).Do(); err != nil {
return fmt.Errorf("Delete(%s): %w", jobName, err)
}
return err
}
// [END job_delete_job]
// [START job_list_jobs]
// listJobs lists jobs with a filter, for example
// `companyName="projects/my-project/companies/123"`.
func listJobs(w io.Writer, projectID, filter string) (*talent.ListJobsResponse, error) {
ctx := context.Background()
client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
if err != nil {
return nil, fmt.Errorf("google.DefaultClient: %w", err)
}
// Create the jobs service client.
service, err := talent.New(client)
if err != nil {
return nil, fmt.Errorf("talent.New: %w", err)
}
parent := "projects/" + projectID
resp, err := service.Projects.Jobs.List(parent).Filter(filter).Do()
if err != nil {
return nil, fmt.Errorf("Failed to list jobs with filter: %q: %w", filter, err)
}
fmt.Fprintln(w, "Jobs:")
for _, j := range resp.Jobs {
fmt.Fprintf(w, "\t%q\n", j.Name)
}
return resp, err
}
// [END job_list_jobs]