From e22b83919e6442dfb55d7953d9227268c850adf8 Mon Sep 17 00:00:00 2001 From: Danijel Andjelkovic Date: Thu, 17 Mar 2022 00:32:49 +0100 Subject: Napravio neophodne izmene tako da backend i frontend komuniciraju uspesno. --- backend/api/api/Data/UserStoreDatabaseSettings.cs | 1 + .../api/Interfaces/IUserStoreDatabaseSettings.cs | 3 +- backend/api/api/Models/Dataset.cs | 2 +- backend/api/api/Models/Model.cs | 8 +- backend/api/api/Models/Predictor.cs | 1 - backend/api/api/Services/ModelService.cs | 2 +- backend/api/api/api.csproj | 1 + frontend/src/app/Shared.ts | 3 +- frontend/src/app/_data/Dataset.ts | 4 +- frontend/src/app/_data/Model.ts | 4 +- frontend/src/app/_data/Predictor.ts | 1 + .../app/_pages/add-model/add-model.component.html | 147 +++++++++++---------- .../app/_pages/add-model/add-model.component.ts | 37 +++--- frontend/src/app/_services/auth.service.ts | 3 +- frontend/src/app/_services/models.service.ts | 15 +-- 15 files changed, 129 insertions(+), 103 deletions(-) diff --git a/backend/api/api/Data/UserStoreDatabaseSettings.cs b/backend/api/api/Data/UserStoreDatabaseSettings.cs index 6841a3e0..e83d2b54 100644 --- a/backend/api/api/Data/UserStoreDatabaseSettings.cs +++ b/backend/api/api/Data/UserStoreDatabaseSettings.cs @@ -11,6 +11,7 @@ namespace api.Data public string CollectionName { get; set; } = String.Empty; public string DatasetCollectionName { get; set; } = String.Empty; public string PredictorCollectionName { get; set; } = String.Empty; + public string ModelCollectionName { get; set; } = String.Empty; public string FilesCollectionName { get; set; } = String.Empty; } } diff --git a/backend/api/api/Interfaces/IUserStoreDatabaseSettings.cs b/backend/api/api/Interfaces/IUserStoreDatabaseSettings.cs index 94d3e1fc..a5b5f5eb 100644 --- a/backend/api/api/Interfaces/IUserStoreDatabaseSettings.cs +++ b/backend/api/api/Interfaces/IUserStoreDatabaseSettings.cs @@ -6,7 +6,8 @@ string DatabaseName { get; set; } string CollectionName { get; set; } string DatasetCollectionName { get; set; } - string PredictorCollectionName { get; } + string PredictorCollectionName { get; set; } + string ModelCollectionName { get; set; } string FilesCollectionName { get; set; } } } diff --git a/backend/api/api/Models/Dataset.cs b/backend/api/api/Models/Dataset.cs index 70092bd2..d4649c17 100644 --- a/backend/api/api/Models/Dataset.cs +++ b/backend/api/api/Models/Dataset.cs @@ -6,7 +6,7 @@ namespace api.Models { public class Dataset { - public string username; + public string username { get; set; } [BsonId] [BsonRepresentation(BsonType.ObjectId)]//mongo data type to .net diff --git a/backend/api/api/Models/Model.cs b/backend/api/api/Models/Model.cs index 7b22ded8..dfc4336a 100644 --- a/backend/api/api/Models/Model.cs +++ b/backend/api/api/Models/Model.cs @@ -21,11 +21,11 @@ namespace api.Models public string datasetId { get; set; } //Test set settings - public int[] inputColumns { get; set; } - public int columnToPredict { get; set; } - public bool radnomOrder {get;set;} + public string[] inputColumns { get; set; } + public string columnToPredict { get; set; } + public bool randomOrder {get;set;} public bool randomTestSet { get; set; } - public int randomTestSetDistribution { get; set; } + public float randomTestSetDistribution { get; set; } //Neural net training public string type { get; set; } diff --git a/backend/api/api/Models/Predictor.cs b/backend/api/api/Models/Predictor.cs index 638495bd..cd2f4557 100644 --- a/backend/api/api/Models/Predictor.cs +++ b/backend/api/api/Models/Predictor.cs @@ -10,7 +10,6 @@ namespace api.Models [BsonRepresentation(BsonType.ObjectId)]//mongo data type to .net public string _id { get; set; } public string username { get; set; } - public string name { get; set; } public string description { get; set; } public string[] inputs { get; set; } diff --git a/backend/api/api/Services/ModelService.cs b/backend/api/api/Services/ModelService.cs index a3939b29..2ba3c54d 100644 --- a/backend/api/api/Services/ModelService.cs +++ b/backend/api/api/Services/ModelService.cs @@ -13,7 +13,7 @@ namespace api.Services public ModelService(IUserStoreDatabaseSettings settings, IMongoClient mongoClient) { var database = mongoClient.GetDatabase(settings.DatabaseName); - _model = database.GetCollection(settings.PredictorCollectionName); + _model = database.GetCollection(settings.ModelCollectionName); } public Model Create(Model model) diff --git a/backend/api/api/api.csproj b/backend/api/api/api.csproj index f38621ca..f63407ca 100644 --- a/backend/api/api/api.csproj +++ b/backend/api/api/api.csproj @@ -22,6 +22,7 @@ + diff --git a/frontend/src/app/Shared.ts b/frontend/src/app/Shared.ts index 126dc846..0adcd4d6 100644 --- a/frontend/src/app/Shared.ts +++ b/frontend/src/app/Shared.ts @@ -1,6 +1,7 @@ class Shared { constructor( - public loggedIn: boolean + public loggedIn: boolean, + public username: string = '' ) { } } diff --git a/frontend/src/app/_data/Dataset.ts b/frontend/src/app/_data/Dataset.ts index aaee50eb..6e6cbffe 100644 --- a/frontend/src/app/_data/Dataset.ts +++ b/frontend/src/app/_data/Dataset.ts @@ -1,4 +1,5 @@ export default class Dataset { + _id: string = ''; constructor( public name: string = 'Novi izvor podataka', public description: string = '', @@ -8,6 +9,7 @@ export default class Dataset { public isPublic: boolean = false, public accessibleByLink: boolean = false, public dateCreated: Date = new Date(), - public lastUpdated: Date = new Date() + public lastUpdated: Date = new Date(), + public username: string = 'tester1' ) { } } \ No newline at end of file diff --git a/frontend/src/app/_data/Model.ts b/frontend/src/app/_data/Model.ts index c0bc339d..a891c10c 100644 --- a/frontend/src/app/_data/Model.ts +++ b/frontend/src/app/_data/Model.ts @@ -1,4 +1,5 @@ export default class Model { + _id: string = ''; constructor( public name: string = 'Novi model', public description: string = '', @@ -24,7 +25,8 @@ export default class Model { public batchSize: number = 5, public inputLayerActivationFunction: ActivationFunction = ActivationFunction.Sigmoid, public hiddenLayerActivationFunction: ActivationFunction = ActivationFunction.Sigmoid, - public outputLayerActivationFunction: ActivationFunction = ActivationFunction.Sigmoid + public outputLayerActivationFunction: ActivationFunction = ActivationFunction.Sigmoid, + public username: string = '' ) { } } diff --git a/frontend/src/app/_data/Predictor.ts b/frontend/src/app/_data/Predictor.ts index 05b993f1..7e902eae 100644 --- a/frontend/src/app/_data/Predictor.ts +++ b/frontend/src/app/_data/Predictor.ts @@ -1,4 +1,5 @@ export default class Predictor { + _id: string = ''; constructor( public name: string = 'Novi prediktor', public description: string = '', diff --git a/frontend/src/app/_pages/add-model/add-model.component.html b/frontend/src/app/_pages/add-model/add-model.component.html index 004f308b..c6f21f1e 100644 --- a/frontend/src/app/_pages/add-model/add-model.component.html +++ b/frontend/src/app/_pages/add-model/add-model.component.html @@ -3,15 +3,15 @@
- +
- -
+ +
+

Nov model:

- - + +
@@ -25,7 +25,7 @@ value="{{newModel.dateCreated | date: 'dd/MM/yyyy'}}" readonly>
- +

Izvor podataka:

@@ -33,37 +33,41 @@
-
-

Izaberite ulazne kolone:

-
-
-
- -   - -
-
-
-
-

Izaberite izlaznu kolonu:

-
-
-
- -   - -
-
-
+
+

Izaberite ulazne kolone:

+
+
+
+ +   + +
+
+
+
+

Izaberite izlaznu kolonu:

+
+
+
+ +   + +
+
+
- - + +

Parametri treniranja:

@@ -87,7 +91,8 @@
- +
@@ -111,7 +116,8 @@
- +
@@ -123,7 +129,8 @@
- @@ -157,7 +166,8 @@
- +
@@ -167,17 +177,18 @@
- +
- +
@@ -188,7 +199,7 @@      test + [disabled]="!newModel.randomTestSet" [(ngModel)]="newModel.randomTestSetDistribution"> trening @@ -200,16 +211,17 @@
- +
- +
@@ -222,11 +234,12 @@
- +
-
-
- - + \ No newline at end of file diff --git a/frontend/src/app/_pages/add-model/add-model.component.ts b/frontend/src/app/_pages/add-model/add-model.component.ts index 76a09782..a4cabb82 100644 --- a/frontend/src/app/_pages/add-model/add-model.component.ts +++ b/frontend/src/app/_pages/add-model/add-model.component.ts @@ -4,6 +4,7 @@ import Model from 'src/app/_data/Model'; import { ANNType, Encoding, ActivationFunction, LossFunction, Optimizer } from 'src/app/_data/Model'; import { DatasetLoadComponent } from 'src/app/_elements/dataset-load/dataset-load.component'; import { ModelsService } from 'src/app/_services/models.service'; +import shared from 'src/app/Shared'; @Component({ @@ -24,6 +25,7 @@ export class AddModelComponent implements OnInit { LossFunction = LossFunction; Optimizer = Optimizer; Object = Object; + shared = shared; constructor(private models: ModelsService) { this.newModel = new Model(); @@ -44,24 +46,27 @@ export class AddModelComponent implements OnInit { } saveModel(temporary: boolean): any { - console.log('ADD MODEL: STEP 1 - UPLOAD FILE'); - if (this.datasetLoadComponent) { - this.models.uploadData(this.datasetLoadComponent.files[0]).subscribe((fileId) => { - console.log('ADD MODEL: STEP 2 - ADD DATASET WITH FILE ID ' + fileId); - if (this.datasetLoadComponent) { - this.datasetLoadComponent.dataset.fileId = fileId; - this.models.addDataset(this.datasetLoadComponent.dataset).subscribe((datasetId) => { - console.log('ADD MODEL: STEP 3 - ADD MODEL WITH DATASET ID ' + datasetId); - this.newModel.datasetId = datasetId; - this.getCheckedInputCols(); - this.getCheckedOutputCol(); - if (this.validationInputsOutput()) + this.getCheckedInputCols(); + this.getCheckedOutputCol(); + if (this.validationInputsOutput()) { + console.log('ADD MODEL: STEP 1 - UPLOAD FILE'); + if (this.datasetLoadComponent) { + this.models.uploadData(this.datasetLoadComponent.files[0]).subscribe((file) => { + console.log('ADD MODEL: STEP 2 - ADD DATASET WITH FILE ID ' + file._id); + if (this.datasetLoadComponent) { + this.datasetLoadComponent.dataset.fileId = file._id; + this.datasetLoadComponent.dataset.username = shared.username; + this.models.addDataset(this.datasetLoadComponent.dataset).subscribe((dataset) => { + console.log('ADD MODEL: STEP 3 - ADD MODEL WITH DATASET ID ', dataset._id); + this.newModel.datasetId = dataset._id; + this.newModel.username = shared.username; this.models.addModel(this.newModel).subscribe((response) => { - console.log('ADD MODEL: DONE! REPLY:\n' + response); + console.log('ADD MODEL: DONE! REPLY:\n', response); }); - }); - } - }); + }); + } + }); + } } } diff --git a/frontend/src/app/_services/auth.service.ts b/frontend/src/app/_services/auth.service.ts index afc1567b..20ff45f3 100644 --- a/frontend/src/app/_services/auth.service.ts +++ b/frontend/src/app/_services/auth.service.ts @@ -46,7 +46,7 @@ export class AuthService { this.http.post(`${API_SETTINGS.apiURL}/auth/renewJwt`, {}, { headers: this.authHeader(), responseType: 'text' }).subscribe((response) => { this.authenticate(response); }); - }, exp.getTime() - new Date().getTime()); + }, exp.getTime() - new Date().getTime() - 60000); } authenticate(token: string) { @@ -62,6 +62,7 @@ export class AuthService { if (this.cookie.check('token')) { const token = this.cookie.get('token'); this.shared.loggedIn = this.isAuthenticated(); + this.shared.username = jwtHelper.decodeToken(token).name; this.enableAutoRefresh(); } } diff --git a/frontend/src/app/_services/models.service.ts b/frontend/src/app/_services/models.service.ts index e9a5ee18..8299016b 100644 --- a/frontend/src/app/_services/models.service.ts +++ b/frontend/src/app/_services/models.service.ts @@ -22,21 +22,20 @@ export class ModelsService { const options = { params: params, - reportProgress: true, + reportProgress: false, headers: this.authService.authHeader() }; - const req = new HttpRequest('POST', `${API_SETTINGS.apiURL}/file/csv`, formData, options); - return this.http.request(req); + return this.http.post(`${API_SETTINGS.apiURL}/file/csv`, formData, options); } - addModel(model: Model) { + addModel(model: Model): Observable { return this.http.post(`${API_SETTINGS.apiURL}/model/add`, model, { headers: this.authService.authHeader() }); } - addDataset(dataset: Dataset) { - return this.http.post(`${API_SETTINGS.apiURL}/dataset/add`, dataset, { headers: this.authService.authHeader(), responseType: 'text' }); + addDataset(dataset: Dataset): Observable { + return this.http.post(`${API_SETTINGS.apiURL}/dataset/add`, dataset, { headers: this.authService.authHeader() }); } - trainModel(modelId: string) { - return this.http.post(`${API_SETTINGS.apiURL}/model/train`, modelId, { headers: this.authService.authHeader(), responseType: 'text' }); + trainModel(modelId: string): Observable { + return this.http.post(`${API_SETTINGS.apiURL}/model/train`, modelId, { headers: this.authService.authHeader() }); } } -- cgit v1.2.3