added importer
This commit is contained in:
87
internal/store/site_tag.go
Normal file
87
internal/store/site_tag.go
Normal 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
51
internal/store/website.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user