feat: base implementation

This commit is contained in:
2025-07-20 13:47:16 +02:00
parent ad082a3f12
commit 7d561ea6ea
21 changed files with 635 additions and 0 deletions

View File

@ -0,0 +1,29 @@
package interfaces
import (
"context"
"git.bissendorf.co/bissendorf/unifood/m/v2/core/interfaces/params"
)
type ResourceCommand[T any] struct {
Name string
Aliases []string
Description string
Verbs []Verb
Handler ResourceHandler
}
type ResourceHandler interface {
GetParametersForVerb(verb Verb) []params.Registration
}
type GetHandler interface {
Get(ctx context.Context, params params.Container) (any, error)
}
type Verb string
const (
VerbGet Verb = "get"
)

7
core/interfaces/http.go Normal file
View File

@ -0,0 +1,7 @@
package interfaces
import "context"
type QueryClient[T any] interface {
Get(ctx context.Context, queryStatement string, selectStatement string, allowCache bool) (*T, error)
}

View File

@ -0,0 +1,56 @@
package params
import "errors"
var (
ErrParamNotFound = errors.New("parameter not found")
)
type Registration struct {
Name string
ShortHand string
Description string
DefaultFunc func() string
ParseFunc ParseFn
}
type ParseFn func(value string) (any, error)
var ParseString ParseFn = func(value string) (any, error) { return value, nil }
type Container struct {
params map[string]Value
}
type Value struct {
value *string
parseFn ParseFn
}
func (c *Container) Register(key string, parseFn ParseFn) *string {
if c.params == nil {
c.params = make(map[string]Value)
}
item, exists := c.params[key]
if exists {
return item.value
}
var str string
value := Value{
parseFn: parseFn,
value: &str,
}
c.params[key] = value
return value.value
}
func (c *Container) GetValue(key string) (any, error) {
item, exists := c.params[key]
if !exists {
return nil, ErrParamNotFound
}
return item.parseFn(*item.value)
}