@@ -30,7 +30,14 @@ class BusinessHostSelector: account_privileges: list[str] = [], have_group: bool | None = None, ) -> list[BusinessAccount] | BusinessAccountDataSerializer: - accounts = self.user.host_account.accounts + if self.user.account_type == 'business_host': + host = self.user.host_account + elif self.user.account_type == 'business_admin': + host = self.user.business_account.parent_company + else: + raise Exception(_("You haven't rights to access host account information")) + + accounts = host.accounts if account_privileges: accounts = accounts.filter(account_privileges__in=account_privileges) if have_group is not None: @@ -68,7 +75,12 @@ class BusinessHostSelector: return host def detail(self): - host = self.user.host_account + if self.user.account_type == 'business_host': + host = self.user.host_account + elif self.user.account_type == 'business_admin': + host = self.user.business_account.parent_company + else: + raise Exception(_("You haven't rights to access host account information")) return BusinessHostSerializer( host, context={'worker_amount': host.accounts.count()} ) @@ -176,6 +176,7 @@ class DeleteBusinessAccountSerializer(serializers.Serializer): class BusinessAccountDataSerializer(serializers.Serializer): + uid = serializers.UUIDField(read_only=True) email = serializers.EmailField(source='user.email') account_type = serializers.SerializerMethodField() acceptance_status = serializers.ChoiceField(choices=InvitationStatus.choices) @@ -13,6 +13,8 @@ from backend.public import urlpatterns as public_urlpatterns api = NinjaAPI(title='AIR API', version='1.0.0') api.add_router('copywrite/', 'tools.copywrite.routes.v1.router') api.add_router('users/', 'authentication.routes.v1.router') +api.add_router('chats/', 'tools.chats.routes.v1.router') +api.add_router('media/', 'tools.media.routes.v1.router') @api.exception_handler(ObjectDoesNotExist) @@ -5,6 +5,7 @@ from ninja import ModelSchema from ml_model.models import ( ConfigurationParameter, ModelConfiguration, + NeuronModel, ) @@ -25,3 +26,9 @@ class ModelConfigurationSchema(ModelSchema): class Config: protected_namespaces = () + + +class NeuronModelLink(ModelSchema): + class Meta: + model = NeuronModel + fields = ('title', 'slug') @@ -0,0 +1,19 @@ +from typing import List + +from django.db.models import Count +from ninja import Router + +from authentication.security import SyncAuthBearer +from ml_model.models import NeuronModel +from ml_model.schemas import NeuronModelLink + +router = Router(auth=SyncAuthBearer(), tags=['chats']) + + +@router.get('links/', tags=['chats/links'], response=List[NeuronModelLink]) +def get_links(request): + return ( + NeuronModel.objects.filter(category__slug='chat-bots') + .annotate(inputs_count=Count('model_modelinputs')) + .filter(inputs_count__gt=0) + ) @@ -0,0 +1,19 @@ +from typing import List + +from django.db.models import Count +from ninja import Router + +from authentication.security import SyncAuthBearer +from ml_model.models import NeuronModel +from ml_model.schemas import NeuronModelLink + +router = Router(auth=SyncAuthBearer(), tags=['media']) + + +@router.get('images/links/', tags=['media/images/links'], response=List[NeuronModelLink]) +def get_links(request): + return ( + NeuronModel.objects.filter(category__slug='images') + .annotate(inputs_count=Count('model_modelinputs')) + .filter(inputs_count__gt=0) + )