sheet-historical-data-conve.../main.go

145 lines
3.4 KiB
Go
Raw Permalink Normal View History

2024-11-05 19:59:23 +00:00
package main
import (
"fmt"
"gullion/currency_convert_ssheets/configs"
"gullion/currency_convert_ssheets/etl"
etlForex "gullion/currency_convert_ssheets/extractionCleansing"
"gullion/currency_convert_ssheets/extrapolation"
"gullion/currency_convert_ssheets/reportgen"
utils "gullion/currency_convert_ssheets/utility"
"log"
"os"
"sort"
"github.com/urfave/cli/v2"
)
type appCommand int
const (
processForexHistoricalData appCommand = iota
processBkmHistoricalData
generateUsdSheet
extrapolateForexData
none
)
func main() {
var inputfile string
var sheetName string
exists := true
appCommand := none
app := &cli.App{
Flags: []cli.Flag{
&cli.StringFlag{
Name: "inputfile",
Usage: "Configuration file path",
Aliases: []string{"i"},
Destination: &inputfile,
},
&cli.StringFlag{
Name: "sheet",
Usage: "sheet name of excel file",
Aliases: []string{"s"},
Destination: &sheetName,
},
},
Action: func(c *cli.Context) error {
if !utils.FileExists(inputfile) {
exists = false
fmt.Printf("Input file `%s` does NOT exist\n", inputfile)
}
return nil
},
Commands: []*cli.Command{
{
Name: "process_forex_historical_data",
Aliases: []string{"pro_forex_his"},
Usage: "Read Forex historical data and write on DB",
Action: func(c *cli.Context) error {
appCommand = processForexHistoricalData
return nil
},
},
{
Name: "process_bkm_historical_data",
Aliases: []string{"pro_bkm_his"},
Usage: "Read bkm historical data and write on DB",
Action: func(c *cli.Context) error {
appCommand = processBkmHistoricalData
return nil
},
},
{
Name: "extrapolate_forex-data",
Aliases: []string{"extra-forex-data"},
Usage: "extrapolate forex data",
Action: func(c *cli.Context) error {
appCommand = extrapolateForexData
return nil
},
},
{
Name: "generate_transformed_sheet",
Aliases: []string{"gen_trans"},
Usage: "Read historical data from DB and generate xlsx sheet",
Action: func(c *cli.Context) error {
appCommand = generateUsdSheet
return nil
},
},
},
}
sort.Sort(cli.FlagsByName(app.Flags))
sort.Sort(cli.CommandsByName(app.Commands))
err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
if exists {
switch appCommand {
case processForexHistoricalData:
config := configs.ReadConfigs(inputfile)
for _, inputFileRecord := range config.InputFile {
xlsxFile := &etlForex.FileXLXS{
Path: inputFileRecord.FileName,
Sheet: inputFileRecord.SheetName,
}
etl.ExtractForexDataFromFile(xlsxFile)
}
case processBkmHistoricalData:
config := configs.ReadConfigs(inputfile)
for _, inputFileRecord := range config.InputFile {
fmt.Println(inputFileRecord.FileName)
xlsxFile := &etlForex.FileXLXS{
Path: inputFileRecord.FileName,
Sheet: inputFileRecord.SheetName,
Measurement: inputFileRecord.Measurement,
}
etl.ExtractBkmDataFromFile(xlsxFile)
}
case extrapolateForexData:
extrapolation.ExtrapolateXauToTLForexRates()
case generateUsdSheet:
config := configs.ReadConfigs(inputfile)
for _, inputFileRecord := range config.InputFile {
reportgen.GenerateReport(inputFileRecord, config)
}
default:
fmt.Println("invalid/missing command, Please try help command")
}
}
}