11from pydantic import BaseModel , ValidationError
2- from fastapi_forge import dtos as m
2+ from fastapi_forge .dtos import (
3+ Model ,
4+ ModelField ,
5+ ModelRelationship ,
6+ ProjectSpec ,
7+ )
8+ from fastapi_forge .enums import FieldDataType
39from fastapi_forge .frontend import notifications as n
410from nicegui import ui
5- import typing as t
11+ from typing import Callable
612
713
814class ProjectState (BaseModel ):
9- models : list [m . Model ] = []
10- selected_model : m . Model | None = None
11- selected_field : m . ModelField | None = None
12- selected_relation : m . ModelRelationship | None = None
15+ models : list [Model ] = []
16+ selected_model : Model | None = None
17+ selected_field : ModelField | None = None
18+ selected_relation : ModelRelationship | None = None
1319
14- render_models_fn : t . Callable | None = None
15- select_model_fn : t . Callable | None = None
20+ render_models_fn : Callable | None = None
21+ select_model_fn : Callable | None = None
1622
1723 project_name : str = ""
1824 use_postgres : bool = False
@@ -21,7 +27,7 @@ class ProjectState(BaseModel):
2127 use_redis : bool = False
2228 use_rabbitmq : bool = False
2329
24- def initialize_from_project (self , project : m . ProjectSpec ) -> None :
30+ def initialize_from_project (self , project : ProjectSpec ) -> None :
2531 """Initialize the state from an existing project specification"""
2632 self .project_name = project .project_name
2733 self .use_postgres = project .use_postgres
@@ -44,24 +50,24 @@ def add_model(self, model_name: str) -> None:
4450 return
4551
4652 try :
47- default_id_field = m . ModelField (
53+ default_id_field = ModelField (
4854 name = "id" ,
49- type = m . FieldDataType .UUID ,
55+ type = FieldDataType .UUID ,
5056 primary_key = True ,
5157 nullable = False ,
5258 unique = True ,
5359 index = True ,
5460 )
5561
56- new_model = m . Model (name = model_name , fields = [default_id_field ])
62+ new_model = Model (name = model_name , fields = [default_id_field ])
5763 self .models .append (new_model )
5864
5965 self .render_models_fn ()
6066
6167 except ValidationError as e :
6268 n .notify_validation_error (e )
6369
64- def delete_model (self , model : m . Model ) -> None :
70+ def delete_model (self , model : Model ) -> None :
6571 if model not in self .models :
6672 ui .notify ("Something went wrong..." , type = "warning" )
6773 return
@@ -71,7 +77,7 @@ def delete_model(self, model: m.Model) -> None:
7177 if self .render_models_fn :
7278 self .render_models_fn ()
7379
74- def update_model_name (self , model : m . Model , new_name : str ) -> None :
80+ def update_model_name (self , model : Model , new_name : str ) -> None :
7581 if any (m .name == new_name for m in self .models if m != model ):
7682 n .notify_model_exists (new_name )
7783 return
@@ -83,27 +89,15 @@ def update_model_name(self, model: m.Model, new_name: str) -> None:
8389 if self .render_models_fn :
8490 self .render_models_fn ()
8591
86- def add_field (self , ** kwargs : t .Any ) -> None :
87- if not self .selected_model :
88- n .notify_something_went_wrong ()
89- return
90-
91- try :
92- field = m .ModelField (** kwargs )
93- print (field )
94- self .selected_model .fields .append (field )
95- except ValidationError as e :
96- n .notify_validation_error (e )
97-
98- def select_model (self , model : m .Model ) -> None :
92+ def select_model (self , model : Model ) -> None :
9993 if self .select_model_fn is None :
10094 n .notify_something_went_wrong ()
10195 return
10296 self .selected_model = model
10397 self .select_model_fn (model )
10498
105- def get_project_spec (self ) -> m . ProjectSpec :
106- return m . ProjectSpec (
99+ def get_project_spec (self ) -> ProjectSpec :
100+ return ProjectSpec (
107101 project_name = self .project_name ,
108102 use_postgres = self .use_postgres ,
109103 use_alembic = self .use_alembic ,
0 commit comments