diff --git a/frontend/src/app/components/home/browse/browse.component.html b/frontend/src/app/components/home/browse/browse.component.html
index d128ea6..2e9268d 100644
--- a/frontend/src/app/components/home/browse/browse.component.html
+++ b/frontend/src/app/components/home/browse/browse.component.html
@@ -16,6 +16,7 @@
[screenWidth]="checkScreenWidth()"
[currentMovie]="currentMovie"
[favoriteMovies]="favoriteMovies"
+ [watchedMovies]="watchedMovies"
(playMovie)="playVideo($event)"
(movieIsUploadedChange)="onMovieIsUploadedChange($event)"
(moviesChange)="onMoviesChange($event)"
diff --git a/frontend/src/app/components/home/browse/hero-banner/hero-banner.component.html b/frontend/src/app/components/home/browse/hero-banner/hero-banner.component.html
index b561043..c3a6f4a 100644
--- a/frontend/src/app/components/home/browse/hero-banner/hero-banner.component.html
+++ b/frontend/src/app/components/home/browse/hero-banner/hero-banner.component.html
@@ -54,7 +54,7 @@
[imgPath]="'play'"
[imgReverse]="true"
[disabled]="!isAnyResolutionUploaded()"
- (click)="playMovieId(playUrl)"
+ (click)="playMovieId(playUrl, currentMovie[0].id)"
>
@if(checkLikeMovies(currentMovie[0].id)) {
diff --git a/frontend/src/app/components/home/browse/hero-banner/hero-banner.component.ts b/frontend/src/app/components/home/browse/hero-banner/hero-banner.component.ts
index 6723b0c..fcbb34d 100644
--- a/frontend/src/app/components/home/browse/hero-banner/hero-banner.component.ts
+++ b/frontend/src/app/components/home/browse/hero-banner/hero-banner.component.ts
@@ -27,6 +27,7 @@ export class HeroBannerComponent implements OnChanges {
@Input() currentMovie: any[] = [];
@Input() screenWidth: boolean = false;
@Input() favoriteMovies: any[] = [];
+ @Input() watchedMovies: any[] = [];
@Output() playMovie = new EventEmitter();
@Output() movieIsUploadedChange = new EventEmitter<{
[resolution: string]: boolean;
@@ -100,6 +101,22 @@ export class HeroBannerComponent implements OnChanges {
this.favoriteMovieChange.emit(this.favoriteMovies);
}
+ toggleWatchedMovie(movieId: number): void {
+ if (this.watchedMovies.includes(movieId)) {
+ this.watchedMovies = this.watchedMovies.filter((id) => id !== movieId);
+ } else {
+ this.watchedMovies.push(movieId);
+ }
+ this.updateWatchedMovies();
+ }
+
+ updateWatchedMovies() {
+ const body = {
+ watched_videos: this.watchedMovies,
+ };
+ this.userService.updateWatchedMovies(body);
+ }
+
checkLikeMovies(videoId: number) {
return this.favoriteMovies.includes(videoId);
}
@@ -120,7 +137,8 @@ export class HeroBannerComponent implements OnChanges {
this.moviesChange.emit(newMovies);
}
- playMovieId(videoPath: string) {
+ playMovieId(videoPath: string, videoId: number) {
this.playMovie.emit(videoPath);
+ this.toggleWatchedMovie(videoId);
}
}
diff --git a/frontend/src/app/services/user.service.ts b/frontend/src/app/services/user.service.ts
index 5fc14e8..54ff1a2 100644
--- a/frontend/src/app/services/user.service.ts
+++ b/frontend/src/app/services/user.service.ts
@@ -23,6 +23,12 @@ export class UserService {
return lastValueFrom(this.http.put(url, likedMovies, { headers }));
}
+ updateWatchedMovies(watchedMovies: any) {
+ const url = `${environment.baseUrl}/users/watched/${this.currentUserId}/`;
+ const headers = this.getAuthHeaders();
+ return lastValueFrom(this.http.put(url, watchedMovies, { headers }));
+ }
+
private getAuthHeaders(): HttpHeaders {
let authToken = localStorage.getItem('authToken');
if (!authToken) {