diff options
| author | Paul Buetow <paul@buetow.org> | 2024-09-11 10:57:16 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-09-11 10:57:16 +0300 |
| commit | 10c2843d8092bbf31e67f564806081c476060d7c (patch) | |
| tree | 5462efc8afbce4720ad5069e183e777b759ca2af /internal/server | |
| parent | 720c2905d4696e0154f2a0c34c3a32f64a3a75a9 (diff) | |
initial pending
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/repository/pending.go | 24 | ||||
| -rw-r--r-- | internal/server/repository/pending_test.go | 28 | ||||
| -rw-r--r-- | internal/server/repository/repository.go | 3 |
3 files changed, 55 insertions, 0 deletions
diff --git a/internal/server/repository/pending.go b/internal/server/repository/pending.go new file mode 100644 index 0000000..10c9f1b --- /dev/null +++ b/internal/server/repository/pending.go @@ -0,0 +1,24 @@ +package repository + +import "codeberg.org/snonux/gos/internal/types" + +type pendingEntries []types.EntryID + +// Keep track of pending entries per social platform +type pending struct { + platforms map[types.PlatformName]pendingEntries +} + +func newPending() pending { + return pending{platforms: make(map[types.PlatformName]pendingEntries)} +} + +func (p pending) add(platform types.PlatformName, id types.EntryID) { + pe, _ := p.get(platform) + p.platforms[platform] = append(pe, id) +} + +func (p pending) get(platform types.PlatformName) (pendingEntries, bool) { + pe, ok := p.platforms[platform] + return pe, ok +} diff --git a/internal/server/repository/pending_test.go b/internal/server/repository/pending_test.go new file mode 100644 index 0000000..9f9ca84 --- /dev/null +++ b/internal/server/repository/pending_test.go @@ -0,0 +1,28 @@ +package repository + +import "testing" + +func TestPendingAdd(t *testing.T) { + pending := newPending() + + entries, ok := pending.get("LinkedIn") + if ok { + t.Error("expected no ok return status") + } + if len(entries) != 0 { + t.Error("expected no entries") + } + + // TODO REFACTOR: Use constants for types.PlatformName's + // TODO REFACTOR: Don't use a type alias for types.PlatformName anymore, but an own type. + pending.add("LinkedIn", "foo") + pending.add("LinkedIn", "bar") + + entries, ok = pending.get("LinkedIn") + if !ok { + t.Error("expected ok return status") + } + if len(entries) != 2 { + t.Error("expected two entries") + } +} diff --git a/internal/server/repository/repository.go b/internal/server/repository/repository.go index a86f3b8..42f0b32 100644 --- a/internal/server/repository/repository.go +++ b/internal/server/repository/repository.go @@ -32,7 +32,9 @@ type entryPair struct { ID, Checksum string } +// Holds all entries in the database / stores them to the disks.. type Repository struct { + pending conf server.ServerConfig entries map[types.EntryID]types.Entry mu *sync.Mutex @@ -52,6 +54,7 @@ func Instance(conf server.ServerConfig) Repository { func newRepository(conf server.ServerConfig, fs fs) Repository { var loaded bool return Repository{ + pending: newPending(), conf: conf, entries: make(map[types.EntryID]types.Entry), mu: &sync.Mutex{}, |
