From f149a7a315cfde6b7156720cd45e6d4e46169342 Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Fri, 29 May 2026 21:52:48 +0530 Subject: [PATCH 01/15] fix: File Checking Code Refactor --- .gitignore | 3 ++- apps/sohan/whatsapp/auto-download/index.go | 7 ++++--- apps/sohan/whatsapp/main.go | 2 +- servers/background-service/main.go | 4 ++-- servers/jwelly/ecommerce-adapter/main.go | 5 +++++ servers/soham/whatsapp-server/main.go | 4 ++-- servers/tunnel-client/main.go | 4 ++-- utility/whatsapp/utility/pdf-to-thumb.go | 3 ++- 8 files changed, 20 insertions(+), 12 deletions(-) create mode 100644 servers/jwelly/ecommerce-adapter/main.go diff --git a/.gitignore b/.gitignore index 2b7a3f1..0e4f3b1 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ main .DS_St* dist -SSL \ No newline at end of file +SSL +*.config.json \ No newline at end of file diff --git a/apps/sohan/whatsapp/auto-download/index.go b/apps/sohan/whatsapp/auto-download/index.go index 8e86912..37a9206 100644 --- a/apps/sohan/whatsapp/auto-download/index.go +++ b/apps/sohan/whatsapp/auto-download/index.go @@ -16,6 +16,7 @@ import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/widget" sohan_whatsapp_keys "github.com/rpsoftech/golang-servers/apps/sohan/whatsapp/keys" + utility_functions "github.com/rpsoftech/golang-servers/utility/functions" utility_functions_gzip "github.com/rpsoftech/golang-servers/utility/functions/gzip" ) @@ -142,7 +143,7 @@ func CheckAndDownload(progress *widget.ProgressBar, win fyne.Window) string { needDownload := false - if _, err := os.Stat(serverBinary); os.IsNotExist(err) { + if exist, _ := utility_functions.Exist(serverBinary); !exist { needDownload = true } @@ -157,7 +158,7 @@ func CheckAndDownload(progress *widget.ProgressBar, win fyne.Window) string { }) err := downloadFileWithProgress(cloud.URL, gzipFile, progress) if err != nil { - if _, err := os.Stat(serverBinary); os.IsNotExist(err) { + if exist, _ := utility_functions.Exist(serverBinary); !exist { panic(fmt.Errorf("File Downloading Failed")) // needDownload = true } @@ -232,7 +233,7 @@ func replaceBinarySafe(tmpFile string, serverBinary string) error { os.Remove(backup) - if _, err := os.Stat(serverBinary); err == nil { + if exist, _ := utility_functions.Exist(serverBinary); exist { os.Rename(serverBinary, backup) } diff --git a/apps/sohan/whatsapp/main.go b/apps/sohan/whatsapp/main.go index a0fe8a2..5d354ff 100644 --- a/apps/sohan/whatsapp/main.go +++ b/apps/sohan/whatsapp/main.go @@ -79,7 +79,7 @@ func validateGUILOCK() bool { } func preventMultipleGUI() { - if _, err := os.Stat(guiLock); err == nil { + if exist, _ := utility_functions.Exist(guiLock); exist { if validateGUILOCK() { os.Exit(0) } diff --git a/servers/background-service/main.go b/servers/background-service/main.go index 54743bd..7b20895 100644 --- a/servers/background-service/main.go +++ b/servers/background-service/main.go @@ -4,7 +4,6 @@ package main import ( "encoding/json" - "errors" "fmt" "log" "os" @@ -14,6 +13,7 @@ import ( "syscall" "time" + utility_functions "github.com/rpsoftech/golang-servers/utility/functions" "github.com/rpsoftech/golang-servers/validator" "golang.org/x/sys/windows/svc" "golang.org/x/sys/windows/svc/debug" @@ -110,7 +110,7 @@ func start() { ThisConfig = &Config{} fmt.Printf("Config path %s\n", configFilePAth) - if _, err := os.Stat(configFilePAth); errors.Is(err, os.ErrNotExist) { + if e, _ := utility_functions.Exist(configFilePAth); !e { panic(fmt.Errorf("Config Not Exist on Path %s", configFilePAth)) } dat, err := os.ReadFile(configFilePAth) diff --git a/servers/jwelly/ecommerce-adapter/main.go b/servers/jwelly/ecommerce-adapter/main.go new file mode 100644 index 0000000..7905807 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/main.go @@ -0,0 +1,5 @@ +package main + +func main() { + +} diff --git a/servers/soham/whatsapp-server/main.go b/servers/soham/whatsapp-server/main.go index a8939e8..21a1317 100644 --- a/servers/soham/whatsapp-server/main.go +++ b/servers/soham/whatsapp-server/main.go @@ -85,11 +85,11 @@ func main() { if errs := validator.Validator.Validate(sslConfig); len(errs) > 0 { panic(fmt.Errorf("SSL_CONFIG_ERROR %#v", errs)) } - if _, err := os.Stat(sslConfig.CertFilePath); os.IsNotExist(err) { + if exist, _ := utility_functions.Exist(sslConfig.CertFilePath); !exist { log.Errorf("SSL Cert File Not Exist at %s", sslConfig.CertFilePath) return } - if _, err := os.Stat(sslConfig.KeyFilePath); os.IsNotExist(err) { + if exist, _ := utility_functions.Exist(sslConfig.KeyFilePath); !exist { log.Errorf("SSL Key File Not Exist at %s", sslConfig.KeyFilePath) return } diff --git a/servers/tunnel-client/main.go b/servers/tunnel-client/main.go index 9e11c92..87eec4f 100644 --- a/servers/tunnel-client/main.go +++ b/servers/tunnel-client/main.go @@ -3,7 +3,6 @@ package main import ( "context" "encoding/json" - "errors" "fmt" "log" "os" @@ -14,6 +13,7 @@ import ( chclient "github.com/jpillora/chisel/client" chshare "github.com/jpillora/chisel/share" "github.com/jpillora/chisel/share/cos" + utility_functions "github.com/rpsoftech/golang-servers/utility/functions" "github.com/rpsoftech/golang-servers/validator" ) @@ -55,7 +55,7 @@ func start() { ThisConfig := &Config{} fmt.Printf("Config path %s\n", configFilePAth) - if _, err := os.Stat(configFilePAth); errors.Is(err, os.ErrNotExist) { + if exist, _ := utility_functions.Exist(configFilePAth); !exist { panic(fmt.Errorf("Config Not Exist on Path %s", configFilePAth)) } dat, err := os.ReadFile(configFilePAth) diff --git a/utility/whatsapp/utility/pdf-to-thumb.go b/utility/whatsapp/utility/pdf-to-thumb.go index 8b544db..d4105f1 100644 --- a/utility/whatsapp/utility/pdf-to-thumb.go +++ b/utility/whatsapp/utility/pdf-to-thumb.go @@ -10,6 +10,7 @@ import ( "path/filepath" "github.com/gen2brain/go-fitz" + utility_functions "github.com/rpsoftech/golang-servers/utility/functions" ) func ExtractFirstPage(pdfBytes []byte) ([]byte, error) { @@ -22,7 +23,7 @@ func ExtractFirstPage(pdfBytes []byte) ([]byte, error) { outputDir := filepath.Join(".", "output_images") - if _, err := os.Stat(outputDir); os.IsNotExist(err) { + if exist, _ := utility_functions.Exist(outputDir); !exist { err := os.Mkdir(outputDir, 0755) if err != nil { fmt.Println("Error creating output directory:", err) From 6e05884ccbd0fee8f69624ac9dac17cb9b62b0f7 Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Fri, 12 Jun 2026 12:30:47 +0530 Subject: [PATCH 02/15] feat: Unit Table and Item Group Synced --- .vscode/launch.json | 8 ++ .../jwelly/ecommerce-adapter/Server.Db.sql | 21 +++++ .../jwelly/ecommerce-adapter/env/env.index.go | 46 +++++++++++ .../functions/item-group.func.go | 63 +++++++++++++++ .../functions/unit-table.func.go | 61 ++++++++++++++ .../ErpTables/item-group-table.type.go | 79 +++++++++++++++++++ .../ErpTables/item-units-table.type.go | 9 +++ .../MainTables/item-group-table.type.go | 8 ++ .../MainTables/item-units-table.type.go | 7 ++ servers/jwelly/ecommerce-adapter/main.go | 25 +++++- servers/jwelly/mysql-backup-cmd/main.go | 2 +- servers/jwelly/mysql-backup/main.go | 2 +- servers/jwelly/mysql-to-mysql/main.go | 2 +- servers/jwelly/mysql-to-surreal/main.go | 2 +- 14 files changed, 330 insertions(+), 5 deletions(-) create mode 100644 servers/jwelly/ecommerce-adapter/Server.Db.sql create mode 100644 servers/jwelly/ecommerce-adapter/env/env.index.go create mode 100644 servers/jwelly/ecommerce-adapter/functions/item-group.func.go create mode 100644 servers/jwelly/ecommerce-adapter/functions/unit-table.func.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-group-table.type.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-units-table.type.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-group-table.type.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-units-table.type.go diff --git a/.vscode/launch.json b/.vscode/launch.json index 70eae82..d6adbd2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -108,6 +108,14 @@ "args": ["--dev"], "program": "${workspaceFolder}/servers/jwelly/mysql-to-surreal/main.go" }, + { + "name": "Run Jwelly Adapter Server", + "type": "go", + "request": "launch", + "mode": "auto", + "args": ["--dev"], + "program": "${workspaceFolder}/servers/jwelly/ecommerce-adapter/main.go" + }, { "name": "Run Jwelly App Main Server", "type": "go", diff --git a/servers/jwelly/ecommerce-adapter/Server.Db.sql b/servers/jwelly/ecommerce-adapter/Server.Db.sql new file mode 100644 index 0000000..9f2e73c --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/Server.Db.sql @@ -0,0 +1,21 @@ +CREATE TABLE + `ItemGroup` ( + `itemGroupId` INT NOT NULL, + `itemGroup` VARCHAR(45) NOT NULL, + `itemPrintName` VARCHAR(45) NULL, + `itemGroupUnitId` INT NOT NULL, + PRIMARY KEY (`itemGroupId`) + ); + +CREATE TABLE + `ItemUnit` ( + `itemUnitId` INT NOT NULL, + `itemUnit` VARCHAR(45) NOT NULL, + `itemDecimal` INT (1) NULL DEFAULT 0, + PRIMARY KEY (`itemUnitId`), + UNIQUE INDEX `itemUnit_UNIQUE` (`itemUnit` ASC) VISIBLE + ); + +ALTER TABLE `ItemGroup` ADD INDEX `IgroupUnitToUnitID_idx` (`itemGroupUnitId` ASC) VISIBLE; + +ALTER TABLE `ItemGroup` ADD CONSTRAINT `IgroupUnitToUnitID` FOREIGN KEY (`itemGroupUnitId`) REFERENCES `ItemUnit` (`itemUnitId`) ON DELETE RESTRICT ON UPDATE CASCADE; \ No newline at end of file diff --git a/servers/jwelly/ecommerce-adapter/env/env.index.go b/servers/jwelly/ecommerce-adapter/env/env.index.go new file mode 100644 index 0000000..d36627b --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/env/env.index.go @@ -0,0 +1,46 @@ +package ecommerce_env + +import ( + "encoding/json" + "os" + "path/filepath" + + "github.com/rpsoftech/golang-servers/env" + utility_functions "github.com/rpsoftech/golang-servers/utility/functions" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) + +type IServerMysqlConnection struct { + Server *mysqldb.MysqlDBStruct + ERP *mysqldb.MysqlDBStruct +} +type IServverConfig struct { + ServerDatabase *mysqldb.MysqldbConfig `json:"ServerDatabase"` + ErpDatabase *mysqldb.MysqldbConfig `json:"ErpDatabase"` +} + +var ServerConfig *IServverConfig +var MysqlConnections *IServerMysqlConnection + +// var +func Init() *IServverConfig { + if ServerConfig != nil { + return ServerConfig + } + MysqlConnections = &IServerMysqlConnection{} + ServerConfig = &IServverConfig{} + env.LoadEnv("ecommerece-adapter.env") + configFileName := "server.config.json" + if e := env.Env.GetEnv("CONFGI_FILE_NAME"); e != "" { + configFileName = e + } + configFileName = filepath.Join(env.FindAndReturnCurrentDir(), configFileName) + if e, err := utility_functions.Exist(configFileName); !e || err != nil { + panic(err) + } + dat, err := os.ReadFile(configFileName) + env.Check(err) + err = json.Unmarshal(dat, ServerConfig) + env.Check(err) + return ServerConfig +} diff --git a/servers/jwelly/ecommerce-adapter/functions/item-group.func.go b/servers/jwelly/ecommerce-adapter/functions/item-group.func.go new file mode 100644 index 0000000..1698b9f --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/functions/item-group.func.go @@ -0,0 +1,63 @@ +package ecommerece_functions + +import ( + "context" + "fmt" + "log" + "strings" + "time" + + ecommerce_maintables "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/interfaces/MainTables" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) + +// const SelectItemGroupQuery +const SelectItemGroupQuery = "select igroupid,IGROUP,PNAME,UNITID from igroup;" +const ServerItemGroupTable = "ItemGroup" +const ServerItemGroupOfColums = 4 +const ItemGroupUpsertQuery = `INSERT INTO ItemGroup (itemGroupId, itemGroup, itemPrintName,itemGroupUnitId) VALUES %s AS new_row ON DUPLICATE KEY UPDATE itemGroup=new_row.itemGroup,itemPrintName=new_row.itemPrintName,itemGroupUnitId=new_row.itemGroupUnitId` + +func SyncItemGroupTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { + initalTime := time.Now() + startTime := initalTime + rows, err := erpDb.Db.Query(SelectItemGroupQuery) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err != nil { + log.Printf("Error in Reading Unit From Server") + log.Println(err.Error()) + return + } + var results []*ecommerce_maintables.ItemGroupMainTable = []*ecommerce_maintables.ItemGroupMainTable{} + for rows.Next() { + row := &ecommerce_maintables.ItemGroupMainTable{} + err = rows.Scan( + &row.ItemGroupId, + &row.ItemGroup, + &row.ItemPrintName, + &row.ItemUnitId, + ) + results = append(results, row) + } + log.Printf("Fetched Total %d rows from ItemGroup in Duration of %s\n", len(results), time.Since(startTime)) + numColumns := 3 + valueStrings := make([]string, 0, len(results)) + valueArgs := make([]interface{}, 0, len(results)*numColumns) + for _, group := range results { + valueStrings = append(valueStrings, "(?, ?, ?,?)") + valueArgs = append(valueArgs, group.ItemGroupId, group.ItemGroup, group.ItemPrintName, group.ItemUnitId) + } + finalQuery := fmt.Sprintf(ItemGroupUpsertQuery, strings.Join(valueStrings, ", ")) + result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) + if err != nil { + log.Fatalf("Bulk upsert failed: %v", err) + log.Fatalf("Query : %s", finalQuery) + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + log.Fatal(err) + } + fmt.Printf("Bulk upsert for Item Group successful! Rows affected metric: %d\n", rowsAffected) + +} diff --git a/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go b/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go new file mode 100644 index 0000000..b0ec8e2 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go @@ -0,0 +1,61 @@ +package ecommerece_functions + +import ( + "context" + "fmt" + "log" + "strings" + "time" + + ecommerce_maintables "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/interfaces/MainTables" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) + +const SelectUnitTableQuery = "select UNITID,UNIT,`DECIMAL` from units;" +const ServerUnitTable = "ItemUnit" +const UniTableNumberOfColums = 3 +const UpsertUnitTableQuery = `INSERT INTO ItemUnit (itemUnitId, itemUnit, itemDecimal) VALUES %s AS new_row ON DUPLICATE KEY UPDATE itemUnit = new_row.itemUnit, itemDecimal = new_row.itemDecimal` + +func SyncItemUnitTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { + initalTime := time.Now() + startTime := initalTime + rows, err := erpDb.Db.Query(SelectUnitTableQuery) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err != nil { + log.Printf("Error in Reading Unit From Server") + log.Println(err.Error()) + return + } + var results []*ecommerce_maintables.ItemUnitMainTable = []*ecommerce_maintables.ItemUnitMainTable{} + for rows.Next() { + row := &ecommerce_maintables.ItemUnitMainTable{} + err = rows.Scan( + &row.ItemUnitId, + &row.ItemUnit, + &row.ItemDecimal, + ) + results = append(results, row) + } + log.Printf("Fetched Total %d rows from Units in Duration of %s\n", len(results), time.Since(startTime)) + + valueStrings := make([]string, 0, len(results)) + valueArgs := make([]interface{}, 0, len(results)*UniTableNumberOfColums) + for _, unit := range results { + valueStrings = append(valueStrings, "(?, ?, ?)") + valueArgs = append(valueArgs, unit.ItemUnitId, unit.ItemUnit, unit.ItemDecimal) + } + finalQuery := fmt.Sprintf(UpsertUnitTableQuery, strings.Join(valueStrings, ", ")) + result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) + if err != nil { + log.Fatalf("Bulk upsert failed: %v", err) + log.Fatalf("Query : %s", finalQuery) + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + log.Fatal(err) + } + fmt.Printf("Bulk upsert successful! Rows affected metric: %d\n", rowsAffected) + +} diff --git a/servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-group-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-group-table.type.go new file mode 100644 index 0000000..0198764 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-group-table.type.go @@ -0,0 +1,79 @@ +package ecommerce_erptables + +type ItemGroupERPTableStruct struct { + Igroupid int `json:"igroupid"` + IGROUP string `json:"IGROUP"` + PNAME string `json:"PNAME"` + UNDERID int `json:"UNDERID"` + ITNAME string `json:"ITNAME"` + LTAX float64 `json:"LTAX"` + CTAX float64 `json:"CTAX"` + GP float64 `json:"GP"` + OBAL float64 `json:"OBAL"` + CBAL float64 `json:"CBAL"` + SACNO int `json:"SACNO"` + PACNO int `json:"PACNO"` + STSACNO int `json:"STSACNO"` + STPACNO int `json:"STPACNO"` + IACNO int `json:"IACNO"` + RACNO int `json:"RACNO"` + CCODE string `json:"CCODE"` + STVAL int `json:"STVAL"` + DIV float64 `json:"DIV"` + INTO float64 `json:"INTO"` + UNITID int `json:"UNITID"` + DBHAV string `json:"DBHAV"` + GWTNWT int `json:"GWTNWT"` + STAMPID int `json:"STAMPID"` + ITYPE int `json:"ITYPE"` + DEL string `json:"DEL"` + TTYPE int `json:"TTYPE"` + ALTTAG int `json:"ALTTAG"` + SRTOTAL float64 `json:"SRTOTAL"` + SRDAMT float64 `json:"SRDAMT"` + SRSAMT float64 `json:"SRSAMT"` + SRLAMT float64 `json:"SRLAMT"` + SRMAMT int `json:"SRMAMT"` + EXTOTAL float64 `json:"EXTOTAL"` + EXLAMT float64 `json:"EXLAMT"` + EXMAMT int `json:"EXMAMT"` + EXDAMT float64 `json:"EXDAMT"` + EXSAMT float64 `json:"EXSAMT"` + MRPTYPE int `json:"MRPTYPE"` + DIVIDERATE float64 `json:"DIVIDERATE"` + INTORATE float64 `json:"INTORATE"` + PURLESS float64 `json:"PURLESS"` + DIS float64 `json:"DIS"` + SMDET string `json:"SMDET"` + RTAG int `json:"RTAG"` + MINQTY float64 `json:"MINQTY"` + POINT float64 `json:"POINT"` + RESDRATE string `json:"RESDRATE"` + RESSRATE string `json:"RESSRATE"` + RESMRATE string `json:"RESMRATE"` + RESLBR string `json:"RESLBR"` + Resigrp string `json:"resigrp"` + CPOINT float64 `json:"CPOINT"` + IRLEVEL int `json:"IRLEVEL"` + VRATE float64 `json:"VRATE"` + IGTUNCH float64 `json:"IGTUNCH"` + IGTGNUM int `json:"IGTGNUM"` + MCXINTO float64 `json:"MCXINTO"` + MCXCOMEX int `json:"MCXCOMEX"` + LBRDIS int `json:"LBRDIS"` + ITRATE int `json:"ITRATE"` + UPMRP string `json:"UPMRP"` + IGALADD int `json:"IGALADD"` + RESMRP int `json:"RESMRP"` + RESLESS int `json:"RESLESS"` + CONSUME int `json:"CONSUME"` + UPSALE string `json:"UPSALE"` + RENTACNO int `json:"RENTACNO"` + PSGST float64 `json:"PSGST"` + PCGST float64 `json:"PCGST"` + PIGST float64 `json:"PIGST"` + HSNCODE string `json:"HSNCODE"` + JHSNCODE string `json:"JHSNCODE"` + GSTNAME string `json:"GSTNAME"` + Defino int `json:"defino"` +} diff --git a/servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-units-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-units-table.type.go new file mode 100644 index 0000000..461e06f --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-units-table.type.go @@ -0,0 +1,9 @@ +package ecommerce_erptables + +type ItemUnitErpTable struct { + ItemUnitId int `json:"UNITID"` + ItemUnit string `json:"UNIT"` + ItemDel string `json:"DEL"` + ItemUQC string `json:"UQC"` + ItemDecimal int `json:"DECIMAL"` +} diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-group-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-group-table.type.go new file mode 100644 index 0000000..0edb8a1 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-group-table.type.go @@ -0,0 +1,8 @@ +package ecommerce_maintables + +type ItemGroupMainTable struct { + ItemGroupId string `json:"itemGroupId"` + ItemGroup string `json:"itemGroup"` + ItemPrintName string `json:"itemPrintName"` + ItemUnitId int `json:"itemUnitId"` +} diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-units-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-units-table.type.go new file mode 100644 index 0000000..61ed545 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-units-table.type.go @@ -0,0 +1,7 @@ +package ecommerce_maintables + +type ItemUnitMainTable struct { + ItemUnitId int `json:"itemUnitId"` + ItemUnit string `json:"itemUnit"` + ItemDecimal int `json:"itemDecimal"` +} diff --git a/servers/jwelly/ecommerce-adapter/main.go b/servers/jwelly/ecommerce-adapter/main.go index 7905807..58d4a6e 100644 --- a/servers/jwelly/ecommerce-adapter/main.go +++ b/servers/jwelly/ecommerce-adapter/main.go @@ -1,5 +1,28 @@ package main -func main() { +import ( + "log" + + ecommerce_env "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/env" + ecommerece_functions "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/functions" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) +func main() { + config := ecommerce_env.Init() + if conn, err := mysqldb.InitalizeMysqlDbWithConfig(config.ServerDatabase); err != nil { + log.Panicf("Connection In Server Database") + panic(err) + } else { + ecommerce_env.MysqlConnections.Server = conn + } + if conn, err := mysqldb.InitalizeMysqlDbWithConfig(config.ErpDatabase); err != nil { + log.Panicf("Connection In ERP Database") + panic(err) + } else { + ecommerce_env.MysqlConnections.ERP = conn + } + ecommerece_functions.SyncItemUnitTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerece_functions.SyncItemGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + log.Printf("DONE") } diff --git a/servers/jwelly/mysql-backup-cmd/main.go b/servers/jwelly/mysql-backup-cmd/main.go index 8c01337..587f33e 100644 --- a/servers/jwelly/mysql-backup-cmd/main.go +++ b/servers/jwelly/mysql-backup-cmd/main.go @@ -36,7 +36,7 @@ func main() { for _, v := range env.ConnectionConfig.ServerConfig { cccc := &interfaces.ConfigWithConnection{ServerConfig: &v} if err := interfaces.ValidateAllConnectionsAndAssign(cccc); err != nil { - fmt.Printf("Error In Validating Connectino %s", v.Name) + fmt.Printf("Error In Validating Connection %s", v.Name) println(err.Error()) } if env.ServerEnv.IsDev && env.ServerEnv.Env.APP_ENV == coreEnv.APP_ENV_LOCAL { diff --git a/servers/jwelly/mysql-backup/main.go b/servers/jwelly/mysql-backup/main.go index 2b67790..e762cb3 100644 --- a/servers/jwelly/mysql-backup/main.go +++ b/servers/jwelly/mysql-backup/main.go @@ -33,7 +33,7 @@ func main() { for _, v := range env.ConnectionConfig.ServerConfig { cccc := &interfaces.ConfigWithConnection{ServerConfig: &v} if err := interfaces.ValidateAllConnectionsAndAssign(cccc); err != nil { - fmt.Printf("Error In Validating Connectino %s", v.Name) + fmt.Printf("Error In Validating Connection %s", v.Name) println(err.Error()) } if env.ServerEnv.IsDev && env.ServerEnv.Env.APP_ENV == coreEnv.APP_ENV_LOCAL { diff --git a/servers/jwelly/mysql-to-mysql/main.go b/servers/jwelly/mysql-to-mysql/main.go index 47110a7..804b0a0 100644 --- a/servers/jwelly/mysql-to-mysql/main.go +++ b/servers/jwelly/mysql-to-mysql/main.go @@ -32,7 +32,7 @@ func main() { for _, v := range env.ConnectionConfig.ServerConfig { cccc := &interfaces.ConfigWithConnection{ServerConfig: &v} if err := interfaces.ValidateAllConnectionsAndAssign(cccc); err != nil { - fmt.Printf("Error In Validating Connectino %s", v.Name) + fmt.Printf("Error In Validating Connection %s", v.Name) println(err.Error()) } if env.ServerEnv.IsDev && env.ServerEnv.Env.APP_ENV == coreEnv.APP_ENV_LOCAL { diff --git a/servers/jwelly/mysql-to-surreal/main.go b/servers/jwelly/mysql-to-surreal/main.go index 89c1a72..c1a1821 100644 --- a/servers/jwelly/mysql-to-surreal/main.go +++ b/servers/jwelly/mysql-to-surreal/main.go @@ -33,7 +33,7 @@ func InitaliseAndPopulateTheConnection() { for _, v := range env.ConnectionConfig.ServerConfig { cccc := &mysql_to_surreal_functions.ConfigWithConnection{ServerConfig: &v, DbConnections: &mysql_to_surreal_functions.ConnectionsToDb{}} if err := mysql_to_surreal_functions.ValidateAllConnectionsAndAssign(cccc); err != nil { - fmt.Printf("Error In Validating Connectino %s", v.Name) + fmt.Printf("Error In Validating Connection %s", v.Name) println(err.Error()) } else { DeferFunctionSlice = append(DeferFunctionSlice, cccc.DbConnections.MysqlDbConncetion.DeferFunction, cccc.DbConnections.SurrealDbConncetion.DeferFunction) From 5eba23b3cd40599d4a1559c9c8677ca5b73118ea Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Fri, 12 Jun 2026 14:23:42 +0530 Subject: [PATCH 03/15] Item Mast Sync Completed --- .../jwelly/ecommerce-adapter/Server.Db.sql | 18 ++++- .../functions/item-group.func.go | 7 +- .../functions/item-master.func.go | 71 +++++++++++++++++++ .../functions/unit-table.func.go | 2 +- .../MainTables/item-mast-table.type.go | 10 +++ servers/jwelly/ecommerce-adapter/main.go | 1 + 6 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 servers/jwelly/ecommerce-adapter/functions/item-master.func.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-mast-table.type.go diff --git a/servers/jwelly/ecommerce-adapter/Server.Db.sql b/servers/jwelly/ecommerce-adapter/Server.Db.sql index 9f2e73c..a3e38a5 100644 --- a/servers/jwelly/ecommerce-adapter/Server.Db.sql +++ b/servers/jwelly/ecommerce-adapter/Server.Db.sql @@ -18,4 +18,20 @@ CREATE TABLE ALTER TABLE `ItemGroup` ADD INDEX `IgroupUnitToUnitID_idx` (`itemGroupUnitId` ASC) VISIBLE; -ALTER TABLE `ItemGroup` ADD CONSTRAINT `IgroupUnitToUnitID` FOREIGN KEY (`itemGroupUnitId`) REFERENCES `ItemUnit` (`itemUnitId`) ON DELETE RESTRICT ON UPDATE CASCADE; \ No newline at end of file +ALTER TABLE `ItemGroup` ADD CONSTRAINT `IgroupUnitToUnitID` FOREIGN KEY (`itemGroupUnitId`) REFERENCES `ItemUnit` (`itemUnitId`) ON DELETE RESTRICT ON UPDATE CASCADE; + +CREATE TABLE + `ItemMaster` ( + `itemId` INT NOT NULL, + `itemName` VARCHAR(45) NULL, + `iGroupId` INT (3) NULL, + `itemPrintName` VARCHAR(45) NULL, + `iUnitId` INT(3) NULL, + `itemTagPrefix` VARCHAR(5) NULL, + PRIMARY KEY (`itemId`), + UNIQUE INDEX `itemName_UNIQUE` (`itemName` ASC) VISIBLE, + INDEX `ItemMast1_idx` (`iGroupId` ASC) VISIBLE, + INDEX `ItemMast2_idx` (`iUnitId` ASC) VISIBLE, + CONSTRAINT `ItemMast1` FOREIGN KEY (`iGroupId`) REFERENCES `ItemGroup` (`itemGroupId`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `ItemMast2` FOREIGN KEY (`iUnitId`) REFERENCES `ItemUnit` (`itemUnitId`) ON DELETE RESTRICT ON UPDATE CASCADE + ); \ No newline at end of file diff --git a/servers/jwelly/ecommerce-adapter/functions/item-group.func.go b/servers/jwelly/ecommerce-adapter/functions/item-group.func.go index 1698b9f..4fa963b 100644 --- a/servers/jwelly/ecommerce-adapter/functions/item-group.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/item-group.func.go @@ -40,11 +40,10 @@ func SyncItemGroupTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBS results = append(results, row) } log.Printf("Fetched Total %d rows from ItemGroup in Duration of %s\n", len(results), time.Since(startTime)) - numColumns := 3 valueStrings := make([]string, 0, len(results)) - valueArgs := make([]interface{}, 0, len(results)*numColumns) + valueArgs := make([]interface{}, 0, len(results)*ServerItemGroupOfColums) for _, group := range results { - valueStrings = append(valueStrings, "(?, ?, ?,?)") + valueStrings = append(valueStrings, "(?, ?, ? ,?)") valueArgs = append(valueArgs, group.ItemGroupId, group.ItemGroup, group.ItemPrintName, group.ItemUnitId) } finalQuery := fmt.Sprintf(ItemGroupUpsertQuery, strings.Join(valueStrings, ", ")) @@ -58,6 +57,6 @@ func SyncItemGroupTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBS if err != nil { log.Fatal(err) } - fmt.Printf("Bulk upsert for Item Group successful! Rows affected metric: %d\n", rowsAffected) + log.Printf("Bulk upsert for Item Group successful! Rows affected metric: %d\n", rowsAffected) } diff --git a/servers/jwelly/ecommerce-adapter/functions/item-master.func.go b/servers/jwelly/ecommerce-adapter/functions/item-master.func.go new file mode 100644 index 0000000..793d0ed --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/functions/item-master.func.go @@ -0,0 +1,71 @@ +package ecommerece_functions + +import ( + "context" + "fmt" + "log" + "strings" + "time" + + ecommerce_maintables "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/interfaces/MainTables" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) + +const SelectItemMasterQuery = "select ino,IDESC,IGROUPID,PNAME,UNITID,tpre from itemmast;" +const ServerItemMasterTable = "ItemMaster" +const ServerItemMasterOfColums = 4 +const ItemMasterUpsertQuery = `INSERT INTO ItemMaster (itemId, itemName, iGroupId,itemPrintName,iUnitId,itemTagPrefix) VALUES %s AS new_row ON DUPLICATE KEY UPDATE itemName = new_row.itemName, iGroupId = new_row.iGroupId, itemPrintName = new_row.itemPrintName, iUnitId = new_row.iUnitId, itemTagPrefix = new_row.itemTagPrefix` + +func SyncItemMasterTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { + initalTime := time.Now() + startTime := initalTime + rows, err := erpDb.Db.Query(SelectItemMasterQuery) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err != nil { + log.Printf("Error in Reading Unit From Server") + log.Println(err.Error()) + return + } + var results []*ecommerce_maintables.ItemMasterTable = []*ecommerce_maintables.ItemMasterTable{} + for rows.Next() { + row := &ecommerce_maintables.ItemMasterTable{} + err = rows.Scan( + &row.ItemId, + &row.ItemName, + &row.IGroupId, + &row.ItemPrintName, + &row.IUnitId, + &row.ItemTagPrefix, + ) + results = append(results, row) + } + log.Printf("Fetched Total %d rows from Item Master in Duration of %s\n", len(results), time.Since(startTime)) + valueStrings := make([]string, 0, len(results)) + valueArgs := make([]interface{}, 0, len(results)*ServerItemMasterOfColums) + + for _, item := range results { + valueStrings = append(valueStrings, "(?,?,?,?,?,?)") + valueArgs = append(valueArgs, + item.ItemId, + item.ItemName, + item.IGroupId, + item.ItemPrintName, + item.IUnitId, + item.ItemTagPrefix, + ) + } + finalQuery := fmt.Sprintf(ItemMasterUpsertQuery, strings.Join(valueStrings, ", ")) + result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) + if err != nil { + log.Fatalf("Bulk upsert failed: %v", err) + log.Fatalf("Query : %s", finalQuery) + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + log.Fatal(err) + } + log.Printf("Bulk upsert for Item Master successful! Rows affected metric: %d\n", rowsAffected) + +} diff --git a/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go b/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go index b0ec8e2..c0c9584 100644 --- a/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go @@ -56,6 +56,6 @@ func SyncItemUnitTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBSt if err != nil { log.Fatal(err) } - fmt.Printf("Bulk upsert successful! Rows affected metric: %d\n", rowsAffected) + log.Printf("Bulk upsert successful! Rows affected metric: %d\n", rowsAffected) } diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-mast-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-mast-table.type.go new file mode 100644 index 0000000..b2102f5 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-mast-table.type.go @@ -0,0 +1,10 @@ +package ecommerce_maintables + +type ItemMasterTable struct { + ItemId int `json:"itemId"` + ItemName string `json:"itemName"` + IGroupId int `json:"iGroupId"` + ItemPrintName string `json:"itemPrintName"` + IUnitId int `json:"iUnitId"` + ItemTagPrefix string `json:"itemTagPrefix"` +} diff --git a/servers/jwelly/ecommerce-adapter/main.go b/servers/jwelly/ecommerce-adapter/main.go index 58d4a6e..d0f0e80 100644 --- a/servers/jwelly/ecommerce-adapter/main.go +++ b/servers/jwelly/ecommerce-adapter/main.go @@ -24,5 +24,6 @@ func main() { } ecommerece_functions.SyncItemUnitTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerece_functions.SyncItemGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerece_functions.SyncItemMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) log.Printf("DONE") } From c51f1b445ec6989b4fa12fa9feba16d00a2fa698 Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Mon, 15 Jun 2026 19:03:28 +0530 Subject: [PATCH 04/15] WIP --- .../jwelly/ecommerce-adapter/Server.Db.sql | 12 +++- .../ecommerce-adapter/functions/stamp.func.go | 67 +++++++++++++++++++ .../MainTables/item-group-table.type.go | 2 +- .../interfaces/MainTables/item-table.type.go | 11 +++ .../item-variation-table.type copy.go | 10 +++ .../interfaces/MainTables/stamp-table.type.go | 9 +++ servers/jwelly/ecommerce-adapter/main.go | 1 + utility/mysql/mysql-date-string.interface.go | 1 - 8 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 servers/jwelly/ecommerce-adapter/functions/stamp.func.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-table.type.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-variation-table.type copy.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/stamp-table.type.go diff --git a/servers/jwelly/ecommerce-adapter/Server.Db.sql b/servers/jwelly/ecommerce-adapter/Server.Db.sql index a3e38a5..3611d72 100644 --- a/servers/jwelly/ecommerce-adapter/Server.Db.sql +++ b/servers/jwelly/ecommerce-adapter/Server.Db.sql @@ -26,7 +26,7 @@ CREATE TABLE `itemName` VARCHAR(45) NULL, `iGroupId` INT (3) NULL, `itemPrintName` VARCHAR(45) NULL, - `iUnitId` INT(3) NULL, + `iUnitId` INT (3) NULL, `itemTagPrefix` VARCHAR(5) NULL, PRIMARY KEY (`itemId`), UNIQUE INDEX `itemName_UNIQUE` (`itemName` ASC) VISIBLE, @@ -34,4 +34,14 @@ CREATE TABLE INDEX `ItemMast2_idx` (`iUnitId` ASC) VISIBLE, CONSTRAINT `ItemMast1` FOREIGN KEY (`iGroupId`) REFERENCES `ItemGroup` (`itemGroupId`) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `ItemMast2` FOREIGN KEY (`iUnitId`) REFERENCES `ItemUnit` (`itemUnitId`) ON DELETE RESTRICT ON UPDATE CASCADE + ); + +CREATE TABLE + `Stamp` ( + `stampId` INT NOT NULL, + `STAMP` VARCHAR(45) NULL, + `tunch` DECIMAL(8, 2) NULL, + `stockTunch` DECIMAL(8, 2) NULL, + `sellTunch` DECIMAL(8, 2) NULL DEFAULT 0, + PRIMARY KEY (`stampId`) ); \ No newline at end of file diff --git a/servers/jwelly/ecommerce-adapter/functions/stamp.func.go b/servers/jwelly/ecommerce-adapter/functions/stamp.func.go new file mode 100644 index 0000000..607eb4e --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/functions/stamp.func.go @@ -0,0 +1,67 @@ +package ecommerece_functions + +import ( + "context" + "fmt" + "log" + "strings" + "time" + + ecommerce_maintables "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/interfaces/MainTables" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) + +// const SelectStampQuery +const SelectStampQuery = "select STAMPID,STAMP,STUNCH,STKTUNCH from stamp;" +const ServerStampTable = "Stamp" +const ServerStampOfColums = 4 +const StampUpsertQuery = `INSERT INTO Stamp (stampId,STAMP,tunch,stockTunch) VALUES %s AS new_row ON DUPLICATE KEY UPDATE stampId=new_row.stampId,STAMP=new_row.STAMP,tunch=new_row.tunch,stockTunch=new_row.stockTunch` + +func SyncStampTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { + initalTime := time.Now() + startTime := initalTime + rows, err := erpDb.Db.Query(SelectStampQuery) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err != nil { + log.Printf("Error in Reading Unit From Server") + log.Println(err.Error()) + return + } + var results []*ecommerce_maintables.StampMainTable = []*ecommerce_maintables.StampMainTable{} + for rows.Next() { + row := &ecommerce_maintables.StampMainTable{} + err = rows.Scan( + &row.StampId, + &row.Stamp, + &row.Tunch, + &row.StockTunch, + ) + results = append(results, row) + } + log.Printf("Fetched Total %d rows from Stamp in Duration of %s\n", len(results), time.Since(startTime)) + valueStrings := make([]string, 0, len(results)) + valueArgs := make([]interface{}, 0, len(results)*ServerStampOfColums) + for _, stamp := range results { + valueStrings = append(valueStrings, "(?, ?, ? ,?)") + valueArgs = append(valueArgs, + stamp.StampId, + stamp.Stamp, + stamp.Tunch, + stamp.StockTunch, + ) + } + finalQuery := fmt.Sprintf(StampUpsertQuery, strings.Join(valueStrings, ", ")) + result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) + if err != nil { + log.Fatalf("Bulk upsert failed: %v", err) + log.Fatalf("Query : %s", finalQuery) + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + log.Fatal(err) + } + log.Printf("Bulk upsert for Stamp successful! Rows affected metric: %d\n", rowsAffected) + +} diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-group-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-group-table.type.go index 0edb8a1..09a73db 100644 --- a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-group-table.type.go +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-group-table.type.go @@ -1,7 +1,7 @@ package ecommerce_maintables type ItemGroupMainTable struct { - ItemGroupId string `json:"itemGroupId"` + ItemGroupId int `json:"itemGroupId"` ItemGroup string `json:"itemGroup"` ItemPrintName string `json:"itemPrintName"` ItemUnitId int `json:"itemUnitId"` diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-table.type.go new file mode 100644 index 0000000..2dcebaf --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-table.type.go @@ -0,0 +1,11 @@ +package ecommerce_maintables + +import "time" + +type ItemTagMainTable struct { + ItemTagId int `json:"itemTagId"` + ItemTag string `json:"itemTag"` + ItemVTagId int `json:"itemVTagId"` + TItemId int `json:"tItemId"` + TagCreatedDate time.Time `json:"tagCreatedDate"` +} diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-variation-table.type copy.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-variation-table.type copy.go new file mode 100644 index 0000000..0672306 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-variation-table.type copy.go @@ -0,0 +1,10 @@ +package ecommerce_maintables + +type TagVariationMainTable struct { + TagVariationId int `json:"tagVariationId"` + VTagId int `json:"vTagId"` + VStampId int `json:"vStampId"` + VGrossWt float64 `json:"vGrossWt"` + VLessWeight float64 `json:"vLessWeight"` + VNetWt float64 `json:"vNetWt"` +} \ No newline at end of file diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/stamp-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/stamp-table.type.go new file mode 100644 index 0000000..32a39f5 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/stamp-table.type.go @@ -0,0 +1,9 @@ +package ecommerce_maintables + +type StampMainTable struct { + StampId int `json:"stampId"` + Stamp string `json:"STAMP"` + Tunch float64 `json:"tunch"` + StockTunch float64 `json:"stockTunch"` + SellTunch float64 `json:"sellTunch"` +} diff --git a/servers/jwelly/ecommerce-adapter/main.go b/servers/jwelly/ecommerce-adapter/main.go index d0f0e80..6a38561 100644 --- a/servers/jwelly/ecommerce-adapter/main.go +++ b/servers/jwelly/ecommerce-adapter/main.go @@ -25,5 +25,6 @@ func main() { ecommerece_functions.SyncItemUnitTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerece_functions.SyncItemGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerece_functions.SyncItemMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerece_functions.SyncStampTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) log.Printf("DONE") } diff --git a/utility/mysql/mysql-date-string.interface.go b/utility/mysql/mysql-date-string.interface.go index 39ba966..1434413 100644 --- a/utility/mysql/mysql-date-string.interface.go +++ b/utility/mysql/mysql-date-string.interface.go @@ -12,6 +12,5 @@ type MysqlDateWithNull struct { } func (ns *MysqlDateWithNull) MarshalCBOR() ([]byte, error) { - return cbor.Marshal(ns.String) } From 8f77dd0c20b8f6d72ead20420ec963da6978dd74 Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Tue, 16 Jun 2026 02:27:26 +0530 Subject: [PATCH 05/15] feat: Tag Data And Tag Variations Added --- go.mod | 80 +++---- go.sum | 174 +++++++------- .../jwelly/ecommerce-adapter/Server.Db.sql | 36 +++ .../functions/item-group.func.go | 8 +- .../functions/item-master.func.go | 8 +- .../functions/item-tag-variation.func.go | 212 ++++++++++++++++++ .../functions/item-tag.func.go | 70 ++++++ .../ecommerce-adapter/functions/stamp.func.go | 8 +- .../functions/unit-table.func.go | 8 +- .../ErpTables/item-group-table.type.go | 79 ------- .../ErpTables/item-units-table.type.go | 9 - ...m-table.type.go => item-tag-table.type.go} | 0 .../item-variation-table.type copy.go | 10 - .../MainTables/item-variation-table.type.go | 19 ++ servers/jwelly/ecommerce-adapter/main.go | 2 + .../functions/accmast.table.func.go | 6 +- .../functions/category.table.func.go | 6 +- .../functions/item-group.table.func.go | 6 +- .../functions/itemmast.table.func.go | 6 +- .../functions/itrans.table.func.go | 6 +- .../functions/mysql-stamp.table.func.go | 6 +- .../functions/mysql-tgm-table.func.go | 6 +- .../functions/site.table.func.go | 6 +- .../functions/tran1.table.func.go | 6 +- .../functions/unit.table.func.go | 6 +- 25 files changed, 511 insertions(+), 272 deletions(-) create mode 100644 servers/jwelly/ecommerce-adapter/functions/item-tag-variation.func.go create mode 100644 servers/jwelly/ecommerce-adapter/functions/item-tag.func.go delete mode 100644 servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-group-table.type.go delete mode 100644 servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-units-table.type.go rename servers/jwelly/ecommerce-adapter/interfaces/MainTables/{item-table.type.go => item-tag-table.type.go} (100%) delete mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-variation-table.type copy.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-variation-table.type.go diff --git a/go.mod b/go.mod index 278f3fc..ae53a5d 100644 --- a/go.mod +++ b/go.mod @@ -8,11 +8,11 @@ require ( fyne.io/fyne/v2 v2.7.4 github.com/fxamacker/cbor/v2 v2.9.2 github.com/gen2brain/go-fitz v1.24.15 - github.com/go-faker/faker/v4 v4.7.0 - github.com/go-playground/validator/v10 v10.30.2 + github.com/go-faker/faker/v4 v4.8.0 + github.com/go-playground/validator/v10 v10.30.3 github.com/go-sql-driver/mysql v1.10.0 github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 - github.com/gofiber/contrib/v3/websocket v1.1.5 + github.com/gofiber/contrib/v3/websocket v1.2.0 github.com/gofiber/fiber/v2 v2.52.13 github.com/gofiber/fiber/v3 v3.3.0 github.com/golang-jwt/jwt/v5 v5.3.1 @@ -20,20 +20,20 @@ require ( github.com/gorilla/websocket v1.5.3 github.com/joho/godotenv v1.5.1 github.com/jpillora/chisel v1.11.6 - github.com/mattn/go-sqlite3 v1.14.44 + github.com/mattn/go-sqlite3 v1.14.45 github.com/mdp/qrterminal/v3 v3.2.1 github.com/mitchellh/mapstructure v1.5.0 github.com/prplecake/go-thumbnail v0.1.6 - github.com/redis/go-redis/v9 v9.19.0 + github.com/redis/go-redis/v9 v9.20.1 github.com/robfig/cron/v3 v3.0.1 github.com/rpsoftech/mysqldump v0.0.0-20250611190005-213bcf343081 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/surrealdb/surrealdb.go v1.4.0 - go.mau.fi/whatsmeow v0.0.0-20260525123251-933deb5f2ee9 + go.mau.fi/whatsmeow v0.0.0-20260611094716-089932318bc2 go.mongodb.org/mongo-driver/v2 v2.6.0 - golang.org/x/crypto v0.52.0 - golang.org/x/sys v0.45.0 - google.golang.org/api v0.280.0 + golang.org/x/crypto v0.53.0 + golang.org/x/sys v0.46.0 + google.golang.org/api v0.284.0 google.golang.org/protobuf v1.36.11 ) @@ -46,13 +46,13 @@ require ( cloud.google.com/go/iam v1.11.0 // indirect cloud.google.com/go/longrunning v1.0.0 // indirect cloud.google.com/go/monitoring v1.29.0 // indirect - cloud.google.com/go/storage v1.62.2 // indirect + cloud.google.com/go/storage v1.62.3 // indirect filippo.io/edwards25519 v1.2.0 // indirect - fyne.io/systray v1.12.1 // indirect + fyne.io/systray v1.12.2 // indirect github.com/BurntSushi/toml v1.6.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.57.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.57.0 // indirect github.com/MicahParks/keyfunc v1.9.0 // indirect github.com/andybalholm/brotli v1.2.1 // indirect github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 // indirect @@ -60,14 +60,14 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/clipperhouse/uax29/v2 v2.7.0 // indirect github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect - github.com/coder/websocket v1.8.14 // indirect + github.com/coder/websocket v1.8.15 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/ebitengine/purego v0.10.1 // indirect github.com/elliotchance/orderedmap/v3 v3.1.0 // indirect github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect github.com/fasthttp/websocket v1.5.12 // indirect - github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/felixge/httpsnoop v1.1.0 // indirect github.com/fredbi/uri v1.1.1 // indirect github.com/fsnotify/fsnotify v1.10.1 // indirect github.com/fyne-io/gl-js v0.2.0 // indirect @@ -85,8 +85,8 @@ require ( github.com/go-text/render v0.2.1 // indirect github.com/go-text/typesetting v0.3.4 // indirect github.com/godbus/dbus/v5 v5.2.2 // indirect - github.com/gofiber/schema v1.7.1 // indirect - github.com/gofiber/utils/v2 v2.0.6 // indirect + github.com/gofiber/schema v1.8.0 // indirect + github.com/gofiber/utils/v2 v2.1.0 // indirect github.com/gofrs/uuid v4.4.0+incompatible // indirect github.com/golang-jwt/jwt/v4 v4.5.2 // indirect github.com/golang/protobuf v1.5.4 // indirect @@ -102,9 +102,9 @@ require ( github.com/jupiterrider/ffi v0.7.0 // indirect github.com/klauspost/compress v1.18.6 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-colorable v0.1.15 // indirect github.com/mattn/go-isatty v0.0.22 // indirect - github.com/mattn/go-runewidth v0.0.23 // indirect + github.com/mattn/go-runewidth v0.0.24 // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect github.com/nicksnyder/go-i18n/v2 v2.6.1 // indirect github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81 // indirect @@ -114,44 +114,44 @@ require ( github.com/rs/zerolog v1.35.1 // indirect github.com/rymdport/portal v0.4.2 // indirect github.com/savsgio/gotils v0.0.0-20250924091648-bce9a52d7761 // indirect - github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect + github.com/spiffe/go-spiffe/v2 v2.7.0 // indirect github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c // indirect github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef // indirect github.com/stretchr/testify v1.11.1 // indirect github.com/tinylib/msgp v1.6.4 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasthttp v1.71.0 // indirect - github.com/vektah/gqlparser/v2 v2.5.33 // indirect + github.com/vektah/gqlparser/v2 v2.5.34 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.2.0 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect github.com/yuin/goldmark v1.8.2 // indirect - go.mau.fi/libsignal v0.2.1 // indirect + go.mau.fi/libsignal v0.2.2 // indirect go.mau.fi/util v0.9.9 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.43.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 // indirect - go.opentelemetry.io/otel v1.43.0 // indirect - go.opentelemetry.io/otel/metric v1.43.0 // indirect - go.opentelemetry.io/otel/sdk v1.43.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect - go.opentelemetry.io/otel/trace v1.43.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.44.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect + go.opentelemetry.io/otel v1.44.0 // indirect + go.opentelemetry.io/otel/metric v1.44.0 // indirect + go.opentelemetry.io/otel/sdk v1.44.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect + go.opentelemetry.io/otel/trace v1.44.0 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a // indirect - golang.org/x/image v0.41.0 // indirect - golang.org/x/net v0.55.0 // indirect + golang.org/x/exp v0.0.0-20260611194520-c48552f49976 // indirect + golang.org/x/image v0.42.0 // indirect + golang.org/x/net v0.56.0 // indirect golang.org/x/oauth2 v0.36.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/term v0.43.0 // indirect - golang.org/x/text v0.37.0 // indirect + golang.org/x/sync v0.21.0 // indirect + golang.org/x/term v0.44.0 // indirect + golang.org/x/text v0.38.0 // indirect golang.org/x/time v0.15.0 // indirect google.golang.org/appengine/v2 v2.0.6 // indirect - google.golang.org/genproto v0.0.0-20260523011958-0a33c5d7ca68 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68 // indirect + google.golang.org/genproto v0.0.0-20260610212136-7ab31c22f7ad // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260610212136-7ab31c22f7ad // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260610212136-7ab31c22f7ad // indirect google.golang.org/grpc v1.81.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect rsc.io/qr v0.2.0 // indirect diff --git a/go.sum b/go.sum index 910d78f..7d20fcf 100644 --- a/go.sum +++ b/go.sum @@ -18,8 +18,8 @@ cloud.google.com/go/longrunning v1.0.0 h1:lwzWEYD8+NkYV7dhexOz6kmlvajZA70+bW/xMh cloud.google.com/go/longrunning v1.0.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= cloud.google.com/go/monitoring v1.29.0 h1:AHhDsFaSax1/4k+qlIDX/SDGe6hggnfXJ9dkgD9qBPY= cloud.google.com/go/monitoring v1.29.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= -cloud.google.com/go/storage v1.62.2 h1:WgR4U9n7bIzXkkVnwPKKE8bkaKUNsHG+0MAAlh9DGU4= -cloud.google.com/go/storage v1.62.2/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= +cloud.google.com/go/storage v1.62.3 h1:SZq1t23NCI+e96dH77Dg3PEfsNNEjqO8zE5AnD8gVD0= +cloud.google.com/go/storage v1.62.3/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= cloud.google.com/go/trace v1.16.0 h1:GmQovzFc5F0CNfl0VLgL64aoTtu7xsM0YajW2GlG9+E= cloud.google.com/go/trace v1.16.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= @@ -28,26 +28,24 @@ firebase.google.com/go/v4 v4.20.0 h1:ighpjeAC45rY/95cUQ+ojIKlKcTnz2YC0ldam56z2YU firebase.google.com/go/v4 v4.20.0/go.mod h1:hqhkQtZkThGH42TnaYi7A8EFR1E0FEuB5oHvJ1Q57t8= fyne.io/fyne/v2 v2.7.4 h1:OVCI5mT+Onb2kA4wlmGA5pLCqKik9f4NDb5jiR1OMTc= fyne.io/fyne/v2 v2.7.4/go.mod h1:ZD1mmhBY75mSa97IXl3MPlICd1uNHfCXYh5hKIlVOII= -fyne.io/systray v1.12.1 h1:ygBD6aZXwiOmZoY5N+ukbH9pih0Kq6fYgVeMYbr5skQ= -fyne.io/systray v1.12.1/go.mod h1:RVwqP9nYMo7h5zViCBHri2FgjXF7H2cub7MAq4NSoLs= +fyne.io/systray v1.12.2 h1:Y8DZxgLHsVQt6rY9Zrkkg+j67S7vv/1F2viOWKPpVeA= +fyne.io/systray v1.12.2/go.mod h1:RVwqP9nYMo7h5zViCBHri2FgjXF7H2cub7MAq4NSoLs= github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 h1:rIkQfkCOVKc1OiRCNcSDD8ml5RJlZbH/Xsq7lbpynwc= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0/go.mod h1:RD2SsorTmYhF6HkTmDw7KmPYQk8OBYwTkuasChwv7R4= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 h1:O2sXMyJh8b7devAGdE+163xtRurt0RVpB6DIzX5vGfg= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0/go.mod h1:hEpiGU18xf70qb3jbTcIggWAiEfX/cOIVc2OTe4OegA= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0 h1:ZIT85vKP7LBS84XJ0WdJ3dPOX3iz4j3c0+lpajGQMyo= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0/go.mod h1:rqP9UEhOXv9WhQ7Gjz+G5y/pf8+BJZW5/Ts0AhE0PwE= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 h1:0YP0+/ixwu+Uqeu/FGiBZNQ19huiUxxiPXIc9WsLKuQ= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0 h1:l7+6kwRMJNwdCvYdDl7Eax+wzEYHSnNY7zrrfbhDdTA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0/go.mod h1:pJTkW8hEUIIi3Pf65lPZOnn4Y81yCllX6IWk2jNXdkM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.57.0 h1:jLdiS1vO+XJFyDSWRHBx56r4s/NNtcl5J6KyCcWUX/w= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.57.0/go.mod h1:8lmpHY+1VRoteiOwyrQMDt1YGXOrFKCz+1wJW7n3ODY= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.57.0 h1:cSjUzZ7KU8hicTgzaSv9NmSyM9fTVK3y5lsBUl3wOis= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.57.0/go.mod h1:dzcEjy1WJ0Q4u9twNR3LcLhNoYMRCrMCMafpxa0TjPQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.57.0 h1:RoO5+d7uCmDqovLrHCr2/BuViUXvdcrNxyNM1pN9dDQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.57.0/go.mod h1:YqwkQPrWSC7+byyc1VlKbWLBF5JsW5IoL6xUkemYSXk= github.com/MicahParks/keyfunc v1.9.0 h1:lhKd5xrFHLNOWrDc4Tyb/Q1AJ4LCzQ48GVJyVIID3+o= github.com/MicahParks/keyfunc v1.9.0/go.mod h1:IdnCilugA0O/99dW+/MkvlyrsX8+L8+x95xuVNtM5jw= github.com/agnivade/levenshtein v1.2.1 h1:EHBY3UOn1gwdy/VbFwgo4cxecRznFk7fKWN1KOX7eoM= github.com/agnivade/levenshtein v1.2.1/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v1.2.1 h1:R+f5xP285VArJDRgowrfb9DqL18yVK0gKAW/F+eTWro= github.com/andybalholm/brotli v1.2.1/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= @@ -64,8 +62,8 @@ github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJ github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= -github.com/coder/websocket v1.8.14 h1:9L0p0iKiNOibykf283eHkKUHHrpG7f65OE3BhhO7v9g= -github.com/coder/websocket v1.8.14/go.mod h1:NX3SzP+inril6yawo5CQXx8+fk145lPDC6pumgx0mVg= +github.com/coder/websocket v1.8.15 h1:6B2JPeOGlpff2Uz6vOEH1Vzpi0iUz20A+lPVhPHtNUA= +github.com/coder/websocket v1.8.15/go.mod h1:NX3SzP+inril6yawo5CQXx8+fk145lPDC6pumgx0mVg= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dolthub/maphash v0.1.0 h1:bsQ7JsF4FkkWyrP3oCnFJgrCUAFbFf3kOl4L/QxPDyQ= @@ -86,8 +84,8 @@ github.com/fasthttp/websocket v1.5.12 h1:e4RGPpWW2HTbL3zV0Y/t7g0ub294LkiuXXUuTOU github.com/fasthttp/websocket v1.5.12/go.mod h1:I+liyL7/4moHojiOgUOIKEWm9EIxHqxZChS+aMFltyg= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= -github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.1.0 h1:3YtUj32ZZkqZtt3sZZsClsymw/QDuVfpNhoA31zeORc= +github.com/felixge/httpsnoop v1.1.0/go.mod h1:Zqxgdd+1Rkcz8euOqdr7lqgCRJztwr5hp9vDSi5UZCE= github.com/fredbi/uri v1.1.1 h1:xZHJC08GZNIUhbP5ImTHnt5Ya0T8FI2VAwI/37kh2Ko= github.com/fredbi/uri v1.1.1/go.mod h1:4+DZQ5zBjEwQCDmXW5JdIjz0PUA+yJbvtBv+u+adr5o= github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= @@ -106,8 +104,8 @@ github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9 github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/gen2brain/go-fitz v1.24.15 h1:sJNB1MOWkqnzzENPHggFpgxTwW0+S5WF/rM5wUBpJWo= github.com/gen2brain/go-fitz v1.24.15/go.mod h1:SftkiVbTHqF141DuiLwBBM65zP7ig6AVDQpf2WlHamo= -github.com/go-faker/faker/v4 v4.7.0 h1:VboC02cXHl/NuQh5lM2W8b87yp4iFXIu59x4w0RZi4E= -github.com/go-faker/faker/v4 v4.7.0/go.mod h1:u1dIRP5neLB6kTzgyVjdBOV5R1uP7BdxkcWk7tiKQXk= +github.com/go-faker/faker/v4 v4.8.0 h1:QAKmb4TyAMxIgf3a8fXubQXwFFJviBGL2/IDa34N6JQ= +github.com/go-faker/faker/v4 v4.8.0/go.mod h1:u1dIRP5neLB6kTzgyVjdBOV5R1uP7BdxkcWk7tiKQXk= github.com/go-gl/gl v0.0.0-20260331235117-4566fea9a276 h1:IO5P06Pcj9K04d+l4nrf3c2U56+dAotIFG6u4P1wAHI= github.com/go-gl/gl v0.0.0-20260331235117-4566fea9a276/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20260406072232-3ac4aa2bb164 h1:ddtotcEXIT7dFhSeXIWjK8YMFYl5bB2NdYQwgv6Uqjk= @@ -125,8 +123,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.30.2 h1:JiFIMtSSHb2/XBUbWM4i/MpeQm9ZK2xqPNk8vgvu5JQ= -github.com/go-playground/validator/v10 v10.30.2/go.mod h1:mAf2pIOVXjTEBrwUMGKkCWKKPs9NheYGabeB04txQSc= +github.com/go-playground/validator/v10 v10.30.3 h1:4MU6YkEwx7GbcPJOZxrtbu+QfF3pJLJuaYTeAH0DYy8= +github.com/go-playground/validator/v10 v10.30.3/go.mod h1:4Axh7oCNGcoGkqLoE4YWt6n20mcEIsPRlB7vPk3lpyc= github.com/go-sql-driver/mysql v1.10.0 h1:Q+1LV8DkHJvSYAdR83XzuhDaTykuDx0l6fkXxoWCWfw= github.com/go-sql-driver/mysql v1.10.0/go.mod h1:M+cqaI7+xxXGG9swrdeUIoPG3Y3KCkF0pZej+SK+nWk= github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 h1:wG8n/XJQ07TmjbITcGiUaOtXxdrINDz1b0J1w0SzqDc= @@ -139,16 +137,16 @@ github.com/go-text/typesetting-utils v0.0.0-20260223113751-2d88ac90dae3 h1:drBZz github.com/go-text/typesetting-utils v0.0.0-20260223113751-2d88ac90dae3/go.mod h1:3/62I4La/HBRX9TcTpBj4eipLiwzf+vhI+7whTc9V7o= github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ= github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c= -github.com/gofiber/contrib/v3/websocket v1.1.5 h1:f6hVxWO9dqDx0xGSaz4XDSr/QauhAcDtREajLhShRnM= -github.com/gofiber/contrib/v3/websocket v1.1.5/go.mod h1:7tXTp2n9qa6epS2qWVP/S5Eky8M9S8MGmuhBNhANT/A= +github.com/gofiber/contrib/v3/websocket v1.2.0 h1:wjkzC3exbhRL3cPCVLRYN3MFq3yhMvtBeGwqEYQk+yc= +github.com/gofiber/contrib/v3/websocket v1.2.0/go.mod h1:fpqdn3mVAKAKfSOt8yHXhO70bZ1mz6z6NhY87CjM3k8= github.com/gofiber/fiber/v2 v2.52.13 h1:TOKP64iqC9b5P49VrBW5tHhUOvDyrtJ0xePEfzJbCbk= github.com/gofiber/fiber/v2 v2.52.13/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= github.com/gofiber/fiber/v3 v3.3.0 h1:QBd3sYCqdy6Qs5gJYzSw4I4SbqL204jPqpdub/ueiw8= github.com/gofiber/fiber/v3 v3.3.0/go.mod h1:YH7/TAoRaU4kF8slDCtQuFJ1NzC+3MtxUI4KfvQtaIA= -github.com/gofiber/schema v1.7.1 h1:oSJBKdgP8JeIME4TQSAqlNKTU2iBB+2RNmKi8Nsc+TI= -github.com/gofiber/schema v1.7.1/go.mod h1:A/X5Ffyru4p9eBdp99qu+nzviHzQiZ7odLT+TwxWhbk= -github.com/gofiber/utils/v2 v2.0.6 h1:7fXYy7nSsyqbH0GQUMtK4Kwjy4J7R5742VM7JsZxzOs= -github.com/gofiber/utils/v2 v2.0.6/go.mod h1:p7mAHAk3+oUK10ZX2xTw9fZQixb4hCg8SKd4IH2xroU= +github.com/gofiber/schema v1.8.0 h1:NGsC9toPHmj8Xg4KpznuXBzNmHG6V5YV0tXKpKMcmis= +github.com/gofiber/schema v1.8.0/go.mod h1:lmbXPQ8hvzXSLkdS2DS7pb4kpunC2Roh7Sj3HMjGfzA= +github.com/gofiber/utils/v2 v2.1.0 h1:WSu4COJhJw9moNfJu2nQvaM9AFvAQ/nZbigjhHqKgOQ= +github.com/gofiber/utils/v2 v2.1.0/go.mod h1:DdOgEVwQTi8cou/AKWPqhXOR4fHGRVhA/rEWL3IXG7Q= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= @@ -206,14 +204,14 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lxzan/gws v1.8.9 h1:VU3SGUeWlQrEwfUSfokcZep8mdg/BrUF+y73YYshdBM= github.com/lxzan/gws v1.8.9/go.mod h1:d9yHaR1eDTBHagQC6KY7ycUOaz5KWeqQtP3xu7aMK8Y= -github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= -github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-colorable v0.1.15 h1:+u9SLTRGnXv73cEsnsmoZBom+dMU88B2M0aDcWy0/jY= +github.com/mattn/go-colorable v0.1.15/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= -github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw= -github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= -github.com/mattn/go-sqlite3 v1.14.44 h1:3VSe+xafpbzsLbdr2AWlAZk9yRHiBhTBakioXaCKTF8= -github.com/mattn/go-sqlite3 v1.14.44/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= +github.com/mattn/go-runewidth v0.0.24 h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/ay2DU= +github.com/mattn/go-runewidth v0.0.24/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= +github.com/mattn/go-sqlite3 v1.14.45 h1:6KA/spDguL3KV8rnybG7ezSaE4SeMR3KC9VbUoAQaIk= +github.com/mattn/go-sqlite3 v1.14.45/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= github.com/mdp/qrterminal/v3 v3.2.1 h1:6+yQjiiOsSuXT5n9/m60E54vdgFsw0zhADHhHLrFet4= github.com/mdp/qrterminal/v3 v3.2.1/go.mod h1:jOTmXvnBsMy5xqLniO0R++Jmjs2sTm9dFSuQ5kpz/SU= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -234,12 +232,12 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prplecake/go-thumbnail v0.1.6 h1:6mBLXL2/79QHYRCvrciiLtT6vAJfOaMAvNhmjsyLX1c= github.com/prplecake/go-thumbnail v0.1.6/go.mod h1:v8PaF1YrWlJjdkROeoDgDil5nFycVdH7taPOl/NS830= -github.com/redis/go-redis/v9 v9.19.0 h1:XPVaaPSnG6RhYf7p+rmSa9zZfeVAnWsH5h3lxthOm/k= -github.com/redis/go-redis/v9 v9.19.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA= +github.com/redis/go-redis/v9 v9.20.1 h1:sfCU6A8P3dXbKyWes02uxA2baehGux9dZHfEKtsTB1w= +github.com/redis/go-redis/v9 v9.20.1/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/rogpeppe/go-internal v1.15.0 h1:D0RCU5rMAp+SpgkiNdrjfJ+LX4J1M32V2NeCY7EJ6hc= +github.com/rogpeppe/go-internal v1.15.0/go.mod h1:DrUVZyrJU+txYW5/1kwtXQSMFio52ZOxX7yM1VHvnxs= github.com/rpsoftech/mysqldump v0.0.0-20250611190005-213bcf343081 h1:BhhQEZcCQNHuJ80dzWHzmroYro0rvijuPaIM12atvNg= github.com/rpsoftech/mysqldump v0.0.0-20250611190005-213bcf343081/go.mod h1:r/BoxnMDP7PN0Hbyysah74N/VHbv6KrnIZ6f7fRsljk= github.com/rs/zerolog v1.35.1 h1:m7xQeoiLIiV0BCEY4Hs+j2NG4Gp2o2KPKmhnnLiazKI= @@ -248,14 +246,12 @@ github.com/rymdport/portal v0.4.2 h1:7jKRSemwlTyVHHrTGgQg7gmNPJs88xkbKcIL3NlcmSU github.com/rymdport/portal v0.4.2/go.mod h1:kFF4jslnJ8pD5uCi17brj/ODlfIidOxlgUDTO5ncnC4= github.com/savsgio/gotils v0.0.0-20250924091648-bce9a52d7761 h1:McifyVxygw1d67y6vxUqls2D46J8W9nrki9c8c0eVvE= github.com/savsgio/gotils v0.0.0-20250924091648-bce9a52d7761/go.mod h1:Vi9gvHvTw4yCUHIznFl5TPULS7aXwgaTByGeBY75Wko= -github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= -github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shamaton/msgpack/v3 v3.1.2 h1:d5gWAIyMU4M0WgDjz6IFSCuXJUA2dFwRHBpDclE8CLw= github.com/shamaton/msgpack/v3 v3.1.2/go.mod h1:DcQG8jrdrQCIxr3HlMYkiXdMhK+KfN2CitkyzsQV4uc= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= -github.com/spiffe/go-spiffe/v2 v2.6.0 h1:l+DolpxNWYgruGQVV0xsfeya3CsC7m8iBzDnMpsbLuo= -github.com/spiffe/go-spiffe/v2 v2.6.0/go.mod h1:gm2SeUoMZEtpnzPNs2Csc0D/gX33k1xIx7lEzqblHEs= +github.com/spiffe/go-spiffe/v2 v2.7.0 h1:uXe1MflJoHw58wAUvxVlcM7WpKtijWG7I1UidcGh6g4= +github.com/spiffe/go-spiffe/v2 v2.7.0/go.mod h1:47Q0Q9/AqGha8QLHp+kxpH4Wca7X7EnOtlIJy3mxZ3U= github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c h1:km8GpoQut05eY3GiYWEedbTT0qnSxrCjsVbb7yKY1KE= github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c/go.mod h1:cNQ3dwVJtS5Hmnjxy6AgTPd0Inb3pW05ftPSX7NZO7Q= github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqdkI8FSpFyZDtCVBc2VmejdNrm5rRQ= @@ -270,8 +266,8 @@ github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6Kllzaw github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.71.0 h1:tepR7H+Guh9VUqxxcPggYi8R3lGUu2Rsdh+z7/FCY3k= github.com/valyala/fasthttp v1.71.0/go.mod h1:z1sDUvOShhXq/C9mwH/fSm1Vb71tUJwmQdgkBrBNwnA= -github.com/vektah/gqlparser/v2 v2.5.33 h1:lRp8aIeNUNbimf/axZd7ETg24q06hBtPaas+TcvI/7E= -github.com/vektah/gqlparser/v2 v2.5.33/go.mod h1:c1I28gSOVNzlfc4WuDlqU7voQnsqI6OG2amkBAFmgts= +github.com/vektah/gqlparser/v2 v2.5.34 h1:MEea5P0qhdcqfBL45ghKE+qr9laidVHTMHjav5h7ckk= +github.com/vektah/gqlparser/v2 v2.5.34/go.mod h1:mFdHLGCio7OGX1fby9ZjTW6FN+qxgmbnBcRIeeScE5s= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= @@ -289,77 +285,79 @@ github.com/yuin/goldmark v1.8.2 h1:kEGpgqJXdgbkhcOgBxkC0X0PmoPG1ZyoZ117rDVp4zE= github.com/yuin/goldmark v1.8.2/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs= github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s= -go.mau.fi/libsignal v0.2.1 h1:vRZG4EzTn70XY6Oh/pVKrQGuMHBkAWlGRC22/85m9L0= -go.mau.fi/libsignal v0.2.1/go.mod h1:iVvjrHyfQqWajOUaMEsIfo3IqgVMrhWcPiiEzk7NgoU= +go.mau.fi/libsignal v0.2.2 h1:QV+XdzQkm3x3aSG7FcqfGSZuFXz83pRZPBFaPygHbOU= +go.mau.fi/libsignal v0.2.2/go.mod h1:CRlIQg2J8uYTfDFvNoO8/KcZjs5cey0vbc6oj/bssY0= go.mau.fi/util v0.9.9 h1:ujDeXCo07HBor5oQLyO1tHklupmqVmPgasc53d7q/NE= go.mau.fi/util v0.9.9/go.mod h1:pqt4Vcrt+5gcH/CgrHZg11qSx+b34o6mknGzOEA6waY= -go.mau.fi/whatsmeow v0.0.0-20260525123251-933deb5f2ee9 h1:l1E9YRXQhjS7Sm6XbYPq8oiSedSCOB6h3FMqZ8pt+K4= -go.mau.fi/whatsmeow v0.0.0-20260525123251-933deb5f2ee9/go.mod h1:SY+3c678dbtckGZF16M+sfEW8ZxTb9xkaKwhXueF5yE= +go.mau.fi/whatsmeow v0.0.0-20260611094716-089932318bc2 h1:VIOZFLguau/48pUzwepY8dgIzU2tDkAsRTbVSk1Fhzg= +go.mau.fi/whatsmeow v0.0.0-20260611094716-089932318bc2/go.mod h1:9hto2r5yVE5yyNTRrZErKNSflGBKxIplUVXAD3EJFDE= go.mongodb.org/mongo-driver/v2 v2.6.0 h1:b9sJOYrkmt4l8bY43ZenFBcPlhYIjaOfYHLtbB/5qi8= go.mongodb.org/mongo-driver/v2 v2.6.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/detectors/gcp v1.43.0 h1:62yY3dT7/ShwOxzA0RsKRgshBmfElKI4d/Myu2OxDFU= -go.opentelemetry.io/contrib/detectors/gcp v1.43.0/go.mod h1:RyaZMFY7yi1kAs45S6mbFGz8O8rqB0dTY14uzvG4LCs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo= -go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= -go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/contrib/detectors/gcp v1.44.0 h1:NmLfL734pJhM0JKaYd2Y28+nY9dPRWYAAbxhRCrKXPw= +go.opentelemetry.io/contrib/detectors/gcp v1.44.0/go.mod h1:tNAsgd8avTGke1+MndXlU5Cru4PQ9Ai/cCNWQv/ZJ/s= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 h1:2yEATaop1/a1I4psnSLgWVPLWwCzkqWakgJy7xTDVy0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0/go.mod h1:D7J12YRapIekYyPWgGPlA/23pRmpSEZC5xJC/TTLI9U= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI= +go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= +go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= -go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= -go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= -go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= -go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= -go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= -go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= -go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= -go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= +go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= +go.opentelemetry.io/otel/metric/x v0.66.0 h1:YkCrx1zLOChi9ZcZ6euupOcsgzbVlec7D/xoEU1+cTA= +go.opentelemetry.io/otel/metric/x v0.66.0/go.mod h1:d1+BDj9t96do0/1LoU1ayfCv79ZgNE41qbhBvnMOBZk= +go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58= +go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0= +go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI= +go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA= +go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk= +go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= -golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= -golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a h1:+3jdDGGB8NGb1Zktc737jlt3/A5f6UlwSzmvqUuufxw= -golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a/go.mod h1:d2fgXJLVs4dYDHUk5lwMIfzRzSrWCfGZb0ZqeLa/Vcw= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= +golang.org/x/exp v0.0.0-20260611194520-c48552f49976 h1:X8Hz2ImujgbmetVuW+w2YkyZChE3cBpZi2P158rTG9M= +golang.org/x/exp v0.0.0-20260611194520-c48552f49976/go.mod h1:vnf4pv9iKZXY58sQE1L86zmNWJ4159e1RkcWiLCkeEY= golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.41.0 h1:8wS72eGJMJaBxK6okTzd4WaXumUlTVlb753MlsSvTCo= -golang.org/x/image v0.41.0/go.mod h1:uIc348UZMSvS5Z65CVZ7iDPaNobNFEPeJ4kbqTOszmA= +golang.org/x/image v0.42.0 h1:1gSs6ehNWXLbkHBIPcWztk3D/6aIA/8hauiAYtlodVY= +golang.org/x/image v0.42.0/go.mod h1:rrpelvGFt+kLPAjPM4HeWPgrl0FtafueU//e5N0qk/Q= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= -golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= +golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= +golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= -golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= +golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= +golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -369,16 +367,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.280.0 h1:F4OfEHZhZh6a7uTufJAXXVd/2TQ8EjM4vZH+jX/vFYk= -google.golang.org/api v0.280.0/go.mod h1:oGKmPZRDoD3vdkf6MA7F4VNkR1rxCiuaPSkhsf3EolU= +google.golang.org/api v0.284.0 h1:i+cKTgeQRcRySkP7QTl5PDO7/pAm8EcMFIUMlNbk4Vc= +google.golang.org/api v0.284.0/go.mod h1:AU44fU+XVZOCcd8uLaBIa/ZgzgPf/0qqY3+m7lQaado= google.golang.org/appengine/v2 v2.0.6 h1:LvPZLGuchSBslPBp+LAhihBeGSiRh1myRoYK4NtuBIw= google.golang.org/appengine/v2 v2.0.6/go.mod h1:WoEXGoXNfa0mLvaH5sV3ZSGXwVmy8yf7Z1JKf3J3wLI= -google.golang.org/genproto v0.0.0-20260523011958-0a33c5d7ca68 h1:cTHF8xtqtBN5sQ4dcoNwOS6FFejvFTkWQbZXsTU3trM= -google.golang.org/genproto v0.0.0-20260523011958-0a33c5d7ca68/go.mod h1:RRHjglSYABVCWpQ7USCpdfhcd9t4PkajvVwyynZizTc= -google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68 h1:WVVw1Nl19li0fMX++FJ3ye1z9+S1N35QODDy5qpnaXw= -google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68/go.mod h1:1dCETSCY2YKZNXQE3h4fun3TYwF5p8jejRKZgfWAgAY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68 h1:PvEgGJf9C/1u5CHkInMg7UFYYUoiaQmW2LbtH0pjB78= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto v0.0.0-20260610212136-7ab31c22f7ad h1:cYL1DPJAQr4JMvhfGao0PDXoaf03ifMljAuDyrbMBd0= +google.golang.org/genproto v0.0.0-20260610212136-7ab31c22f7ad/go.mod h1:cVHIikDNAdx8ISZeW+2rYkEMf3xn0GSaBYmVnWXQBUo= +google.golang.org/genproto/googleapis/api v0.0.0-20260610212136-7ab31c22f7ad h1:3iLyITS/sySRwbUKoC7ogfj2Yr1Cjs0pfaRKj5U5HEw= +google.golang.org/genproto/googleapis/api v0.0.0-20260610212136-7ab31c22f7ad/go.mod h1:KdNqO+rCIWgFumrNBSEDlDNrkrQnpkax7Tv1WxNY8V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260610212136-7ab31c22f7ad h1:45WmJvIV6C2+O/jjLkPUH+F3aOj/1miDoU2DD0+NWbg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260610212136-7ab31c22f7ad/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= diff --git a/servers/jwelly/ecommerce-adapter/Server.Db.sql b/servers/jwelly/ecommerce-adapter/Server.Db.sql index 3611d72..49445bd 100644 --- a/servers/jwelly/ecommerce-adapter/Server.Db.sql +++ b/servers/jwelly/ecommerce-adapter/Server.Db.sql @@ -44,4 +44,40 @@ CREATE TABLE `stockTunch` DECIMAL(8, 2) NULL, `sellTunch` DECIMAL(8, 2) NULL DEFAULT 0, PRIMARY KEY (`stampId`) + ); + +CREATE TABLE + `rpg_jwelly_test`.`ItemsTag` ( + `itemTagId` INT NOT NULL, + `itemTag` VARCHAR(45) NOT NULL, + `itemVTagId` INT NULL, + `tItemId` INT NULL, + `tagCreatedDate` DATE NULL, + PRIMARY KEY (`itemTagId`), + UNIQUE INDEX `itemTag_UNIQUE` (`itemTag` ASC) VISIBLE, + UNIQUE INDEX `combo_unique` (`itemVTagId` ASC, `tItemId` ASC) VISIBLE, + INDEX `itemtag_item_idx` (`tItemId` ASC) VISIBLE, + CONSTRAINT `itemtag_item` FOREIGN KEY (`tItemId`) REFERENCES `rpg_jwelly_test`.`ItemMaster` (`itemId`) ON DELETE RESTRICT ON UPDATE CASCADE + ); + +CREATE TABLE + `rpg_jwelly_test`.`ItemTagVariation` ( + `tagVariationId` INT NOT NULL AUTO_INCREMENT, + `vTagId` INT NULL, + `vStampId` INT NULL, + `vGrossWt` DECIMAL(10, 4) NULL, + `vLessWeight` DECIMAL(10, 4) NULL, + `vNetWt` DECIMAL(10, 4) NULL, + `vStatus` BIT (1) NULL, + `vTunch` DECIMAL(6, 2) NULL, + `vWstg` DECIMAL(6, 2) NULL, + `vSellTunch` DECIMAL(6, 2) NULL, + `vSellWstg` DECIMAL(6, 2) NULL, + `vKarigarCode` VARCHAR(40) NULL, + PRIMARY KEY (`tagVariationId`), + INDEX `TagVariation_1_idx` (`vTagId` ASC) INVISIBLE, + INDEX `TagVariation_2_idx` (`vStampId` ASC) VISIBLE, + UNIQUE INDEX `TagVariation_3` (`vTagId` ASC, `vStampId` ASC) INVISIBLE, + CONSTRAINT `TagVariation_1` FOREIGN KEY (`vTagId`) REFERENCES `rpg_jwelly_test`.`ItemsTag` (`itemTagId`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `TagVariation_2` FOREIGN KEY (`vStampId`) REFERENCES `rpg_jwelly_test`.`Stamp` (`stampId`) ON DELETE RESTRICT ON UPDATE CASCADE ); \ No newline at end of file diff --git a/servers/jwelly/ecommerce-adapter/functions/item-group.func.go b/servers/jwelly/ecommerce-adapter/functions/item-group.func.go index 4fa963b..e9184cf 100644 --- a/servers/jwelly/ecommerce-adapter/functions/item-group.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/item-group.func.go @@ -14,12 +14,12 @@ import ( // const SelectItemGroupQuery const SelectItemGroupQuery = "select igroupid,IGROUP,PNAME,UNITID from igroup;" const ServerItemGroupTable = "ItemGroup" -const ServerItemGroupOfColums = 4 +const ServerItemGroupOfColumns = 4 const ItemGroupUpsertQuery = `INSERT INTO ItemGroup (itemGroupId, itemGroup, itemPrintName,itemGroupUnitId) VALUES %s AS new_row ON DUPLICATE KEY UPDATE itemGroup=new_row.itemGroup,itemPrintName=new_row.itemPrintName,itemGroupUnitId=new_row.itemGroupUnitId` func SyncItemGroupTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime rows, err := erpDb.Db.Query(SelectItemGroupQuery) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() @@ -41,7 +41,7 @@ func SyncItemGroupTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBS } log.Printf("Fetched Total %d rows from ItemGroup in Duration of %s\n", len(results), time.Since(startTime)) valueStrings := make([]string, 0, len(results)) - valueArgs := make([]interface{}, 0, len(results)*ServerItemGroupOfColums) + valueArgs := make([]interface{}, 0, len(results)*ServerItemGroupOfColumns) for _, group := range results { valueStrings = append(valueStrings, "(?, ?, ? ,?)") valueArgs = append(valueArgs, group.ItemGroupId, group.ItemGroup, group.ItemPrintName, group.ItemUnitId) diff --git a/servers/jwelly/ecommerce-adapter/functions/item-master.func.go b/servers/jwelly/ecommerce-adapter/functions/item-master.func.go index 793d0ed..63fe8d2 100644 --- a/servers/jwelly/ecommerce-adapter/functions/item-master.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/item-master.func.go @@ -13,12 +13,12 @@ import ( const SelectItemMasterQuery = "select ino,IDESC,IGROUPID,PNAME,UNITID,tpre from itemmast;" const ServerItemMasterTable = "ItemMaster" -const ServerItemMasterOfColums = 4 +const ServerItemMasterOfColumns = 4 const ItemMasterUpsertQuery = `INSERT INTO ItemMaster (itemId, itemName, iGroupId,itemPrintName,iUnitId,itemTagPrefix) VALUES %s AS new_row ON DUPLICATE KEY UPDATE itemName = new_row.itemName, iGroupId = new_row.iGroupId, itemPrintName = new_row.itemPrintName, iUnitId = new_row.iUnitId, itemTagPrefix = new_row.itemTagPrefix` func SyncItemMasterTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime rows, err := erpDb.Db.Query(SelectItemMasterQuery) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() @@ -42,7 +42,7 @@ func SyncItemMasterTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDB } log.Printf("Fetched Total %d rows from Item Master in Duration of %s\n", len(results), time.Since(startTime)) valueStrings := make([]string, 0, len(results)) - valueArgs := make([]interface{}, 0, len(results)*ServerItemMasterOfColums) + valueArgs := make([]interface{}, 0, len(results)*ServerItemMasterOfColumns) for _, item := range results { valueStrings = append(valueStrings, "(?,?,?,?,?,?)") diff --git a/servers/jwelly/ecommerce-adapter/functions/item-tag-variation.func.go b/servers/jwelly/ecommerce-adapter/functions/item-tag-variation.func.go new file mode 100644 index 0000000..893db02 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/functions/item-tag-variation.func.go @@ -0,0 +1,212 @@ +package ecommerece_functions + +import ( + "context" + "fmt" + "log" + "strings" + "time" + + ecommerce_maintables "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/interfaces/MainTables" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) + +const SelectItemTagVariationQuery = "SELECT tsno, STAMPID, GWT, LESSWT, WT, STATUS, TUNCH, WSTG, STUNCH, SWSTG, karigar FROM tgm1 where vtgno != 0 and STATUS != 'ITM' and TPRE !='REP' ORDER BY tsno LIMIT ? OFFSET ?;" +const ServerItemTagVariationOfColumns = 11 +const ItemTagVariationUpsertQuery = `INSERT INTO ItemTagVariation (vTagId,vStampId,vGrossWt,vLessWeight,vNetWt,vStatus,vTunch,vWstg,vSellTunch,vSellWstg,vKarigarCode) VALUES %s AS new_row ON DUPLICATE KEY UPDATE vTagId = new_row.vTagId,vStampId = new_row.vStampId,vGrossWt = new_row.vGrossWt,vLessWeight = new_row.vLessWeight,vNetWt = new_row.vNetWt,vStatus = new_row.vStatus,vTunch = new_row.vTunch,vWstg = new_row.vWstg,vSellTunch = new_row.vSellTunch,vSellWstg = new_row.vSellWstg,vKarigarCode = new_row.vKarigarCode` + +// func SyncItemTagVariationTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { +// initialTime := time.Now() +// startTime := initialTime +// batchSize := 1000 // You can change this to 2000 if your server handles it well +// offset := 0 +// var totalRowsAffected int64 = 0 +// rows, err := erpDb.Db.Query(SelectItemTagVariationQuery) +// ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) +// defer cancel() +// if err != nil { +// log.Printf("Error in Reading Unit From Server") +// log.Println(err.Error()) +// return +// } +// var results []*ecommerce_maintables.TagVariationMainTable = []*ecommerce_maintables.TagVariationMainTable{} +// for rows.Next() { +// row := &ecommerce_maintables.TagVariationMainTable{} +// err = rows.Scan( +// &row.VTagId, +// &row.VStampId, +// &row.VGrossWt, +// &row.VLessWeight, +// &row.VNetWt, +// &row.VStatusString, +// &row.VTunch, +// &row.VWstg, +// &row.VSellTunch, +// &row.VSellWstg, +// &row.VKarigarCode, +// ) +// if row.VStatusString == "" || row.VStatusString == "AI" { +// row.VStatus = true +// } else { +// row.VStatus = false +// } +// results = append(results, row) +// } +// log.Printf("Fetched Total %d rows from Item Tag Variation in Duration of %s\n", len(results), time.Since(startTime)) +// valueStrings := make([]string, 0, len(results)) +// valueArgs := make([]interface{}, 0, len(results)*ServerItemTagVariationOfColumns) + +// for _, variation := range results { +// valueStrings = append(valueStrings, "(?,?,?,?,?,?,?,?,?,?,?)") +// valueArgs = append(valueArgs, +// variation.VTagId, +// variation.VStampId, +// variation.VGrossWt, +// variation.VLessWeight, +// variation.VNetWt, +// variation.VStatusString, +// variation.VTunch, +// variation.VWstg, +// variation.VSellTunch, +// variation.VSellWstg, +// variation.VKarigarCode, +// ) +// } +// finalQuery := fmt.Sprintf(ItemTagVariationUpsertQuery, strings.Join(valueStrings, ", ")) +// result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) +// if err != nil { +// log.Fatalf("Bulk upsert failed: %v", err) +// log.Fatalf("Query : %s", finalQuery) +// } + +// rowsAffected, err := result.RowsAffected() +// if err != nil { +// log.Fatal(err) +// } +// log.Printf("Bulk upsert for Item Tag Variation successful! Rows affected metric: %d\n", rowsAffected) + +// } +func SyncItemTagVariationTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { + initialTime := time.Now() + batchSize := 1000 // You can change this to 2000 if your server handles it well + offset := 0 + var totalRowsAffected int64 = 0 + + log.Println("Starting chunked sync for Item Tag Variations...") + + for { + // Process a single batch + rowsFetched, rowsAffected, err := processItemTagVariationBatch(serverDb, erpDb, batchSize, offset) + if err != nil { + log.Printf("Sync halted due to error at offset %d: %v", offset, err) + break // Stop the loop on error, but keep the app alive + } + + totalRowsAffected += rowsAffected + + // If we fetched fewer rows than the batch size, we've reached the end of the table + if rowsFetched < batchSize { + break + } + + // Move the offset forward for the next iteration + offset += batchSize + } + + log.Printf("Sync completed successfully! Total Duration: %s | Total Rows Affected Metric: %d\n", time.Since(initialTime), totalRowsAffected) +} + +func processItemTagVariationBatch(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct, limit int, offset int) (int, int64, error) { + startTime := time.Now() + + // 1. Fetch chunk from ERP + rows, err := erpDb.Db.Query(SelectItemTagVariationQuery, limit, offset) + if err != nil { + return 0, 0, fmt.Errorf("failed reading from ERP (Limit: %d, Offset: %d): %w", limit, offset, err) + } + // CRITICAL: Ensure rows are closed immediately after this batch finishes + defer rows.Close() + + var results []*ecommerce_maintables.TagVariationMainTable + + for rows.Next() { + row := &ecommerce_maintables.TagVariationMainTable{} + err = rows.Scan( + &row.VTagId, + &row.VStampId, + &row.VGrossWt, + &row.VLessWeight, + &row.VNetWt, + &row.VStatusString, + &row.VTunch, + &row.VWstg, + &row.VSellTunch, + &row.VSellWstg, + &row.VKarigarCode, + ) + if err != nil { + return 0, 0, fmt.Errorf("row scan error: %w", err) + } + + // Calculate the boolean status based on the string + if row.VStatusString == "" || row.VStatusString == "AI" { + row.VStatus = true + } else { + row.VStatus = false + } + + results = append(results, row) + } + + // Check for errors encountered during iteration + if err = rows.Err(); err != nil { + return 0, 0, fmt.Errorf("rows iteration error: %w", err) + } + + fetchedCount := len(results) + if fetchedCount == 0 { + return 0, 0, nil // Nothing to process + } + + // 2. Prepare chunk for bulk upsert + valueStrings := make([]string, 0, fetchedCount) + valueArgs := make([]interface{}, 0, fetchedCount*ServerItemTagVariationOfColumns) + + for _, variation := range results { + valueStrings = append(valueStrings, "(?,?,?,?,?,?,?,?,?,?,?)") + valueArgs = append(valueArgs, + variation.VTagId, + variation.VStampId, + variation.VGrossWt, + variation.VLessWeight, + variation.VNetWt, + variation.VStatus, // FIX: Inserting the calculated boolean, not the raw string + variation.VTunch, + variation.VWstg, + variation.VSellTunch, + variation.VSellWstg, + variation.VKarigarCode, + ) + } + + finalQuery := fmt.Sprintf(ItemTagVariationUpsertQuery, strings.Join(valueStrings, ", ")) + + // 3. Execute bulk upsert for this specific chunk + // Give each chunk a reasonable 10-second timeout to execute + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) + if err != nil { + return fetchedCount, 0, fmt.Errorf("bulk upsert failed: %w", err) + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + return fetchedCount, 0, fmt.Errorf("could not get rows affected: %w", err) + } + + log.Printf("Batch processed: %d rows fetched | %d rows affected | Duration: %s", fetchedCount, rowsAffected, time.Since(startTime)) + + return fetchedCount, rowsAffected, nil +} diff --git a/servers/jwelly/ecommerce-adapter/functions/item-tag.func.go b/servers/jwelly/ecommerce-adapter/functions/item-tag.func.go new file mode 100644 index 0000000..c6c04e6 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/functions/item-tag.func.go @@ -0,0 +1,70 @@ +package ecommerece_functions + +import ( + "context" + "fmt" + "log" + "strings" + "time" + + ecommerce_maintables "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/interfaces/MainTables" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) + +// tsno,TGNO,vtgno,INO,TPRE,REMARKS,TDATE,ITRNID,GWT,LESSWT,WT,DIAWT,STNWT,GOLDWT,SILWT,PLATWT,OTHWT,LBR,LBR2,LBR3,SLBR,slbr2,SLBR3,STATUS,TUNCH,WSTG,STUNCH,SWSTG,BEEDS,SBEEDS,SOTHERS,othrem,design,DESINO,KACNO,karigar,MRATE,COSTRATE,GWT1,GWT2,SLBR2PC1,SLBR2PC2,STAMPID,flag,PHOTOPATH,size,QUALITY,COLOUR,CLARITY,POLISH,POLISHWT,SITEID,LOGIN,SETNO,ORDNO,DLESS,SLESS,LINKTGNO,LINKTSNO,ADDMRP,LAMT,DAMT,SAMT,MAMT,OTHERS,TAGFINE1,TAGFINE2,COSTDAMT,COSTSAMT,COSTMAMT,MRP,hm,certno,SPOLISH,SPOLISHWT,SWT,VONO,TNO,type,SDLESS,SSLESS,BILLTYPE,UNITID,PC,SALEMRP,JOBID,COSTTOTAL,COSTWSTG,GROSSFINE1,GROSSFINE2,FINE1,FINE2,TOTAL,pcrate,PPROFIT,UPFLAG,STKFINE1,STKFINE2,RATE,DAILY,TRALT,DIAWT1,DIAWT2,STNWT1,STNWT2,LAKHWT,BANFINE,SBANFINE,UPSTATUS,UPINFO,APPROVAL,DESIGNID,REPWT,LASTDATE,DIAPC,STNPC,MRP1,MRP2,COSTING1,COSTING2,MFLAG,SIZEID,GITRNID,diaremark,DOLLAR,DOLXRATE,PDIS,OLDSTATUS,LCODE,SHAPE,TVALUE,TRITRNID,UPTGNO,SVALUE,RFID,BATCH,COSTLAMT,OJOBID,OLINKTGNO,SDAMT,SSAMT,SLAMT,SMAMT,DIS,PKTWT,PKTLESS,ORGGWT,ORGTOTAL,OACNO,VTOTAL,TGMIDESC,SDIAWT,SSTNWT,TRSITEID,SAMPLE,SRTYPE,OAMT,POAMT,RLID,COSTAMT,OCDATE,TRLBR,TRLCODE,TRFLAG,TGCODE,stagfine1,stagfine2,pless,calmrp,gst,saleless,csmamt,grade,cslamt,srate,deldate,pgst,xtfld,cstdmamt +// tsno,TGNO,vtgno,INO,TDATE,STAMPID +const SelectItemTagQuery = "select tsno,TGNO,vtgno,INO,TDATE from tgm1 where vtgno != 0 and STATUS != 'ITM' and TPRE !='REP';" +const ServerItemTagOfColumns = 5 +const ItemTagUpsertQuery = `INSERT INTO ItemsTag (itemTagId,itemTag,itemVTagId,tItemId,tagCreatedDate) VALUES %s AS new_row ON DUPLICATE KEY UPDATE itemVTagId = new_row.itemVTagId,tItemId = new_row.tItemId,tagCreatedDate = new_row.tagCreatedDate` + +func SyncItemTagTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { + initialTime := time.Now() + startTime := initialTime + rows, err := erpDb.Db.Query(SelectItemTagQuery) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err != nil { + log.Printf("Error in Reading Unit From Server") + log.Println(err.Error()) + return + } + var results []*ecommerce_maintables.ItemTagMainTable = []*ecommerce_maintables.ItemTagMainTable{} + for rows.Next() { + row := &ecommerce_maintables.ItemTagMainTable{} + err = rows.Scan( + &row.ItemTagId, + &row.ItemTag, + &row.ItemVTagId, + &row.TItemId, + &row.TagCreatedDate, + ) + results = append(results, row) + } + log.Printf("Fetched Total %d rows from Item Tag Main in Duration of %s\n", len(results), time.Since(startTime)) + valueStrings := make([]string, 0, len(results)) + valueArgs := make([]interface{}, 0, len(results)*ServerItemTagOfColumns) + + for _, tag := range results { + valueStrings = append(valueStrings, "(?,?,?,?,?)") + valueArgs = append(valueArgs, + tag.ItemTagId, + tag.ItemTag, + tag.ItemVTagId, + tag.TItemId, + tag.TagCreatedDate, + ) + } + finalQuery := fmt.Sprintf(ItemTagUpsertQuery, strings.Join(valueStrings, ", ")) + result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) + if err != nil { + log.Fatalf("Bulk upsert failed: %v", err) + log.Fatalf("Query : %s", finalQuery) + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + log.Fatal(err) + } + log.Printf("Bulk upsert for Item Tag Main successful! Rows affected metric: %d\n", rowsAffected) + +} diff --git a/servers/jwelly/ecommerce-adapter/functions/stamp.func.go b/servers/jwelly/ecommerce-adapter/functions/stamp.func.go index 607eb4e..041b6b8 100644 --- a/servers/jwelly/ecommerce-adapter/functions/stamp.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/stamp.func.go @@ -14,12 +14,12 @@ import ( // const SelectStampQuery const SelectStampQuery = "select STAMPID,STAMP,STUNCH,STKTUNCH from stamp;" const ServerStampTable = "Stamp" -const ServerStampOfColums = 4 +const ServerStampOfColumns = 4 const StampUpsertQuery = `INSERT INTO Stamp (stampId,STAMP,tunch,stockTunch) VALUES %s AS new_row ON DUPLICATE KEY UPDATE stampId=new_row.stampId,STAMP=new_row.STAMP,tunch=new_row.tunch,stockTunch=new_row.stockTunch` func SyncStampTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime rows, err := erpDb.Db.Query(SelectStampQuery) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() @@ -41,7 +41,7 @@ func SyncStampTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruc } log.Printf("Fetched Total %d rows from Stamp in Duration of %s\n", len(results), time.Since(startTime)) valueStrings := make([]string, 0, len(results)) - valueArgs := make([]interface{}, 0, len(results)*ServerStampOfColums) + valueArgs := make([]interface{}, 0, len(results)*ServerStampOfColumns) for _, stamp := range results { valueStrings = append(valueStrings, "(?, ?, ? ,?)") valueArgs = append(valueArgs, diff --git a/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go b/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go index c0c9584..e05aeea 100644 --- a/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go @@ -13,12 +13,12 @@ import ( const SelectUnitTableQuery = "select UNITID,UNIT,`DECIMAL` from units;" const ServerUnitTable = "ItemUnit" -const UniTableNumberOfColums = 3 +const UniTableNumberOfColumns = 3 const UpsertUnitTableQuery = `INSERT INTO ItemUnit (itemUnitId, itemUnit, itemDecimal) VALUES %s AS new_row ON DUPLICATE KEY UPDATE itemUnit = new_row.itemUnit, itemDecimal = new_row.itemDecimal` func SyncItemUnitTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime rows, err := erpDb.Db.Query(SelectUnitTableQuery) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() @@ -40,7 +40,7 @@ func SyncItemUnitTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBSt log.Printf("Fetched Total %d rows from Units in Duration of %s\n", len(results), time.Since(startTime)) valueStrings := make([]string, 0, len(results)) - valueArgs := make([]interface{}, 0, len(results)*UniTableNumberOfColums) + valueArgs := make([]interface{}, 0, len(results)*UniTableNumberOfColumns) for _, unit := range results { valueStrings = append(valueStrings, "(?, ?, ?)") valueArgs = append(valueArgs, unit.ItemUnitId, unit.ItemUnit, unit.ItemDecimal) diff --git a/servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-group-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-group-table.type.go deleted file mode 100644 index 0198764..0000000 --- a/servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-group-table.type.go +++ /dev/null @@ -1,79 +0,0 @@ -package ecommerce_erptables - -type ItemGroupERPTableStruct struct { - Igroupid int `json:"igroupid"` - IGROUP string `json:"IGROUP"` - PNAME string `json:"PNAME"` - UNDERID int `json:"UNDERID"` - ITNAME string `json:"ITNAME"` - LTAX float64 `json:"LTAX"` - CTAX float64 `json:"CTAX"` - GP float64 `json:"GP"` - OBAL float64 `json:"OBAL"` - CBAL float64 `json:"CBAL"` - SACNO int `json:"SACNO"` - PACNO int `json:"PACNO"` - STSACNO int `json:"STSACNO"` - STPACNO int `json:"STPACNO"` - IACNO int `json:"IACNO"` - RACNO int `json:"RACNO"` - CCODE string `json:"CCODE"` - STVAL int `json:"STVAL"` - DIV float64 `json:"DIV"` - INTO float64 `json:"INTO"` - UNITID int `json:"UNITID"` - DBHAV string `json:"DBHAV"` - GWTNWT int `json:"GWTNWT"` - STAMPID int `json:"STAMPID"` - ITYPE int `json:"ITYPE"` - DEL string `json:"DEL"` - TTYPE int `json:"TTYPE"` - ALTTAG int `json:"ALTTAG"` - SRTOTAL float64 `json:"SRTOTAL"` - SRDAMT float64 `json:"SRDAMT"` - SRSAMT float64 `json:"SRSAMT"` - SRLAMT float64 `json:"SRLAMT"` - SRMAMT int `json:"SRMAMT"` - EXTOTAL float64 `json:"EXTOTAL"` - EXLAMT float64 `json:"EXLAMT"` - EXMAMT int `json:"EXMAMT"` - EXDAMT float64 `json:"EXDAMT"` - EXSAMT float64 `json:"EXSAMT"` - MRPTYPE int `json:"MRPTYPE"` - DIVIDERATE float64 `json:"DIVIDERATE"` - INTORATE float64 `json:"INTORATE"` - PURLESS float64 `json:"PURLESS"` - DIS float64 `json:"DIS"` - SMDET string `json:"SMDET"` - RTAG int `json:"RTAG"` - MINQTY float64 `json:"MINQTY"` - POINT float64 `json:"POINT"` - RESDRATE string `json:"RESDRATE"` - RESSRATE string `json:"RESSRATE"` - RESMRATE string `json:"RESMRATE"` - RESLBR string `json:"RESLBR"` - Resigrp string `json:"resigrp"` - CPOINT float64 `json:"CPOINT"` - IRLEVEL int `json:"IRLEVEL"` - VRATE float64 `json:"VRATE"` - IGTUNCH float64 `json:"IGTUNCH"` - IGTGNUM int `json:"IGTGNUM"` - MCXINTO float64 `json:"MCXINTO"` - MCXCOMEX int `json:"MCXCOMEX"` - LBRDIS int `json:"LBRDIS"` - ITRATE int `json:"ITRATE"` - UPMRP string `json:"UPMRP"` - IGALADD int `json:"IGALADD"` - RESMRP int `json:"RESMRP"` - RESLESS int `json:"RESLESS"` - CONSUME int `json:"CONSUME"` - UPSALE string `json:"UPSALE"` - RENTACNO int `json:"RENTACNO"` - PSGST float64 `json:"PSGST"` - PCGST float64 `json:"PCGST"` - PIGST float64 `json:"PIGST"` - HSNCODE string `json:"HSNCODE"` - JHSNCODE string `json:"JHSNCODE"` - GSTNAME string `json:"GSTNAME"` - Defino int `json:"defino"` -} diff --git a/servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-units-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-units-table.type.go deleted file mode 100644 index 461e06f..0000000 --- a/servers/jwelly/ecommerce-adapter/interfaces/ErpTables/item-units-table.type.go +++ /dev/null @@ -1,9 +0,0 @@ -package ecommerce_erptables - -type ItemUnitErpTable struct { - ItemUnitId int `json:"UNITID"` - ItemUnit string `json:"UNIT"` - ItemDel string `json:"DEL"` - ItemUQC string `json:"UQC"` - ItemDecimal int `json:"DECIMAL"` -} diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-tag-table.type.go similarity index 100% rename from servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-table.type.go rename to servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-tag-table.type.go diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-variation-table.type copy.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-variation-table.type copy.go deleted file mode 100644 index 0672306..0000000 --- a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-variation-table.type copy.go +++ /dev/null @@ -1,10 +0,0 @@ -package ecommerce_maintables - -type TagVariationMainTable struct { - TagVariationId int `json:"tagVariationId"` - VTagId int `json:"vTagId"` - VStampId int `json:"vStampId"` - VGrossWt float64 `json:"vGrossWt"` - VLessWeight float64 `json:"vLessWeight"` - VNetWt float64 `json:"vNetWt"` -} \ No newline at end of file diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-variation-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-variation-table.type.go new file mode 100644 index 0000000..9ea41bc --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-variation-table.type.go @@ -0,0 +1,19 @@ +package ecommerce_maintables + +import mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" + +type TagVariationMainTable struct { + VStatusString string `json:"-"` + TagVariationId int `json:"tagVariationId"` + VTagId int `json:"vTagId"` + VStampId int `json:"vStampId"` + VGrossWt float64 `json:"vGrossWt"` + VLessWeight float64 `json:"vLessWeight"` + VNetWt float64 `json:"vNetWt"` + VStatus mysqldb.BitBool `json:"vStatus"` + VTunch float64 `json:"vTunch"` + VWstg float64 `json:"vWstg"` + VSellTunch float64 `json:"vSellTunch"` + VSellWstg float64 `json:"vSellWstg"` + VKarigarCode string `json:"vKarigarCode"` +} diff --git a/servers/jwelly/ecommerce-adapter/main.go b/servers/jwelly/ecommerce-adapter/main.go index 6a38561..48d3999 100644 --- a/servers/jwelly/ecommerce-adapter/main.go +++ b/servers/jwelly/ecommerce-adapter/main.go @@ -26,5 +26,7 @@ func main() { ecommerece_functions.SyncItemGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerece_functions.SyncItemMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerece_functions.SyncStampTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerece_functions.SyncItemTagTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerece_functions.SyncItemTagVariationTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) log.Printf("DONE") } diff --git a/servers/jwelly/mysql-to-surreal/functions/accmast.table.func.go b/servers/jwelly/mysql-to-surreal/functions/accmast.table.func.go index 8ab9660..adc93c1 100644 --- a/servers/jwelly/mysql-to-surreal/functions/accmast.table.func.go +++ b/servers/jwelly/mysql-to-surreal/functions/accmast.table.func.go @@ -41,8 +41,8 @@ func init() { } func (c *ConfigWithConnection) ReadAndStoreAccMastTable() { rows, err := c.DbConnections.MysqlDbConncetion.Db.Query(GetAccMastTableCommand) - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime if err != nil { fmt.Printf("Error in ReadAndStoreAccMastTable For %s", c.ServerConfig.Name) fmt.Println(err.Error()) @@ -273,5 +273,5 @@ func (c *ConfigWithConnection) ReadAndStoreAccMastTable() { if dddd, err := surrealdb.Select[[]any](localSurrealdb.SurrealCTX, c.DbConnections.SurrealDbConncetion.Db, models.Table(AccMastTableName)); err == nil { fmt.Printf("Select All %s from SurrealDB in Duration of %s with total rows %d\n", AccMastTableName, time.Since(startTime), len(*dddd)) } - fmt.Printf("%s Operation Completed in Duration of %s\n", AccMastTableName, time.Since(initalTime)) + fmt.Printf("%s Operation Completed in Duration of %s\n", AccMastTableName, time.Since(initialTime)) } diff --git a/servers/jwelly/mysql-to-surreal/functions/category.table.func.go b/servers/jwelly/mysql-to-surreal/functions/category.table.func.go index 0cc2146..d8f4da4 100644 --- a/servers/jwelly/mysql-to-surreal/functions/category.table.func.go +++ b/servers/jwelly/mysql-to-surreal/functions/category.table.func.go @@ -28,8 +28,8 @@ func removeAndInsertCategory(c *ConfigWithConnection) { } func (c *ConfigWithConnection) ReadAndStoreCategory() { rows, err := c.DbConnections.MysqlDbConncetion.Db.Query(GetCategoryTableCommand) - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime if err != nil { fmt.Printf("Error in ReadAndStoreCategory For %s", c.ServerConfig.Name) fmt.Println(err.Error()) @@ -78,5 +78,5 @@ func (c *ConfigWithConnection) ReadAndStoreCategory() { if dddd, err := surrealdb.Select[[]any](localSurrealdb.SurrealCTX, c.DbConnections.SurrealDbConncetion.Db, models.Table(CategoryTableName)); err == nil { fmt.Printf("Select All %s from SurrealDB in Duration of %s with total rows %d\n", CategoryTableName, time.Since(startTime), len(*dddd)) } - fmt.Printf("%s Operation Completed in Duration of %s\n", CategoryTableName, time.Since(initalTime)) + fmt.Printf("%s Operation Completed in Duration of %s\n", CategoryTableName, time.Since(initialTime)) } diff --git a/servers/jwelly/mysql-to-surreal/functions/item-group.table.func.go b/servers/jwelly/mysql-to-surreal/functions/item-group.table.func.go index 31805a7..50eba52 100644 --- a/servers/jwelly/mysql-to-surreal/functions/item-group.table.func.go +++ b/servers/jwelly/mysql-to-surreal/functions/item-group.table.func.go @@ -30,8 +30,8 @@ func removeAndInsertItemGroupTable(c *ConfigWithConnection) { func (c *ConfigWithConnection) ReadAndStoreItemGroupTable() { rows, err := c.DbConnections.MysqlDbConncetion.Db.Query(GetItemGroupTableCommand) - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime if err != nil { fmt.Printf("Error in ReadAndStoreItemGroupTable For %s", c.ServerConfig.Name) fmt.Println(err.Error()) @@ -152,5 +152,5 @@ func (c *ConfigWithConnection) ReadAndStoreItemGroupTable() { if dddd, err := surrealdb.Select[[]any](localSurrealdb.SurrealCTX, c.DbConnections.SurrealDbConncetion.Db, models.Table(ItemGroupTableName)); err == nil { fmt.Printf("Select All %s from SurrealDB in Duration of %s with total rows %d\n", ItemGroupTableName, time.Since(startTime), len(*dddd)) } - fmt.Printf("%s Operation Completed in Duration of %s\n", ItemGroupTableName, time.Since(initalTime)) + fmt.Printf("%s Operation Completed in Duration of %s\n", ItemGroupTableName, time.Since(initialTime)) } diff --git a/servers/jwelly/mysql-to-surreal/functions/itemmast.table.func.go b/servers/jwelly/mysql-to-surreal/functions/itemmast.table.func.go index d8c80b3..09ec43f 100644 --- a/servers/jwelly/mysql-to-surreal/functions/itemmast.table.func.go +++ b/servers/jwelly/mysql-to-surreal/functions/itemmast.table.func.go @@ -28,8 +28,8 @@ func init() { } func (c *ConfigWithConnection) ReadAndStoreItemMast() { rows, err := c.DbConnections.MysqlDbConncetion.Db.Query(GetItemMastTableCommand) - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime if err != nil { fmt.Printf("Error in ReadAndStoreItemMast For %s", c.ServerConfig.Name) fmt.Println(err.Error()) @@ -202,5 +202,5 @@ func (c *ConfigWithConnection) ReadAndStoreItemMast() { if dddd, err := surrealdb.Select[[]any](localSurrealdb.SurrealCTX, c.DbConnections.SurrealDbConncetion.Db, models.Table(ItemMastTableName)); err == nil { fmt.Printf("Select All %s from SurrealDB in Duration of %s with total rows %d\n", ItemMastTableName, time.Since(startTime), len(*dddd)) } - fmt.Printf("%s Operation Completed in Duration of %s\n", ItemMastTableName, time.Since(initalTime)) + fmt.Printf("%s Operation Completed in Duration of %s\n", ItemMastTableName, time.Since(initialTime)) } diff --git a/servers/jwelly/mysql-to-surreal/functions/itrans.table.func.go b/servers/jwelly/mysql-to-surreal/functions/itrans.table.func.go index 2c340fa..017673e 100644 --- a/servers/jwelly/mysql-to-surreal/functions/itrans.table.func.go +++ b/servers/jwelly/mysql-to-surreal/functions/itrans.table.func.go @@ -40,8 +40,8 @@ func removeAndInsertItemTransTable(c *ConfigWithConnection) { } func (c *ConfigWithConnection) ReadAndStoreItemTransTable() { rows, err := c.DbConnections.MysqlDbConncetion.Db.Query(GetItemTransTableCommand) - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime if err != nil { fmt.Printf("Error in ReadAndStoreItemTransTable For %s", c.ServerConfig.Name) fmt.Println(err.Error()) @@ -331,5 +331,5 @@ func (c *ConfigWithConnection) ReadAndStoreItemTransTable() { if dddd, err := surrealdb.Select[[]any](localSurrealdb.SurrealCTX, c.DbConnections.SurrealDbConncetion.Db, models.Table(ItemTransTableName)); err == nil { fmt.Printf("Select All %s from SurrealDB in Duration of %s with total rows %d\n", ItemTransTableName, time.Since(startTime), len(*dddd)) } - fmt.Printf("%s Operation Completed in Duration of %s\n", ItemTransTableName, time.Since(initalTime)) + fmt.Printf("%s Operation Completed in Duration of %s\n", ItemTransTableName, time.Since(initialTime)) } diff --git a/servers/jwelly/mysql-to-surreal/functions/mysql-stamp.table.func.go b/servers/jwelly/mysql-to-surreal/functions/mysql-stamp.table.func.go index a6f3680..8e95bdf 100644 --- a/servers/jwelly/mysql-to-surreal/functions/mysql-stamp.table.func.go +++ b/servers/jwelly/mysql-to-surreal/functions/mysql-stamp.table.func.go @@ -28,8 +28,8 @@ func removeAndInsertStampTable(c *ConfigWithConnection) { } func (c *ConfigWithConnection) ReadAndStoreStampTable() { rows, err := c.DbConnections.MysqlDbConncetion.Db.Query(GetStampTableCommand) - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime if err != nil { fmt.Printf("Error in ReadAndStoreStampTable For %s", c.ServerConfig.Name) fmt.Println(err.Error()) @@ -111,5 +111,5 @@ func (c *ConfigWithConnection) ReadAndStoreStampTable() { if dddd, err := surrealdb.Select[[]any](localSurrealdb.SurrealCTX, c.DbConnections.SurrealDbConncetion.Db, models.Table(StampTableName)); err == nil { fmt.Printf("Select All %s from SurrealDB in Duration of %s with total rows %d\n", StampTableName, time.Since(startTime), len(*dddd)) } - fmt.Printf("%s Operation Completed in Duration of %s\n", StampTableName, time.Since(initalTime)) + fmt.Printf("%s Operation Completed in Duration of %s\n", StampTableName, time.Since(initialTime)) } diff --git a/servers/jwelly/mysql-to-surreal/functions/mysql-tgm-table.func.go b/servers/jwelly/mysql-to-surreal/functions/mysql-tgm-table.func.go index 315d78b..f56ead1 100644 --- a/servers/jwelly/mysql-to-surreal/functions/mysql-tgm-table.func.go +++ b/servers/jwelly/mysql-to-surreal/functions/mysql-tgm-table.func.go @@ -40,8 +40,8 @@ func init() { } func (c *ConfigWithConnection) ReadAndStoreTgm1Table() { rows, err := c.DbConnections.MysqlDbConncetion.Db.Query(GetTgm1TableCommand) - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime if err != nil { fmt.Printf("Error in ReadAndStoreTgm1Table For %s", c.ServerConfig.Name) fmt.Println(err.Error()) @@ -270,5 +270,5 @@ func (c *ConfigWithConnection) ReadAndStoreTgm1Table() { if dddd, err := surrealdb.Select[[]any](localSurrealdb.SurrealCTX, c.DbConnections.SurrealDbConncetion.Db, models.Table(TgmTableName)); err == nil { fmt.Printf("Select All %s from SurrealDB in Duration of %s with total rows %d\n", TgmTableName, time.Since(startTime), len(*dddd)) } - fmt.Printf("%s Operation Completed in Duration of %s\n", TgmTableName, time.Since(initalTime)) + fmt.Printf("%s Operation Completed in Duration of %s\n", TgmTableName, time.Since(initialTime)) } diff --git a/servers/jwelly/mysql-to-surreal/functions/site.table.func.go b/servers/jwelly/mysql-to-surreal/functions/site.table.func.go index c55c6e5..d15f2bf 100644 --- a/servers/jwelly/mysql-to-surreal/functions/site.table.func.go +++ b/servers/jwelly/mysql-to-surreal/functions/site.table.func.go @@ -29,8 +29,8 @@ func init() { } func (c *ConfigWithConnection) ReadAndStoreSiteTable() { rows, err := c.DbConnections.MysqlDbConncetion.Db.Query(GetSiteTableCommand) - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime if err != nil { fmt.Printf("Error in ReadAndStoreSiteTable For %s", c.ServerConfig.Name) fmt.Println(err.Error()) @@ -86,5 +86,5 @@ func (c *ConfigWithConnection) ReadAndStoreSiteTable() { if dddd, err := surrealdb.Select[[]any](localSurrealdb.SurrealCTX, c.DbConnections.SurrealDbConncetion.Db, models.Table(SiteTableName)); err == nil { fmt.Printf("Select All %s from SurrealDB in Duration of %s with total rows %d\n", SiteTableName, time.Since(startTime), len(*dddd)) } - fmt.Printf("%s Operation Completed in Duration of %s\n", SiteTableName, time.Since(initalTime)) + fmt.Printf("%s Operation Completed in Duration of %s\n", SiteTableName, time.Since(initialTime)) } diff --git a/servers/jwelly/mysql-to-surreal/functions/tran1.table.func.go b/servers/jwelly/mysql-to-surreal/functions/tran1.table.func.go index 7646772..be5243e 100644 --- a/servers/jwelly/mysql-to-surreal/functions/tran1.table.func.go +++ b/servers/jwelly/mysql-to-surreal/functions/tran1.table.func.go @@ -39,8 +39,8 @@ func removeAndInsertTrans1Table(c *ConfigWithConnection) { } func (c *ConfigWithConnection) ReadAndStoreTrans1Table() { rows, err := c.DbConnections.MysqlDbConncetion.Db.Query(GetTrans1TableCommand) - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime if err != nil { fmt.Printf("Error in ReadAndStoreTrans1Table For %s", c.ServerConfig.Name) fmt.Println(err.Error()) @@ -339,5 +339,5 @@ func (c *ConfigWithConnection) ReadAndStoreTrans1Table() { if dddd, err := surrealdb.Select[[]any](localSurrealdb.SurrealCTX, c.DbConnections.SurrealDbConncetion.Db, models.Table(TransactionTableName)); err == nil { fmt.Printf("Select All %s from SurrealDB in Duration of %s with total rows %d\n", TransactionTableName, time.Since(startTime), len(*dddd)) } - fmt.Printf("%s Operation Completed in Duration of %s\n", TransactionTableName, time.Since(initalTime)) + fmt.Printf("%s Operation Completed in Duration of %s\n", TransactionTableName, time.Since(initialTime)) } diff --git a/servers/jwelly/mysql-to-surreal/functions/unit.table.func.go b/servers/jwelly/mysql-to-surreal/functions/unit.table.func.go index b48bc0a..63646b7 100644 --- a/servers/jwelly/mysql-to-surreal/functions/unit.table.func.go +++ b/servers/jwelly/mysql-to-surreal/functions/unit.table.func.go @@ -29,8 +29,8 @@ func init() { } func (c *ConfigWithConnection) ReadAndStoreUnitTable() { rows, err := c.DbConnections.MysqlDbConncetion.Db.Query(GetUnitTableCommand) - initalTime := time.Now() - startTime := initalTime + initialTime := time.Now() + startTime := initialTime if err != nil { fmt.Printf("Error in ReadAndStoreUnitTable For %s", c.ServerConfig.Name) fmt.Println(err.Error()) @@ -79,5 +79,5 @@ func (c *ConfigWithConnection) ReadAndStoreUnitTable() { if dddd, err := surrealdb.Select[[]any](localSurrealdb.SurrealCTX, c.DbConnections.SurrealDbConncetion.Db, models.Table(UnitTableName)); err == nil { fmt.Printf("Select All %s from SurrealDB in Duration of %s with total rows %d\n", UnitTableName, time.Since(startTime), len(*dddd)) } - fmt.Printf("%s Operation Completed in Duration of %s\n", UnitTableName, time.Since(initalTime)) + fmt.Printf("%s Operation Completed in Duration of %s\n", UnitTableName, time.Since(initialTime)) } From 4fcc79fee30639f6298405d72023b74bebeef361 Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Wed, 17 Jun 2026 17:42:36 +0530 Subject: [PATCH 06/15] Item Tag Details Added --- .vscode/settings.json | 25 ++++ .../jwelly/ecommerce-adapter/Server.Db.sql | 58 +++++--- .../jwelly/ecommerce-adapter/env/env.index.go | 2 +- .../functions/item-group.func.go | 2 +- .../functions/item-master.func.go | 2 +- .../item-tag-variation-details.func.go | 137 ++++++++++++++++++ .../functions/item-tag-variation.func.go | 2 +- .../functions/item-tag.func.go | 2 +- .../ecommerce-adapter/functions/stamp.func.go | 2 +- .../functions/unit-table.func.go | 2 +- .../MainTables/item-tag-details-table.type.go | 16 ++ servers/jwelly/ecommerce-adapter/main.go | 19 +-- .../mysql-backup-cmd/interfaces/connectino.go | 2 +- .../mysql-backup/interfaces/connectino.go | 2 +- .../mysql-to-mysql/interfaces/connectino.go | 4 +- .../functions/validate-connection.func.go | 2 +- utility/mysql/index.go | 4 +- 17 files changed, 243 insertions(+), 40 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 servers/jwelly/ecommerce-adapter/functions/item-tag-variation-details.func.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-tag-details-table.type.go diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..188b05c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,25 @@ +{ + "cSpell.words": [ + "DSTAMPID", + "ecommerce", + "EXWT", + "Firestore", + "gofiber", + "Igroup", + "itemtag", + "jpillora", + "jwelly", + "Karigar", + "mysqldb", + "rpsoftech", + "SPRICE", + "STAMPID", + "TGDID", + "TPRE", + "TSNO", + "Tunch", + "UNITID", + "vtgno", + "Wstg" + ] +} diff --git a/servers/jwelly/ecommerce-adapter/Server.Db.sql b/servers/jwelly/ecommerce-adapter/Server.Db.sql index 49445bd..e14cb28 100644 --- a/servers/jwelly/ecommerce-adapter/Server.Db.sql +++ b/servers/jwelly/ecommerce-adapter/Server.Db.sql @@ -1,12 +1,3 @@ -CREATE TABLE - `ItemGroup` ( - `itemGroupId` INT NOT NULL, - `itemGroup` VARCHAR(45) NOT NULL, - `itemPrintName` VARCHAR(45) NULL, - `itemGroupUnitId` INT NOT NULL, - PRIMARY KEY (`itemGroupId`) - ); - CREATE TABLE `ItemUnit` ( `itemUnitId` INT NOT NULL, @@ -16,9 +7,16 @@ CREATE TABLE UNIQUE INDEX `itemUnit_UNIQUE` (`itemUnit` ASC) VISIBLE ); -ALTER TABLE `ItemGroup` ADD INDEX `IgroupUnitToUnitID_idx` (`itemGroupUnitId` ASC) VISIBLE; - -ALTER TABLE `ItemGroup` ADD CONSTRAINT `IgroupUnitToUnitID` FOREIGN KEY (`itemGroupUnitId`) REFERENCES `ItemUnit` (`itemUnitId`) ON DELETE RESTRICT ON UPDATE CASCADE; +CREATE TABLE + `ItemGroup` ( + `itemGroupId` INT NOT NULL, + `itemGroup` VARCHAR(45) NOT NULL, + `itemPrintName` VARCHAR(45) NULL, + `itemGroupUnitId` INT NOT NULL, + PRIMARY KEY (`itemGroupId`), + INDEX `IgroupUnitToUnitID_idx` (`itemGroupUnitId` ASC) VISIBLE, + CONSTRAINT `IgroupUnitToUnitID` FOREIGN KEY (`itemGroupUnitId`) REFERENCES `ItemUnit` (`itemUnitId`) ON DELETE RESTRICT ON UPDATE CASCADE + ); CREATE TABLE `ItemMaster` ( @@ -45,9 +43,10 @@ CREATE TABLE `sellTunch` DECIMAL(8, 2) NULL DEFAULT 0, PRIMARY KEY (`stampId`) ); +INSERT INTO `Stamp` (`stampId`, `STAMP`, `tunch`, `stockTunch`, `sellTunch`) VALUES ('0', '0', '0', '0', '0'); CREATE TABLE - `rpg_jwelly_test`.`ItemsTag` ( + `ItemsTag` ( `itemTagId` INT NOT NULL, `itemTag` VARCHAR(45) NOT NULL, `itemVTagId` INT NULL, @@ -57,11 +56,11 @@ CREATE TABLE UNIQUE INDEX `itemTag_UNIQUE` (`itemTag` ASC) VISIBLE, UNIQUE INDEX `combo_unique` (`itemVTagId` ASC, `tItemId` ASC) VISIBLE, INDEX `itemtag_item_idx` (`tItemId` ASC) VISIBLE, - CONSTRAINT `itemtag_item` FOREIGN KEY (`tItemId`) REFERENCES `rpg_jwelly_test`.`ItemMaster` (`itemId`) ON DELETE RESTRICT ON UPDATE CASCADE + CONSTRAINT `itemtag_item` FOREIGN KEY (`tItemId`) REFERENCES `ItemMaster` (`itemId`) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE TABLE - `rpg_jwelly_test`.`ItemTagVariation` ( + `ItemTagVariation` ( `tagVariationId` INT NOT NULL AUTO_INCREMENT, `vTagId` INT NULL, `vStampId` INT NULL, @@ -78,6 +77,31 @@ CREATE TABLE INDEX `TagVariation_1_idx` (`vTagId` ASC) INVISIBLE, INDEX `TagVariation_2_idx` (`vStampId` ASC) VISIBLE, UNIQUE INDEX `TagVariation_3` (`vTagId` ASC, `vStampId` ASC) INVISIBLE, - CONSTRAINT `TagVariation_1` FOREIGN KEY (`vTagId`) REFERENCES `rpg_jwelly_test`.`ItemsTag` (`itemTagId`) ON DELETE RESTRICT ON UPDATE CASCADE, - CONSTRAINT `TagVariation_2` FOREIGN KEY (`vStampId`) REFERENCES `rpg_jwelly_test`.`Stamp` (`stampId`) ON DELETE RESTRICT ON UPDATE CASCADE + CONSTRAINT `TagVariation_1` FOREIGN KEY (`vTagId`) REFERENCES `ItemsTag` (`itemTagId`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `TagVariation_2` FOREIGN KEY (`vStampId`) REFERENCES `Stamp` (`stampId`) ON DELETE RESTRICT ON UPDATE CASCADE + ); + +CREATE TABLE + `ItemTagVariationDetails` ( + `itemTagDetailsId` INT NOT NULL, + `dItemTagId` INT NOT NULL, + `dItemId` INT NOT NULL, + `dSTAMPID` INT NULL DEFAULT 0, + `dWeight` DECIMAL(10, 3) NULL DEFAULT 0.000, + `dExWeight` DECIMAL(10, 3) NULL DEFAULT 0.000, + `dFinalWeight` DECIMAL(10, 3) NULL DEFAULT 0.000, + `dRemarks` TINYTEXT NULL, + `dPcs` INT NULL DEFAULT 0, + `dRate` DECIMAL(12, 2) NULL DEFAULT 0.000, + `dSaleValue` DECIMAL(12, 2) NULL DEFAULT 0.000, + `dUnitId` INT NULL, + PRIMARY KEY (`itemTagDetailsId`), + INDEX `ItemTagVariationDetails_4_idx` (`dItemTagId` ASC) VISIBLE, + INDEX `ItemTagVariationDetails_1_idx` (`dSTAMPID` ASC) VISIBLE, + INDEX `ItemTagVariationDetails_2_idx` (`dItemId` ASC) VISIBLE, + INDEX `ItemTagVariationDetails_3_idx` (`dUnitId` ASC) VISIBLE, + CONSTRAINT `ItemTagVariationDetails_1` FOREIGN KEY (`dSTAMPID`) REFERENCES `Stamp` (`stampId`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `ItemTagVariationDetails_2` FOREIGN KEY (`dItemId`) REFERENCES `ItemMaster` (`itemId`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `ItemTagVariationDetails_4` FOREIGN KEY (`dItemTagId`) REFERENCES `ItemsTag` (`itemTagId`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `ItemTagVariationDetails_3` FOREIGN KEY (`dUnitId`) REFERENCES `ItemUnit` (`itemUnitId`) ON DELETE RESTRICT ON UPDATE CASCADE ); \ No newline at end of file diff --git a/servers/jwelly/ecommerce-adapter/env/env.index.go b/servers/jwelly/ecommerce-adapter/env/env.index.go index d36627b..2b5ffbb 100644 --- a/servers/jwelly/ecommerce-adapter/env/env.index.go +++ b/servers/jwelly/ecommerce-adapter/env/env.index.go @@ -29,7 +29,7 @@ func Init() *IServverConfig { } MysqlConnections = &IServerMysqlConnection{} ServerConfig = &IServverConfig{} - env.LoadEnv("ecommerece-adapter.env") + env.LoadEnv("ecommerce-adapter.env") configFileName := "server.config.json" if e := env.Env.GetEnv("CONFGI_FILE_NAME"); e != "" { configFileName = e diff --git a/servers/jwelly/ecommerce-adapter/functions/item-group.func.go b/servers/jwelly/ecommerce-adapter/functions/item-group.func.go index e9184cf..f54cd9e 100644 --- a/servers/jwelly/ecommerce-adapter/functions/item-group.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/item-group.func.go @@ -1,4 +1,4 @@ -package ecommerece_functions +package ecommerce_functions import ( "context" diff --git a/servers/jwelly/ecommerce-adapter/functions/item-master.func.go b/servers/jwelly/ecommerce-adapter/functions/item-master.func.go index 63fe8d2..8bab97a 100644 --- a/servers/jwelly/ecommerce-adapter/functions/item-master.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/item-master.func.go @@ -1,4 +1,4 @@ -package ecommerece_functions +package ecommerce_functions import ( "context" diff --git a/servers/jwelly/ecommerce-adapter/functions/item-tag-variation-details.func.go b/servers/jwelly/ecommerce-adapter/functions/item-tag-variation-details.func.go new file mode 100644 index 0000000..7f91ced --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/functions/item-tag-variation-details.func.go @@ -0,0 +1,137 @@ +package ecommerce_functions + +import ( + "context" + "fmt" + "log" + "strings" + "time" + + ecommerce_maintables "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/interfaces/MainTables" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) + +const SelectItemTagVariationDetailsQuery = "SELECT td.TGDID, td.TSNO, td.INO, td.STAMPID, td.WT,td.EXWT,td.remarks, td.PC, td.RATE, td.SPRICE, td.UNITID FROM tgd1 as td join tgm1 as tg on td.tsno = tg.tsno where tg.vtgno != 0 and tg.STATUS != 'ITM' and tg.TPRE !='REP' ORDER BY td.TSNO LIMIT ? OFFSET ?;" +const ServerItemTagVariationDetailsOfColumns = 11 +const ItemTagVariationDetailsUpsertQuery = `INSERT INTO ItemTagVariationDetails (itemTagDetailsId,dItemTagId,dItemId,dSTAMPID,dWeight,dExWeight,dFinalWeight,dRemarks,dPcs,dRate,dSaleValue,dUnitId) VALUES %s AS new_row ON DUPLICATE KEY UPDATE dItemTagId = new_row.itemTagDetailsId,dItemId = new_row.itemTagDetailsId,dSTAMPID = new_row.itemTagDetailsId,dWeight = new_row.itemTagDetailsId,dExWeight = new_row.itemTagDetailsId,dFinalWeight = new_row.itemTagDetailsId,dRemarks = new_row.itemTagDetailsId,dPcs = new_row.itemTagDetailsId,dRate = new_row.itemTagDetailsId,dSaleValue = new_row.itemTagDetailsId,dUnitId = new_row.itemTagDetailsId` + +func SyncItemTagVariationDetailsTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { + initialTime := time.Now() + batchSize := 1000 // You can change this to 2000 if your server handles it well + offset := 0 + var totalRowsAffected int64 = 0 + + log.Println("Starting chunked sync for Item Tag Variations...") + + for { + // Process a single batch + rowsFetched, rowsAffected, err := processItemTagVariationDetailsBatch(serverDb, erpDb, batchSize, offset) + if err != nil { + log.Printf("Sync halted due to error at offset %d: %v", offset, err) + break // Stop the loop on error, but keep the app alive + } + + totalRowsAffected += rowsAffected + + // If we fetched fewer rows than the batch size, we've reached the end of the table + if rowsFetched < batchSize { + break + } + + // Move the offset forward for the next iteration + offset += batchSize + } + + log.Printf("Sync completed successfully! Total Duration: %s | Total Rows Affected Metric: %d\n", time.Since(initialTime), totalRowsAffected) +} + +func processItemTagVariationDetailsBatch(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct, limit int, offset int) (int, int64, error) { + startTime := time.Now() + + // 1. Fetch chunk from ERP + rows, err := erpDb.Db.Query(SelectItemTagVariationDetailsQuery, limit, offset) + if err != nil { + return 0, 0, fmt.Errorf("failed reading from ERP (Limit: %d, Offset: %d): %w", limit, offset, err) + } + // CRITICAL: Ensure rows are closed immediately after this batch finishes + defer rows.Close() + + var results []*ecommerce_maintables.ItemTagVariationDetails + + for rows.Next() { + row := &ecommerce_maintables.ItemTagVariationDetails{} + err = rows.Scan( + &row.ItemTagDetailsId, + &row.DItemTagId, + &row.DItemId, + &row.DSTAMPID, + &row.DGrossWeight, + &row.DExWeight, + &row.DRemarks, + &row.DPcs, + &row.DRate, + &row.DSaleValue, + &row.DUnitId, + ) + if err != nil { + return 0, 0, fmt.Errorf("row scan error: %w", err) + } + + // Calculate the boolean status based on the string + row.DFinalWeight = row.DGrossWeight - row.DExWeight + results = append(results, row) + } + + // Check for errors encountered during iteration + if err = rows.Err(); err != nil { + return 0, 0, fmt.Errorf("rows iteration error: %w", err) + } + + fetchedCount := len(results) + if fetchedCount == 0 { + return 0, 0, nil // Nothing to process + } + + // 2. Prepare chunk for bulk upsert + valueStrings := make([]string, 0, fetchedCount) + valueArgs := make([]interface{}, 0, fetchedCount*ServerItemTagVariationDetailsOfColumns) + + for _, detail := range results { + valueStrings = append(valueStrings, "(?,?,?,?,?,?,?,?,?,?,?,?)") + valueArgs = append(valueArgs, + detail.ItemTagDetailsId, + detail.DItemTagId, + detail.DItemId, + detail.DSTAMPID, + detail.DGrossWeight, + detail.DExWeight, + detail.DFinalWeight, + detail.DRemarks, + detail.DPcs, + detail.DRate, + detail.DSaleValue, + detail.DUnitId, + ) + } + + finalQuery := fmt.Sprintf(ItemTagVariationDetailsUpsertQuery, strings.Join(valueStrings, ", ")) + + // 3. Execute bulk upsert for this specific chunk + // Give each chunk a reasonable 10-second timeout to execute + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) + if err != nil { + return fetchedCount, 0, fmt.Errorf("bulk upsert failed: %w", err) + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + return fetchedCount, 0, fmt.Errorf("could not get rows affected: %w", err) + } + + log.Printf("Batch processed: %d rows fetched | %d rows affected | Duration: %s", fetchedCount, rowsAffected, time.Since(startTime)) + + return fetchedCount, rowsAffected, nil +} diff --git a/servers/jwelly/ecommerce-adapter/functions/item-tag-variation.func.go b/servers/jwelly/ecommerce-adapter/functions/item-tag-variation.func.go index 893db02..ed7a0ee 100644 --- a/servers/jwelly/ecommerce-adapter/functions/item-tag-variation.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/item-tag-variation.func.go @@ -1,4 +1,4 @@ -package ecommerece_functions +package ecommerce_functions import ( "context" diff --git a/servers/jwelly/ecommerce-adapter/functions/item-tag.func.go b/servers/jwelly/ecommerce-adapter/functions/item-tag.func.go index c6c04e6..9958846 100644 --- a/servers/jwelly/ecommerce-adapter/functions/item-tag.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/item-tag.func.go @@ -1,4 +1,4 @@ -package ecommerece_functions +package ecommerce_functions import ( "context" diff --git a/servers/jwelly/ecommerce-adapter/functions/stamp.func.go b/servers/jwelly/ecommerce-adapter/functions/stamp.func.go index 041b6b8..d438025 100644 --- a/servers/jwelly/ecommerce-adapter/functions/stamp.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/stamp.func.go @@ -1,4 +1,4 @@ -package ecommerece_functions +package ecommerce_functions import ( "context" diff --git a/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go b/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go index e05aeea..cd1e648 100644 --- a/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/unit-table.func.go @@ -1,4 +1,4 @@ -package ecommerece_functions +package ecommerce_functions import ( "context" diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-tag-details-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-tag-details-table.type.go new file mode 100644 index 0000000..e737457 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/item-tag-details-table.type.go @@ -0,0 +1,16 @@ +package ecommerce_maintables + +type ItemTagVariationDetails struct { + ItemTagDetailsId int `json:"itemTagDetailsId"` + DItemTagId int `json:"dItemTagId"` + DItemId int `json:"dItemId"` + DSTAMPID int `json:"dSTAMPID"` + DGrossWeight float64 `json:"dWeight"` + DExWeight float64 `json:"dExWeight"` + DFinalWeight float64 `json:"dFinalWeight"` + DRemarks string `json:"dRemarks"` + DPcs int `json:"dPcs"` + DRate float64 `json:"dRate"` + DSaleValue float64 `json:"dSaleValue"` + DUnitId int `json:"dUnitId"` +} diff --git a/servers/jwelly/ecommerce-adapter/main.go b/servers/jwelly/ecommerce-adapter/main.go index 48d3999..1124336 100644 --- a/servers/jwelly/ecommerce-adapter/main.go +++ b/servers/jwelly/ecommerce-adapter/main.go @@ -4,29 +4,30 @@ import ( "log" ecommerce_env "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/env" - ecommerece_functions "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/functions" + ecommerce_functions "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/functions" mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" ) func main() { config := ecommerce_env.Init() - if conn, err := mysqldb.InitalizeMysqlDbWithConfig(config.ServerDatabase); err != nil { + if conn, err := mysqldb.InitializeMysqlDbWithConfig(config.ServerDatabase); err != nil { log.Panicf("Connection In Server Database") panic(err) } else { ecommerce_env.MysqlConnections.Server = conn } - if conn, err := mysqldb.InitalizeMysqlDbWithConfig(config.ErpDatabase); err != nil { + if conn, err := mysqldb.InitializeMysqlDbWithConfig(config.ErpDatabase); err != nil { log.Panicf("Connection In ERP Database") panic(err) } else { ecommerce_env.MysqlConnections.ERP = conn } - ecommerece_functions.SyncItemUnitTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerece_functions.SyncItemGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerece_functions.SyncItemMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerece_functions.SyncStampTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerece_functions.SyncItemTagTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerece_functions.SyncItemTagVariationTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemUnitTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncStampTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemTagTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemTagVariationTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemTagVariationDetailsTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) log.Printf("DONE") } diff --git a/servers/jwelly/mysql-backup-cmd/interfaces/connectino.go b/servers/jwelly/mysql-backup-cmd/interfaces/connectino.go index 4a82172..33d32e2 100644 --- a/servers/jwelly/mysql-backup-cmd/interfaces/connectino.go +++ b/servers/jwelly/mysql-backup-cmd/interfaces/connectino.go @@ -24,7 +24,7 @@ type ConfigWithConnection struct { } func ValidateAllConnectionsAndAssign(c *ConfigWithConnection) error { - if mysqlDb, err := mysqldb.InitalizeMysqlDbWithConfig(&c.ServerConfig.MysqlConfig); err != nil { + if mysqlDb, err := mysqldb.InitializeMysqlDbWithConfig(&c.ServerConfig.MysqlConfig); err != nil { return err } else { c.BaseDir = filepath.Join(coreEnv.FindAndReturnCurrentDir(), "backup", c.ServerConfig.Name) diff --git a/servers/jwelly/mysql-backup/interfaces/connectino.go b/servers/jwelly/mysql-backup/interfaces/connectino.go index 4228366..47c3463 100644 --- a/servers/jwelly/mysql-backup/interfaces/connectino.go +++ b/servers/jwelly/mysql-backup/interfaces/connectino.go @@ -23,7 +23,7 @@ type ConfigWithConnection struct { } func ValidateAllConnectionsAndAssign(c *ConfigWithConnection) error { - if mysqlDb, err := mysqldb.InitalizeMysqlDbWithConfig(&c.ServerConfig.MysqlConfig); err != nil { + if mysqlDb, err := mysqldb.InitializeMysqlDbWithConfig(&c.ServerConfig.MysqlConfig); err != nil { return err } else { // mysqlDb.Db.Close() diff --git a/servers/jwelly/mysql-to-mysql/interfaces/connectino.go b/servers/jwelly/mysql-to-mysql/interfaces/connectino.go index de7a22c..c699446 100644 --- a/servers/jwelly/mysql-to-mysql/interfaces/connectino.go +++ b/servers/jwelly/mysql-to-mysql/interfaces/connectino.go @@ -17,10 +17,10 @@ type ConfigWithConnection struct { } func ValidateAllConnectionsAndAssign(c *ConfigWithConnection) error { - if mysqlDb, err := mysqldb.InitalizeMysqlDbWithConfig(&c.ServerConfig.MysqlConfig); err != nil { + if mysqlDb, err := mysqldb.InitializeMysqlDbWithConfig(&c.ServerConfig.MysqlConfig); err != nil { return err } else { - if mysqlRemoteDb, err := mysqldb.InitalizeMysqlDbWithConfig(&c.ServerConfig.MysqlConfig); err != nil { + if mysqlRemoteDb, err := mysqldb.InitializeMysqlDbWithConfig(&c.ServerConfig.MysqlConfig); err != nil { mysqlDb.Db.Close() return err } else { diff --git a/servers/jwelly/mysql-to-surreal/functions/validate-connection.func.go b/servers/jwelly/mysql-to-surreal/functions/validate-connection.func.go index 7d358a4..ecfb643 100644 --- a/servers/jwelly/mysql-to-surreal/functions/validate-connection.func.go +++ b/servers/jwelly/mysql-to-surreal/functions/validate-connection.func.go @@ -12,7 +12,7 @@ func ValidateAllConnectionsAndAssign(c *ConfigWithConnection) error { } else { c.DbConnections.SurrealDbConncetion = surrealDb } - if mysqlDb, err := mysqldb.InitalizeMysqlDbWithConfig(&c.ServerConfig.MysqlConfig); err != nil { + if mysqlDb, err := mysqldb.InitializeMysqlDbWithConfig(&c.ServerConfig.MysqlConfig); err != nil { return err } else { c.DbConnections.MysqlDbConncetion = mysqlDb diff --git a/utility/mysql/index.go b/utility/mysql/index.go index d1eda1b..c81369f 100644 --- a/utility/mysql/index.go +++ b/utility/mysql/index.go @@ -52,14 +52,14 @@ func initaliseMysqlDb() { MYSQL_PASSWORD: env.Env.GetEnv(env.MYSQL_PASSWORD_KEY), MYSQL_DATABASE: env.Env.GetEnv(env.MYSQL_DATABASE_KEY), } - if db, err := InitalizeMysqlDbWithConfig(config); err != nil { + if db, err := InitializeMysqlDbWithConfig(config); err != nil { panic(err) } else { MysqlDbCon = db } } -func InitalizeMysqlDbWithConfig(config *MysqldbConfig) (*MysqlDBStruct, error) { +func InitializeMysqlDbWithConfig(config *MysqldbConfig) (*MysqlDBStruct, error) { db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?tls=false&autocommit=true&parseTime=true", config.MYSQL_USERNAME, config.MYSQL_PASSWORD, config.MYSQL_HOST, config.MYSQL_PORT, config.MYSQL_DATABASE)) if err != nil { return nil, err From f880002ee79fad2e5da7efe8e6286158089eac65 Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Fri, 19 Jun 2026 04:08:20 +0530 Subject: [PATCH 07/15] feat: Account Master And Account Group Added --- .vscode/settings.json | 1 + .../jwelly/ecommerce-adapter/Server.Db.sql | 37 ++++++++- .../functions/acc-group.func.go | 65 ++++++++++++++++ .../functions/acc-mast.func.go | 76 +++++++++++++++++++ .../item-tag-variation-details.func.go | 4 +- .../ecommerce-adapter/functions/stamp.func.go | 2 - .../MainTables/acc-group-table.type.go | 8 ++ .../MainTables/accmast-table.type.go | 13 ++++ servers/jwelly/ecommerce-adapter/main.go | 2 + 9 files changed, 203 insertions(+), 5 deletions(-) create mode 100644 servers/jwelly/ecommerce-adapter/functions/acc-group.func.go create mode 100644 servers/jwelly/ecommerce-adapter/functions/acc-mast.func.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/acc-group-table.type.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/accmast-table.type.go diff --git a/.vscode/settings.json b/.vscode/settings.json index 188b05c..0052f1a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { "cSpell.words": [ + "Acno", "DSTAMPID", "ecommerce", "EXWT", diff --git a/servers/jwelly/ecommerce-adapter/Server.Db.sql b/servers/jwelly/ecommerce-adapter/Server.Db.sql index e14cb28..04fc0c6 100644 --- a/servers/jwelly/ecommerce-adapter/Server.Db.sql +++ b/servers/jwelly/ecommerce-adapter/Server.Db.sql @@ -43,7 +43,17 @@ CREATE TABLE `sellTunch` DECIMAL(8, 2) NULL DEFAULT 0, PRIMARY KEY (`stampId`) ); -INSERT INTO `Stamp` (`stampId`, `STAMP`, `tunch`, `stockTunch`, `sellTunch`) VALUES ('0', '0', '0', '0', '0'); + +INSERT INTO + `Stamp` ( + `stampId`, + `STAMP`, + `tunch`, + `stockTunch`, + `sellTunch` + ) +VALUES + ('0', '0', '0', '0', '0'); CREATE TABLE `ItemsTag` ( @@ -104,4 +114,29 @@ CREATE TABLE CONSTRAINT `ItemTagVariationDetails_2` FOREIGN KEY (`dItemId`) REFERENCES `ItemMaster` (`itemId`) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `ItemTagVariationDetails_4` FOREIGN KEY (`dItemTagId`) REFERENCES `ItemsTag` (`itemTagId`) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `ItemTagVariationDetails_3` FOREIGN KEY (`dUnitId`) REFERENCES `ItemUnit` (`itemUnitId`) ON DELETE RESTRICT ON UPDATE CASCADE + ); + +CREATE TABLE + `AccountGroup` ( + `groupId` INT NOT NULL, + `groupName` VARCHAR(80) NOT NULL, + `underId` INT NOT NULL DEFAULT 0, + `gType` VARCHAR(45) NULL, + PRIMARY KEY (`groupId`) + ); + +CREATE TABLE + `AccountMaster` ( + `acno` INT NOT NULL, + `prefix` VARCHAR(5) DEFAULT "", + `Name` VARCHAR(60) NOT NULL, + `pName` VARCHAR(60) DEFAULT "", + `aGroupId` INT NOT NULL, + `city` VARCHAR(40) NULL DEFAULT "", + `location` VARCHAR(30) NULL DEFAULT "", + `mobile` VARCHAR(20) NULL DEFAULT "", + `phone` VARCHAR(20) NULL DEFAULT "", + PRIMARY KEY (`acno`), + INDEX `AccountMaster_1_idx` (`aGroupId` ASC) VISIBLE, + CONSTRAINT `AccountMaster_1` FOREIGN KEY (`aGroupId`) REFERENCES `AccountGroup` (`groupId`) ON DELETE RESTRICT ON UPDATE CASCADE ); \ No newline at end of file diff --git a/servers/jwelly/ecommerce-adapter/functions/acc-group.func.go b/servers/jwelly/ecommerce-adapter/functions/acc-group.func.go new file mode 100644 index 0000000..a769b67 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/functions/acc-group.func.go @@ -0,0 +1,65 @@ +package ecommerce_functions + +import ( + "context" + "fmt" + "log" + "strings" + "time" + + ecommerce_maintables "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/interfaces/MainTables" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) + +const SelectAccountGroupQuery = "select GROUPID,GNAME,UNDERID,GRTYPE from `group`;" +const ServerAccGrpOfColumns = 4 +const AccountGroupUpsertQuery = `INSERT INTO AccountGroup (groupId,groupName,underId,gType) VALUES %s AS new_row ON DUPLICATE KEY UPDATE groupName=new_row.groupId,underId=new_row.groupId,gType=new_row.groupId` + +func SyncAccountGroupTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { + initialTime := time.Now() + startTime := initialTime + rows, err := erpDb.Db.Query(SelectAccountGroupQuery) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err != nil { + log.Printf("Error in Reading Unit From Server") + log.Println(err.Error()) + return + } + var results []*ecommerce_maintables.AccountGroupTable = []*ecommerce_maintables.AccountGroupTable{} + for rows.Next() { + row := &ecommerce_maintables.AccountGroupTable{} + err = rows.Scan( + &row.GroupId, + &row.GroupName, + &row.UnderId, + &row.GType, + ) + results = append(results, row) + } + log.Printf("Fetched Total %d rows from Stamp in Duration of %s\n", len(results), time.Since(startTime)) + valueStrings := make([]string, 0, len(results)) + valueArgs := make([]interface{}, 0, len(results)*ServerAccGrpOfColumns) + for _, stamp := range results { + valueStrings = append(valueStrings, "(?, ?, ? ,?)") + valueArgs = append(valueArgs, + stamp.GroupId, + stamp.GroupName, + stamp.UnderId, + stamp.GType, + ) + } + finalQuery := fmt.Sprintf(AccountGroupUpsertQuery, strings.Join(valueStrings, ", ")) + result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) + if err != nil { + log.Fatalf("Bulk upsert failed: %v", err) + log.Fatalf("Query : %s", finalQuery) + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + log.Fatal(err) + } + log.Printf("Bulk upsert for Stamp successful! Rows affected metric: %d\n", rowsAffected) + +} diff --git a/servers/jwelly/ecommerce-adapter/functions/acc-mast.func.go b/servers/jwelly/ecommerce-adapter/functions/acc-mast.func.go new file mode 100644 index 0000000..ff62383 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/functions/acc-mast.func.go @@ -0,0 +1,76 @@ +package ecommerce_functions + +import ( + "context" + "fmt" + "log" + "strings" + "time" + + ecommerce_maintables "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/interfaces/MainTables" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) + +const SelectAccountMasterQuery = "select acno,PREFIX,CNAME,PNAME,GROUPID,CITY,LOCATION,MOBILE,PHONE from `accmast`;" +const ServerAccMstOfColumns = 9 +const upsertPlaceHolder = "(?, ?, ?, ?, ?, ?, ?, ?, ?)" +const AccountMasterUpsertQuery = `INSERT INTO AccountMaster (acno,prefix,Name,pName,aGroupId,city,location,mobile,phone) VALUES %s AS new_row ON DUPLICATE KEY UPDATE prefix = new_row.acno,Name = new_row.acno,pName = new_row.acno,aGroupId = new_row.acno,city = new_row.acno,location = new_row.acno,mobile = new_row.acno,phone = new_row.acno` + +func SyncAccountMasterTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { + initialTime := time.Now() + startTime := initialTime + rows, err := erpDb.Db.Query(SelectAccountMasterQuery) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err != nil { + log.Printf("Error in Reading Unit From Server") + log.Println(err.Error()) + return + } + var results []*ecommerce_maintables.AccountMasterTable = []*ecommerce_maintables.AccountMasterTable{} + for rows.Next() { + row := &ecommerce_maintables.AccountMasterTable{} + err = rows.Scan( + &row.Acno, + &row.Prefix, + &row.Name, + &row.PName, + &row.AGroupId, + &row.City, + &row.Location, + &row.Mobile, + &row.Phone, + ) + results = append(results, row) + } + log.Printf("Fetched Total %d rows from AccountMaster in Duration of %s\n", len(results), time.Since(startTime)) + valueStrings := make([]string, 0, len(results)) + valueArgs := make([]interface{}, 0, len(results)*ServerAccMstOfColumns) + for _, account := range results { + valueStrings = append(valueStrings, upsertPlaceHolder) + valueArgs = append(valueArgs, + account.Acno, + account.Prefix, + account.Name, + account.PName, + account.AGroupId, + account.City, + account.Location, + account.Mobile, + account.Phone, + ) + } + finalQuery := fmt.Sprintf(AccountMasterUpsertQuery, strings.Join(valueStrings, ", ")) + result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) + if err != nil { + log.Fatalf("Bulk upsert failed: %v", err) + log.Fatalf("Query : %s", finalQuery) + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + log.Fatal(err) + } + log.Printf("Bulk upsert for AccountMaster successful! Rows affected metric: %d\n", rowsAffected) + +} diff --git a/servers/jwelly/ecommerce-adapter/functions/item-tag-variation-details.func.go b/servers/jwelly/ecommerce-adapter/functions/item-tag-variation-details.func.go index 7f91ced..34b920d 100644 --- a/servers/jwelly/ecommerce-adapter/functions/item-tag-variation-details.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/item-tag-variation-details.func.go @@ -13,7 +13,7 @@ import ( const SelectItemTagVariationDetailsQuery = "SELECT td.TGDID, td.TSNO, td.INO, td.STAMPID, td.WT,td.EXWT,td.remarks, td.PC, td.RATE, td.SPRICE, td.UNITID FROM tgd1 as td join tgm1 as tg on td.tsno = tg.tsno where tg.vtgno != 0 and tg.STATUS != 'ITM' and tg.TPRE !='REP' ORDER BY td.TSNO LIMIT ? OFFSET ?;" const ServerItemTagVariationDetailsOfColumns = 11 -const ItemTagVariationDetailsUpsertQuery = `INSERT INTO ItemTagVariationDetails (itemTagDetailsId,dItemTagId,dItemId,dSTAMPID,dWeight,dExWeight,dFinalWeight,dRemarks,dPcs,dRate,dSaleValue,dUnitId) VALUES %s AS new_row ON DUPLICATE KEY UPDATE dItemTagId = new_row.itemTagDetailsId,dItemId = new_row.itemTagDetailsId,dSTAMPID = new_row.itemTagDetailsId,dWeight = new_row.itemTagDetailsId,dExWeight = new_row.itemTagDetailsId,dFinalWeight = new_row.itemTagDetailsId,dRemarks = new_row.itemTagDetailsId,dPcs = new_row.itemTagDetailsId,dRate = new_row.itemTagDetailsId,dSaleValue = new_row.itemTagDetailsId,dUnitId = new_row.itemTagDetailsId` +const ItemTagVariationDetailsUpsertQuery = `INSERT INTO ItemTagVariationDetails (itemTagDetailsId,dItemTagId,dItemId,dSTAMPID,dWeight,dExWeight,dFinalWeight,dRemarks,dPcs,dRate,dSaleValue,dUnitId) VALUES %s AS new_row ON DUPLICATE KEY UPDATE dItemTagId = new_row.dItemTagId,dItemId = new_row.dItemId,dSTAMPID = new_row.dSTAMPID,dWeight = new_row.dWeight,dExWeight = new_row.dExWeight,dFinalWeight = new_row.dFinalWeight,dRemarks = new_row.dRemarks,dPcs = new_row.dPcs,dRate = new_row.dRate,dSaleValue = new_row.dSaleValue,dUnitId = new_row.dUnitId;` func SyncItemTagVariationDetailsTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { initialTime := time.Now() @@ -94,7 +94,7 @@ func processItemTagVariationDetailsBatch(serverDb *mysqldb.MysqlDBStruct, erpDb // 2. Prepare chunk for bulk upsert valueStrings := make([]string, 0, fetchedCount) - valueArgs := make([]interface{}, 0, fetchedCount*ServerItemTagVariationDetailsOfColumns) + valueArgs := make([]any, 0, fetchedCount*ServerItemTagVariationDetailsOfColumns) for _, detail := range results { valueStrings = append(valueStrings, "(?,?,?,?,?,?,?,?,?,?,?,?)") diff --git a/servers/jwelly/ecommerce-adapter/functions/stamp.func.go b/servers/jwelly/ecommerce-adapter/functions/stamp.func.go index d438025..9fd7204 100644 --- a/servers/jwelly/ecommerce-adapter/functions/stamp.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/stamp.func.go @@ -11,9 +11,7 @@ import ( mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" ) -// const SelectStampQuery const SelectStampQuery = "select STAMPID,STAMP,STUNCH,STKTUNCH from stamp;" -const ServerStampTable = "Stamp" const ServerStampOfColumns = 4 const StampUpsertQuery = `INSERT INTO Stamp (stampId,STAMP,tunch,stockTunch) VALUES %s AS new_row ON DUPLICATE KEY UPDATE stampId=new_row.stampId,STAMP=new_row.STAMP,tunch=new_row.tunch,stockTunch=new_row.stockTunch` diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/acc-group-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/acc-group-table.type.go new file mode 100644 index 0000000..d4001e0 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/acc-group-table.type.go @@ -0,0 +1,8 @@ +package ecommerce_maintables + +type AccountGroupTable struct { + GroupId int `json:"groupId,"` + GroupName string `json:"groupName,"` + UnderId int `json:"underId,"` + GType string `json:"gType,"` +} diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/accmast-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/accmast-table.type.go new file mode 100644 index 0000000..5928c08 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/accmast-table.type.go @@ -0,0 +1,13 @@ +package ecommerce_maintables + +type AccountMasterTable struct { + Acno int `json:"acno"` + Prefix string `json:"prefix"` + Name string `json:"Name"` + PName string `json:"pName"` + AGroupId int `json:"aGroupId"` + City string `json:"city"` + Location string `json:"location"` + Mobile string `json:"mobile"` + Phone string `json:"phone"` +} diff --git a/servers/jwelly/ecommerce-adapter/main.go b/servers/jwelly/ecommerce-adapter/main.go index 1124336..4e4ffb5 100644 --- a/servers/jwelly/ecommerce-adapter/main.go +++ b/servers/jwelly/ecommerce-adapter/main.go @@ -22,6 +22,8 @@ func main() { } else { ecommerce_env.MysqlConnections.ERP = conn } + ecommerce_functions.SyncAccountGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncAccountMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerce_functions.SyncItemUnitTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerce_functions.SyncItemGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerce_functions.SyncItemMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) From 75ab9ee85bb1d2654b5e2a08a9c6880fc1bc4e9f Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Fri, 19 Jun 2026 06:45:58 +0530 Subject: [PATCH 08/15] feat: Item Trans and Site Table Synced --- .vscode/settings.json | 16 ++ .../jwelly/ecommerce-adapter/Server.Db.sql | 58 ++++++ .../functions/acc-mast.func.go | 6 +- .../functions/item-tag-variation.func.go | 71 ------- .../functions/item-trans.func.go | 195 ++++++++++++++++++ .../functions/site-table.func.go | 66 ++++++ .../MainTables/itm-trans-table.type.go | 47 +++++ .../interfaces/MainTables/site-table.type.go | 8 + servers/jwelly/ecommerce-adapter/main.go | 2 + 9 files changed, 395 insertions(+), 74 deletions(-) create mode 100644 servers/jwelly/ecommerce-adapter/functions/item-trans.func.go create mode 100644 servers/jwelly/ecommerce-adapter/functions/site-table.func.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/itm-trans-table.type.go create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/MainTables/site-table.type.go diff --git a/.vscode/settings.json b/.vscode/settings.json index 0052f1a..1871c37 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,8 @@ { "cSpell.words": [ "Acno", + "bamt", + "damt", "DSTAMPID", "ecommerce", "EXWT", @@ -8,18 +10,32 @@ "gofiber", "Igroup", "itemtag", + "itno", + "itrans", + "ITRNID", + "itrnview", "jpillora", "jwelly", + "kacno", "Karigar", + "lamt", + "LESSWT", + "MAMT", + "metalwt", "mysqldb", "rpsoftech", + "samt", + "SITEID", "SPRICE", "STAMPID", + "tdate", "TGDID", + "tgno", "TPRE", "TSNO", "Tunch", "UNITID", + "vono", "vtgno", "Wstg" ] diff --git a/servers/jwelly/ecommerce-adapter/Server.Db.sql b/servers/jwelly/ecommerce-adapter/Server.Db.sql index 04fc0c6..ab22c6a 100644 --- a/servers/jwelly/ecommerce-adapter/Server.Db.sql +++ b/servers/jwelly/ecommerce-adapter/Server.Db.sql @@ -139,4 +139,62 @@ CREATE TABLE PRIMARY KEY (`acno`), INDEX `AccountMaster_1_idx` (`aGroupId` ASC) VISIBLE, CONSTRAINT `AccountMaster_1` FOREIGN KEY (`aGroupId`) REFERENCES `AccountGroup` (`groupId`) ON DELETE RESTRICT ON UPDATE CASCADE + ); + +CREATE TABLE + ItemTransaction ( + itransId INT AUTO_INCREMENT PRIMARY KEY, + trnId INT NOT NULL DEFAULT 0, + vono INT NOT NULL DEFAULT 0, + tno INT NOT NULL DEFAULT 0, + snTranId INT NOT NULL DEFAULT 0, + tdate DATE NOT NULL, + ino INT NOT NULL DEFAULT 0, + -- Updated to VARCHAR based on the 'string' struct type + remarks VARCHAR(255) NOT NULL DEFAULT '', + -- Weights (3 decimal places) + gwt DECIMAL(10, 3) NOT NULL DEFAULT 0.000, + wt DECIMAL(10, 3) NOT NULL DEFAULT 0.000, + lesswt DECIMAL(10, 3) NOT NULL DEFAULT 0.000, + metalwt DECIMAL(10, 3) NOT NULL DEFAULT 0.000, + orgGwt DECIMAL(10, 3) NOT NULL DEFAULT 0.000, + fine1 DECIMAL(10, 3) NOT NULL DEFAULT 0.000, + tunch DECIMAL(10, 3) NOT NULL DEFAULT 0.000, + wstg DECIMAL(10, 3) NOT NULL DEFAULT 0.000, + pc INT NOT NULL DEFAULT 0, + -- Rates and Amounts (2 decimal places) + rate DECIMAL(12, 2) NOT NULL DEFAULT 0.00, + mamt DECIMAL(12, 2) NOT NULL DEFAULT 0.00, + tValue DECIMAL(12, 2) NOT NULL DEFAULT 0.00, + damt DECIMAL(12, 2) NOT NULL DEFAULT 0.00, + samt DECIMAL(12, 2) NOT NULL DEFAULT 0.00, + lamt DECIMAL(12, 2) NOT NULL DEFAULT 0.00, + bamt DECIMAL(12, 2) NOT NULL DEFAULT 0.00, + others DECIMAL(12, 2) NOT NULL DEFAULT 0.00, + lbr DECIMAL(12, 2) NOT NULL DEFAULT 0.00, + orgRate DECIMAL(12, 2) NOT NULL DEFAULT 0.00, + orgTotal DECIMAL(12, 2) NOT NULL DEFAULT 0.00, + total DECIMAL(12, 2) NOT NULL DEFAULT 0.00, + -- Strings/Identifiers + type VARCHAR(50) NOT NULL DEFAULT '', + stock VARCHAR(50) NOT NULL DEFAULT '', + unitId INT NOT NULL DEFAULT 0, + stampId INT NOT NULL DEFAULT 0, + siteId INT NOT NULL DEFAULT 0, + size VARCHAR(50) NOT NULL DEFAULT '', + tgno VARCHAR(50) NOT NULL DEFAULT '', + tpre VARCHAR(50) NOT NULL DEFAULT '', + karigar VARCHAR(100) NOT NULL DEFAULT '', + vtgno INT NOT NULL DEFAULT 0, + tsno INT NOT NULL DEFAULT 0, + kacno INT NOT NULL DEFAULT 0, + INDEX `ItemTransaction_1_idx` (`ino` ASC) VISIBLE, + INDEX `ItemTransaction_2_idx` (`stampId` ASC) VISIBLE, + INDEX `ItemTransaction_3_idx` (`unitId` ASC) VISIBLE, + CONSTRAINT `ItemTransaction_1` FOREIGN KEY (`ino`) REFERENCES `ItemMaster` (`itemId`) ON DELETE RESTRICT + UPDATE CASCADE, + CONSTRAINT `ItemTransaction_2` FOREIGN KEY (`stampId`) REFERENCES `Stamp` (`stampId`) ON DELETE RESTRICT + UPDATE CASCADE, + CONSTRAINT `ItemTransaction_3` FOREIGN KEY (`unitId`) REFERENCES `ItemUnit` (`itemUnitId`) ON DELETE RESTRICT + UPDATE CASCADE ); \ No newline at end of file diff --git a/servers/jwelly/ecommerce-adapter/functions/acc-mast.func.go b/servers/jwelly/ecommerce-adapter/functions/acc-mast.func.go index ff62383..b29acd8 100644 --- a/servers/jwelly/ecommerce-adapter/functions/acc-mast.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/acc-mast.func.go @@ -13,8 +13,8 @@ import ( const SelectAccountMasterQuery = "select acno,PREFIX,CNAME,PNAME,GROUPID,CITY,LOCATION,MOBILE,PHONE from `accmast`;" const ServerAccMstOfColumns = 9 -const upsertPlaceHolder = "(?, ?, ?, ?, ?, ?, ?, ?, ?)" -const AccountMasterUpsertQuery = `INSERT INTO AccountMaster (acno,prefix,Name,pName,aGroupId,city,location,mobile,phone) VALUES %s AS new_row ON DUPLICATE KEY UPDATE prefix = new_row.acno,Name = new_row.acno,pName = new_row.acno,aGroupId = new_row.acno,city = new_row.acno,location = new_row.acno,mobile = new_row.acno,phone = new_row.acno` +const upsertAccountMasterPlaceHolder = "(?, ?, ?, ?, ?, ?, ?, ?, ?)" +const AccountMasterUpsertQuery = `INSERT INTO AccountMaster (acno,prefix,Name,pName,aGroupId,city,location,mobile,phone) VALUES %s AS new_row ON DUPLICATE KEY UPDATE prefix = new_row.prefix,Name = new_row.Name,pName = new_row.pName,aGroupId = new_row.aGroupId,city = new_row.city,location = new_row.location,mobile = new_row.mobile,phone = new_row.phone` func SyncAccountMasterTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { initialTime := time.Now() @@ -47,7 +47,7 @@ func SyncAccountMasterTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.Mysq valueStrings := make([]string, 0, len(results)) valueArgs := make([]interface{}, 0, len(results)*ServerAccMstOfColumns) for _, account := range results { - valueStrings = append(valueStrings, upsertPlaceHolder) + valueStrings = append(valueStrings, upsertAccountMasterPlaceHolder) valueArgs = append(valueArgs, account.Acno, account.Prefix, diff --git a/servers/jwelly/ecommerce-adapter/functions/item-tag-variation.func.go b/servers/jwelly/ecommerce-adapter/functions/item-tag-variation.func.go index ed7a0ee..b3f7c79 100644 --- a/servers/jwelly/ecommerce-adapter/functions/item-tag-variation.func.go +++ b/servers/jwelly/ecommerce-adapter/functions/item-tag-variation.func.go @@ -15,77 +15,6 @@ const SelectItemTagVariationQuery = "SELECT tsno, STAMPID, GWT, LESSWT, WT, STAT const ServerItemTagVariationOfColumns = 11 const ItemTagVariationUpsertQuery = `INSERT INTO ItemTagVariation (vTagId,vStampId,vGrossWt,vLessWeight,vNetWt,vStatus,vTunch,vWstg,vSellTunch,vSellWstg,vKarigarCode) VALUES %s AS new_row ON DUPLICATE KEY UPDATE vTagId = new_row.vTagId,vStampId = new_row.vStampId,vGrossWt = new_row.vGrossWt,vLessWeight = new_row.vLessWeight,vNetWt = new_row.vNetWt,vStatus = new_row.vStatus,vTunch = new_row.vTunch,vWstg = new_row.vWstg,vSellTunch = new_row.vSellTunch,vSellWstg = new_row.vSellWstg,vKarigarCode = new_row.vKarigarCode` -// func SyncItemTagVariationTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { -// initialTime := time.Now() -// startTime := initialTime -// batchSize := 1000 // You can change this to 2000 if your server handles it well -// offset := 0 -// var totalRowsAffected int64 = 0 -// rows, err := erpDb.Db.Query(SelectItemTagVariationQuery) -// ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) -// defer cancel() -// if err != nil { -// log.Printf("Error in Reading Unit From Server") -// log.Println(err.Error()) -// return -// } -// var results []*ecommerce_maintables.TagVariationMainTable = []*ecommerce_maintables.TagVariationMainTable{} -// for rows.Next() { -// row := &ecommerce_maintables.TagVariationMainTable{} -// err = rows.Scan( -// &row.VTagId, -// &row.VStampId, -// &row.VGrossWt, -// &row.VLessWeight, -// &row.VNetWt, -// &row.VStatusString, -// &row.VTunch, -// &row.VWstg, -// &row.VSellTunch, -// &row.VSellWstg, -// &row.VKarigarCode, -// ) -// if row.VStatusString == "" || row.VStatusString == "AI" { -// row.VStatus = true -// } else { -// row.VStatus = false -// } -// results = append(results, row) -// } -// log.Printf("Fetched Total %d rows from Item Tag Variation in Duration of %s\n", len(results), time.Since(startTime)) -// valueStrings := make([]string, 0, len(results)) -// valueArgs := make([]interface{}, 0, len(results)*ServerItemTagVariationOfColumns) - -// for _, variation := range results { -// valueStrings = append(valueStrings, "(?,?,?,?,?,?,?,?,?,?,?)") -// valueArgs = append(valueArgs, -// variation.VTagId, -// variation.VStampId, -// variation.VGrossWt, -// variation.VLessWeight, -// variation.VNetWt, -// variation.VStatusString, -// variation.VTunch, -// variation.VWstg, -// variation.VSellTunch, -// variation.VSellWstg, -// variation.VKarigarCode, -// ) -// } -// finalQuery := fmt.Sprintf(ItemTagVariationUpsertQuery, strings.Join(valueStrings, ", ")) -// result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) -// if err != nil { -// log.Fatalf("Bulk upsert failed: %v", err) -// log.Fatalf("Query : %s", finalQuery) -// } - -// rowsAffected, err := result.RowsAffected() -// if err != nil { -// log.Fatal(err) -// } -// log.Printf("Bulk upsert for Item Tag Variation successful! Rows affected metric: %d\n", rowsAffected) - -// } func SyncItemTagVariationTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { initialTime := time.Now() batchSize := 1000 // You can change this to 2000 if your server handles it well diff --git a/servers/jwelly/ecommerce-adapter/functions/item-trans.func.go b/servers/jwelly/ecommerce-adapter/functions/item-trans.func.go new file mode 100644 index 0000000..66703ef --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/functions/item-trans.func.go @@ -0,0 +1,195 @@ +package ecommerce_functions + +import ( + "context" + "fmt" + "log" + "strings" + "time" + + ecommerce_maintables "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/interfaces/MainTables" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) + +const SelectItemTransQuery = "SELECT ITRNID, TRNID, VONO, TNO, SNTRNID, TDATE, INO, REMARKS, GWT, WT, LESSWT, PC, rate, TUNCH, WSTG, MAMT, TYPE, STOCK, UNITID, STAMPID, SITEID, TVALUE, DAMT, SAMT, LAMT, BAMT, OTHERS, LBR, size, FINE1, TGNO, vtgno, TPRE, TSNO, ORGRATE, ORGGWT, ORGTOTAL, TOTAL, KACNO, karigar, metalwt FROM itrnview ORDER BY ITRNID LIMIT ? OFFSET ?;" +const ItemTransactionColumns = 41 +const upsertItemTransPlaceHolder = "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + +const ItemTransUpsertQuery = `INSERT INTO ItemTransaction (itransId, trnId, vono, tno, snTranId, tdate, ino, remarks, gwt, wt, lesswt,pc, rate, tunch, wstg, mamt, type, stock, unitId, stampId, siteId, tValue,damt, samt, lamt, bamt, others, lbr, size, fine1, tgno, vtgno, tpre, tsno,orgRate, orgGwt, orgTotal, total, kacno, karigar, metalwt) VALUES %s AS new_row ON DUPLICATE KEY UPDATE trnId = new_row.trnId,vono = new_row.vono,tno = new_row.tno,snTranId = new_row.snTranId,tdate = new_row.tdate,ino = new_row.ino,remarks = new_row.remarks,gwt = new_row.gwt,wt = new_row.wt,lesswt = new_row.lesswt,pc = new_row.pc,rate = new_row.rate,tunch = new_row.tunch,wstg = new_row.wstg,mamt = new_row.mamt,type = new_row.type,stock = new_row.stock,unitId = new_row.unitId,stampId = new_row.stampId,siteId = new_row.siteId,tValue = new_row.tValue,damt = new_row.damt,samt = new_row.samt,lamt = new_row.lamt,bamt = new_row.bamt,others = new_row.others,lbr = new_row.lbr,size = new_row.size,fine1 = new_row.fine1,tgno = new_row.tgno,vtgno = new_row.vtgno,tpre = new_row.tpre,tsno = new_row.tsno,orgRate = new_row.orgRate,orgGwt = new_row.orgGwt,orgTotal = new_row.orgTotal,total = new_row.total,kacno = new_row.kacno,karigar = new_row.karigar,metalwt = new_row.metalwt;` + +func SyncItemTransTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { + initialTime := time.Now() + batchSize := 1000 // You can change this to 2000 if your server handles it well + offset := 0 + var totalRowsAffected int64 = 0 + + log.Println("Starting chunked sync for Item Tag Variations...") + + for { + // Process a single batch + rowsFetched, rowsAffected, err := processItemTransBatch(serverDb, erpDb, batchSize, offset) + if err != nil { + log.Printf("Sync halted due to error at offset %d: %v", offset, err) + break // Stop the loop on error, but keep the app alive + } + + totalRowsAffected += rowsAffected + + // If we fetched fewer rows than the batch size, we've reached the end of the table + if rowsFetched < batchSize { + break + } + + // Move the offset forward for the next iteration + offset += batchSize + } + + log.Printf("Sync completed successfully! Total Duration: %s | Total Rows Affected Metric: %d\n", time.Since(initialTime), totalRowsAffected) +} + +func processItemTransBatch(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct, limit int, offset int) (int, int64, error) { + startTime := time.Now() + + // 1. Fetch chunk from ERP + rows, err := erpDb.Db.Query(SelectItemTransQuery, limit, offset) + if err != nil { + return 0, 0, fmt.Errorf("failed reading from ERP (Limit: %d, Offset: %d): %w", limit, offset, err) + } + // CRITICAL: Ensure rows are closed immediately after this batch finishes + defer rows.Close() + + var results []*ecommerce_maintables.ItemTransactionTable + + for rows.Next() { + row := &ecommerce_maintables.ItemTransactionTable{} + err = rows.Scan( + &row.ItransId, + &row.TrnId, + &row.VONO, + &row.TNO, + &row.SNTranId, + &row.TDATE, + &row.INO, + &row.Remarks, + &row.GWT, + &row.WT, + &row.LESSWT, + &row.PC, + &row.Rate, + &row.TUNCH, + &row.WSTG, + &row.MAMT, + &row.TYPE, + &row.Stock, + &row.UnitId, + &row.StampId, + &row.SiteId, + &row.TValue, + &row.DAmt, + &row.SAmt, + &row.LAmt, + &row.BAmt, + &row.Others, + &row.LBR, + &row.Size, + &row.FINE1, + &row.TGNO, + &row.VTGNO, + &row.TPRE, + &row.TSNO, + &row.ORGRate, + &row.ORGGwt, + &row.ORGTotal, + &row.Total, + &row.KACNO, + &row.Karigar, + &row.Metalwt, + ) + if err != nil { + return 0, 0, fmt.Errorf("row scan error: %w", err) + } + results = append(results, row) + } + + // Check for errors encountered during iteration + if err = rows.Err(); err != nil { + return 0, 0, fmt.Errorf("rows iteration error: %w", err) + } + + fetchedCount := len(results) + if fetchedCount == 0 { + return 0, 0, nil // Nothing to process + } + + // 2. Prepare chunk for bulk upsert + valueStrings := make([]string, 0, fetchedCount) + valueArgs := make([]interface{}, 0, fetchedCount*ItemTransactionColumns) + + for _, trans := range results { + valueStrings = append(valueStrings, upsertItemTransPlaceHolder) + valueArgs = append(valueArgs, + trans.ItransId, + trans.TrnId, + trans.VONO, + trans.TNO, + trans.SNTranId, + trans.TDATE, + trans.INO, + trans.Remarks, + trans.GWT, + trans.WT, + trans.LESSWT, + trans.PC, + trans.Rate, + trans.TUNCH, + trans.WSTG, + trans.MAMT, + trans.TYPE, + trans.Stock, + trans.UnitId, + trans.StampId, + trans.SiteId, + trans.TValue, + trans.DAmt, + trans.SAmt, + trans.LAmt, + trans.BAmt, + trans.Others, + trans.LBR, + trans.Size, + trans.FINE1, + trans.TGNO, + trans.VTGNO, + trans.TPRE, + trans.TSNO, + trans.ORGRate, + trans.ORGGwt, + trans.ORGTotal, + trans.Total, + trans.KACNO, + trans.Karigar, + trans.Metalwt, + ) + } + + finalQuery := fmt.Sprintf(ItemTransUpsertQuery, strings.Join(valueStrings, ", ")) + + // 3. Execute bulk upsert for this specific chunk + // Give each chunk a reasonable 10-second timeout to execute + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) + if err != nil { + return fetchedCount, 0, fmt.Errorf("bulk upsert failed: %w", err) + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + return fetchedCount, 0, fmt.Errorf("could not get rows affected: %w", err) + } + + log.Printf("Batch processed: %d rows fetched | %d rows affected | Duration: %s", fetchedCount, rowsAffected, time.Since(startTime)) + + return fetchedCount, rowsAffected, nil +} diff --git a/servers/jwelly/ecommerce-adapter/functions/site-table.func.go b/servers/jwelly/ecommerce-adapter/functions/site-table.func.go new file mode 100644 index 0000000..e46ac3c --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/functions/site-table.func.go @@ -0,0 +1,66 @@ +package ecommerce_functions + +import ( + "context" + "fmt" + "log" + "strings" + "time" + + ecommerce_maintables "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/interfaces/MainTables" + mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" +) + +const SelectSiteQuery = "select SITEID,SITE,`PATH`,PREFIX from `site`;" +const ServerSiteOfColumns = 4 +const upsertSitePlaceHolder = "(?, ?, ?, ?)" +const SiteUpsertQuery = `INSERT INTO Site (siteId, siteName, siteAddress, sPrefix) VALUES %s AS new_row ON DUPLICATE KEY UPDATE siteName = new_row.siteName,siteAddress = new_row.siteAddress,sPrefix = new_row.sPrefix;` + +func SyncSiteTable(serverDb *mysqldb.MysqlDBStruct, erpDb *mysqldb.MysqlDBStruct) { + initialTime := time.Now() + startTime := initialTime + rows, err := erpDb.Db.Query(SelectSiteQuery) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err != nil { + log.Printf("Error in Reading Unit From Server") + log.Println(err.Error()) + return + } + var results []*ecommerce_maintables.SiteTable = []*ecommerce_maintables.SiteTable{} + for rows.Next() { + row := &ecommerce_maintables.SiteTable{} + err = rows.Scan( + &row.SiteId, + &row.SiteName, + &row.SiteAddress, + &row.SPrefix, + ) + results = append(results, row) + } + log.Printf("Fetched Total %d rows from Site in Duration of %s\n", len(results), time.Since(startTime)) + valueStrings := make([]string, 0, len(results)) + valueArgs := make([]interface{}, 0, len(results)*ServerSiteOfColumns) + for _, site := range results { + valueStrings = append(valueStrings, upsertSitePlaceHolder) + valueArgs = append(valueArgs, + site.SiteId, + site.SiteName, + site.SiteAddress, + site.SPrefix, + ) + } + finalQuery := fmt.Sprintf(SiteUpsertQuery, strings.Join(valueStrings, ", ")) + result, err := serverDb.Db.ExecContext(ctx, finalQuery, valueArgs...) + if err != nil { + log.Fatalf("Bulk upsert failed: %v", err) + log.Fatalf("Query : %s", finalQuery) + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + log.Fatal(err) + } + log.Printf("Bulk upsert for Site successful! Rows affected metric: %d\n", rowsAffected) + +} diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/itm-trans-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/itm-trans-table.type.go new file mode 100644 index 0000000..8b74331 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/itm-trans-table.type.go @@ -0,0 +1,47 @@ +package ecommerce_maintables + +import "time" + +type ItemTransactionTable struct { + ItransId int `json:"itransId"` + TrnId int `json:"trnId"` + VONO int `json:"vono"` + TNO int `json:"tno"` + SNTranId int `json:"snTranId"` + TDATE time.Time `json:"tdate"` + INO int `json:"ino"` + Remarks string `json:"remarks"` + GWT float64 `json:"gwt"` + WT float64 `json:"wt"` + LESSWT float64 `json:"lesswt"` + PC int `json:"pc"` + Rate float64 `json:"rate"` + TUNCH float64 `json:"tunch"` + WSTG float64 `json:"wstg"` + MAMT float64 `json:"mamt"` + TYPE string `json:"type"` + Stock string `json:"stock"` + UnitId string `json:"unitId"` + StampId string `json:"stampId"` + SiteId string `json:"siteId"` + TValue float64 `json:"tValue"` + DAmt float64 `json:"damt"` + SAmt float64 `json:"samt"` + LAmt float64 `json:"lamt"` + BAmt float64 `json:"bamt"` + Others float64 `json:"others"` + LBR float64 `json:"lbr"` + Size string `json:"size"` + FINE1 float64 `json:"fine1"` + TGNO string `json:"tgno"` + VTGNO int `json:"vtgno"` + TPRE string `json:"tpre"` + TSNO int `json:"tsno"` + ORGRate float64 `json:"orgRate"` + ORGGwt float64 `json:"orgGwt"` + ORGTotal float64 `json:"orgTotal"` + Total float64 `json:"total"` + KACNO int `json:"kacno"` + Karigar string `json:"karigar"` + Metalwt float64 `json:"metalwt"` +} diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/site-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/site-table.type.go new file mode 100644 index 0000000..3c6116d --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/site-table.type.go @@ -0,0 +1,8 @@ +package ecommerce_maintables + +type SiteTable struct { + SiteId int `json:"siteId"` + SiteName string `json:"siteName"` + SiteAddress string `json:"siteAddress"` + SPrefix string `json:"sPrefix"` +} diff --git a/servers/jwelly/ecommerce-adapter/main.go b/servers/jwelly/ecommerce-adapter/main.go index 4e4ffb5..853b907 100644 --- a/servers/jwelly/ecommerce-adapter/main.go +++ b/servers/jwelly/ecommerce-adapter/main.go @@ -22,6 +22,7 @@ func main() { } else { ecommerce_env.MysqlConnections.ERP = conn } + ecommerce_functions.SyncSiteTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerce_functions.SyncAccountGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerce_functions.SyncAccountMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerce_functions.SyncItemUnitTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) @@ -31,5 +32,6 @@ func main() { ecommerce_functions.SyncItemTagTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerce_functions.SyncItemTagVariationTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerce_functions.SyncItemTagVariationDetailsTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemTransTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) log.Printf("DONE") } From 1286efdc7d963249960183bbcecd021e7a879848 Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Sat, 20 Jun 2026 00:26:13 +0530 Subject: [PATCH 09/15] Cron Job Added --- .../jwelly/ecommerce-adapter/env/env.index.go | 7 ++- .../MainTables/acc-group-table.type.go | 8 ++-- servers/jwelly/ecommerce-adapter/main.go | 46 +++++++++++++------ .../sync-func/accounts.sync.go | 12 +++++ .../sync-func/basic.details.sync.go | 15 ++++++ .../sync-func/item-tag-details.sync.go | 14 ++++++ 6 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 servers/jwelly/ecommerce-adapter/sync-func/accounts.sync.go create mode 100644 servers/jwelly/ecommerce-adapter/sync-func/basic.details.sync.go create mode 100644 servers/jwelly/ecommerce-adapter/sync-func/item-tag-details.sync.go diff --git a/servers/jwelly/ecommerce-adapter/env/env.index.go b/servers/jwelly/ecommerce-adapter/env/env.index.go index 2b5ffbb..9797085 100644 --- a/servers/jwelly/ecommerce-adapter/env/env.index.go +++ b/servers/jwelly/ecommerce-adapter/env/env.index.go @@ -15,8 +15,11 @@ type IServerMysqlConnection struct { ERP *mysqldb.MysqlDBStruct } type IServverConfig struct { - ServerDatabase *mysqldb.MysqldbConfig `json:"ServerDatabase"` - ErpDatabase *mysqldb.MysqldbConfig `json:"ErpDatabase"` + ServerDatabase *mysqldb.MysqldbConfig `json:"ServerDatabase" validate:"required"` + ErpDatabase *mysqldb.MysqldbConfig `json:"ErpDatabase" validate:"required"` + AccountTableSyncCron string `json:"AccountTableSyncCron" validate:"required"` + BasicDetailsSyncCron string `json:"BasicDetailsSyncCron" validate:"required"` + ItemTagDetailsSyncCron string `json:"ItemTagDetailsSyncCron" validate:"required"` } var ServerConfig *IServverConfig diff --git a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/acc-group-table.type.go b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/acc-group-table.type.go index d4001e0..1ec88a5 100644 --- a/servers/jwelly/ecommerce-adapter/interfaces/MainTables/acc-group-table.type.go +++ b/servers/jwelly/ecommerce-adapter/interfaces/MainTables/acc-group-table.type.go @@ -1,8 +1,8 @@ package ecommerce_maintables type AccountGroupTable struct { - GroupId int `json:"groupId,"` - GroupName string `json:"groupName,"` - UnderId int `json:"underId,"` - GType string `json:"gType,"` + GroupId int `json:"groupId"` + GroupName string `json:"groupName"` + UnderId int `json:"underId"` + GType string `json:"gType"` } diff --git a/servers/jwelly/ecommerce-adapter/main.go b/servers/jwelly/ecommerce-adapter/main.go index 853b907..3b102e2 100644 --- a/servers/jwelly/ecommerce-adapter/main.go +++ b/servers/jwelly/ecommerce-adapter/main.go @@ -3,35 +3,51 @@ package main import ( "log" + "github.com/robfig/cron/v3" ecommerce_env "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/env" - ecommerce_functions "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/functions" + ecommerce_sync "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/sync-func" mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" ) +// main function is the entry point of the program func main() { + // Initialize the MySQL connections + InitaliseMysqlConnections() + + // Create a new cron scheduler + cronTab := cron.New() + + // Add functions to the cron scheduler + // Account Sync function will be executed every 5 minutes + cronTab.AddFunc(ecommerce_env.ServerConfig.AccountTableSyncCron, ecommerce_sync.AccountSync) + // Basic Details Sync function will be executed every 10 minutes + cronTab.AddFunc(ecommerce_env.ServerConfig.BasicDetailsSyncCron, ecommerce_sync.BasicDetailsSync) + // Item Details and Tags Sync function will be executed every 15 minutes + cronTab.AddFunc(ecommerce_env.ServerConfig.ItemTagDetailsSyncCron, ecommerce_sync.ItemDetailsTagsSync) + + // Start the cron scheduler + log.Printf("Starting the cron scheduler...") + cronTab.Start() + + // Log a message when the cron scheduler is done starting + log.Printf("DONE") +} + +// Initialize the MySQL connections +func InitaliseMysqlConnections() { config := ecommerce_env.Init() + if conn, err := mysqldb.InitializeMysqlDbWithConfig(config.ServerDatabase); err != nil { - log.Panicf("Connection In Server Database") + log.Fatal("Error initializing MySQL connection:", err) panic(err) } else { ecommerce_env.MysqlConnections.Server = conn } + if conn, err := mysqldb.InitializeMysqlDbWithConfig(config.ErpDatabase); err != nil { - log.Panicf("Connection In ERP Database") + log.Fatal("Error initializing ERP MySQL connection:", err) panic(err) } else { ecommerce_env.MysqlConnections.ERP = conn } - ecommerce_functions.SyncSiteTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerce_functions.SyncAccountGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerce_functions.SyncAccountMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerce_functions.SyncItemUnitTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerce_functions.SyncItemGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerce_functions.SyncItemMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerce_functions.SyncStampTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerce_functions.SyncItemTagTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerce_functions.SyncItemTagVariationTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerce_functions.SyncItemTagVariationDetailsTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - ecommerce_functions.SyncItemTransTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - log.Printf("DONE") } diff --git a/servers/jwelly/ecommerce-adapter/sync-func/accounts.sync.go b/servers/jwelly/ecommerce-adapter/sync-func/accounts.sync.go new file mode 100644 index 0000000..c41854f --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/sync-func/accounts.sync.go @@ -0,0 +1,12 @@ +package ecommerce_sync + +import ( + ecommerce_env "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/env" + ecommerce_functions "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/functions" +) + +func AccountSync() { + ecommerce_functions.SyncAccountGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncAccountMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + +} diff --git a/servers/jwelly/ecommerce-adapter/sync-func/basic.details.sync.go b/servers/jwelly/ecommerce-adapter/sync-func/basic.details.sync.go new file mode 100644 index 0000000..5ec7c76 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/sync-func/basic.details.sync.go @@ -0,0 +1,15 @@ +package ecommerce_sync + +import ( + ecommerce_env "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/env" + ecommerce_functions "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/functions" +) + +func BasicDetailsSync() { + ecommerce_functions.SyncSiteTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemUnitTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncStampTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + +} diff --git a/servers/jwelly/ecommerce-adapter/sync-func/item-tag-details.sync.go b/servers/jwelly/ecommerce-adapter/sync-func/item-tag-details.sync.go new file mode 100644 index 0000000..9f09f0b --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/sync-func/item-tag-details.sync.go @@ -0,0 +1,14 @@ +package ecommerce_sync + +import ( + ecommerce_env "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/env" + ecommerce_functions "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/functions" +) + +func ItemDetailsTagsSync() { + ecommerce_functions.SyncItemTagTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemTagVariationTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemTagVariationDetailsTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + ecommerce_functions.SyncItemTransTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) + +} From 36b706cfaf0c1b34df0992b2d172d8b50f3f722c Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Sat, 20 Jun 2026 00:48:25 +0530 Subject: [PATCH 10/15] fix: Spelling Mistakes Fixed --- .vscode/settings.json | 2 ++ env/app-env.enum.go | 4 ++-- middleware/token-validator.middleware.go | 4 ++-- servers/boozv3/main-server/main.go | 2 +- servers/bullion/main-server/main.go | 2 +- servers/bullion/main-server/repos/admin-user.repo.go | 2 +- servers/bullion/main-server/repos/bank-details.repo.go | 2 +- servers/bullion/main-server/repos/bank-rate-calc.repo.go | 2 +- .../bullion/main-server/repos/bullion-site-info.repo.go | 2 +- servers/bullion/main-server/repos/event.repo.go | 2 +- servers/bullion/main-server/repos/feeds.repo.go | 2 +- .../bullion/main-server/repos/general-user-req.repo.go | 2 +- servers/bullion/main-server/repos/general-user.repo.go | 2 +- servers/bullion/main-server/repos/order.repo.go | 2 +- .../bullion/main-server/repos/prduct-group-map.repo.go | 2 +- servers/bullion/main-server/repos/product-repo.go | 2 +- .../bullion/main-server/repos/trade-user-group.repo.go | 2 +- servers/bullion/main-server/repos/trade-user.repo.go | 2 +- servers/http-dump/dump-server/main.go | 2 +- servers/http-dump/dump-server/repos/end-point.repo.go | 2 +- servers/http-dump/dump-server/repos/event.repo.go | 2 +- servers/jwelly/main-server/main.go | 2 +- servers/jwelly/main-server/repos/key-value-data.repo.go | 2 +- .../mysql-to-surreal/interfaces/tg-master-status.enum.go | 9 --------- servers/link-shortner/main.go | 2 +- servers/soham/whatsapp-client/main.go | 2 +- servers/soham/whatsapp-server/main.go | 2 +- servers/telegram-server/main.go | 2 +- servers/whatsapp-server/main.go | 2 +- utility/firebase/firebase-app.go | 2 +- utility/mongodb/index.go | 2 +- utility/redis/index.go | 2 +- 32 files changed, 34 insertions(+), 41 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 1871c37..014f9d6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,7 @@ { "cSpell.words": [ "Acno", + "Akshat", "bamt", "damt", "DSTAMPID", @@ -23,6 +24,7 @@ "MAMT", "metalwt", "mysqldb", + "robfig", "rpsoftech", "samt", "SITEID", diff --git a/env/app-env.enum.go b/env/app-env.enum.go index 974c03c..cd13acf 100644 --- a/env/app-env.enum.go +++ b/env/app-env.enum.go @@ -9,7 +9,7 @@ import ( type AppEnv string const ( - APP_ENV_DEVELOPE AppEnv = "DEVELOPE" + APP_ENV_DEVELOP AppEnv = "DEVELOP" APP_ENV_LOCAL AppEnv = "LOCAL" APP_ENV_CI AppEnv = "CI" APP_ENV_PRODUCTION AppEnv = "PRODUCTION" @@ -17,7 +17,7 @@ const ( var ( appEnvMap = map[string]AppEnv{ - "DEVELOPE": APP_ENV_DEVELOPE, + "DEVELOP": APP_ENV_DEVELOP, "LOCAL": APP_ENV_LOCAL, "CI": APP_ENV_CI, "PRODUCTION": APP_ENV_PRODUCTION, diff --git a/middleware/token-validator.middleware.go b/middleware/token-validator.middleware.go index beb0627..afd73c3 100644 --- a/middleware/token-validator.middleware.go +++ b/middleware/token-validator.middleware.go @@ -6,7 +6,7 @@ import ( "github.com/rpsoftech/golang-servers/interfaces" ) -var TokenDecrypterFunctinos func(*fiber.Ctx, *string) error +var TokenDecrypterFunctions func(*fiber.Ctx, *string) error // fiber middleware for jwt func TokenDecrypter(c *fiber.Ctx) error { @@ -22,7 +22,7 @@ func TokenDecrypter(c *fiber.Ctx) error { return c.Next() } // userRolesCustomClaim, localErr := .VerifyToken(tokenString[0]) - localErr := TokenDecrypterFunctinos(c, &tokenString[0]) + localErr := TokenDecrypterFunctions(c, &tokenString[0]) if localErr != nil { c.Locals(interfaces.REQ_LOCAL_ERROR_KEY, localErr) return c.Next() diff --git a/servers/boozv3/main-server/main.go b/servers/boozv3/main-server/main.go index 227c0a5..11d5b95 100644 --- a/servers/boozv3/main-server/main.go +++ b/servers/boozv3/main-server/main.go @@ -71,7 +71,7 @@ func main() { return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!") }) hostAndPort := "" - if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOP { hostAndPort = "127.0.0.1" } // Print the router stack in JSON format diff --git a/servers/bullion/main-server/main.go b/servers/bullion/main-server/main.go index a89f5d2..81e0fd3 100644 --- a/servers/bullion/main-server/main.go +++ b/servers/bullion/main-server/main.go @@ -77,7 +77,7 @@ func main() { return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!") }) hostAndPort := "" - if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOP { hostAndPort = "127.0.0.1" } // Print the router stack in JSON format diff --git a/servers/bullion/main-server/repos/admin-user.repo.go b/servers/bullion/main-server/repos/admin-user.repo.go index 914c491..e985e1a 100644 --- a/servers/bullion/main-server/repos/admin-user.repo.go +++ b/servers/bullion/main-server/repos/admin-user.repo.go @@ -22,7 +22,7 @@ const adminUserCollectionName = "AdminUser" var AdminUserRepo *AdminUserRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(adminUserCollectionName) diff --git a/servers/bullion/main-server/repos/bank-details.repo.go b/servers/bullion/main-server/repos/bank-details.repo.go index a3eb970..e3b53f3 100644 --- a/servers/bullion/main-server/repos/bank-details.repo.go +++ b/servers/bullion/main-server/repos/bank-details.repo.go @@ -26,7 +26,7 @@ const bankDetailsCollectionName = "BankDetails" var BankDetailsRepo *BankDetailsRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(bankDetailsCollectionName) diff --git a/servers/bullion/main-server/repos/bank-rate-calc.repo.go b/servers/bullion/main-server/repos/bank-rate-calc.repo.go index 6d05e21..7dc781c 100644 --- a/servers/bullion/main-server/repos/bank-rate-calc.repo.go +++ b/servers/bullion/main-server/repos/bank-rate-calc.repo.go @@ -29,7 +29,7 @@ const bankRateRedisCollection = "bankRate" var BankRateCalcRepo *BankRateCalcRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(bankRateCalcRepoCollectionName) diff --git a/servers/bullion/main-server/repos/bullion-site-info.repo.go b/servers/bullion/main-server/repos/bullion-site-info.repo.go index 803a354..9b4e2bb 100644 --- a/servers/bullion/main-server/repos/bullion-site-info.repo.go +++ b/servers/bullion/main-server/repos/bullion-site-info.repo.go @@ -22,7 +22,7 @@ const bullionSiteInfoCollectionName = "BullionSiteInfo" var BullionSiteInfoRepo *BullionSiteInfoRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(bullionSiteInfoCollectionName) diff --git a/servers/bullion/main-server/repos/event.repo.go b/servers/bullion/main-server/repos/event.repo.go index 26d8f54..ec4bee1 100644 --- a/servers/bullion/main-server/repos/event.repo.go +++ b/servers/bullion/main-server/repos/event.repo.go @@ -20,7 +20,7 @@ const eventsCollectionName = "Events" var EventRepo *EventRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(eventsCollectionName) diff --git a/servers/bullion/main-server/repos/feeds.repo.go b/servers/bullion/main-server/repos/feeds.repo.go index 193fb0b..d6a43b0 100644 --- a/servers/bullion/main-server/repos/feeds.repo.go +++ b/servers/bullion/main-server/repos/feeds.repo.go @@ -26,7 +26,7 @@ const feedCollectionName = "Feed" var FeedsRepo *FeedsRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(feedCollectionName) diff --git a/servers/bullion/main-server/repos/general-user-req.repo.go b/servers/bullion/main-server/repos/general-user-req.repo.go index 971cfe8..2e163b5 100644 --- a/servers/bullion/main-server/repos/general-user-req.repo.go +++ b/servers/bullion/main-server/repos/general-user-req.repo.go @@ -23,7 +23,7 @@ const generalUserReqCollectionName = "GeneralUserReq" var GeneralUserReqRepo *GeneralUserReqRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(generalUserReqCollectionName) diff --git a/servers/bullion/main-server/repos/general-user.repo.go b/servers/bullion/main-server/repos/general-user.repo.go index fffedd0..0ab133a 100644 --- a/servers/bullion/main-server/repos/general-user.repo.go +++ b/servers/bullion/main-server/repos/general-user.repo.go @@ -22,7 +22,7 @@ const generalUserCollectionName = "GeneralUser" var GeneralUserRepo *GeneralUserRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(generalUserCollectionName) diff --git a/servers/bullion/main-server/repos/order.repo.go b/servers/bullion/main-server/repos/order.repo.go index e2c9f31..73c115b 100644 --- a/servers/bullion/main-server/repos/order.repo.go +++ b/servers/bullion/main-server/repos/order.repo.go @@ -27,7 +27,7 @@ const orderCollectionName = "Order" var OrderRepo *OrderRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(orderCollectionName) diff --git a/servers/bullion/main-server/repos/prduct-group-map.repo.go b/servers/bullion/main-server/repos/prduct-group-map.repo.go index 4a1a07c..9b9226d 100644 --- a/servers/bullion/main-server/repos/prduct-group-map.repo.go +++ b/servers/bullion/main-server/repos/prduct-group-map.repo.go @@ -26,7 +26,7 @@ const productGroupMapCollectionName = "ProductGroupMap" var ProductGroupMapRepo *ProductGroupMapRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(productGroupMapCollectionName) diff --git a/servers/bullion/main-server/repos/product-repo.go b/servers/bullion/main-server/repos/product-repo.go index 25aba45..5097751 100644 --- a/servers/bullion/main-server/repos/product-repo.go +++ b/servers/bullion/main-server/repos/product-repo.go @@ -23,7 +23,7 @@ const productCollectionName = "Products" var ProductRepo *ProductRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(productCollectionName) diff --git a/servers/bullion/main-server/repos/trade-user-group.repo.go b/servers/bullion/main-server/repos/trade-user-group.repo.go index e4f2890..6a4f24f 100644 --- a/servers/bullion/main-server/repos/trade-user-group.repo.go +++ b/servers/bullion/main-server/repos/trade-user-group.repo.go @@ -26,7 +26,7 @@ const tradeUserGroupCollectionName = "TradeUserGroup" var TradeUserGroupRepo *TradeUserGroupRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(tradeUserGroupCollectionName) diff --git a/servers/bullion/main-server/repos/trade-user.repo.go b/servers/bullion/main-server/repos/trade-user.repo.go index beb854d..15ce7b0 100644 --- a/servers/bullion/main-server/repos/trade-user.repo.go +++ b/servers/bullion/main-server/repos/trade-user.repo.go @@ -29,7 +29,7 @@ const tradeUserCollectionName = "TradeUser" var TradeUserRepo *TradeUserRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(tradeUserCollectionName) diff --git a/servers/http-dump/dump-server/main.go b/servers/http-dump/dump-server/main.go index e631e60..794da48 100644 --- a/servers/http-dump/dump-server/main.go +++ b/servers/http-dump/dump-server/main.go @@ -49,7 +49,7 @@ func main() { // entity.BaseEntity.ID = "56397cab-7246-4d1c-ac14-c3446317e67b" // dump_server_repos.EndPointRepo.Save(entity) hostAndPort := "" - if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOP { hostAndPort = "127.0.0.1" } hostAndPort = hostAndPort + ":" + env.GetServerPort(env.PORT_KEY) diff --git a/servers/http-dump/dump-server/repos/end-point.repo.go b/servers/http-dump/dump-server/repos/end-point.repo.go index d65d6b0..2d1b56e 100644 --- a/servers/http-dump/dump-server/repos/end-point.repo.go +++ b/servers/http-dump/dump-server/repos/end-point.repo.go @@ -26,7 +26,7 @@ const endPointCollectionName = "EndPoint" var EndPointRepo *EndPointRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(endPointCollectionName) diff --git a/servers/http-dump/dump-server/repos/event.repo.go b/servers/http-dump/dump-server/repos/event.repo.go index f39cd5b..a2eefcb 100644 --- a/servers/http-dump/dump-server/repos/event.repo.go +++ b/servers/http-dump/dump-server/repos/event.repo.go @@ -20,7 +20,7 @@ const eventsCollectionName = "Events" var EventRepo *EventRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(eventsCollectionName) diff --git a/servers/jwelly/main-server/main.go b/servers/jwelly/main-server/main.go index b5aa577..0e2d75a 100644 --- a/servers/jwelly/main-server/main.go +++ b/servers/jwelly/main-server/main.go @@ -76,7 +76,7 @@ func main() { return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!") }) hostAndPort := "[::]" - if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOP { hostAndPort = "127.0.0.1" } // Print the router stack in JSON format diff --git a/servers/jwelly/main-server/repos/key-value-data.repo.go b/servers/jwelly/main-server/repos/key-value-data.repo.go index 41527aa..827a275 100644 --- a/servers/jwelly/main-server/repos/key-value-data.repo.go +++ b/servers/jwelly/main-server/repos/key-value-data.repo.go @@ -26,7 +26,7 @@ const keyValueDataCollectionName = "KeyValue" var KeyValueDataRepo *KeyValueDataRepoStruct func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } coll := mongodb.MongoDatabase.Collection(keyValueDataCollectionName) diff --git a/servers/jwelly/mysql-to-surreal/interfaces/tg-master-status.enum.go b/servers/jwelly/mysql-to-surreal/interfaces/tg-master-status.enum.go index c16cdea..781a836 100644 --- a/servers/jwelly/mysql-to-surreal/interfaces/tg-master-status.enum.go +++ b/servers/jwelly/mysql-to-surreal/interfaces/tg-master-status.enum.go @@ -47,12 +47,3 @@ func (e TgMasterStatus) String() string { return "" } } - -// var ( -// appEnvMap = map[string]AppEnv{ -// "DEVELOPE": APP_ENV_DEVELOPE, -// "LOCAL": APP_ENV_LOCAL, -// "CI": APP_ENV_CI, -// "PRODUCTION": APP_ENV_PRODUCTION, -// } -// ) diff --git a/servers/link-shortner/main.go b/servers/link-shortner/main.go index 187ef2a..4542d71 100644 --- a/servers/link-shortner/main.go +++ b/servers/link-shortner/main.go @@ -40,7 +40,7 @@ func main() { return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!") }) hostAndPort := "" - if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOP { hostAndPort = "127.0.0.1" } diff --git a/servers/soham/whatsapp-client/main.go b/servers/soham/whatsapp-client/main.go index 885602e..f0b4eb5 100644 --- a/servers/soham/whatsapp-client/main.go +++ b/servers/soham/whatsapp-client/main.go @@ -82,7 +82,7 @@ func InitFiberServer() { return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!") }) hostAndPort := "" - if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOP { hostAndPort = "127.0.0.1" } hostAndPort = hostAndPort + ":" + env.GetServerPort(env.PORT_KEY) diff --git a/servers/soham/whatsapp-server/main.go b/servers/soham/whatsapp-server/main.go index 21a1317..89a2631 100644 --- a/servers/soham/whatsapp-server/main.go +++ b/servers/soham/whatsapp-server/main.go @@ -66,7 +66,7 @@ func main() { return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!") }) hostAndPort := "" - if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOP { hostAndPort = "127.0.0.1" } hostAndPort = hostAndPort + ":" + env.GetServerPort(env.PORT_KEY) diff --git a/servers/telegram-server/main.go b/servers/telegram-server/main.go index 8352ec4..16bb755 100644 --- a/servers/telegram-server/main.go +++ b/servers/telegram-server/main.go @@ -70,7 +70,7 @@ func InitFiberServer() { return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!") }) hostAndPort := "" - if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOP { hostAndPort = "127.0.0.1" } hostAndPort = hostAndPort + ":" + env.GetServerPort(env.PORT_KEY) diff --git a/servers/whatsapp-server/main.go b/servers/whatsapp-server/main.go index fc54c58..a00459b 100644 --- a/servers/whatsapp-server/main.go +++ b/servers/whatsapp-server/main.go @@ -73,7 +73,7 @@ func InitFiberServer() { return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!") }) hostAndPort := "" - if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_LOCAL || env.Env.APP_ENV == env.APP_ENV_DEVELOP { hostAndPort = "127.0.0.1" } hostAndPort = hostAndPort + ":" + env.GetServerPort(env.PORT_KEY) diff --git a/utility/firebase/firebase-app.go b/utility/firebase/firebase-app.go index 285fd6d..81501f2 100644 --- a/utility/firebase/firebase-app.go +++ b/utility/firebase/firebase-app.go @@ -29,7 +29,7 @@ func DeferFunction() { } func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } diff --git a/utility/mongodb/index.go b/utility/mongodb/index.go index b19ad99..49d918b 100644 --- a/utility/mongodb/index.go +++ b/utility/mongodb/index.go @@ -18,7 +18,7 @@ var MongoDatabase *mongo.Database var MongoCtx = context.TODO() func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } config := &MongoDBConfig{ diff --git a/utility/redis/index.go b/utility/redis/index.go index 4c9ba09..cbe32a8 100644 --- a/utility/redis/index.go +++ b/utility/redis/index.go @@ -35,7 +35,7 @@ var RedisClient *RedisClientStruct var RedisCTX = context.Background() func init() { - if env.Env.APP_ENV == env.APP_ENV_DEVELOPE { + if env.Env.APP_ENV == env.APP_ENV_DEVELOP { return } // RedisClient.redisClient.Subscribe() From 090fe53250694b2ee46d5e42b6fcc4bca30487e7 Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Tue, 14 Jul 2026 15:56:47 +0530 Subject: [PATCH 11/15] fix: Ecom adapter in working --- .vscode/settings.json | 1 + .../jwelly/ecommerce-adapter/env/env.index.go | 50 ++++++--- .../interfaces/Req-token.interface.go | 5 + servers/jwelly/ecommerce-adapter/main.go | 38 ++++++- .../middleware/role-checker.middleware.go | 86 ++++++++++++++ .../middleware/token-validator.middleware.go | 106 ++++++++++++++++++ .../services/access-refresh-token.service.go | 43 +++++++ .../sync-func/accounts.sync.go | 1 - servers/jwelly/mysql-backup-cmd/env/keys.go | 2 +- servers/jwelly/mysql-backup/env/keys.go | 2 +- servers/jwelly/mysql-backup/env_example | 2 +- servers/jwelly/mysql-to-mysql/env/keys.go | 2 +- servers/jwelly/mysql-to-mysql/env_example | 2 +- servers/jwelly/mysql-to-surreal/env/keys.go | 2 +- servers/jwelly/mysql-to-surreal/env_example | 2 +- 15 files changed, 315 insertions(+), 29 deletions(-) create mode 100644 servers/jwelly/ecommerce-adapter/interfaces/Req-token.interface.go create mode 100644 servers/jwelly/ecommerce-adapter/middleware/role-checker.middleware.go create mode 100644 servers/jwelly/ecommerce-adapter/middleware/token-validator.middleware.go create mode 100644 servers/jwelly/ecommerce-adapter/services/access-refresh-token.service.go diff --git a/.vscode/settings.json b/.vscode/settings.json index 014f9d6..076633f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -17,6 +17,7 @@ "itrnview", "jpillora", "jwelly", + "jwtv", "kacno", "Karigar", "lamt", diff --git a/servers/jwelly/ecommerce-adapter/env/env.index.go b/servers/jwelly/ecommerce-adapter/env/env.index.go index 9797085..94c8f80 100644 --- a/servers/jwelly/ecommerce-adapter/env/env.index.go +++ b/servers/jwelly/ecommerce-adapter/env/env.index.go @@ -5,36 +5,52 @@ import ( "os" "path/filepath" + "github.com/gofiber/fiber/v2/log" "github.com/rpsoftech/golang-servers/env" utility_functions "github.com/rpsoftech/golang-servers/utility/functions" mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" ) -type IServerMysqlConnection struct { - Server *mysqldb.MysqlDBStruct - ERP *mysqldb.MysqlDBStruct -} -type IServverConfig struct { - ServerDatabase *mysqldb.MysqldbConfig `json:"ServerDatabase" validate:"required"` - ErpDatabase *mysqldb.MysqldbConfig `json:"ErpDatabase" validate:"required"` - AccountTableSyncCron string `json:"AccountTableSyncCron" validate:"required"` - BasicDetailsSyncCron string `json:"BasicDetailsSyncCron" validate:"required"` - ItemTagDetailsSyncCron string `json:"ItemTagDetailsSyncCron" validate:"required"` -} +type ( + IServerMysqlConnection struct { + Server *mysqldb.MysqlDBStruct + ERP *mysqldb.MysqlDBStruct + } + IServerConfig struct { + ServerDatabase *mysqldb.MysqldbConfig `json:"ServerDatabase" validate:"required"` + ErpDatabase *mysqldb.MysqldbConfig `json:"ErpDatabase" validate:"required"` + AccountTableSyncCron string `json:"AccountTableSyncCron" validate:"required"` + BasicDetailsSyncCron string `json:"BasicDetailsSyncCron" validate:"required"` + ItemTagDetailsSyncCron string `json:"ItemTagDetailsSyncCron" validate:"required"` + } -var ServerConfig *IServverConfig -var MysqlConnections *IServerMysqlConnection + serverEnv struct { + DefaultEnv *env.DefaultEnvInterface + ACCESS_TOKEN_KEY string `json:"ACCESS_TOKEN_KEY" validate:"required,min=10"` + } +) + +var ( + ServerConfig *IServerConfig + MysqlConnections *IServerMysqlConnection + Env *serverEnv +) -// var -func Init() *IServverConfig { +func Init() *IServerConfig { if ServerConfig != nil { return ServerConfig } MysqlConnections = &IServerMysqlConnection{} - ServerConfig = &IServverConfig{} + ServerConfig = &IServerConfig{} env.LoadEnv("ecommerce-adapter.env") + log.Debug("ServerEnv Initialized") + Env = &serverEnv{ + DefaultEnv: env.Env, + ACCESS_TOKEN_KEY: env.Env.GetEnv("ACCESS_TOKEN_KEY"), + } + env.ValidateEnv(Env) configFileName := "server.config.json" - if e := env.Env.GetEnv("CONFGI_FILE_NAME"); e != "" { + if e := env.Env.GetEnv("CONFIG_FILE_NAME"); e != "" { configFileName = e } configFileName = filepath.Join(env.FindAndReturnCurrentDir(), configFileName) diff --git a/servers/jwelly/ecommerce-adapter/interfaces/Req-token.interface.go b/servers/jwelly/ecommerce-adapter/interfaces/Req-token.interface.go new file mode 100644 index 0000000..d7dca18 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/interfaces/Req-token.interface.go @@ -0,0 +1,5 @@ +package ecommerce_interfaces + +type ReqTokenInterface struct { + // . Token string `json:"token"` +} diff --git a/servers/jwelly/ecommerce-adapter/main.go b/servers/jwelly/ecommerce-adapter/main.go index 3b102e2..159a11b 100644 --- a/servers/jwelly/ecommerce-adapter/main.go +++ b/servers/jwelly/ecommerce-adapter/main.go @@ -3,20 +3,28 @@ package main import ( "log" + "github.com/gofiber/fiber/v3" + "github.com/gofiber/fiber/v3/middleware/logger" "github.com/robfig/cron/v3" + "github.com/rpsoftech/golang-servers/interfaces" ecommerce_env "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/env" ecommerce_sync "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/sync-func" mysqldb "github.com/rpsoftech/golang-servers/utility/mysql" + "github.com/rpsoftech/golang-servers/utility/redis" ) +func deferMainFunc() { + println("Closing...") + redis.DeferFunction() +} + // main function is the entry point of the program func main() { + defer deferMainFunc() // Initialize the MySQL connections - InitaliseMysqlConnections() - + InitializeMysqlConnections() // Create a new cron scheduler cronTab := cron.New() - // Add functions to the cron scheduler // Account Sync function will be executed every 5 minutes cronTab.AddFunc(ecommerce_env.ServerConfig.AccountTableSyncCron, ecommerce_sync.AccountSync) @@ -34,7 +42,7 @@ func main() { } // Initialize the MySQL connections -func InitaliseMysqlConnections() { +func InitializeMysqlConnections() { config := ecommerce_env.Init() if conn, err := mysqldb.InitializeMysqlDbWithConfig(config.ServerDatabase); err != nil { @@ -51,3 +59,25 @@ func InitaliseMysqlConnections() { ecommerce_env.MysqlConnections.ERP = conn } } + +func ApiServer() { + app := fiber.New(fiber.Config{ + ServerHeader: "Bullion Server V1.0.0", + ErrorHandler: func(c fiber.Ctx, err error) error { + mappedError, ok := err.(*interfaces.RequestError) + if !ok { + println(err.Error()) + return c.Status(500).JSON(interfaces.RequestError{ + Code: interfaces.ERROR_INTERNAL_SERVER, + Message: "Some Internal Error", + Name: "Global Error Handler Function", + }) + } + if mappedError.LogTheDetails { + //Todo: Store The Details Of the Error With Body And Other Extra Details Like AUTH KEY AND ETC + } + return c.Status(mappedError.StatusCode).JSON(mappedError) + }, + }) + app.Use(logger.New()) +} diff --git a/servers/jwelly/ecommerce-adapter/middleware/role-checker.middleware.go b/servers/jwelly/ecommerce-adapter/middleware/role-checker.middleware.go new file mode 100644 index 0000000..1ded1af --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/middleware/role-checker.middleware.go @@ -0,0 +1,86 @@ +package ecommerce_middleware + +import ( + "fmt" + "slices" + + "github.com/gofiber/fiber/v2" + "github.com/rpsoftech/golang-servers/interfaces" + bullion_main_server_interfaces "github.com/rpsoftech/golang-servers/servers/bullion/main-server/interfaces" +) + +type roleCheckerMiddlewareWithRolesArray struct { + roles []string +} + +var ( + allUserRoles = []string{ + bullion_main_server_interfaces.ROLE_RATE_ADMIN.String(), + bullion_main_server_interfaces.ROLE_SUPER_ADMIN.String(), + bullion_main_server_interfaces.ROLE_ADMIN.String(), + bullion_main_server_interfaces.ROLE_GOD.String(), + bullion_main_server_interfaces.ROLE_GENERAL_USER.String(), + bullion_main_server_interfaces.ROLE_TRADE_USER.String(), + } + + AllowAllUsers = &roleCheckerMiddlewareWithRolesArray{ + roles: allUserRoles, + } + AllowAllAdminsAndTradeUsers = &roleCheckerMiddlewareWithRolesArray{ + roles: []string{ + bullion_main_server_interfaces.ROLE_ADMIN.String(), + bullion_main_server_interfaces.ROLE_RATE_ADMIN.String(), + bullion_main_server_interfaces.ROLE_SUPER_ADMIN.String(), + bullion_main_server_interfaces.ROLE_GOD.String(), + bullion_main_server_interfaces.ROLE_TRADE_USER.String(), + }, + } + AllowAllAdmins = &roleCheckerMiddlewareWithRolesArray{ + roles: []string{ + bullion_main_server_interfaces.ROLE_ADMIN.String(), + bullion_main_server_interfaces.ROLE_RATE_ADMIN.String(), + bullion_main_server_interfaces.ROLE_SUPER_ADMIN.String(), + bullion_main_server_interfaces.ROLE_GOD.String(), + }, + } + AllowOnlyBigAdmins = &roleCheckerMiddlewareWithRolesArray{ + roles: []string{ + bullion_main_server_interfaces.ROLE_ADMIN.String(), + bullion_main_server_interfaces.ROLE_SUPER_ADMIN.String(), + bullion_main_server_interfaces.ROLE_GOD.String(), + }, + } +) + +func (cc *roleCheckerMiddlewareWithRolesArray) Validate(c *fiber.Ctx) error { + roleFromLocal := c.Locals(bullion_main_server_interfaces.REQ_LOCAL_KEY_ROLE) + if roleFromLocal == nil { + return &interfaces.RequestError{ + StatusCode: 403, + Code: interfaces.ERROR_TOKEN_ROLE_NOT_FOUND, + Message: "Invalid Token Role Or Not Found", + Name: "INVALID_TOKEN_ROLE", + } + } + role, ok := roleFromLocal.(string) + if !ok { + return &interfaces.RequestError{ + StatusCode: 403, + Code: interfaces.ERROR_ROLE_NOT_EXISTS, + Message: "Token Role Should be string", + Name: "INVALID_TOKEN_ROLE_FORMAT", + } + } + if role == string(bullion_main_server_interfaces.ROLE_GOD) { + return c.Next() + } + if !slices.Contains(cc.roles, role) { + return &interfaces.RequestError{ + StatusCode: 403, + Code: interfaces.ERROR_ROLE_NOT_AUTHORIZED, + Message: fmt.Sprintf("%s is not allowed for this route", role), + Name: "INVALID_TOKEN_ROLE_FORMAT", + } + } + return c.Next() +} diff --git a/servers/jwelly/ecommerce-adapter/middleware/token-validator.middleware.go b/servers/jwelly/ecommerce-adapter/middleware/token-validator.middleware.go new file mode 100644 index 0000000..99f6e20 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/middleware/token-validator.middleware.go @@ -0,0 +1,106 @@ +package ecommerce_middleware + +import ( + "net/http" + + "github.com/gofiber/fiber/v2" + "github.com/rpsoftech/golang-servers/env" + "github.com/rpsoftech/golang-servers/interfaces" + bullion_main_server_interfaces "github.com/rpsoftech/golang-servers/servers/bullion/main-server/interfaces" + bullion_main_server_services "github.com/rpsoftech/golang-servers/servers/bullion/main-server/services" + utility_functions "github.com/rpsoftech/golang-servers/utility/functions" +) + +// fiber middleware for jwt +func TokenDecrypter(c *fiber.Ctx) error { + reqHeaders := c.GetReqHeaders() + tokenString, foundToken := reqHeaders[env.RequestTokenHeaderKey] + if !foundToken || len(tokenString) != 1 || tokenString[0] == "" { + c.Locals(bullion_main_server_interfaces.REQ_LOCAL_ERROR_KEY, &interfaces.RequestError{ + StatusCode: 403, + Code: interfaces.ERROR_TOKEN_NOT_BEFORE, + Message: "Please Pass Valid Token", + Name: "ERROR_TOKEN_NOT_BEFORE", + }) + return c.Next() + } + // userRolesCustomClaim, localErr := .VerifyToken(tokenString[0]) + // jwt.VerifyToken[bullion_main_server_interfaces.GeneralUserAccessRefreshToken](bullion_main_server_services.AccessTokenService, &tokenString[0]) + userRolesCustomClaim, localErr := bullion_main_server_services.ValidateGeneralUserAccessToken(bullion_main_server_services.AccessTokenService, &tokenString[0]) + if localErr != nil { + c.Locals(bullion_main_server_interfaces.REQ_LOCAL_ERROR_KEY, localErr) + return c.Next() + } + if e := utility_functions.ValidateStructAndReturnReqError(userRolesCustomClaim, &interfaces.RequestError{ + StatusCode: 401, + Code: interfaces.ERROR_INVALID_TOKEN_SIGNATURE, + Message: "Invalid Token Structure", + Name: "ERROR_INVALID_TOKEN_SIGNATURE", + }); e != nil { + c.Locals(bullion_main_server_interfaces.REQ_LOCAL_ERROR_KEY, e) + return c.Next() + } + role := userRolesCustomClaim.Role.String() + if !bullion_main_server_interfaces.ValidateEnumUserRole(role) { + + c.Locals(bullion_main_server_interfaces.REQ_LOCAL_ERROR_KEY, &interfaces.RequestError{ + StatusCode: http.StatusBadRequest, + Code: interfaces.ERROR_TOKEN_ROLE_NOT_FOUND, + Message: "Invalid Token Role Or Not Found", + Name: "INVALID_TOKEN_ROLE", + }) + return c.Next() + } + + c.Locals(bullion_main_server_interfaces.REQ_LOCAL_KEY_ROLE, role) + c.Locals(bullion_main_server_interfaces.REQ_LOCAL_KEY_TOKEN_RAW_DATA, userRolesCustomClaim) + return c.Next() +} + +func AllowOnlyValidTokenMiddleWare(c *fiber.Ctx) error { + jwtRawFromLocal := c.Locals(bullion_main_server_interfaces.REQ_LOCAL_KEY_TOKEN_RAW_DATA) + localError := c.Locals(bullion_main_server_interfaces.REQ_LOCAL_ERROR_KEY) + + if jwtRawFromLocal == nil { + if localError != nil { + err, ok := localError.(*interfaces.RequestError) + if !ok { + return &interfaces.RequestError{ + StatusCode: 403, + Code: interfaces.ERROR_TOKEN_EXPIRED, + Message: "Cannot Cast Error Token", + Name: "NOT_VALID_DECRYPTED_TOKEN", + } + } + return err + } + return &interfaces.RequestError{ + StatusCode: 403, + Code: interfaces.ERROR_TOKEN_EXPIRED, + Message: "Invalid Token or token expired", + Name: "NOT_VALID_DECRYPTED_TOKEN", + } + } + + jwtRaw, ok := jwtRawFromLocal.(*bullion_main_server_interfaces.GeneralUserAccessRefreshToken) + if !ok { + return &interfaces.RequestError{ + StatusCode: 403, + Code: interfaces.ERROR_TOKEN_EXPIRED, + Message: "Invalid Token or token expired", + Name: "NOT_VALID_DECRYPTED_TOKEN", + } + } + if jwtRaw.BullionId == "" { + return &interfaces.RequestError{ + StatusCode: 403, + Code: interfaces.ERROR_INVALID_TOKEN, + Message: "Invalid Bullion Id in Token", + Name: "INVALID_BULLION_ID_IN_TOKEN", + } + } + + c.Locals(bullion_main_server_interfaces.REQ_LOCAL_UserID, jwtRaw.UserId) + c.Locals(bullion_main_server_interfaces.REQ_LOCAL_BullionId_KEY, jwtRaw.BullionId) + return c.Next() +} diff --git a/servers/jwelly/ecommerce-adapter/services/access-refresh-token.service.go b/servers/jwelly/ecommerce-adapter/services/access-refresh-token.service.go new file mode 100644 index 0000000..5c1df37 --- /dev/null +++ b/servers/jwelly/ecommerce-adapter/services/access-refresh-token.service.go @@ -0,0 +1,43 @@ +package ecommerce_services + +import ( + "github.com/gofiber/fiber/v3/log" + jwtv5 "github.com/golang-jwt/jwt/v5" + "github.com/rpsoftech/golang-servers/interfaces" + ecommerce_env "github.com/rpsoftech/golang-servers/servers/jwelly/ecommerce-adapter/env" + soham_common_req_keys "github.com/rpsoftech/golang-servers/servers/soham/common" + "github.com/rpsoftech/golang-servers/utility/jwt" +) + +var AccessTokenService *jwt.TokenService +var RefreshTokenService *jwt.TokenService + +func GetAccessTokenService() *jwt.TokenService { + if AccessTokenService == nil { + AccessTokenService = &jwt.TokenService{ + SigningKey: []byte(ecommerce_env.Env.ACCESS_TOKEN_KEY), + Parser: jwtv5.NewParser(jwtv5.WithValidMethods([]string{"HS256"})), + } + log.Info("Token Service Initialized") + } + return AccessTokenService +} + +func ValidateUserRequestToken(t *jwt.TokenService, token *string) (*soham_common_req_keys.ReqTokenType, error) { + claimRaw, err := t.Parser.ParseWithClaims(*token, &soham_common_req_keys.ReqTokenType{}, t.Keyfunc) + if err != nil { + return nil, err + } + claim, ok := claimRaw.Claims.(*soham_common_req_keys.ReqTokenType) + if !ok { + err = &interfaces.RequestError{ + StatusCode: 401, + Code: interfaces.ERROR_INVALID_TOKEN, + Message: "Error InValid Token Body", + Name: "ERROR_INVALID_TOKEN_BODY", + Extra: err, + } + return nil, err + } + return claim, nil +} diff --git a/servers/jwelly/ecommerce-adapter/sync-func/accounts.sync.go b/servers/jwelly/ecommerce-adapter/sync-func/accounts.sync.go index c41854f..4d7ffef 100644 --- a/servers/jwelly/ecommerce-adapter/sync-func/accounts.sync.go +++ b/servers/jwelly/ecommerce-adapter/sync-func/accounts.sync.go @@ -8,5 +8,4 @@ import ( func AccountSync() { ecommerce_functions.SyncAccountGroupTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) ecommerce_functions.SyncAccountMasterTable(ecommerce_env.MysqlConnections.Server, ecommerce_env.MysqlConnections.ERP) - } diff --git a/servers/jwelly/mysql-backup-cmd/env/keys.go b/servers/jwelly/mysql-backup-cmd/env/keys.go index f158f0d..320b17c 100644 --- a/servers/jwelly/mysql-backup-cmd/env/keys.go +++ b/servers/jwelly/mysql-backup-cmd/env/keys.go @@ -1,5 +1,5 @@ package mysql_backup_env -const ConfigFileName = "CONFGI_FILE_NAME" +const ConfigFileName = "CONFIG_FILE_NAME" // const RefreshDatabase = "REFRESH_DATABASE" diff --git a/servers/jwelly/mysql-backup/env/keys.go b/servers/jwelly/mysql-backup/env/keys.go index f158f0d..320b17c 100644 --- a/servers/jwelly/mysql-backup/env/keys.go +++ b/servers/jwelly/mysql-backup/env/keys.go @@ -1,5 +1,5 @@ package mysql_backup_env -const ConfigFileName = "CONFGI_FILE_NAME" +const ConfigFileName = "CONFIG_FILE_NAME" // const RefreshDatabase = "REFRESH_DATABASE" diff --git a/servers/jwelly/mysql-backup/env_example b/servers/jwelly/mysql-backup/env_example index 4cfa36a..e35116a 100644 --- a/servers/jwelly/mysql-backup/env_example +++ b/servers/jwelly/mysql-backup/env_example @@ -1,2 +1,2 @@ APP_ENV="LOCAL" -CONFGI_FILE_NAME="server.config.json" \ No newline at end of file +CONFIG_FILE_NAME="server.config.json" \ No newline at end of file diff --git a/servers/jwelly/mysql-to-mysql/env/keys.go b/servers/jwelly/mysql-to-mysql/env/keys.go index f158f0d..320b17c 100644 --- a/servers/jwelly/mysql-to-mysql/env/keys.go +++ b/servers/jwelly/mysql-to-mysql/env/keys.go @@ -1,5 +1,5 @@ package mysql_backup_env -const ConfigFileName = "CONFGI_FILE_NAME" +const ConfigFileName = "CONFIG_FILE_NAME" // const RefreshDatabase = "REFRESH_DATABASE" diff --git a/servers/jwelly/mysql-to-mysql/env_example b/servers/jwelly/mysql-to-mysql/env_example index 4cfa36a..e35116a 100644 --- a/servers/jwelly/mysql-to-mysql/env_example +++ b/servers/jwelly/mysql-to-mysql/env_example @@ -1,2 +1,2 @@ APP_ENV="LOCAL" -CONFGI_FILE_NAME="server.config.json" \ No newline at end of file +CONFIG_FILE_NAME="server.config.json" \ No newline at end of file diff --git a/servers/jwelly/mysql-to-surreal/env/keys.go b/servers/jwelly/mysql-to-surreal/env/keys.go index 0433cd7..a299af1 100644 --- a/servers/jwelly/mysql-to-surreal/env/keys.go +++ b/servers/jwelly/mysql-to-surreal/env/keys.go @@ -1,4 +1,4 @@ package mysql_to_surreal_env -const ConfigFileName = "CONFGI_FILE_NAME" +const ConfigFileName = "CONFIG_FILE_NAME" const RefreshDatabase = "REFRESH_DATABASE" diff --git a/servers/jwelly/mysql-to-surreal/env_example b/servers/jwelly/mysql-to-surreal/env_example index 4cfa36a..e35116a 100644 --- a/servers/jwelly/mysql-to-surreal/env_example +++ b/servers/jwelly/mysql-to-surreal/env_example @@ -1,2 +1,2 @@ APP_ENV="LOCAL" -CONFGI_FILE_NAME="server.config.json" \ No newline at end of file +CONFIG_FILE_NAME="server.config.json" \ No newline at end of file From b29d83fe36947d663de498217109b37e016bd55f Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Tue, 14 Jul 2026 15:58:12 +0530 Subject: [PATCH 12/15] go version updates --- go.mod | 104 +++++++++++----------- go.sum | 110 ++++++++++++++++++++++++ servers/bullion/dbcreation/sql.template | 6 -- 3 files changed, 163 insertions(+), 57 deletions(-) diff --git a/go.mod b/go.mod index ae53a5d..0cb7e38 100644 --- a/go.mod +++ b/go.mod @@ -3,58 +3,59 @@ module github.com/rpsoftech/golang-servers go 1.26.0 require ( - cloud.google.com/go/firestore v1.22.0 - firebase.google.com/go/v4 v4.20.0 - fyne.io/fyne/v2 v2.7.4 + cloud.google.com/go/firestore v1.23.0 + firebase.google.com/go/v4 v4.21.0 + fyne.io/fyne/v2 v2.8.0 github.com/fxamacker/cbor/v2 v2.9.2 - github.com/gen2brain/go-fitz v1.24.15 - github.com/go-faker/faker/v4 v4.8.0 + github.com/gen2brain/go-fitz v1.28.2 + github.com/go-faker/faker/v4 v4.9.0 github.com/go-playground/validator/v10 v10.30.3 github.com/go-sql-driver/mysql v1.10.0 github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 - github.com/gofiber/contrib/v3/websocket v1.2.0 - github.com/gofiber/fiber/v2 v2.52.13 - github.com/gofiber/fiber/v3 v3.3.0 + github.com/gofiber/contrib/v3/websocket v1.2.1 + github.com/gofiber/fiber/v2 v2.52.14 + github.com/gofiber/fiber/v3 v3.4.0 github.com/golang-jwt/jwt/v5 v5.3.1 github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.5.3 github.com/joho/godotenv v1.5.1 - github.com/jpillora/chisel v1.11.6 - github.com/mattn/go-sqlite3 v1.14.45 + github.com/jpillora/chisel v1.11.8 + github.com/mattn/go-sqlite3 v1.14.48 github.com/mdp/qrterminal/v3 v3.2.1 github.com/mitchellh/mapstructure v1.5.0 github.com/prplecake/go-thumbnail v0.1.6 - github.com/redis/go-redis/v9 v9.20.1 + github.com/redis/go-redis/v9 v9.21.0 github.com/robfig/cron/v3 v3.0.1 github.com/rpsoftech/mysqldump v0.0.0-20250611190005-213bcf343081 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e - github.com/surrealdb/surrealdb.go v1.4.0 - go.mau.fi/whatsmeow v0.0.0-20260611094716-089932318bc2 - go.mongodb.org/mongo-driver/v2 v2.6.0 - golang.org/x/crypto v0.53.0 - golang.org/x/sys v0.46.0 - google.golang.org/api v0.284.0 + github.com/surrealdb/surrealdb.go v1.6.0 + go.mau.fi/whatsmeow v0.0.0-20260713112832-d8960d9575d2 + go.mongodb.org/mongo-driver/v2 v2.8.0 + golang.org/x/crypto v0.54.0 + golang.org/x/sys v0.47.0 + google.golang.org/api v0.288.0 google.golang.org/protobuf v1.36.11 ) require ( cel.dev/expr v0.25.2 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.20.0 // indirect + cloud.google.com/go/auth v0.22.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/iam v1.11.0 // indirect - cloud.google.com/go/longrunning v1.0.0 // indirect - cloud.google.com/go/monitoring v1.29.0 // indirect - cloud.google.com/go/storage v1.62.3 // indirect + cloud.google.com/go/iam v1.12.0 // indirect + cloud.google.com/go/longrunning v1.2.0 // indirect + cloud.google.com/go/monitoring v1.30.0 // indirect + cloud.google.com/go/storage v1.63.1 // indirect filippo.io/edwards25519 v1.2.0 // indirect fyne.io/systray v1.12.2 // indirect github.com/BurntSushi/toml v1.6.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.57.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.57.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.34.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.58.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.58.0 // indirect github.com/MicahParks/keyfunc v1.9.0 // indirect - github.com/andybalholm/brotli v1.2.1 // indirect + github.com/andybalholm/brotli v1.2.2 // indirect + github.com/anthonynsimon/bild v0.16.1 // indirect github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 // indirect github.com/beeper/argo-go v1.1.2 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect @@ -63,20 +64,21 @@ require ( github.com/coder/websocket v1.8.15 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/ebitengine/purego v0.10.1 // indirect - github.com/elliotchance/orderedmap/v3 v3.1.0 // indirect + github.com/elliotchance/orderedmap/v3 v3.1.1 // indirect github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect github.com/fasthttp/websocket v1.5.12 // indirect github.com/felixge/httpsnoop v1.1.0 // indirect github.com/fredbi/uri v1.1.1 // indirect github.com/fsnotify/fsnotify v1.10.1 // indirect - github.com/fyne-io/gl-js v0.2.0 // indirect - github.com/fyne-io/glfw-js v0.3.0 // indirect + github.com/fyne-io/gl-js v0.2.1-0.20260315212741-029c47fd27e8 // indirect + github.com/fyne-io/glfw-js v0.4.0 // indirect github.com/fyne-io/image v0.1.1 // indirect github.com/fyne-io/oksvg v0.2.0 // indirect github.com/gabriel-vasile/mimetype v1.4.13 // indirect github.com/go-gl/gl v0.0.0-20260331235117-4566fea9a276 // indirect - github.com/go-gl/glfw/v3.3/glfw v0.0.0-20260406072232-3ac4aa2bb164 // indirect + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20260707082822-2a407d02d01a // indirect + github.com/go-gl/glfw/v3.4/glfw v0.1.0-pre.1.0.20260707082822-2a407d02d01a // indirect github.com/go-jose/go-jose/v4 v4.1.4 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -85,14 +87,14 @@ require ( github.com/go-text/render v0.2.1 // indirect github.com/go-text/typesetting v0.3.4 // indirect github.com/godbus/dbus/v5 v5.2.2 // indirect - github.com/gofiber/schema v1.8.0 // indirect - github.com/gofiber/utils/v2 v2.1.0 // indirect + github.com/gofiber/schema v1.8.2 // indirect + github.com/gofiber/utils/v2 v2.1.2 // indirect github.com/gofrs/uuid v4.4.0+incompatible // indirect github.com/golang-jwt/jwt/v4 v4.5.2 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.16 // indirect - github.com/googleapis/gax-go/v2 v2.22.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.18 // indirect + github.com/googleapis/gax-go/v2 v2.23.0 // indirect github.com/hack-pad/go-indexeddb v0.3.2 // indirect github.com/hack-pad/safejs v0.1.1 // indirect github.com/jeandeaual/go-locale v0.0.0-20250612000132-0ef82f21eade // indirect @@ -100,36 +102,36 @@ require ( github.com/jpillora/sizestr v1.0.0 // indirect github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25 // indirect github.com/jupiterrider/ffi v0.7.0 // indirect - github.com/klauspost/compress v1.18.6 // indirect + github.com/klauspost/compress v1.19.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mattn/go-colorable v0.1.15 // indirect github.com/mattn/go-isatty v0.0.22 // indirect github.com/mattn/go-runewidth v0.0.24 // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect github.com/nicksnyder/go-i18n/v2 v2.6.1 // indirect - github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81 // indirect + github.com/petermattis/goid v0.0.0-20260713124913-97594f28f5ca // indirect github.com/philhofer/fwd v1.2.0 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rs/zerolog v1.35.1 // indirect github.com/rymdport/portal v0.4.2 // indirect github.com/savsgio/gotils v0.0.0-20250924091648-bce9a52d7761 // indirect - github.com/spiffe/go-spiffe/v2 v2.7.0 // indirect + github.com/spiffe/go-spiffe/v2 v2.8.1 // indirect github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c // indirect github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef // indirect github.com/stretchr/testify v1.11.1 // indirect github.com/tinylib/msgp v1.6.4 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasthttp v1.71.0 // indirect - github.com/vektah/gqlparser/v2 v2.5.34 // indirect + github.com/valyala/fasthttp v1.72.0 // indirect + github.com/vektah/gqlparser/v2 v2.5.36 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.2.0 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect - github.com/yuin/goldmark v1.8.2 // indirect + github.com/yuin/goldmark v1.8.4 // indirect go.mau.fi/libsignal v0.2.2 // indirect - go.mau.fi/util v0.9.9 // indirect + go.mau.fi/util v0.9.10 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/detectors/gcp v1.44.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 // indirect @@ -140,19 +142,19 @@ require ( go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect go.opentelemetry.io/otel/trace v1.44.0 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20260611194520-c48552f49976 // indirect - golang.org/x/image v0.42.0 // indirect - golang.org/x/net v0.56.0 // indirect + golang.org/x/exp v0.0.0-20260709172345-9ea1abe57597 // indirect + golang.org/x/image v0.44.0 // indirect + golang.org/x/net v0.57.0 // indirect golang.org/x/oauth2 v0.36.0 // indirect - golang.org/x/sync v0.21.0 // indirect - golang.org/x/term v0.44.0 // indirect - golang.org/x/text v0.38.0 // indirect + golang.org/x/sync v0.22.0 // indirect + golang.org/x/term v0.45.0 // indirect + golang.org/x/text v0.40.0 // indirect golang.org/x/time v0.15.0 // indirect google.golang.org/appengine/v2 v2.0.6 // indirect - google.golang.org/genproto v0.0.0-20260610212136-7ab31c22f7ad // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260610212136-7ab31c22f7ad // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260610212136-7ab31c22f7ad // indirect - google.golang.org/grpc v1.81.1 // indirect + google.golang.org/genproto v0.0.0-20260713224248-f5fc221cf8c4 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260713224248-f5fc221cf8c4 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260713224248-f5fc221cf8c4 // indirect + google.golang.org/grpc v1.82.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect rsc.io/qr v0.2.0 // indirect ) diff --git a/go.sum b/go.sum index 7d20fcf..100fa67 100644 --- a/go.sum +++ b/go.sum @@ -4,30 +4,47 @@ cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA= cloud.google.com/go/auth v0.20.0/go.mod h1:942/yi/itH1SsmpyrbnTMDgGfdy2BUqIKyd0cyYLc5Q= +cloud.google.com/go/auth v0.22.0 h1:Xp9wAKkLoeaYb5pYZZoQGz4E9sdPxIbzS3gywZE3ciQ= +cloud.google.com/go/auth v0.22.0/go.mod h1:M9o2Oz+YI2jAfxewJgb1vyI3vceHF+eohmxyzmrl+9s= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= +cloud.google.com/go/compute v1.64.0 h1:7MmuzeAxlG5MOG5PQD2NLtyYR6bWjkvGljRu7pByoRU= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= cloud.google.com/go/firestore v1.22.0 h1:avooeboIq37vKXobrbPUFhFBxS/c3FqmWoX0xs8dO6E= cloud.google.com/go/firestore v1.22.0/go.mod h1:PaM4i7i7ruALSKmlpHXXZaPObcZw0W7ie5UOPr72iTU= +cloud.google.com/go/firestore v1.23.0 h1:lFkdUEqdb1FxJNeZ17ZCrpok/+5yZdWapEzDCwLuwp8= +cloud.google.com/go/firestore v1.23.0/go.mod h1:2EWfSUj+iqHckyH7uSjLI+lDgSAWJs9jL/uP45PnuQQ= cloud.google.com/go/iam v1.11.0 h1:KieQ9Pb+LLPak1O3Rv3GgCxhnmkYf7Xyh0P5HfF1jFM= cloud.google.com/go/iam v1.11.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= +cloud.google.com/go/iam v1.12.0 h1:Aki3bX9aHUDKPHfnRJfDcTdVedvy6quGBQcTqx3DRXk= +cloud.google.com/go/iam v1.12.0/go.mod h1:FEZ4lXpADAC2AIpQY7LANNjjwyQ2jK439CI2VaD+sLY= cloud.google.com/go/logging v1.18.0 h1:KhzZq+1cSkPH9YUaKLLhLtQxIHitVayBmk0sGfoM9+k= cloud.google.com/go/logging v1.18.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= cloud.google.com/go/longrunning v1.0.0 h1:lwzWEYD8+NkYV7dhexOz6kmlvajZA70+bW/xMhRVVdY= cloud.google.com/go/longrunning v1.0.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= +cloud.google.com/go/longrunning v1.2.0 h1:WjYH3YHBGCxGJP9M4dWGHBfXr/cFIjMkNgWcJj7/iMM= +cloud.google.com/go/longrunning v1.2.0/go.mod h1:5KMQALFGOCtFoi2xSOA1u3H7WKlhmckgiyFw7+LGQp0= cloud.google.com/go/monitoring v1.29.0 h1:AHhDsFaSax1/4k+qlIDX/SDGe6hggnfXJ9dkgD9qBPY= cloud.google.com/go/monitoring v1.29.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= +cloud.google.com/go/monitoring v1.30.0 h1:r/d+JUbyKmJ8b07iznuKfzVzrIXTWxHQ3lBRm3x2LlY= +cloud.google.com/go/monitoring v1.30.0/go.mod h1:htlUR0QWVMrjFzZmN4LGnMAve9xB/eduwjmINxVZ8RM= cloud.google.com/go/storage v1.62.3 h1:SZq1t23NCI+e96dH77Dg3PEfsNNEjqO8zE5AnD8gVD0= cloud.google.com/go/storage v1.62.3/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= +cloud.google.com/go/storage v1.63.1 h1:CYXILV9G4CH0C18IQ9+V0h4XiqD2LhKnMLO0o7uJWNs= +cloud.google.com/go/storage v1.63.1/go.mod h1:lWyAtwvDZHdL3k68WVKbESP6bmWaV23ZJJ/JEVw/ZaQ= cloud.google.com/go/trace v1.16.0 h1:GmQovzFc5F0CNfl0VLgL64aoTtu7xsM0YajW2GlG9+E= cloud.google.com/go/trace v1.16.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= firebase.google.com/go/v4 v4.20.0 h1:ighpjeAC45rY/95cUQ+ojIKlKcTnz2YC0ldam56z2YU= firebase.google.com/go/v4 v4.20.0/go.mod h1:hqhkQtZkThGH42TnaYi7A8EFR1E0FEuB5oHvJ1Q57t8= +firebase.google.com/go/v4 v4.21.0 h1:HBZV4jrLtFYj8EwWyqEZOuRLfkfkV2bpnfyyXHOhPxY= +firebase.google.com/go/v4 v4.21.0/go.mod h1:CDumIdA5oTiyDpLNVcQoW8ZrB5CTgyE2D45DuENIABg= fyne.io/fyne/v2 v2.7.4 h1:OVCI5mT+Onb2kA4wlmGA5pLCqKik9f4NDb5jiR1OMTc= fyne.io/fyne/v2 v2.7.4/go.mod h1:ZD1mmhBY75mSa97IXl3MPlICd1uNHfCXYh5hKIlVOII= +fyne.io/fyne/v2 v2.8.0 h1:KNUdIk1eKsXSPy/wU6MdiR1hppAPvyzbjPbtJ8h6EUQ= +fyne.io/fyne/v2 v2.8.0/go.mod h1:tLJK7CVtUBOnMiSDR+J88t/quiGuEhwGs09tIVM1RXg= fyne.io/systray v1.12.2 h1:Y8DZxgLHsVQt6rY9Zrkkg+j67S7vv/1F2viOWKPpVeA= fyne.io/systray v1.12.2/go.mod h1:RVwqP9nYMo7h5zViCBHri2FgjXF7H2cub7MAq4NSoLs= github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= @@ -36,18 +53,29 @@ github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7Oputl github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0 h1:l7+6kwRMJNwdCvYdDl7Eax+wzEYHSnNY7zrrfbhDdTA= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0/go.mod h1:pJTkW8hEUIIi3Pf65lPZOnn4Y81yCllX6IWk2jNXdkM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.34.0 h1:yzIYdwuro811Z27D3T80Wkd3rqZzb0K43nner7Eh1yE= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.34.0/go.mod h1:pJTkW8hEUIIi3Pf65lPZOnn4Y81yCllX6IWk2jNXdkM= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.57.0 h1:jLdiS1vO+XJFyDSWRHBx56r4s/NNtcl5J6KyCcWUX/w= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.57.0/go.mod h1:8lmpHY+1VRoteiOwyrQMDt1YGXOrFKCz+1wJW7n3ODY= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.58.0 h1:ZYGajzJNcirVZpT1rltgf9iM+j9zZ4v8V9DrF+xKRJ8= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.58.0/go.mod h1:PDQyYBOzGtQgvshQI//UiXyzuMHCz0ndyu+4W8X82vM= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.57.0 h1:cSjUzZ7KU8hicTgzaSv9NmSyM9fTVK3y5lsBUl3wOis= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.57.0/go.mod h1:dzcEjy1WJ0Q4u9twNR3LcLhNoYMRCrMCMafpxa0TjPQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.58.0 h1:IBF8BbhKJkMsON/eY+LMu3aF3XMiotCb9KvkUmEkOJo= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.57.0 h1:RoO5+d7uCmDqovLrHCr2/BuViUXvdcrNxyNM1pN9dDQ= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.57.0/go.mod h1:YqwkQPrWSC7+byyc1VlKbWLBF5JsW5IoL6xUkemYSXk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.58.0 h1:SBZzZCiPmDrUV7NSCWY54OnKikO/oTydPCvyEyYaDDE= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.58.0/go.mod h1:YqwkQPrWSC7+byyc1VlKbWLBF5JsW5IoL6xUkemYSXk= github.com/MicahParks/keyfunc v1.9.0 h1:lhKd5xrFHLNOWrDc4Tyb/Q1AJ4LCzQ48GVJyVIID3+o= github.com/MicahParks/keyfunc v1.9.0/go.mod h1:IdnCilugA0O/99dW+/MkvlyrsX8+L8+x95xuVNtM5jw= github.com/agnivade/levenshtein v1.2.1 h1:EHBY3UOn1gwdy/VbFwgo4cxecRznFk7fKWN1KOX7eoM= github.com/agnivade/levenshtein v1.2.1/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU= github.com/andybalholm/brotli v1.2.1 h1:R+f5xP285VArJDRgowrfb9DqL18yVK0gKAW/F+eTWro= github.com/andybalholm/brotli v1.2.1/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/andybalholm/brotli v1.2.2 h1:HzTuoo2ErYQqf5qvcJInB8uvqSVxRttzkFexPWtnceM= +github.com/andybalholm/brotli v1.2.2/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/anthonynsimon/bild v0.16.1 h1:ECqtLkQ15kqfHdRtzUfNvQniJtHNpzdVU/7feMYAm0o= +github.com/anthonynsimon/bild v0.16.1/go.mod h1:hYAxurnswTQ9dexoiK922MepdXLC1lBzG35n6ypk//g= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/beeper/argo-go v1.1.2 h1:UQI2G8F+NLfGTOmTUI0254pGKx/HUU/etbUGTJv91Fs= @@ -72,6 +100,8 @@ github.com/ebitengine/purego v0.10.1 h1:dewVBCBT2GaMu1SrNTYxQhgQBethzfhiwvZiLGP/ github.com/ebitengine/purego v0.10.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/elliotchance/orderedmap/v3 v3.1.0 h1:j4DJ5ObEmMBt/lcwIecKcoRxIQUEnw0L804lXYDt/pg= github.com/elliotchance/orderedmap/v3 v3.1.0/go.mod h1:G+Hc2RwaZvJMcS4JpGCOyViCnGeKf0bTYCGTO4uhjSo= +github.com/elliotchance/orderedmap/v3 v3.1.1 h1:eV7lfZ5fVL8d36b8Wogqi/eqm7R/kZcftA9Yiyj+63M= +github.com/elliotchance/orderedmap/v3 v3.1.1/go.mod h1:G+Hc2RwaZvJMcS4JpGCOyViCnGeKf0bTYCGTO4uhjSo= github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= github.com/envoyproxy/go-control-plane v0.14.0/go.mod h1:NcS5X47pLl/hfqxU70yPwL9ZMkUlwlKxtAohpi2wBEU= github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ= @@ -94,8 +124,12 @@ github.com/fxamacker/cbor/v2 v2.9.2 h1:X4Ksno9+x3cz0TZv69ec1hxP/+tymuR8PXQJyDwfh github.com/fxamacker/cbor/v2 v2.9.2/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/fyne-io/gl-js v0.2.0 h1:+EXMLVEa18EfkXBVKhifYB6OGs3HwKO3lUElA0LlAjs= github.com/fyne-io/gl-js v0.2.0/go.mod h1:ZcepK8vmOYLu96JoxbCKJy2ybr+g1pTnaBDdl7c3ajI= +github.com/fyne-io/gl-js v0.2.1-0.20260315212741-029c47fd27e8 h1:0kdPD/GEntpWmZEK5Zu/xE6Tr37jYCVDf9QP8lA/QK8= +github.com/fyne-io/gl-js v0.2.1-0.20260315212741-029c47fd27e8/go.mod h1:ZcepK8vmOYLu96JoxbCKJy2ybr+g1pTnaBDdl7c3ajI= github.com/fyne-io/glfw-js v0.3.0 h1:d8k2+Y7l+zy2pc7wlGRyPfTgZoqDf3AI4G+2zOWhWUk= github.com/fyne-io/glfw-js v0.3.0/go.mod h1:Ri6te7rdZtBgBpxLW19uBpp3Dl6K9K/bRaYdJ22G8Jk= +github.com/fyne-io/glfw-js v0.4.0 h1:I9hREBeFyI10cNIqbMKYb1PRidyPDgwob8o2la9SfQo= +github.com/fyne-io/glfw-js v0.4.0/go.mod h1:SDchsFZh4n7nVuBoiowOhOgIBdz+qUQVeC1w9fe2yVU= github.com/fyne-io/image v0.1.1 h1:WH0z4H7qfvNUw5l4p3bC1q70sa5+YWVt6HCj7y4VNyA= github.com/fyne-io/image v0.1.1/go.mod h1:xrfYBh6yspc+KjkgdZU/ifUC9sPA5Iv7WYUBzQKK7JM= github.com/fyne-io/oksvg v0.2.0 h1:mxcGU2dx6nwjJsSA9PCYZDuoAcsZ/OuJlvg/Q9Njfo8= @@ -104,12 +138,20 @@ github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9 github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/gen2brain/go-fitz v1.24.15 h1:sJNB1MOWkqnzzENPHggFpgxTwW0+S5WF/rM5wUBpJWo= github.com/gen2brain/go-fitz v1.24.15/go.mod h1:SftkiVbTHqF141DuiLwBBM65zP7ig6AVDQpf2WlHamo= +github.com/gen2brain/go-fitz v1.28.2 h1:845G85N5TUgnq5oDqyYrW0JvehAkeo35UkkK2dJtW1M= +github.com/gen2brain/go-fitz v1.28.2/go.mod h1:pY2hqAjp9Zy7qfPI2gwbJMHBFAdZpVXOLrRxD82l3Bs= github.com/go-faker/faker/v4 v4.8.0 h1:QAKmb4TyAMxIgf3a8fXubQXwFFJviBGL2/IDa34N6JQ= github.com/go-faker/faker/v4 v4.8.0/go.mod h1:u1dIRP5neLB6kTzgyVjdBOV5R1uP7BdxkcWk7tiKQXk= +github.com/go-faker/faker/v4 v4.9.0 h1:a4HXLwueuTCtgF93VpUsl8Zd2nG1VH2SgNWDPVEBg5U= +github.com/go-faker/faker/v4 v4.9.0/go.mod h1:u1dIRP5neLB6kTzgyVjdBOV5R1uP7BdxkcWk7tiKQXk= github.com/go-gl/gl v0.0.0-20260331235117-4566fea9a276 h1:IO5P06Pcj9K04d+l4nrf3c2U56+dAotIFG6u4P1wAHI= github.com/go-gl/gl v0.0.0-20260331235117-4566fea9a276/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20260406072232-3ac4aa2bb164 h1:ddtotcEXIT7dFhSeXIWjK8YMFYl5bB2NdYQwgv6Uqjk= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20260406072232-3ac4aa2bb164/go.mod h1:SyRD8YfuKk+ZXlDqYiqe1qMSqjNgtHzBTG810KUagMc= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20260707082822-2a407d02d01a h1:hSqNjNllNZUIiqXiS7zFJFqqPa4VPqrzMcWws1dz/VE= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20260707082822-2a407d02d01a/go.mod h1:SyRD8YfuKk+ZXlDqYiqe1qMSqjNgtHzBTG810KUagMc= +github.com/go-gl/glfw/v3.4/glfw v0.1.0-pre.1.0.20260707082822-2a407d02d01a h1:HWK0MBggT/T6YH7VffE10xBIhqeTq8JzIUPJXrRy87g= +github.com/go-gl/glfw/v3.4/glfw v0.1.0-pre.1.0.20260707082822-2a407d02d01a/go.mod h1:T5Dn0JwIJOX1euPZ/iT4tq6nFYtmukjcYa7937HuYK8= github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -139,14 +181,24 @@ github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ= github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c= github.com/gofiber/contrib/v3/websocket v1.2.0 h1:wjkzC3exbhRL3cPCVLRYN3MFq3yhMvtBeGwqEYQk+yc= github.com/gofiber/contrib/v3/websocket v1.2.0/go.mod h1:fpqdn3mVAKAKfSOt8yHXhO70bZ1mz6z6NhY87CjM3k8= +github.com/gofiber/contrib/v3/websocket v1.2.1 h1:E4I1dVCvNF56ELdKksUJilo1r7dpw7lgt1DmsJd7hOo= +github.com/gofiber/contrib/v3/websocket v1.2.1/go.mod h1:rQO2z0SbC/l8lP36gXTKrD1QZBXzHKwt9E8c5em1IiA= github.com/gofiber/fiber/v2 v2.52.13 h1:TOKP64iqC9b5P49VrBW5tHhUOvDyrtJ0xePEfzJbCbk= github.com/gofiber/fiber/v2 v2.52.13/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= +github.com/gofiber/fiber/v2 v2.52.14 h1:Of3L+9qVFaQNwPlcmEdl5IIodHz8BSE0j37R7rWu4pE= +github.com/gofiber/fiber/v2 v2.52.14/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= github.com/gofiber/fiber/v3 v3.3.0 h1:QBd3sYCqdy6Qs5gJYzSw4I4SbqL204jPqpdub/ueiw8= github.com/gofiber/fiber/v3 v3.3.0/go.mod h1:YH7/TAoRaU4kF8slDCtQuFJ1NzC+3MtxUI4KfvQtaIA= +github.com/gofiber/fiber/v3 v3.4.0 h1:F0aND4vwZF7dR7cbvSwFQQEpBU902XHKWxrLsFBkVqw= +github.com/gofiber/fiber/v3 v3.4.0/go.mod h1:nAhJfdxUIJJph2tPWPmqWf8QDIN2iiqQiQf3lENZpdk= github.com/gofiber/schema v1.8.0 h1:NGsC9toPHmj8Xg4KpznuXBzNmHG6V5YV0tXKpKMcmis= github.com/gofiber/schema v1.8.0/go.mod h1:lmbXPQ8hvzXSLkdS2DS7pb4kpunC2Roh7Sj3HMjGfzA= +github.com/gofiber/schema v1.8.2 h1:wq+LO2xEGlsqma/8Akp9PUebQ6vcsYmF0xYQ4F2ijvU= +github.com/gofiber/schema v1.8.2/go.mod h1:iyAMJztdyky7Pk2U7bwUP3EHjzMqUNjZ/hglE0nYO/g= github.com/gofiber/utils/v2 v2.1.0 h1:WSu4COJhJw9moNfJu2nQvaM9AFvAQ/nZbigjhHqKgOQ= github.com/gofiber/utils/v2 v2.1.0/go.mod h1:DdOgEVwQTi8cou/AKWPqhXOR4fHGRVhA/rEWL3IXG7Q= +github.com/gofiber/utils/v2 v2.1.2 h1:/rfkCHvC3XWfOHR04c34KajAhbs5QxmF6cNeJKnkEBI= +github.com/gofiber/utils/v2 v2.1.2/go.mod h1:DdOgEVwQTi8cou/AKWPqhXOR4fHGRVhA/rEWL3IXG7Q= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= @@ -170,8 +222,12 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.16 h1:F/VPrx0YPBdksZJQdCAp0WUsqnNmZpUZszzfYt0M5Dw= github.com/googleapis/enterprise-certificate-proxy v0.3.16/go.mod h1:9Yb0eAkH/Xqhvv3zbeKf/+wMJqCeocWc6KIhDvEAuYE= +github.com/googleapis/enterprise-certificate-proxy v0.3.18 h1:hvVi34VucdrV1IIsiWuqYM8kutw/92MxNEFxCJZEh0k= +github.com/googleapis/enterprise-certificate-proxy v0.3.18/go.mod h1:rSEsBUemEBZEexP2y6jPp16LUmUbjmSbcPMQizR0o4k= github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= +github.com/googleapis/gax-go/v2 v2.23.0 h1:Tchl7qkvE7Ip3y+ztvNufYFvkfqTe7NfLTYGIdJRLuE= +github.com/googleapis/gax-go/v2 v2.23.0/go.mod h1:rBQKOVJCdb8IFEzg+FCwlt1LP/xMDGuqUXhUG+XMXEg= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/hack-pad/go-indexeddb v0.3.2 h1:DTqeJJYc1usa45Q5r52t01KhvlSN02+Oq+tQbSBI91A= @@ -186,6 +242,8 @@ github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2E github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jpillora/chisel v1.11.6 h1:wqlbuatAk8pst2GNY7d2F4AnHxMaLVOA2S/SkC7OlEg= github.com/jpillora/chisel v1.11.6/go.mod h1:gAFVTwDLIMM/dH0w1twfSXz0NQUnBVWrlimi707vk7k= +github.com/jpillora/chisel v1.11.8 h1:pf2ufs2kfytmSWkZoeEgSs5pGrn9ODL2UaZRiR/meyk= +github.com/jpillora/chisel v1.11.8/go.mod h1:efqW+iikEM4E7CxQSR1LW1oyErlZtWXC/R81C/Fzk2w= github.com/jpillora/sizestr v1.0.0 h1:4tr0FLxs1Mtq3TnsLDV+GYUWG7Q26a6s+tV5Zfw2ygw= github.com/jpillora/sizestr v1.0.0/go.mod h1:bUhLv4ctkknatr6gR42qPxirmd5+ds1u7mzD+MZ33f0= github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25 h1:YLvr1eE6cdCqjOe972w/cYF+FjW34v27+9Vo5106B4M= @@ -194,6 +252,8 @@ github.com/jupiterrider/ffi v0.7.0 h1:RKsl6Ascal+3kyAqR5Qcbp83LceQMLc1VZbPfHWoNz github.com/jupiterrider/ffi v0.7.0/go.mod h1:9dauhpOfNqrqk28fxuu0kkdeFtT9Qr4vbfigiuIXN7c= github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/klauspost/compress v1.19.0 h1:sXLILfc9jV2QYWkzFOPWStmcUVH2RHEB1JCdY2oVvCQ= +github.com/klauspost/compress v1.19.0/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -212,6 +272,8 @@ github.com/mattn/go-runewidth v0.0.24 h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/a github.com/mattn/go-runewidth v0.0.24/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mattn/go-sqlite3 v1.14.45 h1:6KA/spDguL3KV8rnybG7ezSaE4SeMR3KC9VbUoAQaIk= github.com/mattn/go-sqlite3 v1.14.45/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= +github.com/mattn/go-sqlite3 v1.14.48 h1:7XHIgl0a8HwOaiK4E47ozLkST78rR9+OtNGx27D/TFs= +github.com/mattn/go-sqlite3 v1.14.48/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= github.com/mdp/qrterminal/v3 v3.2.1 h1:6+yQjiiOsSuXT5n9/m60E54vdgFsw0zhADHhHLrFet4= github.com/mdp/qrterminal/v3 v3.2.1/go.mod h1:jOTmXvnBsMy5xqLniO0R++Jmjs2sTm9dFSuQ5kpz/SU= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -222,6 +284,8 @@ github.com/nicksnyder/go-i18n/v2 v2.6.1 h1:JDEJraFsQE17Dut9HFDHzCoAWGEQJom5s0TRd github.com/nicksnyder/go-i18n/v2 v2.6.1/go.mod h1:Vee0/9RD3Quc/NmwEjzzD7VTZ+Ir7QbXocrkhOzmUKA= github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81 h1:WDsQxOJDy0N1VRAjXLpi8sCEZRSGarLWQevDxpTBRrM= github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20260713124913-97594f28f5ca h1:GHSUVE4yOgX4E7kTRzpxCPbCOYkd3Kj8Dgdod30OI1E= +github.com/petermattis/goid v0.0.0-20260713124913-97594f28f5ca/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM= github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= @@ -234,6 +298,8 @@ github.com/prplecake/go-thumbnail v0.1.6 h1:6mBLXL2/79QHYRCvrciiLtT6vAJfOaMAvNhm github.com/prplecake/go-thumbnail v0.1.6/go.mod h1:v8PaF1YrWlJjdkROeoDgDil5nFycVdH7taPOl/NS830= github.com/redis/go-redis/v9 v9.20.1 h1:sfCU6A8P3dXbKyWes02uxA2baehGux9dZHfEKtsTB1w= github.com/redis/go-redis/v9 v9.20.1/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA= +github.com/redis/go-redis/v9 v9.21.0 h1:FPBE4hhbAke+TLmcY3WkpbDffJEomdqPn3HYiqAtL9E= +github.com/redis/go-redis/v9 v9.21.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.15.0 h1:D0RCU5rMAp+SpgkiNdrjfJ+LX4J1M32V2NeCY7EJ6hc= @@ -252,6 +318,8 @@ github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= github.com/spiffe/go-spiffe/v2 v2.7.0 h1:uXe1MflJoHw58wAUvxVlcM7WpKtijWG7I1UidcGh6g4= github.com/spiffe/go-spiffe/v2 v2.7.0/go.mod h1:47Q0Q9/AqGha8QLHp+kxpH4Wca7X7EnOtlIJy3mxZ3U= +github.com/spiffe/go-spiffe/v2 v2.8.1 h1:eXZMLsu+3MLEPJyGJkolqtVrteZfQdUpOWj6LTiDl/E= +github.com/spiffe/go-spiffe/v2 v2.8.1/go.mod h1:47Q0Q9/AqGha8QLHp+kxpH4Wca7X7EnOtlIJy3mxZ3U= github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c h1:km8GpoQut05eY3GiYWEedbTT0qnSxrCjsVbb7yKY1KE= github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c/go.mod h1:cNQ3dwVJtS5Hmnjxy6AgTPd0Inb3pW05ftPSX7NZO7Q= github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqdkI8FSpFyZDtCVBc2VmejdNrm5rRQ= @@ -260,14 +328,20 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/surrealdb/surrealdb.go v1.4.0 h1:c3Tump5z+b1j27M6Puj0By59axd13ME2NFYptHiIdRw= github.com/surrealdb/surrealdb.go v1.4.0/go.mod h1:ju3vn9OHXde9Ulvc7/fP9I8ylkiapOdBSdrEs2PmTtA= +github.com/surrealdb/surrealdb.go v1.6.0 h1:x88b/W0gDQN7FAtHRsBTEcHLr8UBKNV0uo2MjNKR52s= +github.com/surrealdb/surrealdb.go v1.6.0/go.mod h1:mKSZxow8ZN2tkR2p/fWzjIbinRFXWOGCOpfIdiYYZzc= github.com/tinylib/msgp v1.6.4 h1:mOwYbyYDLPj35mkA2BjjYejgJk9BuHxDdvRnb6v2ZcQ= github.com/tinylib/msgp v1.6.4/go.mod h1:RSp0LW9oSxFut3KzESt5Voq4GVWyS+PSulT77roAqEA= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.71.0 h1:tepR7H+Guh9VUqxxcPggYi8R3lGUu2Rsdh+z7/FCY3k= github.com/valyala/fasthttp v1.71.0/go.mod h1:z1sDUvOShhXq/C9mwH/fSm1Vb71tUJwmQdgkBrBNwnA= +github.com/valyala/fasthttp v1.72.0 h1:R7kYdoWhn1ye1fVpP+cDHDJwYm3NkwLliwgzJ/Abg7M= +github.com/valyala/fasthttp v1.72.0/go.mod h1:zsbLTYqcpIktdQytlVBwIjY9La5d6bs990nBxWg8efk= github.com/vektah/gqlparser/v2 v2.5.34 h1:MEea5P0qhdcqfBL45ghKE+qr9laidVHTMHjav5h7ckk= github.com/vektah/gqlparser/v2 v2.5.34/go.mod h1:mFdHLGCio7OGX1fby9ZjTW6FN+qxgmbnBcRIeeScE5s= +github.com/vektah/gqlparser/v2 v2.5.36 h1:CN9mKVHgMkc+XftdOWIhb4HEL8wKSYkFAqhf8booa7s= +github.com/vektah/gqlparser/v2 v2.5.36/go.mod h1:cAJ9qwVgPaUkWv6Gn8vn0mqOE0Ui5Pn56wNy5396XWo= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= @@ -283,16 +357,24 @@ github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfS github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.8.2 h1:kEGpgqJXdgbkhcOgBxkC0X0PmoPG1ZyoZ117rDVp4zE= github.com/yuin/goldmark v1.8.2/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= +github.com/yuin/goldmark v1.8.4 h1:oat/nd3U6NeQqFEL3xpEJq7d7c86NI+DbSNGAs4xnjA= +github.com/yuin/goldmark v1.8.4/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs= github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s= go.mau.fi/libsignal v0.2.2 h1:QV+XdzQkm3x3aSG7FcqfGSZuFXz83pRZPBFaPygHbOU= go.mau.fi/libsignal v0.2.2/go.mod h1:CRlIQg2J8uYTfDFvNoO8/KcZjs5cey0vbc6oj/bssY0= go.mau.fi/util v0.9.9 h1:ujDeXCo07HBor5oQLyO1tHklupmqVmPgasc53d7q/NE= go.mau.fi/util v0.9.9/go.mod h1:pqt4Vcrt+5gcH/CgrHZg11qSx+b34o6mknGzOEA6waY= +go.mau.fi/util v0.9.10 h1:wzvz5iDHyqDXB8vgisD4d3SzucLXNM3iNY+1O1RoHtg= +go.mau.fi/util v0.9.10/go.mod h1:YQOxySn+ZE3qSYqNxvyX7Yi3suA8YK17PS6QqBREW7A= go.mau.fi/whatsmeow v0.0.0-20260611094716-089932318bc2 h1:VIOZFLguau/48pUzwepY8dgIzU2tDkAsRTbVSk1Fhzg= go.mau.fi/whatsmeow v0.0.0-20260611094716-089932318bc2/go.mod h1:9hto2r5yVE5yyNTRrZErKNSflGBKxIplUVXAD3EJFDE= +go.mau.fi/whatsmeow v0.0.0-20260713112832-d8960d9575d2 h1:2J3waQ2Br8Mh3SW5tVuuChLysXKeprGcTonORU51CIo= +go.mau.fi/whatsmeow v0.0.0-20260713112832-d8960d9575d2/go.mod h1:9dmNTYZ/1pHjPw/bz+azBsGjAkcrZbqzMrKcvG5bJ8U= go.mongodb.org/mongo-driver/v2 v2.6.0 h1:b9sJOYrkmt4l8bY43ZenFBcPlhYIjaOfYHLtbB/5qi8= go.mongodb.org/mongo-driver/v2 v2.6.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= +go.mongodb.org/mongo-driver/v2 v2.8.0 h1:CxWDGQYY8QQwNjAl/aq2sfWakdnWZynnqJ9F4DhHbP8= +go.mongodb.org/mongo-driver/v2 v2.8.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/detectors/gcp v1.44.0 h1:NmLfL734pJhM0JKaYd2Y28+nY9dPRWYAAbxhRCrKXPw= @@ -305,6 +387,7 @@ go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.44.0 h1:hqxVTu/GtBF+vJ8d1fzW7fRxZFvgoDjWcxwwCaFDYpU= go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= go.opentelemetry.io/otel/metric/x v0.66.0 h1:YkCrx1zLOChi9ZcZ6euupOcsgzbVlec7D/xoEU1+cTA= @@ -323,23 +406,33 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= +golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw= +golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk= golang.org/x/exp v0.0.0-20260611194520-c48552f49976 h1:X8Hz2ImujgbmetVuW+w2YkyZChE3cBpZi2P158rTG9M= golang.org/x/exp v0.0.0-20260611194520-c48552f49976/go.mod h1:vnf4pv9iKZXY58sQE1L86zmNWJ4159e1RkcWiLCkeEY= +golang.org/x/exp v0.0.0-20260709172345-9ea1abe57597 h1:qLvzZeaANDgyVOA8pyHCOStGlXn0rseXma+GQjeuv2g= +golang.org/x/exp v0.0.0-20260709172345-9ea1abe57597/go.mod h1:EdfpwwqSu+0Li0mzskwHU6FWDV3t9Q+RZDo3QMUtL3Q= golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/image v0.42.0 h1:1gSs6ehNWXLbkHBIPcWztk3D/6aIA/8hauiAYtlodVY= golang.org/x/image v0.42.0/go.mod h1:rrpelvGFt+kLPAjPM4HeWPgrl0FtafueU//e5N0qk/Q= +golang.org/x/image v0.44.0 h1:+tDekMZED9+LrtB3G5xzRggpVh9CARjZqROla3R3R+I= +golang.org/x/image v0.44.0/go.mod h1:V8K3KE9KKKE+pLpQDOeN18w9oacNSvy1tDOirTu4xtY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= +golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= +golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -347,10 +440,14 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= +golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0= +golang.org/x/term v0.45.0/go.mod h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -358,6 +455,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= +golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= +golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -369,16 +468,27 @@ gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/api v0.284.0 h1:i+cKTgeQRcRySkP7QTl5PDO7/pAm8EcMFIUMlNbk4Vc= google.golang.org/api v0.284.0/go.mod h1:AU44fU+XVZOCcd8uLaBIa/ZgzgPf/0qqY3+m7lQaado= +google.golang.org/api v0.288.0 h1:glhO/J88obKP5I269W3hB73dvBKrjU56ZfmNlNXpgTU= +google.golang.org/api v0.288.0/go.mod h1:lM2kYRzYUCBY91P9h6VF1PYmvhxii3O5hji37qRvIcY= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine/v2 v2.0.6 h1:LvPZLGuchSBslPBp+LAhihBeGSiRh1myRoYK4NtuBIw= google.golang.org/appengine/v2 v2.0.6/go.mod h1:WoEXGoXNfa0mLvaH5sV3ZSGXwVmy8yf7Z1JKf3J3wLI= google.golang.org/genproto v0.0.0-20260610212136-7ab31c22f7ad h1:cYL1DPJAQr4JMvhfGao0PDXoaf03ifMljAuDyrbMBd0= google.golang.org/genproto v0.0.0-20260610212136-7ab31c22f7ad/go.mod h1:cVHIikDNAdx8ISZeW+2rYkEMf3xn0GSaBYmVnWXQBUo= +google.golang.org/genproto v0.0.0-20260713224248-f5fc221cf8c4 h1:PWVFocb6Y93aqxY7m9ArHu5zQiLkIrXBLr+ajQxRHH0= +google.golang.org/genproto v0.0.0-20260713224248-f5fc221cf8c4/go.mod h1:v47/Kzm6KzB/2uGxuDjGww+7Dk7ny/VFIaIw4WxEtu0= google.golang.org/genproto/googleapis/api v0.0.0-20260610212136-7ab31c22f7ad h1:3iLyITS/sySRwbUKoC7ogfj2Yr1Cjs0pfaRKj5U5HEw= google.golang.org/genproto/googleapis/api v0.0.0-20260610212136-7ab31c22f7ad/go.mod h1:KdNqO+rCIWgFumrNBSEDlDNrkrQnpkax7Tv1WxNY8V4= +google.golang.org/genproto/googleapis/api v0.0.0-20260713224248-f5fc221cf8c4 h1:lI0NbdWVmT6lOJJNDd7vyeTdfxP/7ouCLSJUKNNXa0k= +google.golang.org/genproto/googleapis/api v0.0.0-20260713224248-f5fc221cf8c4/go.mod h1:WRrQ7/7N19PypuT0fxLOL5Lq0waoiRri4FbtHDEKrGE= google.golang.org/genproto/googleapis/rpc v0.0.0-20260610212136-7ab31c22f7ad h1:45WmJvIV6C2+O/jjLkPUH+F3aOj/1miDoU2DD0+NWbg= google.golang.org/genproto/googleapis/rpc v0.0.0-20260610212136-7ab31c22f7ad/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260713224248-f5fc221cf8c4 h1:7RtFDizMtT9eZzHzKxifoMGfcDBBy+LYZlgfg24ZmOM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260713224248-f5fc221cf8c4/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= +google.golang.org/grpc v1.82.0 h1:vguDnZUPjE26w09A63VoxZPnvPjB5Riyc0mkXPFmAIU= +google.golang.org/grpc v1.82.0/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= diff --git a/servers/bullion/dbcreation/sql.template b/servers/bullion/dbcreation/sql.template index 7627063..6c9459c 100644 --- a/servers/bullion/dbcreation/sql.template +++ b/servers/bullion/dbcreation/sql.template @@ -544,12 +544,6 @@ INSERT INTO `CalcStringsHistory` VALUES (0,0,'[]','{\"buy\": \"{{symbole}}\", \" /*!40000 ALTER TABLE `CalcStringsHistory` ENABLE KEYS */; UNLOCK TABLES; -LOCK TABLES `FeedsAndUpdates` WRITE; -/*!40000 ALTER TABLE `FeedsAndUpdates` DISABLE KEYS */; -INSERT INTO `FeedsAndUpdates` VALUES (1,'Welcome','Y','

Welcome To Shiv Bullion

',1658097566); -/*!40000 ALTER TABLE `FeedsAndUpdates` ENABLE KEYS */; -UNLOCK TABLES; - LOCK TABLES `OrderStatus` WRITE; /*!40000 ALTER TABLE `OrderStatus` DISABLE KEYS */; INSERT INTO `OrderStatus` VALUES (1,'order_placed','Order Placed',NULL),(2,'limit_expired','Limit Expired',NULL),(3,'limit_placed','Limit Placed',NULL),(4,'limit_passed','Limit Passed',NULL),(5,'limit_canceled','Limit Cancelled',NULL),(6,'delivered','Order Delivered',NULL),(7,'partial_delivered','Partial Delivered',NULL); From babc399497e3d26dfe08f9079728ecf9a6339247 Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Tue, 14 Jul 2026 18:47:55 +0530 Subject: [PATCH 13/15] WIP --- .../whatsapp-client/auto-update/index.go | 244 ++++++++++++++++++ servers/soham/whatsapp-client/keys/index.go | 8 + servers/soham/whatsapp-client/main.go | 2 + 3 files changed, 254 insertions(+) create mode 100644 servers/soham/whatsapp-client/auto-update/index.go create mode 100644 servers/soham/whatsapp-client/keys/index.go diff --git a/servers/soham/whatsapp-client/auto-update/index.go b/servers/soham/whatsapp-client/auto-update/index.go new file mode 100644 index 0000000..0c027cf --- /dev/null +++ b/servers/soham/whatsapp-client/auto-update/index.go @@ -0,0 +1,244 @@ +package sohan_whatsapp_auto_download + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "log" + "net/http" + "os" + "path/filepath" + "runtime" + "strings" + "time" + + sohan_whatsapp_keys "github.com/rpsoftech/golang-servers/apps/sohan/whatsapp/keys" + utility_functions "github.com/rpsoftech/golang-servers/utility/functions" + utility_functions_gzip "github.com/rpsoftech/golang-servers/utility/functions/gzip" +) + +const VersionFileName = "client-version.json" + +type VersionInfo struct { + Version int `json:"version"` + URL string `json:"url"` + SHA256 string `json:"sha256"` +} + +type progressReader struct { + reader io.Reader + total int64 + read int64 +} + +func (p *progressReader) Read(buf []byte) (int, error) { + n, err := p.reader.Read(buf) + p.read += int64(n) + + if p.total > 0 { + percentage := float64(p.read) / float64(p.total) * 100 + fmt.Printf("\rDownloading update: %.2f%% (%d/%d bytes)", percentage, p.read, p.total) + } else { + fmt.Printf("\rDownloading update: %d bytes received", p.read) + } + return n, err +} + +var checkAndRunCalled = false + +// getExeDir returns the absolute path of the directory where this executable is running +func getExeDir() string { + exePath, err := os.Executable() + if err != nil { + // Fallback to current working directory if execution lookup fails + cwd, _ := os.Getwd() + return cwd + } + // Evaluates symlinks cleanly to guarantee correct execution paths + realPath, err := filepath.EvalSymlinks(exePath) + if err == nil { + return filepath.Dir(realPath) + } + return filepath.Dir(exePath) +} + +func sha256File(path string) (string, error) { + file, err := os.Open(path) + if err != nil { + return "", err + } + defer file.Close() + + hash := sha256.New() + _, err = io.Copy(hash, file) + if err != nil { + return "", err + } + return hex.EncodeToString(hash.Sum(nil)), nil +} + +func GetVersionEndpoint() string { + switch fmt.Sprintf("%s_%s", runtime.GOOS, runtime.GOARCH) { + case "windows_amd64": + return "https://keyvalue.rpso.in/public/soham_go_wbot_windows_amd64" + case "darwin_amd64": + return "https://keyvalue.rpso.in/public/soham_go_wbot_darwin_amd64" + case "darwin_arm64": + return "https://keyvalue.rpso.in/public/soham_go_wbot_darwin_arm64" + default: + return "" + } +} + +func CheckAndDownload() string { + // 1. Resolve target file paths relative to where the current application is running + appDir := getExeDir() + versionFilePath := filepath.Join(appDir, VersionFileName) + + serverBinaryName := "whatsapp-client.o" + if runtime.GOOS == "windows" { + serverBinaryName = "whatsapp-client.exe" + } + + // Anchor the target binary to the execution directory + serverBinary := filepath.Join(appDir, serverBinaryName) + + if checkAndRunCalled { + return serverBinary + } + + endpoint := GetVersionEndpoint() + if endpoint == "" { + log.Printf("Fatal: Endpoint Not Found For OS: %s, Arch: %s\n", runtime.GOOS, runtime.GOARCH) + return serverBinary + } + + resp, err := http.Get(endpoint) + if err != nil { + log.Println("Error: Failed to poll client metadata version endpoint.") + return serverBinary + } + defer resp.Body.Close() + + var cloud VersionInfo + if err := json.NewDecoder(resp.Body).Decode(&cloud); err != nil { + log.Println("Error parsing remote version payload:", err) + return serverBinary + } + + var local VersionInfo + data, err := os.ReadFile(versionFilePath) + if err == nil { + json.Unmarshal(data, &local) + } + + gzipFile := serverBinary + ".gz" + needDownload := false + + if exist, _ := utility_functions.Exist(serverBinary); !exist { + needDownload = true + } + if local.Version != cloud.Version { + needDownload = true + } + + if needDownload { + os.Remove(gzipFile) + log.Printf("New version found (Local: %d, Cloud: %d). Initializing download...", local.Version, cloud.Version) + + err := downloadFileWithProgress(cloud.URL, gzipFile) + fmt.Println() + if err != nil { + log.Println("Error: File download failed:", err) + return serverBinary + } + + hash, err := sha256File(gzipFile) + if err != nil { + log.Println("Error hashing temporary file:", err) + return serverBinary + } + + if hash != cloud.SHA256 { + log.Printf("Error: Checksum mismatch. Expected %s, got %s\n", cloud.SHA256, hash) + os.Remove(gzipFile) + return serverBinary + } + + err = replaceBinarySafe(gzipFile, serverBinary) + if err != nil { + log.Println("Binary unpack and replacement transaction failed:", err) + return serverBinary + } + + vdata, _ := json.Marshal(cloud) + os.WriteFile(versionFilePath, vdata, 0644) + log.Println("Update deployed successfully to base execution folder.") + } + + checkAndRunCalled = true + return serverBinary +} + +func downloadFileWithProgress(url string, targetPath string) error { + client := &http.Client{ + Timeout: 500 * time.Second, + } + resp, err := client.Get(url) + if err != nil { + return err + } + defer resp.Body.Close() + + out, err := os.Create(targetPath) + if err != nil { + return err + } + defer out.Close() + + pr := &progressReader{ + reader: resp.Body, + total: resp.ContentLength, + } + + _, err = io.Copy(out, pr) + return err +} + +func replaceBinarySafe(tmpFile string, serverBinary string) error { + if sohan_whatsapp_keys.ServerCmd != nil && sohan_whatsapp_keys.ServerCmd.Process != nil { + sohan_whatsapp_keys.ServerCmd.Process.Kill() + time.Sleep(2 * time.Second) + } + + backup := serverBinary + ".old" + os.Remove(backup) + + if exist, _ := utility_functions.Exist(serverBinary); exist { + err := os.Rename(serverBinary, backup) + if err != nil { + if !strings.Contains(err.Error(), "access is denied") { + return fmt.Errorf("failed to cycle target out of space: %w", err) + } + } + } + + err := utility_functions_gzip.GzipDecompressFile(tmpFile, serverBinary) + if err != nil { + if exist, _ := utility_functions.Exist(backup); exist { + os.Rename(backup, serverBinary) + } + return fmt.Errorf("decompression step failure: %w", err) + } + + if runtime.GOOS != "windows" { + os.Chmod(serverBinary, 0755) + } + + os.Remove(backup) + os.Remove(tmpFile) + + return nil +} diff --git a/servers/soham/whatsapp-client/keys/index.go b/servers/soham/whatsapp-client/keys/index.go new file mode 100644 index 0000000..797690c --- /dev/null +++ b/servers/soham/whatsapp-client/keys/index.go @@ -0,0 +1,8 @@ +package soham_whatsapp_client_keys + +import "os/exec" + +var ServerConfigFilePath = "" +var ServerCmd *exec.Cmd +var HomeDir string +var ConfigDir string diff --git a/servers/soham/whatsapp-client/main.go b/servers/soham/whatsapp-client/main.go index f0b4eb5..051ff9d 100644 --- a/servers/soham/whatsapp-client/main.go +++ b/servers/soham/whatsapp-client/main.go @@ -15,6 +15,7 @@ import ( whatsapp_middleware "github.com/rpsoftech/golang-servers/functions/whatsapp/middleware" "github.com/rpsoftech/golang-servers/interfaces" soham_whatsapp_client_apis "github.com/rpsoftech/golang-servers/servers/soham/whatsapp-client/apis" + sohan_whatsapp_auto_download "github.com/rpsoftech/golang-servers/servers/soham/whatsapp-client/auto-update" whatsapp_client_core "github.com/rpsoftech/golang-servers/servers/soham/whatsapp-client/core" soham_whatsapp_client_env "github.com/rpsoftech/golang-servers/servers/soham/whatsapp-client/env" soham_whatsapp_client_websocket "github.com/rpsoftech/golang-servers/servers/soham/whatsapp-client/websoceket" @@ -29,6 +30,7 @@ func main() { go func() { os.RemoveAll("./tmp") os.Mkdir("./tmp", 0777) + sohan_whatsapp_auto_download.CheckAndDownload() }() outputLogFolderDir := filepath.Join(env.FindAndReturnCurrentDir(), "whatsapp_server_logs") From 41a7639e6a7ebcc582e6d3f9ea36d5724109bb3b Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Tue, 14 Jul 2026 19:11:42 +0530 Subject: [PATCH 14/15] WIP --- .vscode/settings.json | 1 + apps/sohan/whatsapp/auto-download/index.go | 10 +- apps/sohan/whatsapp/config/index.go | 18 ++-- apps/sohan/whatsapp/keys/index.go | 2 +- apps/sohan/whatsapp/main.go | 62 ++++++----- go.mod | 2 - go.sum | 114 +-------------------- release/soham/whatsapp-client.go | 1 + 8 files changed, 53 insertions(+), 157 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 076633f..153f5bb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -29,6 +29,7 @@ "rpsoftech", "samt", "SITEID", + "soham", "SPRICE", "STAMPID", "tdate", diff --git a/apps/sohan/whatsapp/auto-download/index.go b/apps/sohan/whatsapp/auto-download/index.go index 37a9206..3f6e52d 100644 --- a/apps/sohan/whatsapp/auto-download/index.go +++ b/apps/sohan/whatsapp/auto-download/index.go @@ -1,4 +1,4 @@ -package sohan_whatsapp_auto_download +package soham_whatsapp_auto_download import ( "crypto/sha256" @@ -15,7 +15,7 @@ import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/widget" - sohan_whatsapp_keys "github.com/rpsoftech/golang-servers/apps/sohan/whatsapp/keys" + soham_whatsapp_keys "github.com/rpsoftech/golang-servers/apps/sohan/whatsapp/keys" utility_functions "github.com/rpsoftech/golang-servers/utility/functions" utility_functions_gzip "github.com/rpsoftech/golang-servers/utility/functions/gzip" ) @@ -115,7 +115,7 @@ func CheckAndDownload(progress *widget.ProgressBar, win fyne.Window) string { if runtime.GOOS == "windows" { serverBinary = "whatsapp-client.exe" } - serverBinary = filepath.Join(sohan_whatsapp_keys.ConfigDir, serverBinary) + serverBinary = filepath.Join(soham_whatsapp_keys.ConfigDir, serverBinary) if checkAndRunCalled { return serverBinary } @@ -223,8 +223,8 @@ func downloadFileWithProgress(url string, filepath string, progress *widget.Prog func replaceBinarySafe(tmpFile string, serverBinary string) error { // stop server first - if sohan_whatsapp_keys.ServerCmd != nil && sohan_whatsapp_keys.ServerCmd.Process != nil { - sohan_whatsapp_keys.ServerCmd.Process.Kill() + if soham_whatsapp_keys.ServerCmd != nil && soham_whatsapp_keys.ServerCmd.Process != nil { + soham_whatsapp_keys.ServerCmd.Process.Kill() time.Sleep(3 * time.Second) } diff --git a/apps/sohan/whatsapp/config/index.go b/apps/sohan/whatsapp/config/index.go index 370e1cc..5f958ec 100644 --- a/apps/sohan/whatsapp/config/index.go +++ b/apps/sohan/whatsapp/config/index.go @@ -17,7 +17,7 @@ import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "github.com/google/uuid" - sohan_whatsapp_keys "github.com/rpsoftech/golang-servers/apps/sohan/whatsapp/keys" + soham_whatsapp_keys "github.com/rpsoftech/golang-servers/apps/sohan/whatsapp/keys" whatsapp_config "github.com/rpsoftech/golang-servers/functions/whatsapp/config" whatsapp_interfaces "github.com/rpsoftech/golang-servers/interfaces/whatsapp" utility_functions "github.com/rpsoftech/golang-servers/utility/functions" @@ -40,17 +40,17 @@ func init() { log.Fatal(err) } // fmt.Println(dirname) - sohan_whatsapp_keys.HomeDir = dirname - sohan_whatsapp_keys.ConfigDir = filepath.Join(dirname, ".wabot_service") - sohan_whatsapp_keys.ServerConfigFilePath = filepath.Join(sohan_whatsapp_keys.ConfigDir, whatsapp_config.ServerConfigFileName) + soham_whatsapp_keys.HomeDir = dirname + soham_whatsapp_keys.ConfigDir = filepath.Join(dirname, ".wabot_service") + soham_whatsapp_keys.ServerConfigFilePath = filepath.Join(soham_whatsapp_keys.ConfigDir, whatsapp_config.ServerConfigFileName) } func ValidateConfig() (bool, *whatsapp_interfaces.IServerConfig) { - if _, err := utility_functions.Exist(sohan_whatsapp_keys.ServerConfigFilePath); errors.Is(err, os.ErrNotExist) { - // panic(fmt.Errorf("CONFIG_NOT_EXIST_ON_PATH %s", sohan_whatsapp_keys.ServerConfigFilePath)) + if _, err := utility_functions.Exist(soham_whatsapp_keys.ServerConfigFilePath); errors.Is(err, os.ErrNotExist) { + // panic(fmt.Errorf("CONFIG_NOT_EXIST_ON_PATH %s", soham_whatsapp_keys.ServerConfigFilePath)) return false, nil } - config, err := readConfigFileAndReturniserverConfig(sohan_whatsapp_keys.ServerConfigFilePath) + config, err := readConfigFileAndReturniserverConfig(soham_whatsapp_keys.ServerConfigFilePath) if err != nil { return false, nil // panic(err) @@ -141,7 +141,7 @@ func ValidUUID(uuidstring string) (bool, string) { } func QrCodeApiCall(token string) (bool, string) { - req, err := http.NewRequest("GET", sohan_whatsapp_keys.QRCODEURL, nil) + req, err := http.NewRequest("GET", soham_whatsapp_keys.QRCODEURL, nil) if err != nil { fmt.Println(err) @@ -171,7 +171,7 @@ func QrCodeApiCall(token string) (bool, string) { return true, qrcodeRespo.QrCode } func LoginApiCall(token string) (bool, error) { - req, err := http.NewRequest("GET", sohan_whatsapp_keys.LoginStatusURL, nil) + req, err := http.NewRequest("GET", soham_whatsapp_keys.LoginStatusURL, nil) if err != nil { fmt.Println(err) diff --git a/apps/sohan/whatsapp/keys/index.go b/apps/sohan/whatsapp/keys/index.go index fcb4b53..8c89eeb 100644 --- a/apps/sohan/whatsapp/keys/index.go +++ b/apps/sohan/whatsapp/keys/index.go @@ -1,4 +1,4 @@ -package sohan_whatsapp_keys +package soham_whatsapp_keys import "os/exec" diff --git a/apps/sohan/whatsapp/main.go b/apps/sohan/whatsapp/main.go index 5d354ff..e77db8c 100644 --- a/apps/sohan/whatsapp/main.go +++ b/apps/sohan/whatsapp/main.go @@ -15,14 +15,14 @@ import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" - "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/driver/desktop" + _ "fyne.io/fyne/v2/driver/software" "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/widget" - sohan_whatsapp_auto_download "github.com/rpsoftech/golang-servers/apps/sohan/whatsapp/auto-download" + soham_whatsapp_auto_download "github.com/rpsoftech/golang-servers/apps/sohan/whatsapp/auto-download" soham_whatsapp_gui_config "github.com/rpsoftech/golang-servers/apps/sohan/whatsapp/config" - sohan_whatsapp_keys "github.com/rpsoftech/golang-servers/apps/sohan/whatsapp/keys" + soham_whatsapp_keys "github.com/rpsoftech/golang-servers/apps/sohan/whatsapp/keys" "github.com/rpsoftech/golang-servers/env" whatsapp_interfaces "github.com/rpsoftech/golang-servers/interfaces/whatsapp" utility_functions "github.com/rpsoftech/golang-servers/utility/functions" @@ -128,15 +128,15 @@ func startServer(a fyne.App) { go func() { progressBar, progressWin := showDownloadProgress(a) - serverBinary := sohan_whatsapp_auto_download.CheckAndDownload(progressBar, progressWin) + serverBinary := soham_whatsapp_auto_download.CheckAndDownload(progressBar, progressWin) // start server fyne.Do(func() { progressWin.Close() }) for { updateTrayStatus("🟡 Starting server...") - sohan_whatsapp_keys.ServerCmd = exec.Command(serverBinary, "--dev") - serverCmd := sohan_whatsapp_keys.ServerCmd + soham_whatsapp_keys.ServerCmd = exec.Command(serverBinary, "--dev") + serverCmd := soham_whatsapp_keys.ServerCmd if runtime.GOOS == "windows" { serverCmd.SysProcAttr = &syscall.SysProcAttr{ HideWindow: true, @@ -160,7 +160,7 @@ func startServer(a fyne.App) { go utility_functions.StreamLogs(stdout, "SERVER") go utility_functions.StreamLogs(stderr, "SERVER") } - err := sohan_whatsapp_keys.ServerCmd.Start() + err := soham_whatsapp_keys.ServerCmd.Start() if err != nil { updateTrayStatus("🔴 Server failed") time.Sleep(50 * time.Second) @@ -168,7 +168,7 @@ func startServer(a fyne.App) { } updateTrayStatus("🟢 Server running") - err = sohan_whatsapp_keys.ServerCmd.Wait() + err = soham_whatsapp_keys.ServerCmd.Wait() println(err) updateTrayStatus("🔴 Server stopped") time.Sleep(3 * time.Second) @@ -187,8 +187,8 @@ func startServer(a fyne.App) { func restartServer() { - if sohan_whatsapp_keys.ServerCmd != nil && sohan_whatsapp_keys.ServerCmd.Process != nil { - sohan_whatsapp_keys.ServerCmd.Process.Kill() + if soham_whatsapp_keys.ServerCmd != nil && soham_whatsapp_keys.ServerCmd.Process != nil { + soham_whatsapp_keys.ServerCmd.Process.Kill() } } @@ -202,7 +202,7 @@ func saveConfig(token, number string) { config.Tokens = make(map[string]string) config.JID = make(map[string]string) config.Tokens[token] = number - config.SetConfigPath(sohan_whatsapp_keys.ServerConfigFilePath) + config.SetConfigPath(soham_whatsapp_keys.ServerConfigFilePath) soham_whatsapp_gui_config.SaveConfig(config) } @@ -360,20 +360,20 @@ func configForm(a fyne.App) fyne.CanvasObject { widget.NewLabel("Number"), number, ) - + log.Println("Loading logo for config file") // embedded logo - logo := canvas.NewImageFromResource(resourceIconPng) - logo.FillMode = canvas.ImageFillContain - logo.SetMinSize(fyne.NewSize(120, 80)) - - logoBox := container.NewHBox( - layout.NewSpacer(), - logo, - layout.NewSpacer(), - ) - + // logo := canvas.NewImageFromResource(resourceIconPng) + // logo.FillMode = canvas.ImageFillContain + // logo.SetMinSize(fyne.NewSize(120, 80)) + + // logoBox := container.NewHBox( + // layout.NewSpacer(), + // logo, + // layout.NewSpacer(), + // ) + log.Println("Returning Config Container") return container.NewVBox( - logoBox, + // logoBox, layout.NewSpacer(), row1, row2, @@ -468,6 +468,10 @@ func main() { if os.Getenv("APP_ENV") == "" { os.Setenv("APP_ENV", "PRODUCTION") } + if !env.IsDev { + os.Setenv("FYNE_RENDER", "software") + guiLock = filepath.Join(env.FindAndReturnCurrentDir(), guiLock) + } env.LoadEnv(filepath.Join(env.FindAndReturnCurrentDir(), "whatsapp-client.env")) SetEnv() log.Printf("ENV Settled") @@ -475,15 +479,15 @@ func main() { defer os.Remove(guiLock) a := app.New() // a.Settings().SetTheme(theme.) - + log.Println("Starting GUI") window := a.NewWindow("WABOT Config Tool") window.Resize(fyne.NewSize(520, 380)) window.CenterOnScreen() mainWindow = window - + log.Println("Setting ICON") // embedded icon - window.SetIcon(resourceIconPng) + // window.SetIcon(resourceIconPng) // window.SetIcon(icon) ////////////////////////////////////////////////// @@ -515,7 +519,7 @@ func main() { quitItem, ) desk.SetSystemTrayMenu(trayMenu) - desk.SetSystemTrayIcon(resourceIconPng) + // desk.SetSystemTrayIcon(resourceIconPng) } window.SetCloseIntercept(func() { @@ -525,8 +529,9 @@ func main() { ////////////////////////////////////////////////// // START LOGIC ////////////////////////////////////////////////// - + log.Println("Starting CLIENT") if loadConfig() { + log.Println("Config Found adn Loaded") window.SetContent(successScreen()) go func() { startServer(a) @@ -536,6 +541,7 @@ func main() { }) }() } else { + log.Println("Config Not Found Creating New") window.SetContent(configForm(a)) } window.Show() diff --git a/go.mod b/go.mod index 0cb7e38..18f568e 100644 --- a/go.mod +++ b/go.mod @@ -77,7 +77,6 @@ require ( github.com/fyne-io/oksvg v0.2.0 // indirect github.com/gabriel-vasile/mimetype v1.4.13 // indirect github.com/go-gl/gl v0.0.0-20260331235117-4566fea9a276 // indirect - github.com/go-gl/glfw/v3.3/glfw v0.0.0-20260707082822-2a407d02d01a // indirect github.com/go-gl/glfw/v3.4/glfw v0.1.0-pre.1.0.20260707082822-2a407d02d01a // indirect github.com/go-jose/go-jose/v4 v4.1.4 // indirect github.com/go-logr/logr v1.4.3 // indirect @@ -101,7 +100,6 @@ require ( github.com/jpillora/backoff v1.0.0 // indirect github.com/jpillora/sizestr v1.0.0 // indirect github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25 // indirect - github.com/jupiterrider/ffi v0.7.0 // indirect github.com/klauspost/compress v1.19.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mattn/go-colorable v0.1.15 // indirect diff --git a/go.sum b/go.sum index 100fa67..634d886 100644 --- a/go.sum +++ b/go.sum @@ -2,47 +2,30 @@ cel.dev/expr v0.25.2 h1:K6j46C81hXtZQfuX60cVWQFBJahKSE2gfRbNuvr5bFs= cel.dev/expr v0.25.2/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA= -cloud.google.com/go/auth v0.20.0/go.mod h1:942/yi/itH1SsmpyrbnTMDgGfdy2BUqIKyd0cyYLc5Q= cloud.google.com/go/auth v0.22.0 h1:Xp9wAKkLoeaYb5pYZZoQGz4E9sdPxIbzS3gywZE3ciQ= cloud.google.com/go/auth v0.22.0/go.mod h1:M9o2Oz+YI2jAfxewJgb1vyI3vceHF+eohmxyzmrl+9s= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= -cloud.google.com/go/compute v1.64.0 h1:7MmuzeAxlG5MOG5PQD2NLtyYR6bWjkvGljRu7pByoRU= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/firestore v1.22.0 h1:avooeboIq37vKXobrbPUFhFBxS/c3FqmWoX0xs8dO6E= -cloud.google.com/go/firestore v1.22.0/go.mod h1:PaM4i7i7ruALSKmlpHXXZaPObcZw0W7ie5UOPr72iTU= cloud.google.com/go/firestore v1.23.0 h1:lFkdUEqdb1FxJNeZ17ZCrpok/+5yZdWapEzDCwLuwp8= cloud.google.com/go/firestore v1.23.0/go.mod h1:2EWfSUj+iqHckyH7uSjLI+lDgSAWJs9jL/uP45PnuQQ= -cloud.google.com/go/iam v1.11.0 h1:KieQ9Pb+LLPak1O3Rv3GgCxhnmkYf7Xyh0P5HfF1jFM= -cloud.google.com/go/iam v1.11.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= cloud.google.com/go/iam v1.12.0 h1:Aki3bX9aHUDKPHfnRJfDcTdVedvy6quGBQcTqx3DRXk= cloud.google.com/go/iam v1.12.0/go.mod h1:FEZ4lXpADAC2AIpQY7LANNjjwyQ2jK439CI2VaD+sLY= cloud.google.com/go/logging v1.18.0 h1:KhzZq+1cSkPH9YUaKLLhLtQxIHitVayBmk0sGfoM9+k= cloud.google.com/go/logging v1.18.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= -cloud.google.com/go/longrunning v1.0.0 h1:lwzWEYD8+NkYV7dhexOz6kmlvajZA70+bW/xMhRVVdY= -cloud.google.com/go/longrunning v1.0.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= cloud.google.com/go/longrunning v1.2.0 h1:WjYH3YHBGCxGJP9M4dWGHBfXr/cFIjMkNgWcJj7/iMM= cloud.google.com/go/longrunning v1.2.0/go.mod h1:5KMQALFGOCtFoi2xSOA1u3H7WKlhmckgiyFw7+LGQp0= -cloud.google.com/go/monitoring v1.29.0 h1:AHhDsFaSax1/4k+qlIDX/SDGe6hggnfXJ9dkgD9qBPY= -cloud.google.com/go/monitoring v1.29.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= cloud.google.com/go/monitoring v1.30.0 h1:r/d+JUbyKmJ8b07iznuKfzVzrIXTWxHQ3lBRm3x2LlY= cloud.google.com/go/monitoring v1.30.0/go.mod h1:htlUR0QWVMrjFzZmN4LGnMAve9xB/eduwjmINxVZ8RM= -cloud.google.com/go/storage v1.62.3 h1:SZq1t23NCI+e96dH77Dg3PEfsNNEjqO8zE5AnD8gVD0= -cloud.google.com/go/storage v1.62.3/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= cloud.google.com/go/storage v1.63.1 h1:CYXILV9G4CH0C18IQ9+V0h4XiqD2LhKnMLO0o7uJWNs= cloud.google.com/go/storage v1.63.1/go.mod h1:lWyAtwvDZHdL3k68WVKbESP6bmWaV23ZJJ/JEVw/ZaQ= cloud.google.com/go/trace v1.16.0 h1:GmQovzFc5F0CNfl0VLgL64aoTtu7xsM0YajW2GlG9+E= cloud.google.com/go/trace v1.16.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= -firebase.google.com/go/v4 v4.20.0 h1:ighpjeAC45rY/95cUQ+ojIKlKcTnz2YC0ldam56z2YU= -firebase.google.com/go/v4 v4.20.0/go.mod h1:hqhkQtZkThGH42TnaYi7A8EFR1E0FEuB5oHvJ1Q57t8= firebase.google.com/go/v4 v4.21.0 h1:HBZV4jrLtFYj8EwWyqEZOuRLfkfkV2bpnfyyXHOhPxY= firebase.google.com/go/v4 v4.21.0/go.mod h1:CDumIdA5oTiyDpLNVcQoW8ZrB5CTgyE2D45DuENIABg= -fyne.io/fyne/v2 v2.7.4 h1:OVCI5mT+Onb2kA4wlmGA5pLCqKik9f4NDb5jiR1OMTc= -fyne.io/fyne/v2 v2.7.4/go.mod h1:ZD1mmhBY75mSa97IXl3MPlICd1uNHfCXYh5hKIlVOII= fyne.io/fyne/v2 v2.8.0 h1:KNUdIk1eKsXSPy/wU6MdiR1hppAPvyzbjPbtJ8h6EUQ= fyne.io/fyne/v2 v2.8.0/go.mod h1:tLJK7CVtUBOnMiSDR+J88t/quiGuEhwGs09tIVM1RXg= fyne.io/systray v1.12.2 h1:Y8DZxgLHsVQt6rY9Zrkkg+j67S7vv/1F2viOWKPpVeA= @@ -51,27 +34,18 @@ github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0 h1:l7+6kwRMJNwdCvYdDl7Eax+wzEYHSnNY7zrrfbhDdTA= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0/go.mod h1:pJTkW8hEUIIi3Pf65lPZOnn4Y81yCllX6IWk2jNXdkM= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.34.0 h1:yzIYdwuro811Z27D3T80Wkd3rqZzb0K43nner7Eh1yE= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.34.0/go.mod h1:pJTkW8hEUIIi3Pf65lPZOnn4Y81yCllX6IWk2jNXdkM= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.57.0 h1:jLdiS1vO+XJFyDSWRHBx56r4s/NNtcl5J6KyCcWUX/w= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.57.0/go.mod h1:8lmpHY+1VRoteiOwyrQMDt1YGXOrFKCz+1wJW7n3ODY= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.58.0 h1:ZYGajzJNcirVZpT1rltgf9iM+j9zZ4v8V9DrF+xKRJ8= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.58.0/go.mod h1:PDQyYBOzGtQgvshQI//UiXyzuMHCz0ndyu+4W8X82vM= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.57.0 h1:cSjUzZ7KU8hicTgzaSv9NmSyM9fTVK3y5lsBUl3wOis= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.57.0/go.mod h1:dzcEjy1WJ0Q4u9twNR3LcLhNoYMRCrMCMafpxa0TjPQ= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.58.0 h1:IBF8BbhKJkMsON/eY+LMu3aF3XMiotCb9KvkUmEkOJo= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.57.0 h1:RoO5+d7uCmDqovLrHCr2/BuViUXvdcrNxyNM1pN9dDQ= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.57.0/go.mod h1:YqwkQPrWSC7+byyc1VlKbWLBF5JsW5IoL6xUkemYSXk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.58.0/go.mod h1:dzcEjy1WJ0Q4u9twNR3LcLhNoYMRCrMCMafpxa0TjPQ= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.58.0 h1:SBZzZCiPmDrUV7NSCWY54OnKikO/oTydPCvyEyYaDDE= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.58.0/go.mod h1:YqwkQPrWSC7+byyc1VlKbWLBF5JsW5IoL6xUkemYSXk= github.com/MicahParks/keyfunc v1.9.0 h1:lhKd5xrFHLNOWrDc4Tyb/Q1AJ4LCzQ48GVJyVIID3+o= github.com/MicahParks/keyfunc v1.9.0/go.mod h1:IdnCilugA0O/99dW+/MkvlyrsX8+L8+x95xuVNtM5jw= github.com/agnivade/levenshtein v1.2.1 h1:EHBY3UOn1gwdy/VbFwgo4cxecRznFk7fKWN1KOX7eoM= github.com/agnivade/levenshtein v1.2.1/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU= -github.com/andybalholm/brotli v1.2.1 h1:R+f5xP285VArJDRgowrfb9DqL18yVK0gKAW/F+eTWro= -github.com/andybalholm/brotli v1.2.1/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/andybalholm/brotli v1.2.2 h1:HzTuoo2ErYQqf5qvcJInB8uvqSVxRttzkFexPWtnceM= github.com/andybalholm/brotli v1.2.2/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/anthonynsimon/bild v0.16.1 h1:ECqtLkQ15kqfHdRtzUfNvQniJtHNpzdVU/7feMYAm0o= @@ -98,8 +72,6 @@ github.com/dolthub/maphash v0.1.0 h1:bsQ7JsF4FkkWyrP3oCnFJgrCUAFbFf3kOl4L/QxPDyQ github.com/dolthub/maphash v0.1.0/go.mod h1:gkg4Ch4CdCDu5h6PMriVLawB7koZ+5ijb9puGMV50a4= github.com/ebitengine/purego v0.10.1 h1:dewVBCBT2GaMu1SrNTYxQhgQBethzfhiwvZiLGP/qyY= github.com/ebitengine/purego v0.10.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= -github.com/elliotchance/orderedmap/v3 v3.1.0 h1:j4DJ5ObEmMBt/lcwIecKcoRxIQUEnw0L804lXYDt/pg= -github.com/elliotchance/orderedmap/v3 v3.1.0/go.mod h1:G+Hc2RwaZvJMcS4JpGCOyViCnGeKf0bTYCGTO4uhjSo= github.com/elliotchance/orderedmap/v3 v3.1.1 h1:eV7lfZ5fVL8d36b8Wogqi/eqm7R/kZcftA9Yiyj+63M= github.com/elliotchance/orderedmap/v3 v3.1.1/go.mod h1:G+Hc2RwaZvJMcS4JpGCOyViCnGeKf0bTYCGTO4uhjSo= github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= @@ -122,12 +94,8 @@ github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx5 github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= github.com/fxamacker/cbor/v2 v2.9.2 h1:X4Ksno9+x3cz0TZv69ec1hxP/+tymuR8PXQJyDwfh78= github.com/fxamacker/cbor/v2 v2.9.2/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= -github.com/fyne-io/gl-js v0.2.0 h1:+EXMLVEa18EfkXBVKhifYB6OGs3HwKO3lUElA0LlAjs= -github.com/fyne-io/gl-js v0.2.0/go.mod h1:ZcepK8vmOYLu96JoxbCKJy2ybr+g1pTnaBDdl7c3ajI= github.com/fyne-io/gl-js v0.2.1-0.20260315212741-029c47fd27e8 h1:0kdPD/GEntpWmZEK5Zu/xE6Tr37jYCVDf9QP8lA/QK8= github.com/fyne-io/gl-js v0.2.1-0.20260315212741-029c47fd27e8/go.mod h1:ZcepK8vmOYLu96JoxbCKJy2ybr+g1pTnaBDdl7c3ajI= -github.com/fyne-io/glfw-js v0.3.0 h1:d8k2+Y7l+zy2pc7wlGRyPfTgZoqDf3AI4G+2zOWhWUk= -github.com/fyne-io/glfw-js v0.3.0/go.mod h1:Ri6te7rdZtBgBpxLW19uBpp3Dl6K9K/bRaYdJ22G8Jk= github.com/fyne-io/glfw-js v0.4.0 h1:I9hREBeFyI10cNIqbMKYb1PRidyPDgwob8o2la9SfQo= github.com/fyne-io/glfw-js v0.4.0/go.mod h1:SDchsFZh4n7nVuBoiowOhOgIBdz+qUQVeC1w9fe2yVU= github.com/fyne-io/image v0.1.1 h1:WH0z4H7qfvNUw5l4p3bC1q70sa5+YWVt6HCj7y4VNyA= @@ -136,20 +104,12 @@ github.com/fyne-io/oksvg v0.2.0 h1:mxcGU2dx6nwjJsSA9PCYZDuoAcsZ/OuJlvg/Q9Njfo8= github.com/fyne-io/oksvg v0.2.0/go.mod h1:dJ9oEkPiWhnTFNCmRgEze+YNprJF7YRbpjgpWS4kzoI= github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= -github.com/gen2brain/go-fitz v1.24.15 h1:sJNB1MOWkqnzzENPHggFpgxTwW0+S5WF/rM5wUBpJWo= -github.com/gen2brain/go-fitz v1.24.15/go.mod h1:SftkiVbTHqF141DuiLwBBM65zP7ig6AVDQpf2WlHamo= github.com/gen2brain/go-fitz v1.28.2 h1:845G85N5TUgnq5oDqyYrW0JvehAkeo35UkkK2dJtW1M= github.com/gen2brain/go-fitz v1.28.2/go.mod h1:pY2hqAjp9Zy7qfPI2gwbJMHBFAdZpVXOLrRxD82l3Bs= -github.com/go-faker/faker/v4 v4.8.0 h1:QAKmb4TyAMxIgf3a8fXubQXwFFJviBGL2/IDa34N6JQ= -github.com/go-faker/faker/v4 v4.8.0/go.mod h1:u1dIRP5neLB6kTzgyVjdBOV5R1uP7BdxkcWk7tiKQXk= github.com/go-faker/faker/v4 v4.9.0 h1:a4HXLwueuTCtgF93VpUsl8Zd2nG1VH2SgNWDPVEBg5U= github.com/go-faker/faker/v4 v4.9.0/go.mod h1:u1dIRP5neLB6kTzgyVjdBOV5R1uP7BdxkcWk7tiKQXk= github.com/go-gl/gl v0.0.0-20260331235117-4566fea9a276 h1:IO5P06Pcj9K04d+l4nrf3c2U56+dAotIFG6u4P1wAHI= github.com/go-gl/gl v0.0.0-20260331235117-4566fea9a276/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20260406072232-3ac4aa2bb164 h1:ddtotcEXIT7dFhSeXIWjK8YMFYl5bB2NdYQwgv6Uqjk= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20260406072232-3ac4aa2bb164/go.mod h1:SyRD8YfuKk+ZXlDqYiqe1qMSqjNgtHzBTG810KUagMc= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20260707082822-2a407d02d01a h1:hSqNjNllNZUIiqXiS7zFJFqqPa4VPqrzMcWws1dz/VE= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20260707082822-2a407d02d01a/go.mod h1:SyRD8YfuKk+ZXlDqYiqe1qMSqjNgtHzBTG810KUagMc= github.com/go-gl/glfw/v3.4/glfw v0.1.0-pre.1.0.20260707082822-2a407d02d01a h1:HWK0MBggT/T6YH7VffE10xBIhqeTq8JzIUPJXrRy87g= github.com/go-gl/glfw/v3.4/glfw v0.1.0-pre.1.0.20260707082822-2a407d02d01a/go.mod h1:T5Dn0JwIJOX1euPZ/iT4tq6nFYtmukjcYa7937HuYK8= github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= @@ -179,24 +139,14 @@ github.com/go-text/typesetting-utils v0.0.0-20260223113751-2d88ac90dae3 h1:drBZz github.com/go-text/typesetting-utils v0.0.0-20260223113751-2d88ac90dae3/go.mod h1:3/62I4La/HBRX9TcTpBj4eipLiwzf+vhI+7whTc9V7o= github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ= github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c= -github.com/gofiber/contrib/v3/websocket v1.2.0 h1:wjkzC3exbhRL3cPCVLRYN3MFq3yhMvtBeGwqEYQk+yc= -github.com/gofiber/contrib/v3/websocket v1.2.0/go.mod h1:fpqdn3mVAKAKfSOt8yHXhO70bZ1mz6z6NhY87CjM3k8= github.com/gofiber/contrib/v3/websocket v1.2.1 h1:E4I1dVCvNF56ELdKksUJilo1r7dpw7lgt1DmsJd7hOo= github.com/gofiber/contrib/v3/websocket v1.2.1/go.mod h1:rQO2z0SbC/l8lP36gXTKrD1QZBXzHKwt9E8c5em1IiA= -github.com/gofiber/fiber/v2 v2.52.13 h1:TOKP64iqC9b5P49VrBW5tHhUOvDyrtJ0xePEfzJbCbk= -github.com/gofiber/fiber/v2 v2.52.13/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= github.com/gofiber/fiber/v2 v2.52.14 h1:Of3L+9qVFaQNwPlcmEdl5IIodHz8BSE0j37R7rWu4pE= github.com/gofiber/fiber/v2 v2.52.14/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= -github.com/gofiber/fiber/v3 v3.3.0 h1:QBd3sYCqdy6Qs5gJYzSw4I4SbqL204jPqpdub/ueiw8= -github.com/gofiber/fiber/v3 v3.3.0/go.mod h1:YH7/TAoRaU4kF8slDCtQuFJ1NzC+3MtxUI4KfvQtaIA= github.com/gofiber/fiber/v3 v3.4.0 h1:F0aND4vwZF7dR7cbvSwFQQEpBU902XHKWxrLsFBkVqw= github.com/gofiber/fiber/v3 v3.4.0/go.mod h1:nAhJfdxUIJJph2tPWPmqWf8QDIN2iiqQiQf3lENZpdk= -github.com/gofiber/schema v1.8.0 h1:NGsC9toPHmj8Xg4KpznuXBzNmHG6V5YV0tXKpKMcmis= -github.com/gofiber/schema v1.8.0/go.mod h1:lmbXPQ8hvzXSLkdS2DS7pb4kpunC2Roh7Sj3HMjGfzA= github.com/gofiber/schema v1.8.2 h1:wq+LO2xEGlsqma/8Akp9PUebQ6vcsYmF0xYQ4F2ijvU= github.com/gofiber/schema v1.8.2/go.mod h1:iyAMJztdyky7Pk2U7bwUP3EHjzMqUNjZ/hglE0nYO/g= -github.com/gofiber/utils/v2 v2.1.0 h1:WSu4COJhJw9moNfJu2nQvaM9AFvAQ/nZbigjhHqKgOQ= -github.com/gofiber/utils/v2 v2.1.0/go.mod h1:DdOgEVwQTi8cou/AKWPqhXOR4fHGRVhA/rEWL3IXG7Q= github.com/gofiber/utils/v2 v2.1.2 h1:/rfkCHvC3XWfOHR04c34KajAhbs5QxmF6cNeJKnkEBI= github.com/gofiber/utils/v2 v2.1.2/go.mod h1:DdOgEVwQTi8cou/AKWPqhXOR4fHGRVhA/rEWL3IXG7Q= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= @@ -220,12 +170,8 @@ github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.16 h1:F/VPrx0YPBdksZJQdCAp0WUsqnNmZpUZszzfYt0M5Dw= -github.com/googleapis/enterprise-certificate-proxy v0.3.16/go.mod h1:9Yb0eAkH/Xqhvv3zbeKf/+wMJqCeocWc6KIhDvEAuYE= github.com/googleapis/enterprise-certificate-proxy v0.3.18 h1:hvVi34VucdrV1IIsiWuqYM8kutw/92MxNEFxCJZEh0k= github.com/googleapis/enterprise-certificate-proxy v0.3.18/go.mod h1:rSEsBUemEBZEexP2y6jPp16LUmUbjmSbcPMQizR0o4k= -github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= -github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= github.com/googleapis/gax-go/v2 v2.23.0 h1:Tchl7qkvE7Ip3y+ztvNufYFvkfqTe7NfLTYGIdJRLuE= github.com/googleapis/gax-go/v2 v2.23.0/go.mod h1:rBQKOVJCdb8IFEzg+FCwlt1LP/xMDGuqUXhUG+XMXEg= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= @@ -240,18 +186,12 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jpillora/chisel v1.11.6 h1:wqlbuatAk8pst2GNY7d2F4AnHxMaLVOA2S/SkC7OlEg= -github.com/jpillora/chisel v1.11.6/go.mod h1:gAFVTwDLIMM/dH0w1twfSXz0NQUnBVWrlimi707vk7k= github.com/jpillora/chisel v1.11.8 h1:pf2ufs2kfytmSWkZoeEgSs5pGrn9ODL2UaZRiR/meyk= github.com/jpillora/chisel v1.11.8/go.mod h1:efqW+iikEM4E7CxQSR1LW1oyErlZtWXC/R81C/Fzk2w= github.com/jpillora/sizestr v1.0.0 h1:4tr0FLxs1Mtq3TnsLDV+GYUWG7Q26a6s+tV5Zfw2ygw= github.com/jpillora/sizestr v1.0.0/go.mod h1:bUhLv4ctkknatr6gR42qPxirmd5+ds1u7mzD+MZ33f0= github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25 h1:YLvr1eE6cdCqjOe972w/cYF+FjW34v27+9Vo5106B4M= github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25/go.mod h1:kLgvv7o6UM+0QSf0QjAse3wReFDsb9qbZJdfexWlrQw= -github.com/jupiterrider/ffi v0.7.0 h1:RKsl6Ascal+3kyAqR5Qcbp83LceQMLc1VZbPfHWoNzs= -github.com/jupiterrider/ffi v0.7.0/go.mod h1:9dauhpOfNqrqk28fxuu0kkdeFtT9Qr4vbfigiuIXN7c= -github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= -github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/compress v1.19.0 h1:sXLILfc9jV2QYWkzFOPWStmcUVH2RHEB1JCdY2oVvCQ= github.com/klauspost/compress v1.19.0/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= @@ -270,8 +210,6 @@ github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= github.com/mattn/go-runewidth v0.0.24 h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/ay2DU= github.com/mattn/go-runewidth v0.0.24/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= -github.com/mattn/go-sqlite3 v1.14.45 h1:6KA/spDguL3KV8rnybG7ezSaE4SeMR3KC9VbUoAQaIk= -github.com/mattn/go-sqlite3 v1.14.45/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= github.com/mattn/go-sqlite3 v1.14.48 h1:7XHIgl0a8HwOaiK4E47ozLkST78rR9+OtNGx27D/TFs= github.com/mattn/go-sqlite3 v1.14.48/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= github.com/mdp/qrterminal/v3 v3.2.1 h1:6+yQjiiOsSuXT5n9/m60E54vdgFsw0zhADHhHLrFet4= @@ -282,8 +220,6 @@ github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/nicksnyder/go-i18n/v2 v2.6.1 h1:JDEJraFsQE17Dut9HFDHzCoAWGEQJom5s0TRd17NIEQ= github.com/nicksnyder/go-i18n/v2 v2.6.1/go.mod h1:Vee0/9RD3Quc/NmwEjzzD7VTZ+Ir7QbXocrkhOzmUKA= -github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81 h1:WDsQxOJDy0N1VRAjXLpi8sCEZRSGarLWQevDxpTBRrM= -github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/petermattis/goid v0.0.0-20260713124913-97594f28f5ca h1:GHSUVE4yOgX4E7kTRzpxCPbCOYkd3Kj8Dgdod30OI1E= github.com/petermattis/goid v0.0.0-20260713124913-97594f28f5ca/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM= @@ -296,8 +232,6 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prplecake/go-thumbnail v0.1.6 h1:6mBLXL2/79QHYRCvrciiLtT6vAJfOaMAvNhmjsyLX1c= github.com/prplecake/go-thumbnail v0.1.6/go.mod h1:v8PaF1YrWlJjdkROeoDgDil5nFycVdH7taPOl/NS830= -github.com/redis/go-redis/v9 v9.20.1 h1:sfCU6A8P3dXbKyWes02uxA2baehGux9dZHfEKtsTB1w= -github.com/redis/go-redis/v9 v9.20.1/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA= github.com/redis/go-redis/v9 v9.21.0 h1:FPBE4hhbAke+TLmcY3WkpbDffJEomdqPn3HYiqAtL9E= github.com/redis/go-redis/v9 v9.21.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= @@ -316,8 +250,6 @@ github.com/shamaton/msgpack/v3 v3.1.2 h1:d5gWAIyMU4M0WgDjz6IFSCuXJUA2dFwRHBpDclE github.com/shamaton/msgpack/v3 v3.1.2/go.mod h1:DcQG8jrdrQCIxr3HlMYkiXdMhK+KfN2CitkyzsQV4uc= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= -github.com/spiffe/go-spiffe/v2 v2.7.0 h1:uXe1MflJoHw58wAUvxVlcM7WpKtijWG7I1UidcGh6g4= -github.com/spiffe/go-spiffe/v2 v2.7.0/go.mod h1:47Q0Q9/AqGha8QLHp+kxpH4Wca7X7EnOtlIJy3mxZ3U= github.com/spiffe/go-spiffe/v2 v2.8.1 h1:eXZMLsu+3MLEPJyGJkolqtVrteZfQdUpOWj6LTiDl/E= github.com/spiffe/go-spiffe/v2 v2.8.1/go.mod h1:47Q0Q9/AqGha8QLHp+kxpH4Wca7X7EnOtlIJy3mxZ3U= github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c h1:km8GpoQut05eY3GiYWEedbTT0qnSxrCjsVbb7yKY1KE= @@ -326,20 +258,14 @@ github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqd github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef/go.mod h1:nXTWP6+gD5+LUJ8krVhhoeHjvHTutPxMYl5SvkcnJNE= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/surrealdb/surrealdb.go v1.4.0 h1:c3Tump5z+b1j27M6Puj0By59axd13ME2NFYptHiIdRw= -github.com/surrealdb/surrealdb.go v1.4.0/go.mod h1:ju3vn9OHXde9Ulvc7/fP9I8ylkiapOdBSdrEs2PmTtA= github.com/surrealdb/surrealdb.go v1.6.0 h1:x88b/W0gDQN7FAtHRsBTEcHLr8UBKNV0uo2MjNKR52s= github.com/surrealdb/surrealdb.go v1.6.0/go.mod h1:mKSZxow8ZN2tkR2p/fWzjIbinRFXWOGCOpfIdiYYZzc= github.com/tinylib/msgp v1.6.4 h1:mOwYbyYDLPj35mkA2BjjYejgJk9BuHxDdvRnb6v2ZcQ= github.com/tinylib/msgp v1.6.4/go.mod h1:RSp0LW9oSxFut3KzESt5Voq4GVWyS+PSulT77roAqEA= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.71.0 h1:tepR7H+Guh9VUqxxcPggYi8R3lGUu2Rsdh+z7/FCY3k= -github.com/valyala/fasthttp v1.71.0/go.mod h1:z1sDUvOShhXq/C9mwH/fSm1Vb71tUJwmQdgkBrBNwnA= github.com/valyala/fasthttp v1.72.0 h1:R7kYdoWhn1ye1fVpP+cDHDJwYm3NkwLliwgzJ/Abg7M= github.com/valyala/fasthttp v1.72.0/go.mod h1:zsbLTYqcpIktdQytlVBwIjY9La5d6bs990nBxWg8efk= -github.com/vektah/gqlparser/v2 v2.5.34 h1:MEea5P0qhdcqfBL45ghKE+qr9laidVHTMHjav5h7ckk= -github.com/vektah/gqlparser/v2 v2.5.34/go.mod h1:mFdHLGCio7OGX1fby9ZjTW6FN+qxgmbnBcRIeeScE5s= github.com/vektah/gqlparser/v2 v2.5.36 h1:CN9mKVHgMkc+XftdOWIhb4HEL8wKSYkFAqhf8booa7s= github.com/vektah/gqlparser/v2 v2.5.36/go.mod h1:cAJ9qwVgPaUkWv6Gn8vn0mqOE0Ui5Pn56wNy5396XWo= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= @@ -355,24 +281,16 @@ github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3i github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM= github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yuin/goldmark v1.8.2 h1:kEGpgqJXdgbkhcOgBxkC0X0PmoPG1ZyoZ117rDVp4zE= -github.com/yuin/goldmark v1.8.2/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= github.com/yuin/goldmark v1.8.4 h1:oat/nd3U6NeQqFEL3xpEJq7d7c86NI+DbSNGAs4xnjA= github.com/yuin/goldmark v1.8.4/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs= github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s= go.mau.fi/libsignal v0.2.2 h1:QV+XdzQkm3x3aSG7FcqfGSZuFXz83pRZPBFaPygHbOU= go.mau.fi/libsignal v0.2.2/go.mod h1:CRlIQg2J8uYTfDFvNoO8/KcZjs5cey0vbc6oj/bssY0= -go.mau.fi/util v0.9.9 h1:ujDeXCo07HBor5oQLyO1tHklupmqVmPgasc53d7q/NE= -go.mau.fi/util v0.9.9/go.mod h1:pqt4Vcrt+5gcH/CgrHZg11qSx+b34o6mknGzOEA6waY= go.mau.fi/util v0.9.10 h1:wzvz5iDHyqDXB8vgisD4d3SzucLXNM3iNY+1O1RoHtg= go.mau.fi/util v0.9.10/go.mod h1:YQOxySn+ZE3qSYqNxvyX7Yi3suA8YK17PS6QqBREW7A= -go.mau.fi/whatsmeow v0.0.0-20260611094716-089932318bc2 h1:VIOZFLguau/48pUzwepY8dgIzU2tDkAsRTbVSk1Fhzg= -go.mau.fi/whatsmeow v0.0.0-20260611094716-089932318bc2/go.mod h1:9hto2r5yVE5yyNTRrZErKNSflGBKxIplUVXAD3EJFDE= go.mau.fi/whatsmeow v0.0.0-20260713112832-d8960d9575d2 h1:2J3waQ2Br8Mh3SW5tVuuChLysXKeprGcTonORU51CIo= go.mau.fi/whatsmeow v0.0.0-20260713112832-d8960d9575d2/go.mod h1:9dmNTYZ/1pHjPw/bz+azBsGjAkcrZbqzMrKcvG5bJ8U= -go.mongodb.org/mongo-driver/v2 v2.6.0 h1:b9sJOYrkmt4l8bY43ZenFBcPlhYIjaOfYHLtbB/5qi8= -go.mongodb.org/mongo-driver/v2 v2.6.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= go.mongodb.org/mongo-driver/v2 v2.8.0 h1:CxWDGQYY8QQwNjAl/aq2sfWakdnWZynnqJ9F4DhHbP8= go.mongodb.org/mongo-driver/v2 v2.8.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= @@ -385,9 +303,8 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI= go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.44.0 h1:hqxVTu/GtBF+vJ8d1fzW7fRxZFvgoDjWcxwwCaFDYpU= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.44.0/go.mod h1:z5fVEF4X5v0ESvlJqBrrFlBVoj5EQuefZpzsu7R+x5Q= go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= go.opentelemetry.io/otel/metric/x v0.66.0 h1:YkCrx1zLOChi9ZcZ6euupOcsgzbVlec7D/xoEU1+cTA= @@ -404,33 +321,23 @@ go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= -golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw= golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk= -golang.org/x/exp v0.0.0-20260611194520-c48552f49976 h1:X8Hz2ImujgbmetVuW+w2YkyZChE3cBpZi2P158rTG9M= -golang.org/x/exp v0.0.0-20260611194520-c48552f49976/go.mod h1:vnf4pv9iKZXY58sQE1L86zmNWJ4159e1RkcWiLCkeEY= golang.org/x/exp v0.0.0-20260709172345-9ea1abe57597 h1:qLvzZeaANDgyVOA8pyHCOStGlXn0rseXma+GQjeuv2g= golang.org/x/exp v0.0.0-20260709172345-9ea1abe57597/go.mod h1:EdfpwwqSu+0Li0mzskwHU6FWDV3t9Q+RZDo3QMUtL3Q= golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.42.0 h1:1gSs6ehNWXLbkHBIPcWztk3D/6aIA/8hauiAYtlodVY= -golang.org/x/image v0.42.0/go.mod h1:rrpelvGFt+kLPAjPM4HeWPgrl0FtafueU//e5N0qk/Q= golang.org/x/image v0.44.0 h1:+tDekMZED9+LrtB3G5xzRggpVh9CARjZqROla3R3R+I= golang.org/x/image v0.44.0/go.mod h1:V8K3KE9KKKE+pLpQDOeN18w9oacNSvy1tDOirTu4xtY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= -golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= -golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -438,14 +345,10 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= -golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= -golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0= golang.org/x/term v0.45.0/go.mod h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -453,8 +356,6 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= -golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= @@ -466,27 +367,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.284.0 h1:i+cKTgeQRcRySkP7QTl5PDO7/pAm8EcMFIUMlNbk4Vc= -google.golang.org/api v0.284.0/go.mod h1:AU44fU+XVZOCcd8uLaBIa/ZgzgPf/0qqY3+m7lQaado= google.golang.org/api v0.288.0 h1:glhO/J88obKP5I269W3hB73dvBKrjU56ZfmNlNXpgTU= google.golang.org/api v0.288.0/go.mod h1:lM2kYRzYUCBY91P9h6VF1PYmvhxii3O5hji37qRvIcY= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine/v2 v2.0.6 h1:LvPZLGuchSBslPBp+LAhihBeGSiRh1myRoYK4NtuBIw= google.golang.org/appengine/v2 v2.0.6/go.mod h1:WoEXGoXNfa0mLvaH5sV3ZSGXwVmy8yf7Z1JKf3J3wLI= -google.golang.org/genproto v0.0.0-20260610212136-7ab31c22f7ad h1:cYL1DPJAQr4JMvhfGao0PDXoaf03ifMljAuDyrbMBd0= -google.golang.org/genproto v0.0.0-20260610212136-7ab31c22f7ad/go.mod h1:cVHIikDNAdx8ISZeW+2rYkEMf3xn0GSaBYmVnWXQBUo= google.golang.org/genproto v0.0.0-20260713224248-f5fc221cf8c4 h1:PWVFocb6Y93aqxY7m9ArHu5zQiLkIrXBLr+ajQxRHH0= google.golang.org/genproto v0.0.0-20260713224248-f5fc221cf8c4/go.mod h1:v47/Kzm6KzB/2uGxuDjGww+7Dk7ny/VFIaIw4WxEtu0= -google.golang.org/genproto/googleapis/api v0.0.0-20260610212136-7ab31c22f7ad h1:3iLyITS/sySRwbUKoC7ogfj2Yr1Cjs0pfaRKj5U5HEw= -google.golang.org/genproto/googleapis/api v0.0.0-20260610212136-7ab31c22f7ad/go.mod h1:KdNqO+rCIWgFumrNBSEDlDNrkrQnpkax7Tv1WxNY8V4= google.golang.org/genproto/googleapis/api v0.0.0-20260713224248-f5fc221cf8c4 h1:lI0NbdWVmT6lOJJNDd7vyeTdfxP/7ouCLSJUKNNXa0k= google.golang.org/genproto/googleapis/api v0.0.0-20260713224248-f5fc221cf8c4/go.mod h1:WRrQ7/7N19PypuT0fxLOL5Lq0waoiRri4FbtHDEKrGE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260610212136-7ab31c22f7ad h1:45WmJvIV6C2+O/jjLkPUH+F3aOj/1miDoU2DD0+NWbg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260610212136-7ab31c22f7ad/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/genproto/googleapis/rpc v0.0.0-20260713224248-f5fc221cf8c4 h1:7RtFDizMtT9eZzHzKxifoMGfcDBBy+LYZlgfg24ZmOM= google.golang.org/genproto/googleapis/rpc v0.0.0-20260713224248-f5fc221cf8c4/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= -google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= google.golang.org/grpc v1.82.0 h1:vguDnZUPjE26w09A63VoxZPnvPjB5Riyc0mkXPFmAIU= google.golang.org/grpc v1.82.0/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= diff --git a/release/soham/whatsapp-client.go b/release/soham/whatsapp-client.go index 0381c3c..0be1b06 100644 --- a/release/soham/whatsapp-client.go +++ b/release/soham/whatsapp-client.go @@ -50,6 +50,7 @@ func main() { } else { version = os.Args[1] } + fmt.Printf("Version: %s\n", version) err := os.MkdirAll("build", 0755) if err != nil { panic(err) From ef520ad87c448a750d0ba97cb5823ea240f16122 Mon Sep 17 00:00:00 2001 From: Keyur Shah Date: Tue, 14 Jul 2026 19:22:25 +0530 Subject: [PATCH 15/15] Some What Changes --- servers/soham/whatsapp-client/auto-update/index.go | 1 + servers/soham/whatsapp-client/main.go | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/servers/soham/whatsapp-client/auto-update/index.go b/servers/soham/whatsapp-client/auto-update/index.go index 0c027cf..2fe7422 100644 --- a/servers/soham/whatsapp-client/auto-update/index.go +++ b/servers/soham/whatsapp-client/auto-update/index.go @@ -176,6 +176,7 @@ func CheckAndDownload() string { vdata, _ := json.Marshal(cloud) os.WriteFile(versionFilePath, vdata, 0644) log.Println("Update deployed successfully to base execution folder.") + os.Exit(0) } checkAndRunCalled = true diff --git a/servers/soham/whatsapp-client/main.go b/servers/soham/whatsapp-client/main.go index 051ff9d..3dda1ec 100644 --- a/servers/soham/whatsapp-client/main.go +++ b/servers/soham/whatsapp-client/main.go @@ -3,6 +3,7 @@ package main import ( "errors" "fmt" + "log" "os" "path/filepath" "time" @@ -26,7 +27,7 @@ var version string func main() { soham_whatsapp_client_env.InialiseSohamWhatsappClientEnv() - println(version) + log.Printf("Version File:- %s", version) go func() { os.RemoveAll("./tmp") os.Mkdir("./tmp", 0777)