fixing some stuff

This commit is contained in:
2022-01-23 21:15:01 +01:00
parent ff83f97e08
commit 5632d724f8
8 changed files with 108 additions and 77 deletions

View File

@@ -1,7 +1,54 @@
package api
import "github.com/gin-gonic/gin"
import (
"net/http"
"strconv"
func RegisterRoutes(router *gin.RouterGroup) {
"dymatrix.de/jspahl/todo/internal/types"
"github.com/gin-gonic/gin"
)
type ItemDTO struct {
id int
message string
}
func ItemsToDTOs(items []types.IItem) []ItemDTO {
var itemDtos []ItemDTO
for _, item := range items {
itemDtos = append(itemDtos, ItemDTO{id: item.GetId(), message: item.GetMessage()})
}
return itemDtos
}
func RegisterRoutes(router *gin.RouterGroup, prov types.IPersitenceProvider) {
router.GET("/item", func(c *gin.Context) {
items, err := prov.GetAllItems()
if err != nil {
c.String(http.StatusInternalServerError, err.Error())
return
}
itemDTOs := ItemsToDTOs(items)
c.JSON(http.StatusOK, itemDTOs)
})
router.GET("/item/:id", func(c *gin.Context) {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
c.String(http.StatusBadRequest, err.Error())
return
}
item, err := prov.GetItem(id)
if err != nil {
c.String(http.StatusInternalServerError, err.Error())
return
}
c.JSON(http.StatusOK, item.ToDTO())
})
router.GET("/itemByUser/:id", func(c *gin.Context) {
})
router.POST("/item", func(c *gin.Context) {})
router.PUT("/item", func(c *gin.Context) {})
router.DELETE("/item/:id", func(c *gin.Context) {})
router.GET("/link/:itemId/:userId", func(c *gin.Context) {})
}

View File

@@ -3,7 +3,7 @@ package implementations
import (
"errors"
"dymatrix.de/jspahl/todo/internal/interfaces"
"dymatrix.de/jspahl/todo/internal/types"
)
type Item struct {
@@ -12,6 +12,13 @@ type Item struct {
deleted bool
}
func (item Item) GetId() int {
return item.id
}
func (item Item) GetMessage() string {
return item.message
}
type User struct {
id int
}
@@ -22,13 +29,14 @@ type MemoryProvider struct {
itemsByUsers [][]*Item
}
func (prov MemoryProvider) CreateItem(item interfaces.IItem) error {
storedItem := Item{id: item.GetId(), message: item.GetMessage(), deleted: false}
func (prov MemoryProvider) CreateItem(item types.IItem) error {
storedItem := Item{id: prov.index, message: item.GetMessage(), deleted: false}
prov.items = append(prov.items, storedItem)
prov.index++
return nil
}
func (prov MemoryProvider) UpdateItem(item interfaces.IItem) error {
func (prov MemoryProvider) UpdateItem(item types.IItem) error {
storedItem, err := prov.GetItemPtr(item.GetId())
if err != nil {
return err
@@ -45,3 +53,39 @@ func (prov MemoryProvider) GetItemPtr(id int) (*Item, error) {
}
return nil, errors.New("Item not found")
}
func (prov MemoryProvider) GetItem(id int) (types.IItem, error) {
item, err := prov.GetItemPtr(id)
return *item, err
}
func (prov MemoryProvider) GetItemByUser(user types.IUser) ([]types.IItem, error) {
var items []types.IItem
for i := range prov.itemsByUsers[user.GetId()] {
items = append(items, *prov.itemsByUsers[user.GetId()][i])
}
if len(items) == 0 {
return items, errors.New("no items for user ")
}
return items, nil
}
func (prov MemoryProvider) GetAllItems() ([]types.IItem, error) {
var items []types.IItem
for _, item := range prov.items {
if !item.deleted {
items = append(items, item)
}
}
return items, nil
}
func (prov MemoryProvider) Link(user types.IUser, item types.IItem) error {
storedItem, err := prov.GetItemPtr(item.GetId())
if err != nil {
return err
}
prov.itemsByUsers[user.GetId()] = append(prov.itemsByUsers[user.GetId()], storedItem)
return nil
}

View File

@@ -2,6 +2,7 @@ package server
import (
"dymatrix.de/jspahl/todo/internal/api"
"dymatrix.de/jspahl/todo/internal/implementations"
"github.com/gin-gonic/gin"
)
@@ -10,10 +11,11 @@ func registerRoutes(router *gin.Engine) {
memory := router.Group("/memory")
{
api.RegisterRoutes(memory)
}
sql := router.Group("/sql")
{
api.RegisterRoutes(sql)
memoryProv := implementations.MemoryProvider{}
api.RegisterRoutes(memory, memoryProv)
}
// sql := router.Group("/sql")
// {
// api.RegisterRoutes(sql)
// }
}

View File

@@ -1,4 +1,4 @@
package interfaces
package types
type IItem interface {
GetId() int

View File

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

View File

@@ -1,4 +1,4 @@
package interfaces
package types
type IUser interface {
GetId() int