11import logging
22from datetime import datetime , timezone
3-
43import grpc
54import proto .stock_pb2 as stock_pb2
65import proto .stock_pb2_grpc as stock_pb2_grpc
7-
86from usecase .base import AbstractStockUsecase
9- from domain .stock import CreateStock , ActionType , ACTION_MAP
7+ from domain .stock import CreateStock
8+ from domain .enum import ActionType , ACTION_MAP , StockType , STOCK_MAP
109
1110
1211class StockService (stock_pb2_grpc .StockService ):
@@ -15,13 +14,13 @@ def __init__(self, stock_usecase: AbstractStockUsecase):
1514
1615 def Create (self , request , context ):
1716 try :
18- self ._validate_create_request (request )
1917 stock = CreateStock (
2018 user_id = request .user_id ,
2119 symbol = request .symbol ,
2220 price = request .price ,
2321 quantity = request .quantity ,
2422 action_type = self ._map_action_type (request .action ),
23+ stock_type = self ._map_stock_type (request .stock_type ),
2524 created_at = datetime .now (timezone .utc ),
2625 )
2726
@@ -64,15 +63,10 @@ def _map_action_type(self, action: int) -> ActionType:
6463 raise ValueError (f"Invalid action type: { action } . Must be 1 (BUY), 2 (SELL), or 3 (TRANSFER)." )
6564 return ACTION_MAP [action ]
6665
67- def _validate_create_request (self , request ):
68- if not request .user_id or request .user_id <= 0 :
69- raise ValueError ("user_id must be non-empty and greater than 0" )
70- if not request .symbol or request .symbol .strip () == "" :
71- raise ValueError ("symbol must be a non-empty string" )
72- if request .price <= 0 :
73- raise ValueError ("price must be greater than 0" )
74- if request .quantity <= 0 :
75- raise ValueError ("quantity must be greater than 0" )
66+ def _map_stock_type (self , stock_type : int ) -> StockType :
67+ if stock_type not in STOCK_MAP :
68+ raise ValueError (f"Invalid stock type: { stock_type } . Must be 1 (STOCKS), 2 (ETF)." )
69+ return STOCK_MAP [stock_type ]
7670
7771 def _convert_to_proto_stock_list (self , stock_list ):
7872 return [
@@ -83,6 +77,7 @@ def _convert_to_proto_stock_list(self, stock_list):
8377 price = stock .price ,
8478 quantity = stock .quantity ,
8579 action = stock .action_type .value ,
80+ stock_type = stock .stock_type .value ,
8681 created_at = stock .created_at ,
8782 updated_at = stock .updated_at ,
8883 )
0 commit comments