initial commit

This commit is contained in:
Jasper Levin Spahl
2022-01-21 16:47:06 +01:00
commit 11cefc0d35
11 changed files with 305 additions and 0 deletions

19
internal/Server/routes.go Normal file
View File

@@ -0,0 +1,19 @@
package server
import (
"dymatrix.de/jspahl/todo/internal/api"
"github.com/gin-gonic/gin"
)
func registerRoutes(router *gin.Engine) {
router.RedirectTrailingSlash = true
memory := router.Group("/memory")
{
api.RegisterRoutes(memory)
}
sql := router.Group("/sql")
{
api.RegisterRoutes(sql)
}
}

32
internal/Server/server.go Normal file
View File

@@ -0,0 +1,32 @@
package server
import (
"fmt"
"net/http"
"dymatrix.de/jspahl/todo/internal/config"
"github.com/gin-gonic/gin"
)
var httpServer *http.Server
var httpRouter *gin.Engine
func Setup() {
httpRouter = gin.New()
httpRouter.Use(gin.Logger())
registerRoutes(httpRouter)
}
func ListenAndServe() error {
var err error = nil
for err == nil || err == http.ErrServerClosed {
c := config.GetConfig()
httpServer = &http.Server{
Handler: httpRouter,
Addr: fmt.Sprintf("%s:%d", c.Listen.Host, c.Listen.Port),
}
}
return err
}

7
internal/api/api.go Normal file
View File

@@ -0,0 +1,7 @@
package api
import "github.com/gin-gonic/gin"
func RegisterRoutes(router *gin.RouterGroup) {
}

24
internal/config/config.go Normal file
View File

@@ -0,0 +1,24 @@
package config
type ListenConfig struct {
Host string
Port int
}
type Config struct {
Listen ListenConfig
}
var conf *Config = DefaultConfig()
func GetConfig() *Config {
return conf
}
func DefaultConfig() *Config {
return &Config{
Listen: ListenConfig{
Host: "0.0.0.0",
Port: 8080,
},
}
}

View File

@@ -0,0 +1,47 @@
package implementations
import (
"errors"
"dymatrix.de/jspahl/todo/internal/interfaces"
)
type Item struct {
id int
message string
deleted bool
}
type User struct {
id int
}
type MemoryProvider struct {
index int
items []Item
itemsByUsers [][]*Item
}
func (prov MemoryProvider) CreateItem(item interfaces.IItem) error {
storedItem := Item{id: item.GetId(), message: item.GetMessage(), deleted: false}
prov.items = append(prov.items, storedItem)
return nil
}
func (prov MemoryProvider) UpdateItem(item interfaces.IItem) error {
storedItem, err := prov.GetItemPtr(item.GetId())
if err != nil {
return err
}
storedItem.message = item.GetMessage()
return nil
}
func (prov MemoryProvider) GetItemPtr(id int) (*Item, error) {
for i, item := range prov.items {
if item.id == id && !item.deleted {
return &prov.items[i], nil
}
}
return nil, errors.New("Item not found")
}

View File

@@ -0,0 +1,6 @@
package interfaces
type IItem interface {
GetId() int
GetMessage() string
}

View File

@@ -0,0 +1,9 @@
package interfaces
type IPersitenceProvider interface {
CreateItem(item IItem) error
UpdateItem(item IItem) error
GetItem(id int) (IItem, error)
GetItemByUser(user IUser) ([]IItem, error)
Link(user IUser, item IItem) error
}

View File

@@ -0,0 +1,5 @@
package interfaces
type IUser interface {
GetId() int
}