package cmd import ( "encoding/json" "flag" "fmt" "log" "os" "time" "codeflow.dananglin.me.uk/apollo/spruce/internal/cv" ) type CreateCommand struct { *flag.FlagSet firstName string lastName string jobTitle string filename string } func NewCreateCommand() *CreateCommand { cc := CreateCommand{ FlagSet: flag.NewFlagSet("create", flag.ExitOnError), } cc.StringVar(&cc.firstName, "first-name", "", "specify your first name") cc.StringVar(&cc.lastName, "last-name", "", "specify your last name") cc.StringVar(&cc.jobTitle, "job-title", "", "specify your preferred job title") cc.StringVar(&cc.filename, "filename", "cv.json", "specify the filename of the created JSON document") return &cc } func (c *CreateCommand) Run() error { data := cv.NewCV(c.firstName, c.lastName, c.jobTitle) data.Contact = map[string]string{ "Email": "", "Phone": "", } data.Links = map[string]string{ "GitHub": "", "Website": "", } data.Summary = make([]string, 2) data.Skills = []cv.Skills{ { Category: "", Values: make([]string, 1), }, { Category: "", Values: make([]string, 1), }, } data.Employment = []cv.Experience{ { Company: "", Location: "", JobTitle: "", Duration: cv.Duration{ Start: cv.Date{ Year: time.Now().Year(), Month: int(time.Now().Month()), Day: time.Now().Day(), }, End: cv.Date{ Year: time.Now().Year(), Month: int(time.Now().Month()), Day: time.Now().Day(), }, Present: false, }, Details: make([]string, 2), }, } data.Education = []cv.Experience{ { School: "", Location: "", Qualification: "", Duration: cv.Duration{ Start: cv.Date{ Year: time.Now().Year(), Month: int(time.Now().Month()), Day: time.Now().Day(), }, End: cv.Date{ Year: time.Now().Year(), Month: int(time.Now().Month()), Day: time.Now().Day(), }, }, }, } data.Interests = make([]string, 2) file, err := os.Create(c.filename) if err != nil { return fmt.Errorf("unable to open %s; %w", c.filename, err) } defer file.Close() encoder := json.NewEncoder(file) encoder.SetIndent("", " ") if err := encoder.Encode(data); err != nil { return fmt.Errorf("unable to write the data to %s; %w", c.filename, err) } log.Printf("INFO: Successfully written the new CV to %s\n", file.Name()) return nil }