initial commit
This commit is contained in:
19
internal/Server/routes.go
Normal file
19
internal/Server/routes.go
Normal 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
32
internal/Server/server.go
Normal 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
7
internal/api/api.go
Normal 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
24
internal/config/config.go
Normal 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,
|
||||
},
|
||||
}
|
||||
}
|
||||
47
internal/implementations/MemoryProvider.go
Normal file
47
internal/implementations/MemoryProvider.go
Normal 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")
|
||||
}
|
||||
6
internal/interfaces/IItem.go
Normal file
6
internal/interfaces/IItem.go
Normal file
@@ -0,0 +1,6 @@
|
||||
package interfaces
|
||||
|
||||
type IItem interface {
|
||||
GetId() int
|
||||
GetMessage() string
|
||||
}
|
||||
9
internal/interfaces/IPersistentProvider.go
Normal file
9
internal/interfaces/IPersistentProvider.go
Normal 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
|
||||
}
|
||||
5
internal/interfaces/IUser.go
Normal file
5
internal/interfaces/IUser.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package interfaces
|
||||
|
||||
type IUser interface {
|
||||
GetId() int
|
||||
}
|
||||
Reference in New Issue
Block a user