add catalog

This commit is contained in:
Владимир Фёдоров 2024-05-18 12:12:00 +07:00
parent 286048d068
commit be7b5c505e
5 changed files with 74 additions and 28 deletions

View File

@ -1,6 +1,8 @@
package main package main
import ( import (
"cake_crm/internal/app"
"cake_crm/internal/models/storage/storage_file"
crm "cake_crm/proto" crm "cake_crm/proto"
"context" "context"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
@ -11,30 +13,12 @@ import (
"net/http" "net/http"
) )
type server struct {
crm.UnimplementedCRMServer
}
func NewServer() *server {
return &server{}
}
func (s *server) GetCatalog(ctx context.Context, req *crm.GetCatalogReq) (*crm.CatalogRsp, error) {
return nil, nil
}
func main() { func main() {
//ctx, cancel := context.WithCancel(context.Background()) //ctx, cancel := context.WithCancel(context.Background())
//defer cancel() //defer cancel()
//
//storage := storage_file.NewStorageFile("resources/db.json") storage := storage_file.NewStorageFile()
//_ = storage _ = storage
//
//server := server_web.NewServer(storage, 8080)
//err := server.Run(ctx)
//if err != nil {
// panic(err)
//}
// Create a listener on TCP port // Create a listener on TCP port
lis, err := net.Listen("tcp", ":8080") lis, err := net.Listen("tcp", ":8080")
@ -45,7 +29,7 @@ func main() {
// Create a gRPC server object // Create a gRPC server object
s := grpc.NewServer() s := grpc.NewServer()
// Attach the Greeter service to the server // Attach the Greeter service to the server
crm.RegisterCRMServer(s, &server{}) crm.RegisterCRMServer(s, app.NewServer(storage))
// Serve gRPC server // Serve gRPC server
log.Println("Serving gRPC on 0.0.0.0:8080") log.Println("Serving gRPC on 0.0.0.0:8080")
go func() { go func() {

26
internal/app/server.go Normal file
View File

@ -0,0 +1,26 @@
package app
import (
"cake_crm/internal/models/storage"
crm "cake_crm/proto"
"context"
)
type Server struct {
crm.UnimplementedCRMServer
storage storage.IStorage
}
func NewServer(storage storage.IStorage) *Server {
return &Server{
storage: storage,
}
}
func (s *Server) GetCatalog(ctx context.Context, _ *crm.GetCatalogReq) (*crm.CatalogRsp, error) {
categories, err := s.storage.GetCatalog(ctx)
if err != nil {
return nil, err
}
return &crm.CatalogRsp{Categories: categories}, nil
}

View File

@ -1,6 +1,9 @@
package storage package storage
import "context" import (
crm "cake_crm/proto"
"context"
)
type Product struct { type Product struct {
ID int `json:"id"` ID int `json:"id"`
@ -17,4 +20,5 @@ type IStorage interface {
GetAllProducts(ctx context.Context) ([]Product, error) GetAllProducts(ctx context.Context) ([]Product, error)
GetProductByID(ctx context.Context, id int) (Product, error) GetProductByID(ctx context.Context, id int) (Product, error)
GetBreadcrumbs(ctx context.Context, id int) ([]Breadcrumb, error) GetBreadcrumbs(ctx context.Context, id int) ([]Breadcrumb, error)
GetCatalog(ctx context.Context) ([]*crm.CatalogRsp_Category, error)
} }

View File

@ -2,17 +2,28 @@ package storage_file
import ( import (
"cake_crm/internal/models/storage" "cake_crm/internal/models/storage"
crm "cake_crm/proto"
"context" "context"
"encoding/json"
"os"
) )
type storageFile struct { type storageFile struct{}
filepath string
func NewStorageFile() storage.IStorage {
return &storageFile{}
} }
func NewStorageFile(filepath string) storage.IStorage { func (s *storageFile) GetCatalog(_ context.Context) ([]*crm.CatalogRsp_Category, error) {
return &storageFile{ data, err := os.ReadFile("resources/catalog.json")
filepath: filepath, if err != nil {
return nil, err
} }
var res []*crm.CatalogRsp_Category
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return res, nil
} }
func (s *storageFile) GetAllProducts(ctx context.Context) ([]storage.Product, error) { func (s *storageFile) GetAllProducts(ctx context.Context) ([]storage.Product, error) {

21
resources/catalog.json Normal file
View File

@ -0,0 +1,21 @@
[
{
"id": 0,
"name": "Главная",
"url": "/categories/0",
"children": [
{
"id": 1,
"name": "Пряники",
"url": "/categories/1",
"children": []
},
{
"id": 2,
"name": "Пахлава",
"url": "/categories/2",
"children": []
}
]
}
]