diff options
| author | Physcik <mynameisgennadiy@vk.com> | 2025-12-26 20:08:28 +0500 |
|---|---|---|
| committer | Physcik <mynameisgennadiy@vk.com> | 2025-12-26 20:08:28 +0500 |
| commit | fb2adbb65087252c0fd0392c8fa8f0218bffa22b (patch) | |
| tree | 609f9b0604179d29613735e76d70df30357315d8 /src/Index/Connection.go | |
| parent | 424c95749a12b57caeba7c3ecd5034daacf5a651 (diff) | |
Articles idnexing
Diffstat (limited to 'src/Index/Connection.go')
| -rw-r--r-- | src/Index/Connection.go | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/Index/Connection.go b/src/Index/Connection.go new file mode 100644 index 0000000..d4523b2 --- /dev/null +++ b/src/Index/Connection.go @@ -0,0 +1,89 @@ +package index + +import ( + "database/sql" + "fmt" + "log/slog" + _ "github.com/mattn/go-sqlite3" + + settings "physick.ru/Settings" +) + +var db *sql.DB = nil + +type Article struct { + Id int + DisplayName string + FileName string + URL string + + Tags []Tag +} + +type Tag struct { + Id int + Name string +} + +func EstablistDBConnection() { + var database, err = sql.Open("sqlite3", settings.Current.IndexDB) + if err != nil { + panic(fmt.Sprintf("Failed to start a server: DB connection failed (%s)", err.Error())) + } + db = database +} + +func GetAllArticles() ([]Article, error) { + var rows, sqlErr = db.Query("SELECT Id, DisplayName, FileName, URL FROM Articles;") + if sqlErr != nil { + return []Article{}, sqlErr + } + var outp = make([]Article, 0) + for rows.Next() { + var new = Article{} + rows.Scan(&new.Id, &new.DisplayName, &new.FileName, &new.URL) + var tagsErr = new.FillTags() + if tagsErr != nil { + slog.Warn("Failed to parse article flags", slog.Any("Error", tagsErr)) + } + outp = append(outp, new) + } + return outp, nil +} + +func (base *Article) FillTags() error { + var rows, sqlErr = db.Query(`SELECT Tags.Id, Tags.Name + FROM ArticlesToTags LEFT JOIN Tags ON Tags.Id = ArticlesToTags.TagId + WHERE ArticlesToTags.ArticleId = ?;`, base.Id) + if sqlErr != nil { + return sqlErr + } + var outp = make([]Tag, 0) + for rows.Next() { + var new = Tag{} + var err = rows.Scan(&new.Id, &new.Name) + if err != nil { + slog.Warn("Failed to parse a tag descriptor from the table", slog.Any("Error", err)) + } + outp = append(outp, new) + } + base.Tags = outp + return nil +} + +func GetArticleByName(URL string) (Article, error) { + var rows, sqlErr = db.Query("SELECT Id, DisplayName, FileName, URL FROM Articles WHERE URL = ?;", URL) + if sqlErr != nil { + return Article{}, sqlErr + } + var new = Article{} + for rows.Next() { + rows.Scan(&new.Id, &new.DisplayName, &new.FileName, &new.URL) + var tagsErr = new.FillTags() + if tagsErr != nil { + slog.Error("Failed to parse article flags", slog.Any("Error", tagsErr)) + } + } + return new, nil + +} |
