diff --git a/src/app/admin/adList/page-ad-list-admin/page-ad-list-admin.component.html b/src/app/admin/adList/page-ad-list-admin/page-ad-list-admin.component.html index a58f169..459c21e 100644 --- a/src/app/admin/adList/page-ad-list-admin/page-ad-list-admin.component.html +++ b/src/app/admin/adList/page-ad-list-admin/page-ad-list-admin.component.html @@ -97,9 +97,9 @@ Sujets - - {{interest}}, - {{interest}} + + {{objectInterest.interest}}, + {{objectInterest.interest}} diff --git a/src/app/admin/adList/page-ad-list-admin/page-ad-list-admin.component.ts b/src/app/admin/adList/page-ad-list-admin/page-ad-list-admin.component.ts index a98964f..5eec7ff 100644 --- a/src/app/admin/adList/page-ad-list-admin/page-ad-list-admin.component.ts +++ b/src/app/admin/adList/page-ad-list-admin/page-ad-list-admin.component.ts @@ -8,16 +8,14 @@ import {MatTableDataSource} from "@angular/material/table"; import {Advert} from "../../../utils/interfaces/advert"; import {PopupDeleteAdAdminComponent} from "../popup-delete-ad-admin/popup-delete-ad-admin.component"; import {PopupVisualizeImagesAdminComponent} from "../popup-visualize-images-admin/popup-visualize-images-admin.component"; -import {FictitiousAdvertsService} from "../../../utils/services/fictitiousDatas/fictitiousAdverts/fictitious-adverts.service"; import {FormControl} from "@angular/forms"; -import {FictitiousUtilsService} from "../../../utils/services/fictitiousDatas/fictitiousUtils/fictitious-utils.service"; -import {User} from "../../../utils/interfaces/user"; -import {FictitiousUsersService} from "../../../utils/services/fictitiousDatas/fictitiousUsers/fictitious-users.service"; +import {MessageService} from "../../../utils/services/message/message.service"; +import {HttpParams} from "@angular/common/http"; export interface AdvertWithCountViewsAndCompany { - _id: string, + id: string, userId: string, company: string, title: string, @@ -46,7 +44,7 @@ export interface AdvertWithCountViewsAndCompany { export class PageAdListAdminComponent implements AfterViewInit { tabAdvertWithCountViews: AdvertWithCountViewsAndCompany[] = []; - tabAdvertiser: User[]; + tabAdvertiser: any[]; displayedColumns: string[] = [ 'title', 'company', 'interests', 'createdAt', 'updatedAt', 'countViews', 'isVisible', 'actions' ]; dataSource ; @ViewChild(MatSort) sort: MatSort; @@ -61,23 +59,64 @@ export class PageAdListAdminComponent implements AfterViewInit constructor( public themeService: ThemeService, - private fictitiousAdvertsService: FictitiousAdvertsService, - private fictitiousUtilsService: FictitiousUtilsService, - private fictitiousUsersService: FictitiousUsersService, public dialog: MatDialog, - private snackBar: MatSnackBar ) { } + private snackBar: MatSnackBar, + private messageService: MessageService) { } ngAfterViewInit(): void { - // --- FAUX CODE --- - const tabAdvert = this.fictitiousAdvertsService.getTabAdvert(8); - this.allInterests = this.fictitiousUtilsService.getTags(); - this.tabAdvertiser = this.fictitiousUsersService.getTabAdvertiser(3); + // Ask for ads and then for advertiser + let params = new HttpParams(); + params = params.append("isActive", true); + this.messageService + .get("ad/findAll", params) + .subscribe(ret => this.afterReceivingAds(ret), err => this.afterReceivingAds(err) ); - for(let advert of tabAdvert) this.tabAdvertWithCountViews.push(this.advertToAdvertWithCountViewsAndCompany(advert)); - this.dataSource = new MatTableDataSource(); - this.onFilter(); + // Ask for interest + this.messageService + .get("misc/getInterests") + .subscribe(ret => this.afterReceivingInterests(ret), err => this.afterReceivingInterests(err) ); + } + + + afterReceivingAds(retour: any): void + { + if(retour.status !== "success") { + console.log(retour); + } + else { + const tabAdvert = retour.data; + this.messageService + .get("user/findAll") + .subscribe(ret => this.afterReceivingAdvertiser(ret, tabAdvert), err => this.afterReceivingAdvertiser(err, tabAdvert) ); + } + } + + + afterReceivingAdvertiser(retour: any, tabAdvert): void + { + if(retour.status !== "success") { + console.log(retour); + } + else { + this.tabAdvertiser = retour.data.filter(x => x.role.name === "advertiser"); + for(let advert of tabAdvert) this.tabAdvertWithCountViews.push(this.advertToAdvertWithCountViewsAndCompany(advert)); + this.dataSource = new MatTableDataSource(); + this.onFilter(); + } + } + + + afterReceivingInterests(retour: any): void + { + if(retour.status !== "success") { + console.log(retour); + } + else { + this.allInterests = retour.data.map(x => x.interest); + this.allInterests.sort(); + } } @@ -90,19 +129,27 @@ export class PageAdListAdminComponent implements AfterViewInit onVisualizeImages(advert: AdvertWithCountViewsAndCompany) { - const config = { - width: '30%', - height: '90%', - data: { - images: advert.images, - width: 300, - height: 800, - } - }; - this.dialog - .open(PopupVisualizeImagesAdminComponent, config) - .afterClosed() - .subscribe(retour => {}); + if(advert.images.length !== 0) + { + const config = { + width: '30%', + height: '90%', + data: { + images: advert.images, + width: 300, + height: 800, + } + }; + this.dialog + .open(PopupVisualizeImagesAdminComponent, config) + .afterClosed() + .subscribe(retour => {}); + } + else { + const config = { duration: 2000, panelClass: "custom-class" }; + const message = "Cette annonce ne contient aucune image" ; + this.snackBar.open( message, "", config); + } } @@ -122,7 +169,7 @@ export class PageAdListAdminComponent implements AfterViewInit message = "Opération annulée" ; } else { - const index = this.dataSource.data.findIndex( elt => (elt._id === advert._id)); + const index = this.dataSource.data.findIndex( elt => (elt.id === advert.id)); this.dataSource.data.splice(index, 1); this.dataSource.data = this.dataSource.data; this.dataSource = this.dataSource; @@ -187,19 +234,19 @@ export class PageAdListAdminComponent implements AfterViewInit } - advertToAdvertWithCountViewsAndCompany(advert: Advert): AdvertWithCountViewsAndCompany + advertToAdvertWithCountViewsAndCompany(advert): AdvertWithCountViewsAndCompany { let company0 = "company" ; for(let advertiser of this.tabAdvertiser) { - if(advert.userId === advertiser._id) { + if(advert.userId === advertiser.id) { company0 = advertiser.company; break; } } return { - _id: advert._id, + id: advert.id, userId: advert.userId, title: advert.title, company: company0, diff --git a/src/app/admin/adList/popup-delete-ad-admin/popup-delete-ad-admin.component.ts b/src/app/admin/adList/popup-delete-ad-admin/popup-delete-ad-admin.component.ts index 2fae562..196f024 100644 --- a/src/app/admin/adList/popup-delete-ad-admin/popup-delete-ad-admin.component.ts +++ b/src/app/admin/adList/popup-delete-ad-admin/popup-delete-ad-admin.component.ts @@ -1,5 +1,4 @@ import {Component, Inject, OnInit} from '@angular/core'; -import {Advert} from "../../../utils/interfaces/advert"; import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material/dialog"; import {MessageService} from "../../../utils/services/message/message.service"; @@ -12,7 +11,7 @@ import {MessageService} from "../../../utils/services/message/message.service"; }) export class PopupDeleteAdAdminComponent implements OnInit { - advert: Advert; + advert: any; constructor( public dialogRef: MatDialogRef, @@ -28,24 +27,23 @@ export class PopupDeleteAdAdminComponent implements OnInit onValidate(): void { - // --- FAUX CODE --- - this.dialogRef.close(true); - - // --- VRAI CODE --- - /* this.messageService - .sendMessage("url/delete/ad", {"advert": this.advert}) - .subscribe( retour => { + .delete("ad/delete/"+this.advert.id) + .subscribe(ret => this.onValidateCallback(ret), err => this.onValidateCallback(err)); + } - if(retour.status === "error") { - console.log(retour); - this.dialogRef.close(); - } - else { - this.dialogRef.close(true); - } - }); - */ + + onValidateCallback(retour: any): void + { + if(retour.status !== "success") { + console.log(retour); + this.dialogRef.close(); + } + else { + console.log("suppr"); + console.log(retour); + this.dialogRef.close(true); + } } } diff --git a/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.ts b/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.ts index f6199c9..3aaf319 100644 --- a/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.ts +++ b/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.ts @@ -24,14 +24,14 @@ export class PageProfilAdminComponent implements OnInit role: { name: "admin", permission: 10, + isAccepted: true, }, profileImageUrl: "", dateOfBirth: null, gender: "man", interests: [], company: "", - isActive: false, - isAccepted: false, + isActive: true, createdAt: new Date(), updatedAt: new Date(), lastConnexion: null diff --git a/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.ts b/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.ts index 8ca8996..e184b1b 100644 --- a/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.ts +++ b/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.ts @@ -38,6 +38,7 @@ export class PopupUpdateAdminComponent implements OnInit role: { name: admin0.role.name, permission: admin0.role.permission, + isAccepted: admin0.role.isAccepted, }, profileImageUrl: admin0.profileImageUrl, dateOfBirth: admin0.dateOfBirth, @@ -45,7 +46,6 @@ export class PopupUpdateAdminComponent implements OnInit interests: [], company: "", isActive: admin0.isActive, - isAccepted: admin0.isisAccepted, createdAt: admin0.createdAt, updatedAt: admin0.updatedAt, lastConnexion: admin0.lastConnexion diff --git a/src/app/admin/userList/page-user-list/page-user-list.component.html b/src/app/admin/userList/page-user-list/page-user-list.component.html index ddacff9..1d815a3 100644 --- a/src/app/admin/userList/page-user-list/page-user-list.component.html +++ b/src/app/admin/userList/page-user-list/page-user-list.component.html @@ -93,7 +93,8 @@ power_settings_new - + + @@ -107,7 +108,7 @@ - Mail + Email {{user.email}} @@ -171,7 +172,7 @@ Accepté - + diff --git a/src/app/admin/userList/page-user-list/page-user-list.component.ts b/src/app/admin/userList/page-user-list/page-user-list.component.ts index e699475..42e0dad 100644 --- a/src/app/admin/userList/page-user-list/page-user-list.component.ts +++ b/src/app/admin/userList/page-user-list/page-user-list.component.ts @@ -5,10 +5,9 @@ import {ThemeService} from "../../../utils/services/theme/theme.service"; import {MatDialog} from "@angular/material/dialog"; import {MatSnackBar} from "@angular/material/snack-bar"; import {MatTableDataSource} from "@angular/material/table"; -import {User} from "../../../utils/interfaces/user"; import {PopupDeleteUserComponent} from "../popup-delete-user/popup-delete-user.component"; import {PopupCreateUserComponent} from "../popup-create-user/popup-create-user.component"; -import {FictitiousUsersService} from "../../../utils/services/fictitiousDatas/fictitiousUsers/fictitious-users.service"; +import {MessageService} from "../../../utils/services/message/message.service"; @@ -25,8 +24,8 @@ export class PageUserListComponent implements AfterViewInit displayedColumnsAdmin: string[] = [ 'isActive', 'login', 'email', 'createdAt', 'lastConnexion' ]; tabUser: any[] = []; - tabAdvertiser: User[] = []; - tabAdmin: User[] = []; + tabAdvertiser: any[] = []; + tabAdmin: any[] = []; roleName: string = "user" ; dataSource ; @@ -40,21 +39,36 @@ export class PageUserListComponent implements AfterViewInit constructor( public themeService: ThemeService, - private fictitiousUsersService: FictitiousUsersService, public dialog: MatDialog, - private snackBar: MatSnackBar ) { } + private snackBar: MatSnackBar, + private messageService: MessageService ) { } ngAfterViewInit(): void { - // --- FAUX CODE --- - this.tabUser = this.fictitiousUsersService.getTabUser(32); - this.tabAdvertiser = this.fictitiousUsersService.getTabAdvertiser(8); - this.tabAdmin = this.fictitiousUsersService.getTabAdmin(4); + this.messageService + .get("user/findAll") + .subscribe(ret => this.ngAfterViewInitCallback(ret), err => this.ngAfterViewInitCallback(err)); + } - for(const user of this.tabUser) user.age = this.getAge(user.dateOfBirth); - this.onFilter(); + ngAfterViewInitCallback(retour: any): void + { + if(retour.status !== "success") { + console.log(retour); + } + else { + for(let person of retour.data) + { + if(person.role.name === "user") { + person["age"] = this.getAge(person.dateOfBirth); + this.tabUser.push(person); + } + else if(person.role.name === "advertiser") this.tabAdvertiser.push(person); + else this.tabAdmin.push(person); + } + this.onFilter(); + } } @@ -65,7 +79,7 @@ export class PageUserListComponent implements AfterViewInit } - onDelete(user: User): void + onDelete(user: any): void { const config = { data: { user: user } @@ -81,13 +95,13 @@ export class PageUserListComponent implements AfterViewInit message = "Opération annulée" ; } else { - const index = this.dataSource.data.findIndex( elt => (elt._id === user._id)); + const index = this.dataSource.data.findIndex( elt => (elt.id === user.id)); this.dataSource.data.splice(index, 1); this.dataSource.data = this.dataSource.data; this.dataSource = this.dataSource; message = user.login + " a bien été supprimée ✔" ; } - this.snackBar.open( message, "", config); + this.snackBar.open(message, "", config); }); } @@ -106,20 +120,47 @@ export class PageUserListComponent implements AfterViewInit } else { this.snackBar.open( "L'utilisateur a bien été créé", "", config); + if(retour.role.name === "user") this.tabUser.push(retour); + else if(retour.role.name === "advertiser") this.tabAdvertiser.push(retour); + else if(retour.role.name === "admin") this.tabAdmin.push(retour); + this.onFilter(); } }); } - onSliderIsActive(user: User): void + onSliderIsActive(user: any): void { // il faut envoyer la négation de user.isActive + this.messageService + .put("user/update/"+user.id, { isActive: !user.isActive }) + .subscribe( + ret => {}, + err => { + console.log("onSliderIsActive"); + console.log(err); + } + ); } - onSlideIsAccepted(user: User): void + onSlideIsAccepted(user: any): void { - // il faut envoyer la négation de user.isActive + // il faut envoyer la négation de user.role.isAccepted + const role0 = { + name: user.role.name, + permission: user.role.permission, + isAccepted: !user.role.isAccepted, + }; + this.messageService + .put("user/update/"+user.id, {role: role0}) + .subscribe( + ret => {}, + err => { + console.log("onSlideIsAccepted"); + console.log(err); + } + ); } @@ -127,7 +168,7 @@ export class PageUserListComponent implements AfterViewInit { if((date === null) || (date === undefined)) return -1; else { - const diff = Date.now() - date.getTime(); + const diff = Date.now() - (new Date(date)).getTime(); const age = new Date(diff); return Math.abs(age.getUTCFullYear() - 1970); } diff --git a/src/app/admin/userList/popup-create-user/popup-create-user.component.html b/src/app/admin/userList/popup-create-user/popup-create-user.component.html index 2085ccd..dc7ac87 100644 --- a/src/app/admin/userList/popup-create-user/popup-create-user.component.html +++ b/src/app/admin/userList/popup-create-user/popup-create-user.component.html @@ -126,12 +126,12 @@ Email - +
Pseudo - +
@@ -145,12 +145,12 @@ Mot de passe - +
Confirmation nouveau mot de passe - + diff --git a/src/app/admin/userList/popup-create-user/popup-create-user.component.ts b/src/app/admin/userList/popup-create-user/popup-create-user.component.ts index 8fd4c14..40ca5cd 100644 --- a/src/app/admin/userList/popup-create-user/popup-create-user.component.ts +++ b/src/app/admin/userList/popup-create-user/popup-create-user.component.ts @@ -1,6 +1,6 @@ import {Component, Inject, OnInit} from '@angular/core'; import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material/dialog"; -import {User} from "../../../utils/interfaces/user"; +import {MessageService} from "../../../utils/services/message/message.service"; @@ -11,7 +11,7 @@ import {User} from "../../../utils/interfaces/user"; }) export class PopupCreateUserComponent implements OnInit { - user: User; + user: any; hasError: boolean = false; errorMessage: string = ""; password: string = ""; @@ -19,7 +19,8 @@ export class PopupCreateUserComponent implements OnInit constructor( public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data ) { } + @Inject(MAT_DIALOG_DATA) public data, + private messageService: MessageService ) { } // Initialise l'utilisateur qui va être créé @@ -33,6 +34,7 @@ export class PopupCreateUserComponent implements OnInit role: { name: "", permission: 0, + isAccepted: false, }, profileImageUrl: "", dateOfBirth: null, @@ -40,7 +42,6 @@ export class PopupCreateUserComponent implements OnInit interests: [], company: "", isActive: false, - isAccepted: false, createdAt: new Date(), updatedAt: new Date(), lastConnexion: new Date() @@ -52,12 +53,25 @@ export class PopupCreateUserComponent implements OnInit onEnregistrer(): void { this.checkField(); - if(!this.hasError) { - this.user.hashPass = this.hashage(this.password); - this.dialogRef.close(this.user); - // VRAI CODE ... + this.user.hashPass = this.password; + this.user.role = this.user.role.name; + this.messageService + .post("user/create", this.user) + .subscribe(ret => this.onEnregistrerCallback(ret), err => this.onEnregistrerCallback(err)); + } + } + + + // Callback de 'onEnregistrer' + onEnregistrerCallback(retour: any): void + { + if(retour.status !== "success") { + console.log(retour); + } + else { + this.dialogRef.close(retour.data); } } @@ -110,17 +124,4 @@ export class PopupCreateUserComponent implements OnInit this.user.interests = myInterets; } - - // Fonction de hashage (faible) - hashage(input: string): string - { - let hash = 0; - for (let i = 0; i < input.length; i++) { - let ch = input.charCodeAt(i); - hash = ((hash << 5) - hash) + ch; - hash = hash & hash; - } - return hash.toString(); - } - } diff --git a/src/app/advertiser/adList/input-interests-ad/input-interests-ad.component.ts b/src/app/advertiser/adList/input-interests-ad/input-interests-ad.component.ts index dfc794b..e5a83fe 100644 --- a/src/app/advertiser/adList/input-interests-ad/input-interests-ad.component.ts +++ b/src/app/advertiser/adList/input-interests-ad/input-interests-ad.component.ts @@ -38,9 +38,18 @@ export class InputInterestsAdComponent implements OnInit startWith(null), map((fruit: string | null) => fruit ? this._filter(fruit) : this.allTags.slice())); - // --- FAUX CODE --- - this.allTags = this.fictitiousUtilsService.getTags(); - this.allTags.sort(); + this.messageService + .get("misc/getInterests") + .subscribe( retour => { + + if(retour.status !== "success") { + console.log(retour); + } + else { + this.allTags = retour.data.map(x => x.interest) + this.allTags.sort(); + } + }); } diff --git a/src/app/advertiser/adList/page-ad-list-advertiser/page-ad-list-advertiser.component.ts b/src/app/advertiser/adList/page-ad-list-advertiser/page-ad-list-advertiser.component.ts index 37ff560..79971ec 100644 --- a/src/app/advertiser/adList/page-ad-list-advertiser/page-ad-list-advertiser.component.ts +++ b/src/app/advertiser/adList/page-ad-list-advertiser/page-ad-list-advertiser.component.ts @@ -12,6 +12,8 @@ import {PopupVisualizeImagesAdvertiserComponent} from "../popup-visualize-images import {FictitiousAdvertsService} from "../../../utils/services/fictitiousDatas/fictitiousAdverts/fictitious-adverts.service"; import {FormControl} from "@angular/forms"; import {FictitiousUtilsService} from "../../../utils/services/fictitiousDatas/fictitiousUtils/fictitious-utils.service"; +import {MessageService} from "../../../utils/services/message/message.service"; +import {HttpParams} from "@angular/common/http"; @@ -24,7 +26,7 @@ export class PageAdListAdvertiserComponent implements AfterViewInit { displayedColumns: string[] = [ 'isVisible', 'title', 'interests', 'createdAt', 'updatedAt', 'countViews', 'actions' ]; tabAdvertWithCountViews: AdvertWithCountViews[] = []; - dataSource ; + dataSource; @ViewChild(MatSort) sort: MatSort; @ViewChild(MatPaginator) paginator: MatPaginator; @@ -33,6 +35,8 @@ export class PageAdListAdvertiserComponent implements AfterViewInit startDate: Date = null; endDate: Date = null; formControlInterests = new FormControl(); + + allVideoCategorie = []; allInterests: string[] = []; @@ -40,18 +44,50 @@ export class PageAdListAdvertiserComponent implements AfterViewInit private fictitiousAdvertsService: FictitiousAdvertsService, private fictitiousUtilsService: FictitiousUtilsService, public dialog: MatDialog, - private snackBar: MatSnackBar ) { } + private snackBar: MatSnackBar, + private messageService: MessageService ) { } ngAfterViewInit(): void { - // --- FAUX CODE --- - const tabAdvert = this.fictitiousAdvertsService.getTabAdvert(8); - this.allInterests = this.fictitiousUtilsService.getTags(); + // Ask interests + this.messageService + .get("misc/getInterests") + .subscribe(ret => this.afterReceivingInterests(ret), err => this.afterReceivingInterests(err) ); - for(let advert of tabAdvert) this.tabAdvertWithCountViews.push(this.advertToAdvertWithCountViews(advert)); - this.dataSource = new MatTableDataSource(); - this.onFilter(); + // Ask ads + let params = new HttpParams(); + params = params.append("isActive", true); + this.messageService + .get("ad/findAll", params) + .subscribe(ret => this.afterReceivingAds(ret), err => this.afterReceivingAds(err)); + } + + + afterReceivingInterests(retour: any): void + { + if(retour.status !== "success") { + console.log("afterReceivingInterests"); + console.log(retour); + } + else { + this.allVideoCategorie = retour.data; + this.allInterests = retour.data.map(x => x.interest); + this.allInterests.sort(); + } + } + + + afterReceivingAds(retour: any): void + { + if(retour.status !== "success") { + console.log(retour); + } + else { + for(let advert of retour.data) this.tabAdvertWithCountViews.push(this.advertToAdvertWithCountViews(advert)); + this.dataSource = new MatTableDataSource(); + this.onFilter(); + } } @@ -86,7 +122,7 @@ export class PageAdListAdvertiserComponent implements AfterViewInit width: '75%', height: '80%', panelClass: 'custom-dialog-container', - data: { action: "add", advert: null } + data: { action: "add", advert: null, allVideoCategorie: this.allVideoCategorie } }; this.dialog .open(PopupAddOrUpdateAdComponent, config) @@ -99,10 +135,9 @@ export class PageAdListAdvertiserComponent implements AfterViewInit message = "Opération annulée" ; } else { - this.dataSource.data.push(advertAdded); - this.dataSource.data = this.dataSource.data; - this.dataSource = this.dataSource; - message = "L'annoonce a bien été ajoutée ✔" + this.tabAdvertWithCountViews.push(this.advertToAdvertWithCountViews(advertAdded)); + this.onFilter(); + message = "L'annoonce a bien été ajoutée ✔" ; } this.snackBar.open( message, "", config); }); @@ -115,7 +150,7 @@ export class PageAdListAdvertiserComponent implements AfterViewInit width: '75%', height: '80%', panelClass: 'custom-dialog-container', - data: { action: "update", advert: advertToUpdate } + data: { action: "update", advert: advertToUpdate, allVideoCategorie: this.allVideoCategorie } }; this.dialog .open(PopupAddOrUpdateAdComponent, config) @@ -128,11 +163,10 @@ export class PageAdListAdvertiserComponent implements AfterViewInit message = "Opération annulée" ; } else { - const index = this.dataSource.data.findIndex( elt => (elt._id === advertToUpdate._id)); - this.dataSource.data.splice(index, 1, advertUpdated); - this.dataSource.data = this.dataSource.data; - this.dataSource = this.dataSource; - message = "L'annonce a bien été modifiée ✔" + const index = this.tabAdvertWithCountViews.findIndex(elt => (elt.id === advertToUpdate.id)); + this.tabAdvertWithCountViews.splice(index, 1, this.advertToAdvertWithCountViews(advertUpdated)); + this.onFilter(); + message = "L'annonce a bien été modifiée ✔" ; } this.snackBar.open( message, "", config); }); @@ -155,7 +189,7 @@ export class PageAdListAdvertiserComponent implements AfterViewInit message = "Opération annulée" ; } else { - const index = this.dataSource.data.findIndex( elt => (elt._id === advert._id)); + const index = this.dataSource.data.findIndex( elt => (elt.id === advert.id)); this.dataSource.data.splice(index, 1); this.dataSource.data = this.dataSource.data; this.dataSource = this.dataSource; @@ -168,6 +202,7 @@ export class PageAdListAdvertiserComponent implements AfterViewInit onFilter(): void { + if(this.dataSource === null || this.dataSource === undefined) this.dataSource = new MatTableDataSource(); this.dataSource.data = []; for(let advert of this.tabAdvertWithCountViews) { @@ -220,21 +255,30 @@ export class PageAdListAdvertiserComponent implements AfterViewInit } - onSliderIsVisible(advert: Advert): void + onSliderIsVisible(advert: any): void { // il faut envoyer la négation de user.isActive + this.messageService + .put("ad/update/"+advert.id, { isVisible: !advert.isVisible }) + .subscribe( + ret => {}, + err => { + console.log("onSliderIsVisible"); + console.log(err); + } + ); } - advertToAdvertWithCountViews(advert: Advert): AdvertWithCountViews + advertToAdvertWithCountViews(advert): AdvertWithCountViews { return { - _id: advert._id, + id: advert.id, userId: advert.userId, title: advert.title, url: advert.url, images: advert.images, - interests: advert.interests, + interests: advert.interests.map(x => x.interest), comment: advert.comment, views: advert.views, countViews: advert.views.length, diff --git a/src/app/advertiser/adList/popup-add-or-update-ad/popup-add-or-update-ad.component.ts b/src/app/advertiser/adList/popup-add-or-update-ad/popup-add-or-update-ad.component.ts index b8e97fa..f943a07 100644 --- a/src/app/advertiser/adList/popup-add-or-update-ad/popup-add-or-update-ad.component.ts +++ b/src/app/advertiser/adList/popup-add-or-update-ad/popup-add-or-update-ad.component.ts @@ -28,9 +28,9 @@ const ADVERT_VIDE: Advert = { }) export class PopupAddOrUpdateAdComponent implements OnInit { - advert: Advert; - urlBackend: string = "" ; + advert: any; title: string = "" ; + allVideoCategorie = []; tabWaitingFile: File[] = []; // fichiers selectionnés mais pas encore "validés" tabSelectedFile: File[] = []; // fichier "validés" _event; @@ -44,18 +44,17 @@ export class PopupAddOrUpdateAdComponent implements OnInit ngOnInit(): void { + this.allVideoCategorie = this.data.allVideoCategorie if(this.data.action === "add") { this.advert = Object.assign({}, ADVERT_VIDE); this.advert.interests = []; - this.urlBackend = "url/add/ad" ; this.title = "Ajouter annonce" ; } else { this.advert = Object.assign({}, this.data.advert); this.advert.interests = this.data.advert.interests.slice(); - this.urlBackend = "url/update/ad" ; this.title = "Modifier annonce" ; } } @@ -63,24 +62,59 @@ export class PopupAddOrUpdateAdComponent implements OnInit onValidate(): void { - // --- FAUX CODE --- - this.dialogRef.close(this.advert); - - // --- VRAI CODE --- - /* - this.messageService - .sendMessage(this.urlBackend, this.advert) - .subscribe( retour => { - - if(retour.status === "error") { - console.log(retour); - this.dialogRef.close(this.advert); + // On transforme 'this.user.interests' en tableau de 'videoCategorie' + let interests = []; // tableau de videoCategorie + for(let interest of this.advert.interests) + { + for(let videoCategorie of this.allVideoCategorie) + { + if(videoCategorie.interest === interest) { + interests.push(videoCategorie); + break; } - else { - this.dialogRef.close(retour.data.advert); - } - }); - */ + } + } + this.advert.interests = interests; + + if(this.data.action === "add") + { + this.messageService + .post("ad/create", this.advert) + .subscribe(ret => this.onCreateCallback(ret), err => this.onCreateCallback(err)); + } + else { + const id = this.advert.id; + Reflect.deleteProperty(this.advert, "id"); + Reflect.deleteProperty(this.advert, "_id"); + this.messageService + .put("ad/update/"+id, this.advert) + .subscribe(ret => this.onUpdateCallback(ret,id), err => this.onUpdateCallback(err,id)); + } + } + + + onCreateCallback(retour: any): void + { + if(retour.status !== "success") { + console.log(retour); + this.dialogRef.close(); + } + else { + this.dialogRef.close(retour.data); + } + } + + + onUpdateCallback(retour: any, id: string): void + { + if(retour.status !== "success") { + console.log(retour); + this.dialogRef.close(); + } + else { + this.advert.id = id; + this.dialogRef.close(this.advert); + } } diff --git a/src/app/advertiser/adList/popup-delete-ad-advertiser/popup-delete-ad-advertiser.component.ts b/src/app/advertiser/adList/popup-delete-ad-advertiser/popup-delete-ad-advertiser.component.ts index e36d92b..1de96ef 100644 --- a/src/app/advertiser/adList/popup-delete-ad-advertiser/popup-delete-ad-advertiser.component.ts +++ b/src/app/advertiser/adList/popup-delete-ad-advertiser/popup-delete-ad-advertiser.component.ts @@ -1,7 +1,6 @@ import {Component, Inject, OnInit} from '@angular/core'; import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material/dialog"; import {MessageService} from "../../../utils/services/message/message.service"; -import {Advert} from "../../../utils/interfaces/advert"; @@ -12,7 +11,7 @@ import {Advert} from "../../../utils/interfaces/advert"; }) export class PopupDeleteAdAdvertiserComponent implements OnInit { - advert: Advert; + advert: any; constructor( public dialogRef: MatDialogRef, @@ -28,24 +27,21 @@ export class PopupDeleteAdAdvertiserComponent implements OnInit onValidate(): void { - // --- FAUX CODE --- - this.dialogRef.close(true); + this.messageService + .delete("ad/delete/"+this.advert.id) + .subscribe(ret => this.onValidateCallback(ret), err => this.onValidateCallback(err)); + } - // --- VRAI CODE --- - /* - this.messageService - .sendMessage("url/delete/ad", {"advert": this.advert}) - .subscribe( retour => { - if(retour.status === "error") { - console.log(retour); - this.dialogRef.close(); - } - else { - this.dialogRef.close(true); - } - }); - */ + onValidateCallback(retour: any): void + { + if(retour.status !== "success") { + console.log(retour); + this.dialogRef.close(); + } + else { + this.dialogRef.close(true); + } } } diff --git a/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.ts b/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.ts index 1213210..ec86cdf 100644 --- a/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.ts +++ b/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.ts @@ -24,14 +24,14 @@ export class PageProfilAdvertiserComponent implements OnInit role: { name: "advertiser", permission: 5, + isAccepted: true, }, profileImageUrl: "", dateOfBirth: null, gender: "man", interests: [], company: "", - isActive: false, - isAccepted: false, + isActive: true, createdAt: new Date(), updatedAt: new Date(), lastConnexion: null diff --git a/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.ts b/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.ts index e32bbc7..1517582 100644 --- a/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.ts +++ b/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.ts @@ -38,6 +38,7 @@ export class PopupUpdateAdvertiserComponent implements OnInit role: { name: advertiser0.role.name, permission: advertiser0.role.permission, + isAccepted: advertiser0.role.isAccepted, }, profileImageUrl: advertiser0.profileImageUrl, dateOfBirth: advertiser0.dateOfBirth, @@ -45,7 +46,6 @@ export class PopupUpdateAdvertiserComponent implements OnInit interests: [], company: advertiser0.company, isActive: advertiser0.isActive, - isAccepted: advertiser0.isAccepted, createdAt: advertiser0.createdAt, updatedAt: advertiser0.updatedAt, lastConnexion: new Date() diff --git a/src/app/advertiser/pages-popularity/pages-popularity.component.ts b/src/app/advertiser/pages-popularity/pages-popularity.component.ts index 76d82fd..1f38b9c 100644 --- a/src/app/advertiser/pages-popularity/pages-popularity.component.ts +++ b/src/app/advertiser/pages-popularity/pages-popularity.component.ts @@ -6,6 +6,8 @@ import { Router} from "@angular/router"; import {FictitiousAdvertsService} from "../../utils/services/fictitiousDatas/fictitiousAdverts/fictitious-adverts.service"; import {FictitiousVideosService} from "../../utils/services/fictitiousDatas/fictitiousVideos/fictitious-videos.service"; import {ThemeService} from "../../utils/services/theme/theme.service"; +import {MessageService} from "../../utils/services/message/message.service"; +import {HttpParams} from "@angular/common/http"; @@ -26,6 +28,8 @@ export class PagesPopularityComponent implements OnInit formControl: FormControl; allCoupleNameViews: CoupleNameViews[] = []; + allInterests: string[] = []; + startDate: Date = null; endDate: Date = null; step: number = 1; @@ -48,57 +52,113 @@ export class PagesPopularityComponent implements OnInit constructor( private router: Router, public themeService: ThemeService, private fictitiousAdvertsService: FictitiousAdvertsService, - private fictitiousVideosService: FictitiousVideosService ) {} + private fictitiousVideosService: FictitiousVideosService, + private messageService: MessageService ) {} + + + // ----------------------------------------------------------------------------------------------------- ngOnInit(): void { - if(this.router.url.includes("ads")) this.ngOnInitAds(); - else if(this.router.url.includes("subjects")) this.ngOnInitSubjects(); - this.formControl = new FormControl(this.allCoupleNameViews); - this.onApplyFilter(); - } - - - // Sera excuté si on est sur la page 'adsPopularity' - // Remplie l'attribut 'allCoupleNameViews' - ngOnInitAds(): void - { - const allAdverts = this.fictitiousAdvertsService.get_TAB_ADVERT(); - for(let advert of allAdverts) + // Sera excuté si on est sur la page 'adsPopularity' + // Remplie l'attribut 'allCoupleNameViews' + if(this.router.url.includes("ads")) { - let couple = {name: advert.title, views: advert.views } - this.allCoupleNameViews.push(couple); + let params = new HttpParams(); + params = params.append("isActive", true); + this.messageService + .get("ad/findAll", params ) + .subscribe(ret => this.afterReceivingAds(ret), err => this.afterReceivingAds(err)); + } + + // Sera excuté si on est sur la page 'subjectsPopularity' + // Remplie l'attribut 'allCoupleNameViews' + else if(this.router.url.includes("subjects")) + { + this.messageService + .get("misc/getInterests") + .subscribe( retour => { + + if(retour.status !== "success") { + console.log(retour); + } + else { + this.allInterests = retour.data.map(x => x.interest); + this.allInterests.sort(); + this.messageService + .get("video/findAll") + .subscribe(ret => this.afterReceivingVideos(ret), err => this.afterReceivingVideos(err)); + } + }); } } - // Sera excuté si on est sur la page 'subjectsPopularity' - // Remplie l'attribut 'allCoupleNameViews' - ngOnInitSubjects(): void + // Callback: Sera excuté si on est sur la page 'adsPopularity' + afterReceivingAds(retour: any): void { - const allVideos = this.fictitiousVideosService.get_TAB_VIDEO(); - let myMap: Map = new Map(); - - for(let video of allVideos) - { - const key = video.interest; - if(!myMap.has(key)) myMap.set(key, video.watchedDates); - else { - let tabDate = myMap.get(key); - for(let date0 of video.watchedDates) tabDate = this.insertInOrder(tabDate, date0); - myMap.set(key, tabDate); + if(retour.status !== "success") { + console.log(retour); + } + else { + const allAdverts = retour.data; + for(let advert of allAdverts) + { + let couple = {name: advert.title, views: advert.views } + this.allCoupleNameViews.push(couple); } - } - for(const [key, value] of myMap.entries()) - { - let couple = {name: key, views: value } - this.allCoupleNameViews.push(couple); + this.formControl = new FormControl(this.allCoupleNameViews); + this.onApplyFilter(); } } + // Callback: Sera excuté si on est sur la page 'subjectsPopularity' + afterReceivingVideos(retour: any): void + { + if(retour.status !== "success") { + console.log(retour); + } + else { + const allVideos = retour.data; + let myMap: Map = new Map(); + + // parcours des interest de chaque video + for(let video of allVideos) + { + const key = video.interest; + if(!myMap.has(key)) myMap.set(key, video.watchedDates); + else { + let tabDate = myMap.get(key); + for(let date0 of video.watchedDates) tabDate = this.insertInOrder(tabDate, date0); + myMap.set(key, tabDate); + } + } + + // parcours les interest qui n'ont pas p été vu dans les videos + for(let interest of this.allInterests) + { + if(!myMap.has(interest)) myMap.set(interest, []); + } + + // parcours de la map pour remplir 'allCoupleNameViews' + for(const [key, value] of myMap.entries()) + { + let couple = {name: key, views: value } + this.allCoupleNameViews.push(couple); + } + + this.formControl = new FormControl(this.allCoupleNameViews); + this.onApplyFilter(); + } + } + + + // ----------------------------------------------------------------------------------------------------- + + // Applique le filtre onApplyFilter(): void { @@ -137,7 +197,7 @@ export class PagesPopularityComponent implements OnInit for(let date0 of coupleNameViews.views) { - const time0 = date0.getTime(); + const time0 = (new Date(date0)).getTime(); if(time0 > endTime) break; @@ -172,7 +232,7 @@ export class PagesPopularityComponent implements OnInit return date0.toLocaleDateString(); } else { - const time2 = this.addStep(date0.getTime()) - this.oneDay; + const time2 = this.addStep((new Date(date0)).getTime()) - this.oneDay; let date2 = new Date(time2); return date0.toLocaleDateString() + " à " + date2.toLocaleDateString(); } diff --git a/src/app/beforeConnexion/register/page-register/page-register.component.ts b/src/app/beforeConnexion/register/page-register/page-register.component.ts index 8632fe8..833a656 100644 --- a/src/app/beforeConnexion/register/page-register/page-register.component.ts +++ b/src/app/beforeConnexion/register/page-register/page-register.component.ts @@ -27,14 +27,14 @@ export class PageRegisterComponent role: { name: "user", permission: 0, + isAccepted: false, }, profileImageUrl: "", dateOfBirth: null, gender: "man", interests: [], company: "", - isActive: false, - isAccepted: false, + isActive: true, createdAt: new Date(), updatedAt: new Date(), lastConnexion: null diff --git a/src/app/user/myProfil/input-interests-profil/input-interests-profil.component.html b/src/app/user/myProfil/input-interests-profil/input-interests-profil.component.html index be2bd07..084e9e7 100644 --- a/src/app/user/myProfil/input-interests-profil/input-interests-profil.component.html +++ b/src/app/user/myProfil/input-interests-profil/input-interests-profil.component.html @@ -16,7 +16,7 @@