Browse Source

feature: allow to delete all activities of a user (#1880)

* Allow to delete all activities of a user

* Update changelog
pull/1895/head
Francisco Silva 2 years ago
committed by GitHub
parent
commit
67e758365f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      CHANGELOG.md
  2. 17
      apps/api/src/app/order/order.controller.ts
  3. 8
      apps/api/src/app/order/order.service.ts
  4. 17
      apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
  5. 1
      apps/client/src/app/pages/portfolio/activities/activities-page.html
  6. 4
      apps/client/src/app/services/data.service.ts
  7. 8
      libs/ui/src/lib/activities-table/activities-table.component.html
  8. 5
      libs/ui/src/lib/activities-table/activities-table.component.ts

6
CHANGELOG.md

@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased
### Added
- Introduced a new button to delete all activities from the portfolio activities page
## 1.260.0 - 2023-04-23
### Added

17
apps/api/src/app/order/order.controller.ts

@ -41,6 +41,23 @@ export class OrderController {
@Inject(REQUEST) private readonly request: RequestWithUser
) {}
@Delete()
@UseGuards(AuthGuard('jwt'))
public async deleteOrders(): Promise<number> {
if (
!hasPermission(this.request.user.permissions, permissions.deleteOrder)
) {
throw new HttpException(
getReasonPhrase(StatusCodes.FORBIDDEN),
StatusCodes.FORBIDDEN
);
}
return this.orderService.deleteOrders({
userId: this.request.user.id
});
}
@Delete(':id')
@UseGuards(AuthGuard('jwt'))
public async deleteOrder(@Param('id') id: string): Promise<OrderModel> {

8
apps/api/src/app/order/order.service.ts

@ -181,6 +181,14 @@ export class OrderService {
return order;
}
public async deleteOrders(where: Prisma.OrderWhereInput): Promise<number> {
const { count } = await this.prismaService.order.deleteMany({
where
});
return count;
}
public async getOrders({
filters,
includeDrafts = false,

17
apps/client/src/app/pages/portfolio/activities/activities-page.component.ts

@ -138,6 +138,23 @@ export class ActivitiesPageComponent implements OnDestroy, OnInit {
});
}
public onDeleteAllActivities() {
const confirmation = confirm(
$localize`Do you really want to delete all your activities?`
);
if (confirmation) {
this.dataService
.deleteAllOrders()
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe({
next: () => {
this.fetchActivities();
}
});
}
}
public onExport(activityIds?: string[]) {
this.dataService
.fetchExport(activityIds)

1
apps/client/src/app/pages/portfolio/activities/activities-page.html

@ -13,6 +13,7 @@
(activityDeleted)="onDeleteActivity($event)"
(activityToClone)="onCloneActivity($event)"
(activityToUpdate)="onUpdateActivity($event)"
(deleteAllActivities)="onDeleteAllActivities()"
(export)="onExport($event)"
(exportDrafts)="onExportDrafts($event)"
(import)="onImport()"

4
apps/client/src/app/services/data.service.ts

@ -146,6 +146,10 @@ export class DataService {
return this.http.delete<any>(`/api/v1/account/${aId}`);
}
public deleteAllOrders() {
return this.http.delete<any>(`/api/v1/order/`);
}
public deleteOrder(aId: string) {
return this.http.delete<any>(`/api/v1/order/${aId}`);
}

8
libs/ui/src/lib/activities-table/activities-table.component.html

@ -53,6 +53,14 @@
<ion-icon class="mr-2" name="calendar-clear-outline"></ion-icon>
<span i18n>Export Drafts as ICS</span>
</button>
<button
class="align-items-center d-flex"
mat-menu-item
(click)="onDeleteAllActivities()"
>
<ion-icon class="mr-2" name="trash-outline"></ion-icon>
<span i18n>Delete all Activities</span>
</button>
</mat-menu>
</div>

5
libs/ui/src/lib/activities-table/activities-table.component.ts

@ -49,6 +49,7 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy, OnInit {
@Output() activityDeleted = new EventEmitter<string>();
@Output() activityToClone = new EventEmitter<OrderWithAccount>();
@Output() activityToUpdate = new EventEmitter<OrderWithAccount>();
@Output() deleteAllActivities = new EventEmitter<void>();
@Output() export = new EventEmitter<string[]>();
@Output() exportDrafts = new EventEmitter<string[]>();
@Output() import = new EventEmitter<void>();
@ -231,6 +232,10 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy, OnInit {
);
}
public onDeleteAllActivities() {
this.deleteAllActivities.emit();
}
public onImport() {
this.import.emit();
}

Loading…
Cancel
Save