refactor: streamline object creation in workspace seed task and improve error handling in workspace creation

This commit is contained in:
pablohashescobar
2025-12-08 18:38:35 +05:30
parent f41e121e58
commit 4f02a0cd46
2 changed files with 34 additions and 19 deletions

View File

@@ -75,14 +75,12 @@ class WorkSpaceViewSet(BaseViewSet):
def create(self, request): def create(self, request):
try: try:
(DISABLE_WORKSPACE_CREATION,) = get_configuration_value( (DISABLE_WORKSPACE_CREATION,) = get_configuration_value([
[ {
{ "key": "DISABLE_WORKSPACE_CREATION",
"key": "DISABLE_WORKSPACE_CREATION", "default": os.environ.get("DISABLE_WORKSPACE_CREATION", "0"),
"default": os.environ.get("DISABLE_WORKSPACE_CREATION", "0"), }
} ])
]
)
if DISABLE_WORKSPACE_CREATION == "1": if DISABLE_WORKSPACE_CREATION == "1":
return Response( return Response(

View File

@@ -94,7 +94,7 @@ def create_project_and_member(workspace: Workspace, bot_user: User) -> Dict[int,
project_seed.pop("name", None) project_seed.pop("name", None)
project_seed.pop("identifier", None) project_seed.pop("identifier", None)
project = Project.objects.create( project = Project(
**project_seed, **project_seed,
workspace=workspace, workspace=workspace,
name=workspace.name, # Use workspace name name=workspace.name, # Use workspace name
@@ -105,6 +105,7 @@ def create_project_and_member(workspace: Workspace, bot_user: User) -> Dict[int,
module_view=True, module_view=True,
issue_views_view=True, issue_views_view=True,
) )
project.save(created_by_id=bot_user.id, disable_auto_set_user=True)
# Create project members # Create project members
ProjectMember.objects.bulk_create([ ProjectMember.objects.bulk_create([
@@ -187,13 +188,13 @@ def create_project_states(
state_id = state_seed.pop("id") state_id = state_seed.pop("id")
project_id = state_seed.pop("project_id") project_id = state_seed.pop("project_id")
state = State.objects.create( state = State(
**state_seed, **state_seed,
project_id=project_map[project_id], project_id=project_map[project_id],
workspace=workspace, workspace=workspace,
created_by_id=bot_user.id, created_by_id=bot_user.id,
) )
state.save(created_by_id=bot_user.id, disable_auto_set_user=True)
state_map[state_id] = state.id state_map[state_id] = state.id
logger.info(f"Task: workspace_seed_task -> State {state_id} created") logger.info(f"Task: workspace_seed_task -> State {state_id} created")
return state_map return state_map
@@ -220,12 +221,13 @@ def create_project_labels(
for label_seed in label_seeds: for label_seed in label_seeds:
label_id = label_seed.pop("id") label_id = label_seed.pop("id")
project_id = label_seed.pop("project_id") project_id = label_seed.pop("project_id")
label = Label.objects.create( label = Label(
**label_seed, **label_seed,
project_id=project_map[project_id], project_id=project_map[project_id],
workspace=workspace, workspace=workspace,
created_by_id=bot_user.id, created_by_id=bot_user.id,
) )
label.save(created_by_id=bot_user.id, disable_auto_set_user=True)
label_map[label_id] = label.id label_map[label_id] = label.id
logger.info(f"Task: workspace_seed_task -> Label {label_id} created") logger.info(f"Task: workspace_seed_task -> Label {label_id} created")
@@ -272,13 +274,14 @@ def create_project_issues(
cycle_id = issue_seed.pop("cycle_id") cycle_id = issue_seed.pop("cycle_id")
module_ids = issue_seed.pop("module_ids") module_ids = issue_seed.pop("module_ids")
issue = Issue.objects.create( issue = Issue(
**issue_seed, **issue_seed,
state_id=states_map[state_id], state_id=states_map[state_id],
project_id=project_map[project_id], project_id=project_map[project_id],
workspace=workspace, workspace=workspace,
created_by_id=bot_user.id, created_by_id=bot_user.id,
) )
issue.save(created_by_id=bot_user.id, disable_auto_set_user=True)
IssueSequence.objects.create( IssueSequence.objects.create(
issue=issue, issue=issue,
project_id=project_map[project_id], project_id=project_map[project_id],
@@ -347,7 +350,7 @@ def create_pages(workspace: Workspace, project_map: Dict[int, uuid.UUID], bot_us
for page_seed in page_seeds: for page_seed in page_seeds:
page_id = page_seed.pop("id") page_id = page_seed.pop("id")
page = Page.objects.create( page = Page(
workspace_id=workspace.id, workspace_id=workspace.id,
is_global=False, is_global=False,
access=page_seed.get("access", Page.PUBLIC_ACCESS), access=page_seed.get("access", Page.PUBLIC_ACCESS),
@@ -361,16 +364,18 @@ def create_pages(workspace: Workspace, project_map: Dict[int, uuid.UUID], bot_us
owned_by_id=bot_user.id, owned_by_id=bot_user.id,
) )
page.save(created_by_id=bot_user.id, disable_auto_set_user=True)
logger.info(f"Task: workspace_seed_task -> Page {page_id} created") logger.info(f"Task: workspace_seed_task -> Page {page_id} created")
if page_seed.get("project_id") and page_seed.get("type") == "PROJECT": if page_seed.get("project_id") and page_seed.get("type") == "PROJECT":
ProjectPage.objects.create( project_page = ProjectPage(
workspace_id=workspace.id, workspace_id=workspace.id,
project_id=project_map[page_seed.get("project_id")], project_id=project_map[page_seed.get("project_id")],
page_id=page.id, page_id=page.id,
created_by_id=bot_user.id, created_by_id=bot_user.id,
updated_by_id=bot_user.id, updated_by_id=bot_user.id,
) )
project_page.save(created_by_id=bot_user.id, disable_auto_set_user=True)
logger.info(f"Task: workspace_seed_task -> Project Page {page_id} created") logger.info(f"Task: workspace_seed_task -> Project Page {page_id} created")
return return
@@ -410,7 +415,7 @@ def create_cycles(workspace: Workspace, project_map: Dict[int, uuid.UUID], bot_u
start_date = timezone.now() + timedelta(days=14) start_date = timezone.now() + timedelta(days=14)
end_date = start_date + timedelta(days=14) end_date = start_date + timedelta(days=14)
cycle = Cycle.objects.create( cycle = Cycle(
**cycle_seed, **cycle_seed,
start_date=start_date, start_date=start_date,
end_date=end_date, end_date=end_date,
@@ -419,6 +424,7 @@ def create_cycles(workspace: Workspace, project_map: Dict[int, uuid.UUID], bot_u
created_by_id=bot_user.id, created_by_id=bot_user.id,
owned_by_id=bot_user.id, owned_by_id=bot_user.id,
) )
cycle.save(created_by_id=bot_user.id, disable_auto_set_user=True)
cycle_map[cycle_id] = cycle.id cycle_map[cycle_id] = cycle.id
logger.info(f"Task: workspace_seed_task -> Cycle {cycle_id} created") logger.info(f"Task: workspace_seed_task -> Cycle {cycle_id} created")
@@ -446,7 +452,7 @@ def create_modules(workspace: Workspace, project_map: Dict[int, uuid.UUID], bot_
start_date = timezone.now() + timedelta(days=index * 2) start_date = timezone.now() + timedelta(days=index * 2)
end_date = start_date + timedelta(days=14) end_date = start_date + timedelta(days=14)
module = Module.objects.create( module = Module(
**module_seed, **module_seed,
start_date=start_date, start_date=start_date,
target_date=end_date, target_date=end_date,
@@ -454,6 +460,7 @@ def create_modules(workspace: Workspace, project_map: Dict[int, uuid.UUID], bot_
workspace=workspace, workspace=workspace,
created_by_id=bot_user.id, created_by_id=bot_user.id,
) )
module.save(created_by_id=bot_user.id, disable_auto_set_user=True)
module_map[module_id] = module.id module_map[module_id] = module.id
logger.info(f"Task: workspace_seed_task -> Module {module_id} created") logger.info(f"Task: workspace_seed_task -> Module {module_id} created")
return module_map return module_map
@@ -474,13 +481,15 @@ def create_views(workspace: Workspace, project_map: Dict[int, uuid.UUID], bot_us
for view_seed in view_seeds: for view_seed in view_seeds:
project_id = view_seed.pop("project_id") project_id = view_seed.pop("project_id")
IssueView.objects.create( view_seed.pop("id")
issue_view = IssueView(
**view_seed, **view_seed,
project_id=project_map[project_id], project_id=project_map[project_id],
workspace=workspace, workspace=workspace,
created_by_id=bot_user.id, created_by_id=bot_user.id,
owned_by_id=bot_user.id, owned_by_id=bot_user.id,
) )
issue_view.save(created_by_id=bot_user.id, disable_auto_set_user=True)
@shared_task @shared_task
@@ -514,6 +523,14 @@ def workspace_seed(workspace_id: uuid.UUID) -> None:
is_password_autoset=True, is_password_autoset=True,
) )
# Add bot user to workspace as member
WorkspaceMember.objects.create(
workspace=workspace,
member=bot_user,
role=20,
company_role="",
)
# Create a project with the same name as workspace # Create a project with the same name as workspace
project_map = create_project_and_member(workspace, bot_user) project_map = create_project_and_member(workspace, bot_user)