From e9ed91503c1577ed054fd3023ca98b1db0d2ab61 Mon Sep 17 00:00:00 2001 From: Zhbert Date: Sat, 30 Nov 2024 22:03:24 +0300 Subject: [PATCH] Updates --- cmd/collect/collect.go | 3 ++- cmd/config/config.go | 3 ++- cmd/convert/convert.go | 3 ++- cmd/load/load.go | 3 ++- cmd/root/root.go | 19 ++++++++++--------- cmd/version/version.go | 3 +-- cmd/view/view.go | 3 ++- internal/db_service/habr_sqlite.go | 26 +++++++++++++------------- main.go | 18 +++++++++++++++++- 9 files changed, 51 insertions(+), 30 deletions(-) diff --git a/cmd/collect/collect.go b/cmd/collect/collect.go index 52e7ec2..eb81cbc 100644 --- a/cmd/collect/collect.go +++ b/cmd/collect/collect.go @@ -27,6 +27,7 @@ import ( "colligendis/internal/db_service" "colligendis/internal/latex_service" "github.com/spf13/cobra" + "gorm.io/gorm" "log" "strconv" "time" @@ -37,7 +38,7 @@ const ( "First, you need to load statistics into the database using the load command." ) -func GetCollectCommand(flags *common.ColligendisFlags, tmpls []structs.TemplateStruct) *cobra.Command { +func GetCollectCommand(flags *common.ColligendisFlags, tmpls []structs.TemplateStruct, db *gorm.DB) *cobra.Command { var cmd = &cobra.Command{ Use: "collect", Short: "Сollect statistics from loaded sources.", diff --git a/cmd/config/config.go b/cmd/config/config.go index ec3ac83..9452c66 100644 --- a/cmd/config/config.go +++ b/cmd/config/config.go @@ -25,9 +25,10 @@ import ( "colligendis/cmd/common" "fmt" "github.com/spf13/cobra" + "gorm.io/gorm" ) -func GetConfigCommand(flags *common.ColligendisFlags) *cobra.Command { +func GetConfigCommand(flags *common.ColligendisFlags, db *gorm.DB) *cobra.Command { var cmd = &cobra.Command{ Use: "config", Short: "Various utility settings", diff --git a/cmd/convert/convert.go b/cmd/convert/convert.go index 93cd960..a52775a 100644 --- a/cmd/convert/convert.go +++ b/cmd/convert/convert.go @@ -6,12 +6,13 @@ import ( "colligendis/internal/common/structs" "fmt" "github.com/spf13/cobra" + "gorm.io/gorm" "log" "os" "path/filepath" ) -func GetConvertCommand(flags *common.ColligendisFlags, tmpls []structs.TemplateStruct) *cobra.Command { +func GetConvertCommand(flags *common.ColligendisFlags, tmpls []structs.TemplateStruct, db *gorm.DB) *cobra.Command { var cmd = &cobra.Command{ Use: "convert", Short: "Command for automatic conversion of CSV files", diff --git a/cmd/load/load.go b/cmd/load/load.go index c2fab0e..2408849 100644 --- a/cmd/load/load.go +++ b/cmd/load/load.go @@ -26,6 +26,7 @@ import ( "colligendis/internal/db_service" "fmt" "github.com/spf13/cobra" + "gorm.io/gorm" "io/fs" "log" "os" @@ -34,7 +35,7 @@ import ( "time" ) -func GetLoadCommand(flags *common.ColligendisFlags) *cobra.Command { +func GetLoadCommand(flags *common.ColligendisFlags, db *gorm.DB) *cobra.Command { var cmd = &cobra.Command{ Use: "load", Short: "Load statistics from sources", diff --git a/cmd/root/root.go b/cmd/root/root.go index f990d2b..cd52242 100644 --- a/cmd/root/root.go +++ b/cmd/root/root.go @@ -30,32 +30,33 @@ import ( "colligendis/cmd/version" "colligendis/cmd/view" "colligendis/internal/common/structs" + "gorm.io/gorm" "os" "github.com/spf13/cobra" ) -func Execute(tmpls []structs.TemplateStruct) { +func Execute(tmpls []structs.TemplateStruct, db *gorm.DB) { var flags common.ColligendisFlags - rootCmd := createRootCommand(&flags, tmpls) + rootCmd := createRootCommand(&flags, tmpls, db) err := rootCmd.Execute() if err != nil { os.Exit(1) } } -func createRootCommand(flags *common.ColligendisFlags, tmpls []structs.TemplateStruct) *cobra.Command { +func createRootCommand(flags *common.ColligendisFlags, tmpls []structs.TemplateStruct, db *gorm.DB) *cobra.Command { var cmd = &cobra.Command{ Use: "colligendis", Short: "Statistics management application", Long: `A command-line utility for obtaining various statistics and reports on it.`, } - cmd.AddCommand(collect.GetCollectCommand(flags, tmpls)) - cmd.AddCommand(load.GetLoadCommand(flags)) - cmd.AddCommand(config.GetConfigCommand(flags)) - cmd.AddCommand(view.GetViewCommand(flags)) - cmd.AddCommand(version.GetVersionCommand(flags)) - cmd.AddCommand(convert.GetConvertCommand(flags, tmpls)) + cmd.AddCommand(collect.GetCollectCommand(flags, tmpls, db)) + cmd.AddCommand(load.GetLoadCommand(flags, db)) + cmd.AddCommand(config.GetConfigCommand(flags, db)) + cmd.AddCommand(view.GetViewCommand(flags, db)) + cmd.AddCommand(version.GetVersionCommand()) + cmd.AddCommand(convert.GetConvertCommand(flags, tmpls, db)) cmd.PersistentFlags().BoolVarP(&flags.ViewMode, "verbose", "v", false, "Show the full report of the commands") cmd.PersistentFlags().BoolVarP(&flags.DryRun, "dry-run", "", false, "Start command without real generation") diff --git a/cmd/version/version.go b/cmd/version/version.go index ea5bb21..26c4e79 100644 --- a/cmd/version/version.go +++ b/cmd/version/version.go @@ -1,7 +1,6 @@ package version import ( - "colligendis/cmd/common" "fmt" "github.com/spf13/cobra" ) @@ -10,7 +9,7 @@ var ( Version = "dev" ) -func GetVersionCommand(flags *common.ColligendisFlags) *cobra.Command { +func GetVersionCommand() *cobra.Command { var cmd = &cobra.Command{ Use: "version", Short: "Displaying version of utility", diff --git a/cmd/view/view.go b/cmd/view/view.go index 732c4e8..ecf2d66 100644 --- a/cmd/view/view.go +++ b/cmd/view/view.go @@ -25,10 +25,11 @@ import ( "colligendis/cmd/common" "fmt" "github.com/spf13/cobra" + "gorm.io/gorm" "log" ) -func GetViewCommand(flags *common.ColligendisFlags) *cobra.Command { +func GetViewCommand(flags *common.ColligendisFlags, db *gorm.DB) *cobra.Command { var cmd = &cobra.Command{ Use: "view", Short: "Displaying various information in the terminal", diff --git a/internal/db_service/habr_sqlite.go b/internal/db_service/habr_sqlite.go index 555d351..235a921 100644 --- a/internal/db_service/habr_sqlite.go +++ b/internal/db_service/habr_sqlite.go @@ -43,7 +43,7 @@ import ( func SaveToDB(articles []structs.HabrArticle, dateOfStats time.Time, flags *common.ColligendisFlags) bool { createDBIfNotExists() db, err := gorm.Open(sqlite.Open("colligendis.db"), - &gorm.Config{Logger: logger.Default.LogMode(getLogger())}) + &gorm.Config{Logger: logger.Default.LogMode(GetLogger())}) if err != nil { log.Fatal("Error opening db!") } else { @@ -140,7 +140,7 @@ func getAuthorByID(id uint) domain.HabrAuthor { var author domain.HabrAuthor db, err := gorm.Open(sqlite.Open("colligendis.db"), - &gorm.Config{Logger: logger.Default.LogMode(getLogger())}) + &gorm.Config{Logger: logger.Default.LogMode(GetLogger())}) if err != nil { log.Fatal("Error opening db!") } else { @@ -184,7 +184,7 @@ func createHubsIfNotExists(db *gorm.DB, hubs []string, flags *common.Colligendis func GetAllHabrArticles(sort string) []domain.HabrArticle { var articles []domain.HabrArticle db, err := gorm.Open(sqlite.Open("colligendis.db"), - &gorm.Config{Logger: logger.Default.LogMode(getLogger())}) + &gorm.Config{Logger: logger.Default.LogMode(GetLogger())}) if err != nil { log.Fatal("Error opening db!") } else { @@ -214,7 +214,7 @@ func GetHabrArticlesCount() int64 { var count int64 db, err := gorm.Open(sqlite.Open("colligendis.db"), - &gorm.Config{Logger: logger.Default.LogMode(getLogger())}) + &gorm.Config{Logger: logger.Default.LogMode(GetLogger())}) if err != nil { log.Fatal("Error opening db!") } else { @@ -228,7 +228,7 @@ func GetAllHabrAutors(sort string) []domain.HabrAuthor { var authors []domain.HabrAuthor db, err := gorm.Open(sqlite.Open("colligendis.db"), - &gorm.Config{Logger: logger.Default.LogMode(getLogger())}) + &gorm.Config{Logger: logger.Default.LogMode(GetLogger())}) if err != nil { log.Fatal("Error opening db!") } else { @@ -251,7 +251,7 @@ func GetAllHabrAutors(sort string) []domain.HabrAuthor { func GetCountOfArticlesByAuthor(authorID uint) int { db, err := gorm.Open(sqlite.Open("colligendis.db"), - &gorm.Config{Logger: logger.Default.LogMode(getLogger())}) + &gorm.Config{Logger: logger.Default.LogMode(GetLogger())}) if err != nil { log.Fatal("Error opening db!") } else { @@ -265,7 +265,7 @@ func GetCountOfArticlesByAuthor(authorID uint) int { return 0 } -func getLogger() logger.LogLevel { +func GetLogger() logger.LogLevel { return logger.Silent } @@ -273,7 +273,7 @@ func GetLatestArticles() []domain.HabrStats { var stats []domain.HabrStats db, err := gorm.Open(sqlite.Open("colligendis.db"), - &gorm.Config{Logger: logger.Default.LogMode(getLogger())}) + &gorm.Config{Logger: logger.Default.LogMode(GetLogger())}) if err != nil { log.Fatal("Error opening db!") } else { @@ -288,7 +288,7 @@ func GetLatestStatsFromArticle(articleID uint, sinceDate time.Time) ([]domain.Ha state := false db, err := gorm.Open(sqlite.Open("colligendis.db"), - &gorm.Config{Logger: logger.Default.LogMode(getLogger())}) + &gorm.Config{Logger: logger.Default.LogMode(GetLogger())}) if err != nil { log.Fatal("Error opening db!") } else { @@ -345,7 +345,7 @@ func GetTwoLatestStats() ([]domain.HabrStats, bool) { state := false db, err := gorm.Open(sqlite.Open("colligendis.db"), - &gorm.Config{Logger: logger.Default.LogMode(getLogger())}) + &gorm.Config{Logger: logger.Default.LogMode(GetLogger())}) if err != nil { log.Fatal("Error opening db!") } else { @@ -438,7 +438,7 @@ func getCountOfAuthorArticles(id uint) int64 { var count int64 db, err := gorm.Open(sqlite.Open("colligendis.db"), - &gorm.Config{Logger: logger.Default.LogMode(getLogger())}) + &gorm.Config{Logger: logger.Default.LogMode(GetLogger())}) if err != nil { log.Fatal("Error opening db!") } else { @@ -451,7 +451,7 @@ func GetCountOfStats() int64 { var count int64 db, err := gorm.Open(sqlite.Open("colligendis.db"), - &gorm.Config{Logger: logger.Default.LogMode(getLogger())}) + &gorm.Config{Logger: logger.Default.LogMode(GetLogger())}) if err != nil { log.Fatal("Error opening db!") } else { @@ -467,7 +467,7 @@ func GetAllDatesOfStats() ([]string, []time.Time) { var timeDates []time.Time db, err := gorm.Open(sqlite.Open("colligendis.db"), - &gorm.Config{Logger: logger.Default.LogMode(getLogger())}) + &gorm.Config{Logger: logger.Default.LogMode(GetLogger())}) if err != nil { log.Fatal("Error opening db!") } else { diff --git a/main.go b/main.go index de96262..623b956 100644 --- a/main.go +++ b/main.go @@ -6,7 +6,12 @@ package main import ( "colligendis/cmd/root" "colligendis/internal/common/structs" + "colligendis/internal/db_service" _ "embed" + "gorm.io/driver/sqlite" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "log" ) //go:embed templates/tex/preamble @@ -37,5 +42,16 @@ func main() { convertScriptStruct.Data = convertScript tmpls = append(tmpls, convertScriptStruct) - root.Execute(tmpls) + db, err := gorm.Open(sqlite.Open("colligendis.db"), + &gorm.Config{Logger: logger.Default.LogMode(db_service.GetLogger())}) + if err != nil { + log.Fatal("Error opening db!\n") + } + + defer func() { + dbInstance, _ := db.DB() + _ = dbInstance.Close() + }() + + root.Execute(tmpls, db) }