From 095e5fd6488fd77ac8ba6c58e199528b64430a1e Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Wed, 23 Mar 2022 13:40:56 +0100 Subject: Dodata stranica za pretragu public prediktora. --- .../src/app/_services/predictors.service.spec.ts | 16 ++++++++++++++++ frontend/src/app/_services/predictors.service.ts | 21 +++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 frontend/src/app/_services/predictors.service.spec.ts create mode 100644 frontend/src/app/_services/predictors.service.ts (limited to 'frontend/src/app/_services') diff --git a/frontend/src/app/_services/predictors.service.spec.ts b/frontend/src/app/_services/predictors.service.spec.ts new file mode 100644 index 00000000..7733780b --- /dev/null +++ b/frontend/src/app/_services/predictors.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { PredictorsService } from './predictors.service'; + +describe('PredictorsService', () => { + let service: PredictorsService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(PredictorsService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/_services/predictors.service.ts b/frontend/src/app/_services/predictors.service.ts new file mode 100644 index 00000000..0cd7f0f6 --- /dev/null +++ b/frontend/src/app/_services/predictors.service.ts @@ -0,0 +1,21 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { API_SETTINGS } from 'src/config'; +import Predictor from '../_data/Predictor'; +import { AuthService } from './auth.service'; + +@Injectable({ + providedIn: 'root' +}) +export class PredictorsService { + + + + constructor(private http: HttpClient, private authService: AuthService) { } + + getPublicPredictors(): Observable { + return this.http.get(`${API_SETTINGS.apiURL}/Predictor/publicpredictors`, { headers: this.authService.authHeader() }); + } + +} -- cgit v1.2.3 From 9bcf6d9b855e78e274d13fc2f121e2e51259ce21 Mon Sep 17 00:00:00 2001 From: Sonja Galovic Date: Wed, 23 Mar 2022 18:00:34 +0100 Subject: Profile page - izmena profila uskladjena sa back-om. --- .../register-modal/register-modal.component.ts | 3 +- .../src/app/_pages/profile/profile.component.html | 14 ++++--- .../src/app/_pages/profile/profile.component.ts | 47 +++++++++++++++++----- frontend/src/app/_services/user-info.service.ts | 12 ++++-- 4 files changed, 55 insertions(+), 21 deletions(-) (limited to 'frontend/src/app/_services') diff --git a/frontend/src/app/_modals/register-modal/register-modal.component.ts b/frontend/src/app/_modals/register-modal/register-modal.component.ts index c045f1ce..fe0de92f 100644 --- a/frontend/src/app/_modals/register-modal/register-modal.component.ts +++ b/frontend/src/app/_modals/register-modal/register-modal.component.ts @@ -129,7 +129,8 @@ export class RegisterModalComponent implements OnInit { lastName: this.lastName, username: this.username, password: this.pass1, - email: this.email + email: this.email, + photoId: "1" } this.authService.register(user) diff --git a/frontend/src/app/_pages/profile/profile.component.html b/frontend/src/app/_pages/profile/profile.component.html index bece7c46..fba95218 100644 --- a/frontend/src/app/_pages/profile/profile.component.html +++ b/frontend/src/app/_pages/profile/profile.component.html @@ -7,12 +7,14 @@
Moj profil
- - - -
JPG or PNG no larger than 5 MB
- - +
+ + + + @ {{this.user.username}} + {{this.user.firstName}} {{this.user.lastName}} + {{this.email}} +
diff --git a/frontend/src/app/_pages/profile/profile.component.ts b/frontend/src/app/_pages/profile/profile.component.ts index 4b474678..c155dbff 100644 --- a/frontend/src/app/_pages/profile/profile.component.ts +++ b/frontend/src/app/_pages/profile/profile.component.ts @@ -1,6 +1,9 @@ +import { HttpErrorResponse } from '@angular/common/http'; import { Component, OnInit } from '@angular/core'; import User from 'src/app/_data/User'; import { UserInfoService } from 'src/app/_services/user-info.service'; +import { AuthService } from 'src/app/_services/auth.service'; +import { Router } from '@angular/router'; @Component({ selector: 'app-profile', @@ -23,15 +26,13 @@ export class ProfileComponent implements OnInit { wrongPassBool: boolean = false; wrongNewPassBool: boolean = false; - constructor(private userInfoService: UserInfoService) { } + constructor(private userInfoService: UserInfoService, private authService: AuthService, private router: Router) { } ngOnInit(): void { - this.userInfoService.getUsersInfo().subscribe((response) => { + this.userInfoService.getUserInfo().subscribe((response) => { this.user = response; - this.user.password = 'sonja123'; - this.username = this.user.username; this.email = this.user.email; this.firstName = this.user.firstName; @@ -53,6 +54,13 @@ export class ProfileComponent implements OnInit { } this.userInfoService.changeUserInfo(editedUser).subscribe((response: any) =>{ + if (this.user.username != editedUser.username) { //promenio username, ide logout + this.user = editedUser; + alert("Nakon promene korisničkog imena, moraćete ponovo da se ulogujete."); + this.authService.logOut(); + this.router.navigate(['']); + return; + } this.user = editedUser; console.log(this.user); }, (error: any) =>{ @@ -66,8 +74,7 @@ export class ProfileComponent implements OnInit { console.log("zeli da promeni lozinku"); if (this.newPass1 != this.newPass2) { //netacno ponovio novu lozinku this.wrongNewPassBool = true; - this.newPass1 = ''; - this.newPass2 = ''; + this.resetNewPassInputs(); console.log("Netacno ponovljena lozinka"); return; } @@ -75,12 +82,32 @@ export class ProfileComponent implements OnInit { this.wrongPassBool = false; this.wrongNewPassBool = false; - this.userInfoService.changeUserPassword(this.oldPass, this.newPass1).subscribe((response) => { - this.user = response; - console.log(this.user); + let passwordArray: string[] = [this.oldPass, this.newPass1]; + this.userInfoService.changeUserPassword(passwordArray).subscribe((response: any) => { + console.log("PROMENIO LOZINKU"); + this.resetNewPassInputs(); + alert("Nakon promene lozinke, moraćete ponovo da se ulogujete."); + this.authService.logOut(); + this.router.navigate(['']); }, (error: any) => { - + console.log("error poruka: ", error.error); + if (error.error == 'Wrong old password!') { + this.wrongPassBool = true; + (document.getElementById("inputPassword")).focus(); + return; + } + else if (error.error == 'Identical password!') { + alert("Stara i nova lozinka su identične."); + this.resetNewPassInputs(); + (document.getElementById("inputNewPassword")).focus(); + return; + } }); } + resetNewPassInputs() { + this.newPass1 = ''; + this.newPass2 = ''; + } + } diff --git a/frontend/src/app/_services/user-info.service.ts b/frontend/src/app/_services/user-info.service.ts index b66a73e1..7ed2970c 100644 --- a/frontend/src/app/_services/user-info.service.ts +++ b/frontend/src/app/_services/user-info.service.ts @@ -12,15 +12,19 @@ export class UserInfoService { constructor(private http: HttpClient, private authService: AuthService) { } - getUsersInfo(): Observable { + getUserInfo(): Observable { return this.http.get(`${API_SETTINGS.apiURL}/user/myprofile`, { headers: this.authService.authHeader() }); } changeUserInfo(user: User): any { - return this.http.put(`${API_SETTINGS.apiURL}/user/${user._id}`, user, { headers: this.authService.authHeader() }); + return this.http.put(`${API_SETTINGS.apiURL}/user/changeinfo`, user, { headers: this.authService.authHeader() }); } - changeUserPassword(oldPassword: string, newPassword: string): Observable { - return this.http.put(`${API_SETTINGS.apiURL}/user/`, { oldPassword, newPassword }, { headers: this.authService.authHeader() }); + changeUserPassword(passwordArray: string[]): any { + return this.http.put(`${API_SETTINGS.apiURL}/user/changepass`, passwordArray, { headers: this.authService.authHeader(), responseType: 'text' }); + } + + deleteUser(): any { + return this.http.delete(`${API_SETTINGS.apiURL}/user/deleteprofile`, { headers: this.authService.authHeader() }); } } -- cgit v1.2.3 From 62c1318ed805ea0fe4c2c5244f279858bd56cf30 Mon Sep 17 00:00:00 2001 From: Nevena Bojovic Date: Wed, 23 Mar 2022 23:24:59 +0100 Subject: Update - ovana stranica. --- .../filter-datasets/filter-datasets.component.html | 39 +++++++++++++++++++++- .../filter-datasets/filter-datasets.component.ts | 24 +++++++++++-- .../src/app/_services/datasets.service.spec.ts | 16 +++++++++ frontend/src/app/_services/datasets.service.ts | 18 ++++++++++ 4 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 frontend/src/app/_services/datasets.service.spec.ts create mode 100644 frontend/src/app/_services/datasets.service.ts (limited to 'frontend/src/app/_services') diff --git a/frontend/src/app/_pages/filter-datasets/filter-datasets.component.html b/frontend/src/app/_pages/filter-datasets/filter-datasets.component.html index fecf09a8..bee07aef 100644 --- a/frontend/src/app/_pages/filter-datasets/filter-datasets.component.html +++ b/frontend/src/app/_pages/filter-datasets/filter-datasets.component.html @@ -1 +1,38 @@ -

filter-datasets works!

+ +
+ +
+
+ +
+ +
+ +
+
+
+
+

{{dataset.name}}

+

{{dataset.description}}

+ Dodaj dataset: +
+ +
+
+ + +
+
+

Nema rezultata

+
+
+ +
+ + + + +
diff --git a/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts b/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts index 4a143696..b2a3541d 100644 --- a/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts +++ b/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts @@ -1,4 +1,9 @@ import { Component, OnInit } from '@angular/core'; +import { DatasetsService } from 'src/app/_services/datasets.service'; +import Dataset from 'src/app/_data/Dataset'; +import {Router} from '@angular/router' +import { JwtHelperService } from '@auth0/angular-jwt'; +import { CookieService } from 'ngx-cookie-service'; @Component({ selector: 'app-filter-datasets', @@ -7,9 +12,24 @@ import { Component, OnInit } from '@angular/core'; }) export class FilterDatasetsComponent implements OnInit { - constructor() { } + publicDatasets?: Dataset[]; + term: string = ""; + constructor(private datasets: DatasetsService,private router:Router, private cookie: CookieService) { + this.datasets.getPublicDatasets().subscribe((datasets) => { + this.publicDatasets = datasets; + }); + } ngOnInit(): void { - } + } + addDataset(dataset: Dataset):void{ + //this.router.navigateByUrl('/predict?id='+id); + const helper = new JwtHelperService(); + const decodedToken = helper.decodeToken(this.cookie.get("token")); + dataset._id = ""; + dataset.isPublic = false; + dataset.lastUpdated = new Date(); + dataset.username = decodedToken.name; + }; } diff --git a/frontend/src/app/_services/datasets.service.spec.ts b/frontend/src/app/_services/datasets.service.spec.ts new file mode 100644 index 00000000..87b46acd --- /dev/null +++ b/frontend/src/app/_services/datasets.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { DatasetsService } from './datasets.service'; + +describe('DatasetsService', () => { + let service: DatasetsService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(DatasetsService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/_services/datasets.service.ts b/frontend/src/app/_services/datasets.service.ts new file mode 100644 index 00000000..5a313632 --- /dev/null +++ b/frontend/src/app/_services/datasets.service.ts @@ -0,0 +1,18 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { API_SETTINGS } from 'src/config'; +import Dataset from '../_data/Dataset'; +import { AuthService } from './auth.service'; + +@Injectable({ + providedIn: 'root' +}) +export class DatasetsService { + + constructor(private http: HttpClient, private authService: AuthService) { } + + getPublicDatasets(): Observable { + return this.http.get(`${API_SETTINGS.apiURL}/Dataset/publicdatasets`, { headers: this.authService.authHeader() }); + } +} -- cgit v1.2.3 From 495607f3ce83d107e3a525c658e70355ec94d488 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Thu, 24 Mar 2022 00:03:04 +0100 Subject: Dodat api poziv u filter-datasets koji dodaje dataset.Ispravljene greske kod browse-predictors i filter-datasets. --- .../app/_pages/browse-predictors/browse-predictors.component.html | 4 ++-- .../src/app/_pages/browse-predictors/browse-predictors.component.ts | 4 ++-- .../src/app/_pages/filter-datasets/filter-datasets.component.html | 4 ++-- .../src/app/_pages/filter-datasets/filter-datasets.component.ts | 4 ++++ frontend/src/app/_pages/home/home.component.html | 1 + frontend/src/app/_services/datasets.service.ts | 6 ++++++ frontend/src/app/app-routing.module.ts | 4 +++- 7 files changed, 20 insertions(+), 7 deletions(-) (limited to 'frontend/src/app/_services') diff --git a/frontend/src/app/_pages/browse-predictors/browse-predictors.component.html b/frontend/src/app/_pages/browse-predictors/browse-predictors.component.html index 37ac67cf..a4ab6e2c 100644 --- a/frontend/src/app/_pages/browse-predictors/browse-predictors.component.html +++ b/frontend/src/app/_pages/browse-predictors/browse-predictors.component.html @@ -9,7 +9,7 @@
-
+

{{predictor.name}}

@@ -25,7 +25,7 @@
-
+

Nema rezultata

diff --git a/frontend/src/app/_pages/browse-predictors/browse-predictors.component.ts b/frontend/src/app/_pages/browse-predictors/browse-predictors.component.ts index 5c085bba..4f96fc36 100644 --- a/frontend/src/app/_pages/browse-predictors/browse-predictors.component.ts +++ b/frontend/src/app/_pages/browse-predictors/browse-predictors.component.ts @@ -9,11 +9,11 @@ import {Router} from '@angular/router' }) export class BrowsePredictorsComponent implements OnInit { - myPredictors? :Predictor[]; + publicPredictors? :Predictor[]; term: string=""; constructor(private predictors: PredictorsService,private router:Router) { this.predictors.getPublicPredictors().subscribe((predictors) => { - this.myPredictors = predictors; + this.publicPredictors = predictors; }); } diff --git a/frontend/src/app/_pages/filter-datasets/filter-datasets.component.html b/frontend/src/app/_pages/filter-datasets/filter-datasets.component.html index bee07aef..84f5ebaf 100644 --- a/frontend/src/app/_pages/filter-datasets/filter-datasets.component.html +++ b/frontend/src/app/_pages/filter-datasets/filter-datasets.component.html @@ -14,7 +14,7 @@

{{dataset.name}}

{{dataset.description}}

- Dodaj dataset: + Dodaj dataset
-
+

Nema rezultata

diff --git a/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts b/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts index b2a3541d..bc13a51c 100644 --- a/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts +++ b/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts @@ -31,5 +31,9 @@ export class FilterDatasetsComponent implements OnInit { dataset.isPublic = false; dataset.lastUpdated = new Date(); dataset.username = decodedToken.name; + this.datasets.addDataset(dataset).subscribe((response:string)=>{ + console.log(response); + }); }; + } diff --git a/frontend/src/app/_pages/home/home.component.html b/frontend/src/app/_pages/home/home.component.html index 274f0fd8..689a302b 100644 --- a/frontend/src/app/_pages/home/home.component.html +++ b/frontend/src/app/_pages/home/home.component.html @@ -46,6 +46,7 @@

Pogledajte javne izvore podataka!

+

Pogledaj sve javne izvore podataka...

Iskoristite već trenirane modele!

diff --git a/frontend/src/app/_services/datasets.service.ts b/frontend/src/app/_services/datasets.service.ts index 5a313632..fadcdeae 100644 --- a/frontend/src/app/_services/datasets.service.ts +++ b/frontend/src/app/_services/datasets.service.ts @@ -15,4 +15,10 @@ export class DatasetsService { getPublicDatasets(): Observable { return this.http.get(`${API_SETTINGS.apiURL}/Dataset/publicdatasets`, { headers: this.authService.authHeader() }); } + + addDataset(dataset:Dataset):any{ + return this.http.post(`${API_SETTINGS.apiURL}/dataset/add`, dataset, { headers: this.authService.authHeader() }); + } + + } diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index 001d0b4f..a52d66a8 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -12,6 +12,7 @@ import { BrowseDatasetsComponent } from './_pages/browse-datasets/browse-dataset import { SettingsComponent } from './_pages/settings/settings.component'; import { ProfileComponent } from './_pages/profile/profile.component'; import { PredictComponent } from './_pages/predict/predict.component'; +import { FilterDatasetsComponent } from './_pages/filter-datasets/filter-datasets.component'; const routes: Routes = [ { path: '', component: HomeComponent, data: { title: 'Početna strana' } }, @@ -23,7 +24,8 @@ const routes: Routes = [ { path: 'profile', component: ProfileComponent, canActivate: [AuthGuardService], data: { title: 'Profil' } }, { path: 'browse-datasets', component: BrowseDatasetsComponent, data: { title: 'Javni izvori podataka' } }, { path: 'browse-predictors', component: BrowsePredictorsComponent, data: { title: 'Javni trenirani modeli' } }, - { path: 'predict', component: PredictComponent, data: { title: 'Predvidi vrednosti' } } + { path: 'predict', component: PredictComponent, data: { title: 'Predvidi vrednosti' } }, + { path: 'filter-datasets', component: FilterDatasetsComponent, data: { title: 'Filter datasets' } } ]; @NgModule({ -- cgit v1.2.3 From 6a4abae42f6a785f4e666b8fee23211e9e0ba543 Mon Sep 17 00:00:00 2001 From: Sonja Galovic Date: Thu, 24 Mar 2022 00:42:57 +0100 Subject: Uskladjena promena profilne slike sa slikom u navbaru. --- frontend/src/app/Shared.ts | 3 ++- frontend/src/app/_elements/navbar/navbar.component.html | 2 +- frontend/src/app/_elements/navbar/navbar.component.ts | 6 +++++- frontend/src/app/_pages/profile/profile.component.ts | 4 ++++ frontend/src/app/_services/auth.service.ts | 4 +++- 5 files changed, 15 insertions(+), 4 deletions(-) (limited to 'frontend/src/app/_services') diff --git a/frontend/src/app/Shared.ts b/frontend/src/app/Shared.ts index 0adcd4d6..31afb1a6 100644 --- a/frontend/src/app/Shared.ts +++ b/frontend/src/app/Shared.ts @@ -1,7 +1,8 @@ class Shared { constructor( public loggedIn: boolean, - public username: string = '' + public username: string = '', + public photoId: string = '1' ) { } } diff --git a/frontend/src/app/_elements/navbar/navbar.component.html b/frontend/src/app/_elements/navbar/navbar.component.html index 52e26e6b..82a1ea07 100644 --- a/frontend/src/app/_elements/navbar/navbar.component.html +++ b/frontend/src/app/_elements/navbar/navbar.component.html @@ -18,7 +18,7 @@