From 893bc438f8b79476451b05d325b41ca47a8fb68d Mon Sep 17 00:00:00 2001
From: raiper34
Date: Sun, 14 Jul 2024 00:20:41 +0200
Subject: [PATCH] delete functionality
---
src/backend/src/playlist/playlist.controller.ts | 7 ++++++-
src/backend/src/playlist/playlist.service.ts | 1 +
src/backend/src/track/track.controller.ts | 7 ++++++-
src/backend/src/track/track.entity.ts | 2 +-
src/backend/src/track/track.service.ts | 1 +
.../playlist-box/playlist-box.component.html | 5 +++--
.../playlist-box/playlist-box.component.scss | 8 ++++++++
.../playlist-box/playlist-box.component.ts | 14 +++++++++-----
.../track-list/track-list.component.html | 1 +
.../track-list/track-list.component.scss | 8 ++++++++
.../components/track-list/track-list.component.ts | 6 ++++--
src/frontend/src/app/services/playlist.service.ts | 12 +++++++++---
src/frontend/src/app/services/track.service.ts | 9 +++++++--
13 files changed, 64 insertions(+), 17 deletions(-)
diff --git a/src/backend/src/playlist/playlist.controller.ts b/src/backend/src/playlist/playlist.controller.ts
index 971637f..15e6f3f 100644
--- a/src/backend/src/playlist/playlist.controller.ts
+++ b/src/backend/src/playlist/playlist.controller.ts
@@ -1,4 +1,4 @@
-import {Body, Controller, Get, Post} from '@nestjs/common';
+import {Body, Controller, Delete, Get, Param, Post} from '@nestjs/common';
import {PlaylistService} from "./playlist.service";
import {PlaylistModel} from "./playlist.model";
@@ -19,4 +19,9 @@ export class PlaylistController {
async create(@Body() playlist: PlaylistModel): Promise {
await this.service.create(playlist);
}
+
+ @Delete(':id')
+ remove(@Param('id') id: number): Promise {
+ return this.service.remove(id);
+ }
}
\ No newline at end of file
diff --git a/src/backend/src/playlist/playlist.service.ts b/src/backend/src/playlist/playlist.service.ts
index ec25252..d6d1be7 100644
--- a/src/backend/src/playlist/playlist.service.ts
+++ b/src/backend/src/playlist/playlist.service.ts
@@ -30,6 +30,7 @@ export class PlaylistService {
async remove(id: number): Promise {
await this.repository.delete(id);
+ this.io.emit('playlistDelete', {id});
}
async create(playlist: PlaylistEntity): Promise {
diff --git a/src/backend/src/track/track.controller.ts b/src/backend/src/track/track.controller.ts
index 993b88a..1d00858 100644
--- a/src/backend/src/track/track.controller.ts
+++ b/src/backend/src/track/track.controller.ts
@@ -1,4 +1,4 @@
-import {Controller, Get, Param, Res, StreamableFile} from '@nestjs/common';
+import {Controller, Delete, Get, Param, Res, StreamableFile} from '@nestjs/common';
import {TrackService} from "./track.service";
import {TrackModel} from "./track.model";
import {createReadStream} from "fs";
@@ -30,4 +30,9 @@ export class TrackController {
res.set({'Content-Disposition': `attachment; filename="${track.artist} - ${track.song}.mp3"`,});
return new StreamableFile(file);
}
+
+ @Delete(':id')
+ remove(@Param('id') id: number): Promise {
+ return this.service.remove(id);
+ }
}
\ No newline at end of file
diff --git a/src/backend/src/track/track.entity.ts b/src/backend/src/track/track.entity.ts
index a92a66b..7664c60 100644
--- a/src/backend/src/track/track.entity.ts
+++ b/src/backend/src/track/track.entity.ts
@@ -29,6 +29,6 @@ export class TrackEntity {
@Column({default: Date.now()})
createdAt?: number;
- @ManyToOne(() => PlaylistEntity, playlist => playlist.tracks)
+ @ManyToOne(() => PlaylistEntity, playlist => playlist.tracks, {onDelete: "CASCADE"})
playlist?: PlaylistEntity;
}
\ No newline at end of file
diff --git a/src/backend/src/track/track.service.ts b/src/backend/src/track/track.service.ts
index c7a2f13..e946f1e 100644
--- a/src/backend/src/track/track.service.ts
+++ b/src/backend/src/track/track.service.ts
@@ -40,6 +40,7 @@ export class TrackService {
async remove(id: number): Promise {
await this.repository.delete(id);
+ this.io.emit('trackDelete', {id});
}
async create(track: TrackEntity, playlist?: PlaylistEntity): Promise {
diff --git a/src/frontend/src/app/components/playlist-box/playlist-box.component.html b/src/frontend/src/app/components/playlist-box/playlist-box.component.html
index 4142e38..63a5a86 100644
--- a/src/frontend/src/app/components/playlist-box/playlist-box.component.html
+++ b/src/frontend/src/app/components/playlist-box/playlist-box.component.html
@@ -15,8 +15,9 @@
-
- {{trackCompletedCount$ | async}}/{{trackCount$ | async}}
+
+
+ {{trackCompletedCount$ | async}}/{{trackCount$ | async}}
diff --git a/src/frontend/src/app/components/playlist-box/playlist-box.component.scss b/src/frontend/src/app/components/playlist-box/playlist-box.component.scss
index 58891b6..5a005c9 100644
--- a/src/frontend/src/app/components/playlist-box/playlist-box.component.scss
+++ b/src/frontend/src/app/components/playlist-box/playlist-box.component.scss
@@ -1,6 +1,14 @@
+.hover-icon {
+ display: none;
+}
+
.panel-heading {
padding: 5px 10px;
border-radius: 10px;
+
+ &:hover .hover-icon {
+ display: inline;
+ }
}
.panel {
diff --git a/src/frontend/src/app/components/playlist-box/playlist-box.component.ts b/src/frontend/src/app/components/playlist-box/playlist-box.component.ts
index 8ac6789..36c6b01 100644
--- a/src/frontend/src/app/components/playlist-box/playlist-box.component.ts
+++ b/src/frontend/src/app/components/playlist-box/playlist-box.component.ts
@@ -29,9 +29,9 @@ export class PlaylistBoxComponent {
@Input() set playlist(val: Playlist & PlaylistUi) {
this._playlist = val;
- this.trackCount$ = this.playlistService.getTrackCount(val.id);
- this.trackCompletedCount$ = this.playlistService.getCompletedTrackCount(val.id);
- this.statusClass$ = this.playlistService.getStatus$(val.id).pipe(
+ this.trackCount$ = this.service.getTrackCount(val.id);
+ this.trackCompletedCount$ = this.service.getCompletedTrackCount(val.id);
+ this.statusClass$ = this.service.getStatus$(val.id).pipe(
map(status => STATUS2CLASS[status])
);
}
@@ -43,10 +43,14 @@ export class PlaylistBoxComponent {
trackCompletedCount$!: Observable;
statusClass$!: Observable;
- constructor(private readonly playlistService: PlaylistService) { }
+ constructor(private readonly service: PlaylistService) { }
toggleCollapse(playlistId: number): void {
- this.playlistService.toggleCollapsed(playlistId);
+ this.service.toggleCollapsed(playlistId);
+ }
+
+ delete(id: number): void {
+ this.service.delete(id);
}
}
diff --git a/src/frontend/src/app/components/track-list/track-list.component.html b/src/frontend/src/app/components/track-list/track-list.component.html
index bc9297a..57151ac 100644
--- a/src/frontend/src/app/components/track-list/track-list.component.html
+++ b/src/frontend/src/app/components/track-list/track-list.component.html
@@ -20,6 +20,7 @@
+
New
Searching
diff --git a/src/frontend/src/app/components/track-list/track-list.component.scss b/src/frontend/src/app/components/track-list/track-list.component.scss
index aabde9b..345a702 100644
--- a/src/frontend/src/app/components/track-list/track-list.component.scss
+++ b/src/frontend/src/app/components/track-list/track-list.component.scss
@@ -1,3 +1,11 @@
+.hover-icon {
+ display: none;
+}
+
.panel-block {
padding: 5px 10px;
+
+ &:hover .hover-icon {
+ display: inline;
+ }
}
diff --git a/src/frontend/src/app/components/track-list/track-list.component.ts b/src/frontend/src/app/components/track-list/track-list.component.ts
index a72d189..3b87eaf 100644
--- a/src/frontend/src/app/components/track-list/track-list.component.ts
+++ b/src/frontend/src/app/components/track-list/track-list.component.ts
@@ -13,7 +13,6 @@ import {Observable} from "rxjs";
export class TrackListComponent {
@Input() set playlistId(value: number) {
- console.log(value);
this.tracks$ = this.service.getAllByPlaylist(value);
}
tracks$!: Observable