You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
3.1 KiB
64 lines
3.1 KiB
package database
|
|
|
|
import (
|
|
"context"
|
|
"git.aiterp.net/stufflog3/stufflog3-api/internal/models"
|
|
"time"
|
|
)
|
|
|
|
type Database interface {
|
|
Scopes() ScopeRepository
|
|
Stats(scopeID int) StatRepository
|
|
Items(scopeID int) ItemRepository
|
|
Projects(scopeID int) ProjectRepository
|
|
ItemsMultiScope(scopeIDs []int) ItemMultiScopeRepository
|
|
}
|
|
|
|
type ScopeRepository interface {
|
|
Find(ctx context.Context, id int, full bool) (*models.Scope, error)
|
|
List(ctx context.Context) ([]models.ScopeEntry, error)
|
|
ListByUser(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, update models.StatUpdate) (*models.Stat, error)
|
|
Delete(ctx context.Context, stat models.Stat) error
|
|
}
|
|
|
|
type ItemRepository interface {
|
|
Find(ctx context.Context, id int) (*models.Item, error)
|
|
ListCreated(ctx context.Context, from, to time.Time) ([]models.Item, error)
|
|
ListAcquired(ctx context.Context, from, to time.Time) ([]models.Item, error)
|
|
ListScheduled(ctx context.Context, from, to models.Date) ([]models.Item, error)
|
|
ListLoose(ctx context.Context, from, to time.Time) ([]models.Item, error)
|
|
Create(ctx context.Context, item models.Item) (*models.Item, error)
|
|
Update(ctx context.Context, item models.Item, update models.ItemUpdate) (*models.Item, error)
|
|
Delete(ctx context.Context, item models.Item) error
|
|
}
|
|
|
|
type ItemMultiScopeRepository interface {
|
|
ListCreated(ctx context.Context, from, to time.Time) ([]models.Item, error)
|
|
ListAcquired(ctx context.Context, from, to time.Time) ([]models.Item, error)
|
|
ListScheduled(ctx context.Context, from, to models.Date) ([]models.Item, error)
|
|
ListLoose(ctx context.Context, from, to time.Time) ([]models.Item, error)
|
|
}
|
|
|
|
type ProjectRepository interface {
|
|
Find(ctx context.Context, id int) (*models.Project, error)
|
|
List(ctx context.Context) ([]models.ProjectEntry, error)
|
|
Create(ctx context.Context, project models.Project) (*models.Project, error)
|
|
Update(ctx context.Context, project models.Project, update models.ProjectUpdate) (*models.Project, error)
|
|
Delete(ctx context.Context, project models.ProjectEntry, deleteItems bool) error
|
|
|
|
AddRequirement(ctx context.Context, project models.ProjectEntry, requirement models.ProjectRequirement) (*models.Project, error)
|
|
UpdateRequirement(ctx context.Context, project models.ProjectEntry, requirement models.ProjectRequirement, update models.ProjectRequirementUpdate) (*models.Project, error)
|
|
DeleteRequirement(ctx context.Context, project models.ProjectEntry, requirement models.ProjectRequirement, deleteItems bool) (*models.Project, error)
|
|
}
|