Moew weork done
This commit is contained in:
parent
814316ab1e
commit
07d98d1ef5
10 changed files with 147 additions and 16 deletions
|
@ -1,11 +1,19 @@
|
|||
package storage
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/rs/zerolog/log"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// Note represents an ActivityPub note
|
||||
// ActivityPub notes can be quite a few things, depending on fields provided.
|
||||
// A survey, a reply, a quote of another note, etc
|
||||
// And depending on the origin server of a note, they are treated differently
|
||||
// with for example rendering or available actions
|
||||
// This struct attempts to contain all information necessary for easily working with a note
|
||||
type Note struct {
|
||||
ID string `gorm:"primarykey"` // Make ID a string (uuid) for other implementations
|
||||
CreatedAt time.Time // When this entry was created
|
||||
|
@ -31,23 +39,85 @@ type Note struct {
|
|||
}
|
||||
|
||||
func (s *Storage) FindNoteById(id string) (*Note, error) {
|
||||
// TODO: Implement me
|
||||
panic("not implemented")
|
||||
note := &Note{}
|
||||
cacheNote, err := s.cacheNoteIdToData(id)
|
||||
switch err {
|
||||
case nil:
|
||||
return cacheNote, nil
|
||||
// Empty case, not found in cache means check db
|
||||
case errCacheNotFound:
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
switch err {
|
||||
|
||||
}
|
||||
err = s.db.Find(note, id).Error
|
||||
switch err {
|
||||
case nil:
|
||||
if err = s.cache.Set(cacheNoteIdToNotePrefix+id, note); err != nil {
|
||||
log.Warn().Err(err).Str("note-id", id).Msg("Failed to place note in cache")
|
||||
}
|
||||
return note, nil
|
||||
case gorm.ErrRecordNotFound:
|
||||
return nil, ErrEntryNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Storage) FindNotesByFuzzyContent(fuzzyContent string) ([]Note, error) {
|
||||
// TODO: Implement me
|
||||
panic("not implemented")
|
||||
notes := []Note{}
|
||||
// TODO: Figure out if cache can be used here too
|
||||
err := s.db.Where("raw_content LIKE %?%", fuzzyContent).Find(notes).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return notes, nil
|
||||
}
|
||||
|
||||
func (s *Storage) FindNotesByAuthorHandle(handle string) ([]Note, error) {
|
||||
// TODO: Implement me
|
||||
panic("not implemented")
|
||||
acc, err := s.FindAccountByFullHandle(handle)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("account with handle %s not found: %w", handle, err)
|
||||
}
|
||||
return s.FindNotesByAuthorId(acc.ID)
|
||||
}
|
||||
|
||||
func (s *Storage) FindNotesByAuthorId(id string) ([]Note, error) {
|
||||
// TODO: Implement me
|
||||
notes := []Note{}
|
||||
err := s.db.Where("creator = ?", id).Find(notes).Error
|
||||
switch err {
|
||||
case nil:
|
||||
return notes, nil
|
||||
case gorm.ErrRecordNotFound:
|
||||
return nil, ErrEntryNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Storage) UpdateNote(note *Note) error {
|
||||
if note == nil || note.ID == "" {
|
||||
return ErrInvalidData
|
||||
}
|
||||
err := s.db.Save(note).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = s.cache.Set(cacheNoteIdToNotePrefix+note.ID, note)
|
||||
if err != nil {
|
||||
log.Warn().Err(err).Msg("Failed to update note into cache. Cache and db might be out of sync, a force sync is recommended")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Storage) CreateNote() (*Note, error) {
|
||||
// TODO: Think of good arguments and implement me
|
||||
panic("not implemented")
|
||||
}
|
||||
|
||||
// Update, create, delete
|
||||
func (s *Storage) DeleteNote(id string) {
|
||||
s.cache.Delete(cacheNoteIdToNotePrefix + id)
|
||||
s.db.Delete(Note{ID: id})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue