summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-09-11 10:57:16 +0300
committerPaul Buetow <paul@buetow.org>2024-09-11 10:57:16 +0300
commit10c2843d8092bbf31e67f564806081c476060d7c (patch)
tree5462efc8afbce4720ad5069e183e777b759ca2af /internal/server
parent720c2905d4696e0154f2a0c34c3a32f64a3a75a9 (diff)
initial pending
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/repository/pending.go24
-rw-r--r--internal/server/repository/pending_test.go28
-rw-r--r--internal/server/repository/repository.go3
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{},