fixing some stuff
This commit is contained in:
@@ -1,7 +1,54 @@
|
|||||||
package api
|
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) {})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package implementations
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"dymatrix.de/jspahl/todo/internal/interfaces"
|
"dymatrix.de/jspahl/todo/internal/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Item struct {
|
type Item struct {
|
||||||
@@ -12,6 +12,13 @@ type Item struct {
|
|||||||
deleted bool
|
deleted bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (item Item) GetId() int {
|
||||||
|
return item.id
|
||||||
|
}
|
||||||
|
func (item Item) GetMessage() string {
|
||||||
|
return item.message
|
||||||
|
}
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
id int
|
id int
|
||||||
}
|
}
|
||||||
@@ -22,13 +29,14 @@ type MemoryProvider struct {
|
|||||||
itemsByUsers [][]*Item
|
itemsByUsers [][]*Item
|
||||||
}
|
}
|
||||||
|
|
||||||
func (prov MemoryProvider) CreateItem(item interfaces.IItem) error {
|
func (prov MemoryProvider) CreateItem(item types.IItem) error {
|
||||||
storedItem := Item{id: item.GetId(), message: item.GetMessage(), deleted: false}
|
storedItem := Item{id: prov.index, message: item.GetMessage(), deleted: false}
|
||||||
prov.items = append(prov.items, storedItem)
|
prov.items = append(prov.items, storedItem)
|
||||||
|
prov.index++
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (prov MemoryProvider) UpdateItem(item interfaces.IItem) error {
|
func (prov MemoryProvider) UpdateItem(item types.IItem) error {
|
||||||
storedItem, err := prov.GetItemPtr(item.GetId())
|
storedItem, err := prov.GetItemPtr(item.GetId())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -45,3 +53,39 @@ func (prov MemoryProvider) GetItemPtr(id int) (*Item, error) {
|
|||||||
}
|
}
|
||||||
return nil, errors.New("Item not found")
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package server
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"dymatrix.de/jspahl/todo/internal/api"
|
"dymatrix.de/jspahl/todo/internal/api"
|
||||||
|
"dymatrix.de/jspahl/todo/internal/implementations"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,10 +11,11 @@ func registerRoutes(router *gin.Engine) {
|
|||||||
|
|
||||||
memory := router.Group("/memory")
|
memory := router.Group("/memory")
|
||||||
{
|
{
|
||||||
api.RegisterRoutes(memory)
|
memoryProv := implementations.MemoryProvider{}
|
||||||
}
|
api.RegisterRoutes(memory, memoryProv)
|
||||||
sql := router.Group("/sql")
|
|
||||||
{
|
|
||||||
api.RegisterRoutes(sql)
|
|
||||||
}
|
}
|
||||||
|
// sql := router.Group("/sql")
|
||||||
|
// {
|
||||||
|
// api.RegisterRoutes(sql)
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package interfaces
|
package types
|
||||||
|
|
||||||
type IItem interface {
|
type IItem interface {
|
||||||
GetId() int
|
GetId() int
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
package interfaces
|
package types
|
||||||
|
|
||||||
type IPersitenceProvider interface {
|
type IPersitenceProvider interface {
|
||||||
CreateItem(item IItem) error
|
CreateItem(item IItem) error
|
||||||
UpdateItem(item IItem) error
|
UpdateItem(item IItem) error
|
||||||
GetItem(id int) (IItem, error)
|
GetItem(id int) (IItem, error)
|
||||||
GetItemByUser(user IUser) ([]IItem, error)
|
GetItemByUser(user IUser) ([]IItem, error)
|
||||||
|
GetAllItems() ([]IItem, error)
|
||||||
Link(user IUser, item IItem) error
|
Link(user IUser, item IItem) error
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package interfaces
|
package types
|
||||||
|
|
||||||
type IUser interface {
|
type IUser interface {
|
||||||
GetId() int
|
GetId() int
|
||||||
63
main.go
63
main.go
@@ -1,7 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"dymatrix.de/jspahl/todo/internal/server"
|
"dymatrix.de/jspahl/todo/internal/server"
|
||||||
@@ -9,68 +8,6 @@ import (
|
|||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ItemDTO struct {
|
|
||||||
id int
|
|
||||||
message string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (prov MemoryProvider) GetItem(id int) (Item, error) {
|
|
||||||
item, err := prov.GetItemPtr(id)
|
|
||||||
return *item, err
|
|
||||||
|
|
||||||
}
|
|
||||||
func (prov MemoryProvider) GetItemByUser(user User) ([]Item, error) {
|
|
||||||
var items []Item
|
|
||||||
for i := range prov.itemsByUsers[user.id] {
|
|
||||||
items = append(items, *prov.itemsByUsers[user.id][i])
|
|
||||||
}
|
|
||||||
if len(items) == 0 {
|
|
||||||
return items, errors.New("no items for user " + user.toString())
|
|
||||||
}
|
|
||||||
return items, nil
|
|
||||||
}
|
|
||||||
func (prov MemoryProvider) GetAllItems() []Item {
|
|
||||||
var items []Item
|
|
||||||
for _, item := range prov.items {
|
|
||||||
if !item.deleted {
|
|
||||||
items = append(items, item)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return items
|
|
||||||
}
|
|
||||||
|
|
||||||
func (prov MemoryProvider) Link(user User, item Item) error {
|
|
||||||
storedItem, err := prov.GetItemPtr(item.id)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
prov.itemsByUsers[user.id] = append(prov.itemsByUsers[user.id], storedItem)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
//func main() {
|
|
||||||
// var prov = MemoryProvider{}
|
|
||||||
// rItems := router.Group("/item")
|
|
||||||
// {
|
|
||||||
// rItems.GET("/:id", func(c *gin.Context) {
|
|
||||||
// id, err := strconv.Atoi(c.Param("id"))
|
|
||||||
// if err != nil {
|
|
||||||
// c.String(http.StatusNotFound, err.Error())
|
|
||||||
// }
|
|
||||||
// item, err := prov.GetItem(id)
|
|
||||||
// if err != nil {
|
|
||||||
// c.String(http.StatusNotFound, err.Error())
|
|
||||||
// }
|
|
||||||
// c.JSON(http.StatusOK, item.toDto())
|
|
||||||
// })
|
|
||||||
// rItems.POST("/", func(c *gin.Context) {
|
|
||||||
//
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
// router.Run()
|
|
||||||
//
|
|
||||||
//}
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
gin.SetMode(gin.ReleaseMode)
|
gin.SetMode(gin.ReleaseMode)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user