2424 Organization ,
2525 Sector ,
2626 Tag ,
27+ UseCase ,
2728)
2829from api .schema .extensions import TrackActivity , TrackModelActivity
2930from api .types .type_collaborative import (
3738)
3839from api .types .type_dataset import TypeDataset
3940from api .types .type_organization import TypeOrganization
41+ from api .types .type_usecase import TypeUseCase
4042from api .utils .enums import CollaborativeStatus , OrganizationRelationshipType
4143from api .utils .graphql_telemetry import trace_resolver
4244from authorization .models import User
@@ -453,6 +455,32 @@ def add_dataset_to_collaborative(
453455 collaborative .save ()
454456 return TypeCollaborative .from_django (collaborative )
455457
458+ @strawberry_django .mutation (handle_django_errors = True )
459+ def add_usecase_to_collaborative (
460+ self , info : Info , collaborative_id : str , usecase_id : str
461+ ) -> TypeCollaborative :
462+ """Add a usecase to a collaborative."""
463+ try :
464+ usecase = UseCase .objects .get (id = usecase_id )
465+ except UseCase .DoesNotExist :
466+ raise ValueError (f"UseCase with ID { usecase_id } does not exist." )
467+
468+ try :
469+ collaborative = Collaborative .objects .get (id = collaborative_id )
470+ except Collaborative .DoesNotExist :
471+ raise ValueError (
472+ f"Collaborative with ID { collaborative_id } does not exist."
473+ )
474+
475+ if collaborative .status != CollaborativeStatus .DRAFT :
476+ raise ValueError (
477+ f"Collaborative with ID { collaborative_id } is not in draft status."
478+ )
479+
480+ collaborative .use_cases .add (usecase )
481+ collaborative .save ()
482+ return TypeCollaborative .from_django (collaborative )
483+
456484 @strawberry_django .mutation (handle_django_errors = True )
457485 def remove_dataset_from_collaborative (
458486 self , info : Info , collaborative_id : str , dataset_id : uuid .UUID
@@ -477,6 +505,30 @@ def remove_dataset_from_collaborative(
477505 collaborative .save ()
478506 return TypeCollaborative .from_django (collaborative )
479507
508+ @strawberry_django .mutation (handle_django_errors = True )
509+ def remove_usecase_from_collaborative (
510+ self , info : Info , collaborative_id : str , usecase_id : str
511+ ) -> TypeCollaborative :
512+ """Remove a usecase from a collaborative."""
513+ try :
514+ usecase = UseCase .objects .get (id = usecase_id )
515+ except UseCase .DoesNotExist :
516+ raise ValueError (f"UseCase with ID { usecase_id } does not exist." )
517+ try :
518+ collaborative = Collaborative .objects .get (id = collaborative_id )
519+ except Collaborative .DoesNotExist :
520+ raise ValueError (
521+ f"Collaborative with ID { collaborative_id } does not exist."
522+ )
523+
524+ if collaborative .status != CollaborativeStatus .DRAFT :
525+ raise ValueError (
526+ f"Collaborative with ID { collaborative_id } is not in draft status."
527+ )
528+ collaborative .use_cases .remove (usecase )
529+ collaborative .save ()
530+ return TypeCollaborative .from_django (collaborative )
531+
480532 @strawberry_django .mutation (handle_django_errors = True )
481533 @trace_resolver (
482534 name = "update_collaborative_datasets" ,
@@ -501,6 +553,30 @@ def update_collaborative_datasets(
501553 collaborative .save ()
502554 return TypeCollaborative .from_django (collaborative )
503555
556+ @strawberry_django .mutation (handle_django_errors = True )
557+ @trace_resolver (
558+ name = "update_collaborative_use_cases" ,
559+ attributes = {"component" : "collaborative" , "operation" : "mutation" },
560+ )
561+ def update_collaborative_use_cases (
562+ self , info : Info , collaborative_id : str , use_case_ids : List [uuid .UUID ]
563+ ) -> TypeCollaborative :
564+ """Update the use cases of a collaborative."""
565+ try :
566+ use_cases = UseCase .objects .filter (id__in = use_case_ids )
567+ collaborative = Collaborative .objects .get (id = collaborative_id )
568+ except Collaborative .DoesNotExist :
569+ raise ValueError (f"Collaborative with ID { collaborative_id } doesn't exist" )
570+
571+ if collaborative .status != CollaborativeStatus .DRAFT :
572+ raise ValueError (
573+ f"Collaborative with ID { collaborative_id } is not in draft status."
574+ )
575+
576+ collaborative .use_cases .set (use_cases )
577+ collaborative .save ()
578+ return TypeCollaborative .from_django (collaborative )
579+
504580 @strawberry_django .mutation (
505581 handle_django_errors = True ,
506582 extensions = [
0 commit comments