feat: delete & archive projects
This commit is contained in:
@@ -246,7 +246,7 @@ class Postgres(DatabaseBase, Database):
|
||||
async def get_project(
|
||||
self, workspace_id: uuid.UUID, project_id: uuid.UUID | None = None, channel_id: uuid.UUID | None = None
|
||||
) -> domain.Project | None:
|
||||
query = domain.Project.filter(workspace_id=workspace_id).prefetch_related('channel')
|
||||
query = domain.Project.filter(workspace_id=workspace_id, deleted_at__isnull=True).prefetch_related('channel')
|
||||
if project_id:
|
||||
query = query.filter(id=project_id)
|
||||
if channel_id:
|
||||
@@ -274,17 +274,39 @@ class Postgres(DatabaseBase, Database):
|
||||
await project.save()
|
||||
|
||||
async def get_workspace_projects(
|
||||
self, workspace_id: uuid.UUID, allowed_project_ids: set[uuid.UUID] | None = None
|
||||
self,
|
||||
workspace_id: uuid.UUID,
|
||||
allowed_project_ids: set[uuid.UUID] | None = None,
|
||||
include_archived: bool = False,
|
||||
) -> list[domain.Project]:
|
||||
query = domain.Project.filter(workspace_id=workspace_id).prefetch_related('channel')
|
||||
query = domain.Project.filter(workspace_id=workspace_id, deleted_at__isnull=True).prefetch_related('channel')
|
||||
|
||||
if allowed_project_ids is not None:
|
||||
if not allowed_project_ids:
|
||||
return []
|
||||
query = query.filter(id__in=list(allowed_project_ids))
|
||||
|
||||
if not include_archived:
|
||||
query = query.filter(status=domain.ProjectStatus.ACTIVE)
|
||||
|
||||
return await query.order_by('created_at').all()
|
||||
|
||||
async def archive_project(self, workspace_id: uuid.UUID, project_id: uuid.UUID) -> None:
|
||||
project = await domain.Project.get_or_none(id=project_id, workspace_id=workspace_id)
|
||||
if not project:
|
||||
raise domain.ProjectNotFound()
|
||||
project.status = domain.ProjectStatus.ARCHIVED
|
||||
await project.save()
|
||||
|
||||
async def delete_project(self, workspace_id: uuid.UUID, project_id: uuid.UUID) -> None:
|
||||
project = await domain.Project.get_or_none(id=project_id, workspace_id=workspace_id)
|
||||
if not project:
|
||||
raise domain.ProjectNotFound()
|
||||
import datetime
|
||||
|
||||
project.deleted_at = datetime.datetime.now()
|
||||
await project.save()
|
||||
|
||||
async def get_active_purchase(self, project_id: uuid.UUID, creative_id: uuid.UUID) -> domain.Purchase | None:
|
||||
return await domain.Purchase.get_or_none(
|
||||
project_id=project_id, creative_id=creative_id, status=domain.PurchaseStatus.ACTIVE
|
||||
|
||||
Reference in New Issue
Block a user