This commit is contained in:
@@ -1,40 +1,12 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"git.eeqj.de/sneak/feta/instance"
|
||||
"github.com/google/uuid"
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/rs/zerolog/log"
|
||||
|
||||
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
||||
)
|
||||
|
||||
type APInstance struct {
|
||||
gorm.Model
|
||||
UUID uuid.UUID `gorm:"type:uuid;primary_key;"`
|
||||
ErrorCount uint
|
||||
SuccessCount uint
|
||||
HighestID uint
|
||||
Hostname string `gorm:"type:varchar(100);unique_index"`
|
||||
Identified bool
|
||||
Fetching bool
|
||||
Disabled bool
|
||||
Implementation string
|
||||
NextFetch time.Time
|
||||
NodeInfoURL string
|
||||
ServerVersionString string
|
||||
ServerImplementationString string
|
||||
FSMState string
|
||||
}
|
||||
|
||||
// NB that when you add a model below you must add it to this list!
|
||||
func (m *Manager) doMigrations() {
|
||||
log.Info().Msg("doing database migrations if required")
|
||||
m.db.AutoMigrate(&APInstance{})
|
||||
}
|
||||
|
||||
func (m *Manager) SaveInstance(i *instance.Instance) error {
|
||||
i.Lock()
|
||||
defer i.Unlock()
|
||||
@@ -53,7 +25,7 @@ func (m *Manager) SaveInstance(i *instance.Instance) error {
|
||||
HighestID: i.HighestID,
|
||||
Hostname: i.Hostname,
|
||||
Identified: i.Identified,
|
||||
Implementation: string(i.Implementation),
|
||||
Implementation: i.Implementation,
|
||||
NextFetch: i.NextFetch,
|
||||
NodeInfoURL: i.NodeInfoURL,
|
||||
ServerImplementationString: i.ServerImplementationString,
|
||||
@@ -92,7 +64,29 @@ func (m *Manager) SaveInstance(i *instance.Instance) error {
|
||||
|
||||
func (m *Manager) ListInstances() ([]*instance.Instance, error) {
|
||||
output := make([]*instance.Instance, 0)
|
||||
// FIXME have this produce a list of Instance
|
||||
|
||||
var results []APInstance
|
||||
m.db.Find(&results)
|
||||
|
||||
for _, i := range results {
|
||||
newinst := instance.New(func(x *instance.Instance) {
|
||||
x.UUID = i.UUID
|
||||
x.Disabled = i.Disabled
|
||||
x.ErrorCount = i.ErrorCount
|
||||
x.InitialFSMState = i.FSMState
|
||||
x.Fetching = i.Fetching
|
||||
x.HighestID = i.HighestID
|
||||
x.Hostname = i.Hostname
|
||||
x.Identified = i.Identified
|
||||
x.Implementation = i.Implementation
|
||||
x.NextFetch = i.NextFetch
|
||||
x.NodeInfoURL = i.NodeInfoURL
|
||||
x.ServerImplementationString = i.ServerImplementationString
|
||||
x.ServerVersionString = i.ServerVersionString
|
||||
x.SuccessCount = i.SuccessCount
|
||||
})
|
||||
output = append(output, newinst)
|
||||
}
|
||||
|
||||
return output, nil
|
||||
}
|
||||
49
database/model.go
Normal file
49
database/model.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/rs/zerolog/log"
|
||||
|
||||
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
||||
)
|
||||
|
||||
type StoredToot struct {
|
||||
gorm.Model
|
||||
UUID uuid.UUID `gorm:"type:uuid;primary_key;"`
|
||||
//Original string `sql:"type:text"`
|
||||
Original []byte
|
||||
Hash string `gorm:"unique_index"`
|
||||
ServerCreated time.Time
|
||||
Acct string
|
||||
Content []byte
|
||||
URL string
|
||||
Hostname string
|
||||
}
|
||||
|
||||
type APInstance struct {
|
||||
gorm.Model
|
||||
UUID uuid.UUID `gorm:"type:uuid;primary_key;"`
|
||||
ErrorCount uint
|
||||
SuccessCount uint
|
||||
HighestID uint
|
||||
Hostname string `gorm:"type:varchar(100);unique_index"`
|
||||
Identified bool
|
||||
Fetching bool
|
||||
Disabled bool
|
||||
Implementation string
|
||||
NextFetch time.Time
|
||||
NodeInfoURL string
|
||||
ServerVersionString string
|
||||
ServerImplementationString string
|
||||
FSMState string
|
||||
}
|
||||
|
||||
// NB that when you add a model below you must add it to this list!
|
||||
func (m *Manager) doMigrations() {
|
||||
log.Info().Msg("doing database migrations if required")
|
||||
m.db.AutoMigrate(&APInstance{})
|
||||
m.db.AutoMigrate(&StoredToot{})
|
||||
}
|
||||
47
database/storageconnector.go
Normal file
47
database/storageconnector.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"git.eeqj.de/sneak/feta/toot"
|
||||
|
||||
"github.com/google/uuid"
|
||||
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
||||
)
|
||||
|
||||
func (m *Manager) TootExists(t *toot.Toot) bool {
|
||||
var try StoredToot
|
||||
if m.db.Where("Hash = ?", t.GetHash()).First(&try).RecordNotFound() {
|
||||
return false
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Manager) StoreToot(t *toot.Toot) error {
|
||||
|
||||
nt := new(StoredToot)
|
||||
nt.UUID = uuid.New()
|
||||
nt.ServerCreated = t.Parsed.CreatedAt
|
||||
nt.Original = t.Original
|
||||
// FIXME normalize this, check for @ and append hostname if none
|
||||
nt.Acct = fmt.Sprintf("%s@%s", t.Parsed.Account.Acct, strings.ToLower(t.FromHost))
|
||||
nt.URL = t.Parsed.URL
|
||||
nt.Content = t.Parsed.Content
|
||||
nt.Hostname = strings.ToLower(t.FromHost)
|
||||
nt.Hash = t.GetHash()
|
||||
r := m.db.Create(&nt)
|
||||
//panic(fmt.Sprintf("%+v", t))
|
||||
return r.Error
|
||||
}
|
||||
|
||||
func (m *Manager) StoreToots(tc []*toot.Toot) error {
|
||||
for _, item := range tc {
|
||||
err := m.StoreToot(item)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user