97 lines
2.6 KiB
Go
97 lines
2.6 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/cloudprint/cloudprint-backend/internal/repository"
|
|
pb "github.com/cloudprint/cloudprint-backend/proto/generated"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
)
|
|
|
|
type PriceServiceServer struct {
|
|
pb.UnimplementedPriceServiceServer
|
|
priceRepo *repository.PriceRepository
|
|
}
|
|
|
|
func NewPriceServiceServer(priceRepo *repository.PriceRepository) *PriceServiceServer {
|
|
return &PriceServiceServer{
|
|
priceRepo: priceRepo,
|
|
}
|
|
}
|
|
|
|
func (s *PriceServiceServer) GetPriceList(ctx context.Context, req *pb.GetPriceListRequest) (*pb.PriceListResponse, error) {
|
|
items, err := s.priceRepo.GetAllActive(ctx)
|
|
if err != nil {
|
|
return nil, status.Errorf(codes.Internal, "get price list failed: %v", err)
|
|
}
|
|
|
|
pbItems := make([]*pb.PriceItem, 0, len(items))
|
|
for _, item := range items {
|
|
pbItems = append(pbItems, &pb.PriceItem{
|
|
Id: item.ID,
|
|
Name: item.Name,
|
|
Type: item.Type,
|
|
Price: item.Price,
|
|
Unit: item.Unit,
|
|
ColorEnabled: item.ColorEnabled,
|
|
IsActive: item.IsActive,
|
|
})
|
|
}
|
|
|
|
return &pb.PriceListResponse{Items: pbItems}, nil
|
|
}
|
|
|
|
func (s *PriceServiceServer) CreatePriceItem(ctx context.Context, req *pb.CreatePriceItemRequest) (*pb.PriceItem, error) {
|
|
item := &model.PriceList{
|
|
Name: req.Name,
|
|
Type: req.Type,
|
|
Price: req.Price,
|
|
Unit: req.Unit,
|
|
ColorEnabled: req.ColorEnabled,
|
|
IsActive: true,
|
|
}
|
|
|
|
if err := s.priceRepo.Create(ctx, item); err != nil {
|
|
return nil, status.Errorf(codes.Internal, "create price item failed: %v", err)
|
|
}
|
|
|
|
return &pb.PriceItem{
|
|
Id: item.ID,
|
|
Name: item.Name,
|
|
Type: item.Type,
|
|
Price: item.Price,
|
|
Unit: item.Unit,
|
|
ColorEnabled: item.ColorEnabled,
|
|
IsActive: item.IsActive,
|
|
}, nil
|
|
}
|
|
|
|
func (s *PriceServiceServer) UpdatePriceItem(ctx context.Context, req *pb.UpdatePriceItemRequest) (*pb.PriceItem, error) {
|
|
item, err := s.priceRepo.GetByID(ctx, req.Id)
|
|
if err != nil || item == nil {
|
|
return nil, status.Errorf(codes.NotFound, "price item not found")
|
|
}
|
|
|
|
item.Name = req.Name
|
|
item.Type = req.Type
|
|
item.Price = req.Price
|
|
item.Unit = req.Unit
|
|
item.ColorEnabled = req.ColorEnabled
|
|
item.IsActive = req.IsActive
|
|
|
|
if err := s.priceRepo.Update(ctx, item); err != nil {
|
|
return nil, status.Errorf(codes.Internal, "update price item failed: %v", err)
|
|
}
|
|
|
|
return &pb.PriceItem{
|
|
Id: item.ID,
|
|
Name: item.Name,
|
|
Type: item.Type,
|
|
Price: item.Price,
|
|
Unit: item.Unit,
|
|
ColorEnabled: item.ColorEnabled,
|
|
IsActive: item.IsActive,
|
|
}, nil
|
|
}
|