From 22e8290371dc573709e0f127bc27b671ccac1d24 Mon Sep 17 00:00:00 2001 From: Gisle Aune Date: Mon, 11 Apr 2022 16:28:15 +0200 Subject: [PATCH] add some backend code. --- .gitignore | 5 ++--- frontend/.gitignore | 8 ++++++++ go.mod | 3 +++ internal/database/database.go | 37 +++++++++++++++++++++++++++++++++++ internal/models/date.go | 1 + internal/models/item.go | 17 ++++++++++++++++ internal/models/project.go | 15 ++++++++++++++ internal/models/scope.go | 22 +++++++++++++++++++++ internal/models/stat.go | 21 ++++++++++++++++++++ internal/models/status.go | 23 ++++++++++++++++++++++ 10 files changed, 149 insertions(+), 3 deletions(-) create mode 100644 frontend/.gitignore create mode 100644 go.mod create mode 100644 internal/database/database.go create mode 100644 internal/models/date.go create mode 100644 internal/models/item.go create mode 100644 internal/models/project.go create mode 100644 internal/models/scope.go create mode 100644 internal/models/stat.go create mode 100644 internal/models/status.go diff --git a/.gitignore b/.gitignore index f4401a3..5b3d85a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ -.DS_Store -node_modules /build -/.svelte-kit /package .env .env.* !.env.example +.idea +.vscode diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..f4401a3 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..905eb68 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module git.aiterp.net/stufflog3/stufflog3-api + +go 1.17 diff --git a/internal/database/database.go b/internal/database/database.go new file mode 100644 index 0000000..607727a --- /dev/null +++ b/internal/database/database.go @@ -0,0 +1,37 @@ +package database + +import ( + "context" + "git.aiterp.net/stufflog3/stufflog3-api/internal/models" + "time" +) + +type Database interface { + Scopes() ScopeRepository + Stats(scopeID int) StatRepository +} + +type ScopeRepository interface { + Find(ctx context.Context, id int) (*models.Scope, error) + List(ctx context.Context, userID string) ([]models.ScopeEntry, error) + Create(ctx context.Context, scope models.ScopeEntry, owner models.ScopeMember) (*models.Scope, error) + Update(ctx context.Context, scope models.ScopeEntry) error + Delete(ctx context.Context, scope models.Scope) error + UpdateMember(ctx context.Context, scope models.Scope, member models.ScopeMember) (*models.Scope, error) + DeleteMember(ctx context.Context, scope models.Scope, userID string) (*models.Scope, error) +} + +type StatRepository interface { + Find(ctx context.Context, id int) (*models.Stat, error) + List(ctx context.Context) ([]models.Stat, error) + Create(ctx context.Context, stat models.Stat) (*models.Stat, error) + Update(ctx context.Context, stat models.Stat) error + Delete(ctx context.Context, stat models.Stat) error +} + +type ItemRepository interface { + Find(ctx context.Context, id int) (*models.Item, error) + List(ctx context.Context) ([]models.Item, error) + ListAcquired(ctx context.Context, from, to time.Time) ([]models.Item, error) + Create(ctx context.Context, stat models.Stat) (*models.Item, error) +} diff --git a/internal/models/date.go b/internal/models/date.go new file mode 100644 index 0000000..2640e7f --- /dev/null +++ b/internal/models/date.go @@ -0,0 +1 @@ +package models diff --git a/internal/models/item.go b/internal/models/item.go new file mode 100644 index 0000000..3c726b5 --- /dev/null +++ b/internal/models/item.go @@ -0,0 +1,17 @@ +package models + +import "time" + +type Item struct { + ID int + ProjectRequirementID *int + OwnerID string + + Name string + Description string + OwnerName string + CreatedTime time.Time + AcquiredTime *time.Time + ScheduledDate *time.Time + Stats StatProgressEntry[] +} diff --git a/internal/models/project.go b/internal/models/project.go new file mode 100644 index 0000000..0fcb12b --- /dev/null +++ b/internal/models/project.go @@ -0,0 +1,15 @@ +package models + +type ProjectEntry struct { + ID int `json:"id"` + Name string `json:"name"` + Status Status `json:"status"` +} + +type ProjectRequirement struct { + ID int `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + Status Status `json:"status"` + Stats []StatProgressEntry `json:"stats"` +} diff --git a/internal/models/scope.go b/internal/models/scope.go new file mode 100644 index 0000000..5a4941c --- /dev/null +++ b/internal/models/scope.go @@ -0,0 +1,22 @@ +package models + +type ScopeEntry struct { + ID string `json:"id"` + Name string `json:"name"` + Abbreviation string `json:"abbreviation"` +} + +type ScopeMember struct { + ID string `json:"id"` + Name string `json:"name"` + Owner bool `json:"owner"` +} + +type Scope struct { + ScopeEntry + + DisplayName string `json:"displayName"` + Members []ScopeMember `json:"members"` + Projects []ProjectEntry `json:"projects"` + Stat []Stat `json:"stat"` +} diff --git a/internal/models/stat.go b/internal/models/stat.go new file mode 100644 index 0000000..21c0d2c --- /dev/null +++ b/internal/models/stat.go @@ -0,0 +1,21 @@ +package models + +type StatEntry struct { + ID string `json:"id"` + Name string `json:"name"` + Weight float64 `json:"weight"` +} + +type StatProgressEntry struct { + StatEntry + + Acquired int `json:"acquired"` + Required int `json:"required"` +} + +type Stat struct { + StatEntry + + Description string `json:"description"` + AllowedAmounts map[string]int `json:"allowedAmounts"` +} diff --git a/internal/models/status.go b/internal/models/status.go new file mode 100644 index 0000000..066ac47 --- /dev/null +++ b/internal/models/status.go @@ -0,0 +1,23 @@ +package models + +type Status int + +const ( + Blocked Status = 0 + Available Status = 1 + Background Status = 2 + Active Status = 3 + Completed Status = 4 + Failed Status = 5 + Dropped Status = 6 +) + +var StatusLabels = map[Status]string{ + Blocked: "Blocked", + Available: "Available", + Background: "Background", + Active: "Active", + Completed: "Completed", + Failed: "Failed", + Dropped: "Dropped", +}