added importer

This commit is contained in:
2024-06-01 16:43:00 -07:00
parent df4dbfdb1b
commit db57ae4447
6 changed files with 413 additions and 1 deletions

View File

@@ -0,0 +1,87 @@
package store
import (
"strings"
"github.com/rs/zerolog/log"
"gorm.io/gorm"
)
type SiteTag struct {
ID uint `gorm:"primaryKey"`
SiteID string `gorm:"not null"`
Value string `gorm:"not null"`
db *gorm.DB `gorm:"-"`
}
func (SiteTag) TableName() string {
return "site_tags"
}
func (s *Site) AddTag(value string) error {
value = strings.ToLower(value)
if s.HasTag(value) {
log.Debug().Str("tag", value).Msg("tag already exists")
return nil
}
tag := &SiteTag{
SiteID: s.ID,
Value: value,
db: s.db,
}
result := s.db.Create(tag)
if result.Error != nil {
log.Error().Err(result.Error).Msg("unable to add site tag")
return result.Error
}
log.Debug().
Str("siteid", s.ID).
Str("tag", value).
Msg("site tag added")
return nil
}
func (s *Site) DeleteAttribute(value string) error {
value = strings.ToLower(value)
result := s.db.Where("user_id = ? AND value = ?", s.ID, value).Delete(&SiteTag{})
if result.Error != nil {
log.Error().Err(result.Error).Msg("unable to delete site tag")
return result.Error
}
log.Debug().
Str("siteid", s.ID).
Str("tag", value).
Msg("site tag deleted")
return nil
}
func (s *Site) HasTag(value string) bool {
value = strings.ToLower(value)
var count int64
result := s.db.Model(&SiteTag{}).Where("site_id = ? AND value = ?", s.ID, value).Count(&count)
if result.Error != nil {
log.Error().Err(result.Error).Msg("unable to check site tag existence")
return false
}
return count > 0
}
func (s *Site) GetTags() ([]string, error) {
var tags []SiteTag
result := s.db.Where("site_id = ?", s.ID).Find(&tags)
if result.Error != nil {
log.Error().Err(result.Error).Msg("unable to get site tags")
return nil, result.Error
}
var tagValues []string
for _, attr := range tags {
tagValues = append(tagValues, attr.Value)
}
return tagValues, nil
}

51
internal/store/website.go Normal file
View File

@@ -0,0 +1,51 @@
package store
import (
"crypto/rand"
"time"
"github.com/oklog/ulid/v2"
"github.com/rs/zerolog/log"
"gorm.io/gorm"
)
type Site struct {
ID string `gorm:"primaryKey"`
Domain string `gorm:"unique"`
URL string
CreatedAt *time.Time
FirstSeen *time.Time
LastSeen *time.Time
Tags []SiteTag `gorm:"foreignKey:SiteID"`
db *gorm.DB `gorm:"-"`
}
func (Site) TableName() string {
return "sites"
}
func (s *Store) AddSite(url string) (*Site, error) {
ID := ulid.MustNew(ulid.Timestamp(time.Now()), rand.Reader).String()
createdAt := time.Now()
site := &Site{
ID: ID,
URL: url,
CreatedAt: &createdAt,
db: s.db,
}
result := s.db.Create(site)
if result.Error != nil {
log.Error().
Str("siteid", ID).
Err(result.Error).
Msg("unable to insert site into db")
return nil, result.Error
}
log.Debug().
Str("siteid", ID).
Str("url", url).
Msg("site added to db")
return site, nil
}