diff options
-rw-r--r-- | backend/api/api/Controllers/PredictorController.cs | 30 | ||||
-rw-r--r-- | backend/api/api/Models/Model.cs | 2 | ||||
-rw-r--r-- | backend/api/api/Models/NullValues.cs | 9 | ||||
-rw-r--r-- | backend/api/api/Models/Predictor.cs | 16 | ||||
-rw-r--r-- | frontend/src/app/_elements/item-predictor/item-predictor.component.ts | 6 | ||||
-rw-r--r-- | frontend/src/app/_pages/predict/predict.component.html | 58 | ||||
-rw-r--r-- | frontend/src/app/_pages/predict/predict.component.ts | 20 | ||||
-rw-r--r-- | frontend/src/app/_services/predictors.service.ts | 6 | ||||
-rw-r--r-- | frontend/src/app/app-routing.module.ts | 2 |
9 files changed, 124 insertions, 25 deletions
diff --git a/backend/api/api/Controllers/PredictorController.cs b/backend/api/api/Controllers/PredictorController.cs index 98e2695e..cdc14632 100644 --- a/backend/api/api/Controllers/PredictorController.cs +++ b/backend/api/api/Controllers/PredictorController.cs @@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Net.Http.Headers; using System.Net.Http.Headers; +using System.Diagnostics; namespace api.Controllers { @@ -74,8 +75,8 @@ namespace api.Controllers return _predictorService.SearchPredictors(name, username); } - // GET api/<PredictorController>/{name} - [HttpGet("{id}")] + // GET api/<PredictorController>/getpredictor/{name} + [HttpGet("getpredictor/{id}")] [Authorize(Roles = "User")] public ActionResult<Predictor> GetPredictor(string id) { @@ -185,6 +186,31 @@ namespace api.Controllers } } + // POST api/<PredictorController>/usepredictor {predictor,inputs} + [HttpPost("usepredictor/{id}")] + [Authorize(Roles = "User")] + public ActionResult UsePredictor(String id, [FromBody] String[] inputs) + { + + string username; + var header = Request.Headers[HeaderNames.Authorization]; + if (AuthenticationHeaderValue.TryParse(header, out var headerValue)) + { + var scheme = headerValue.Scheme; + var parameter = headerValue.Parameter; + username = jwtToken.TokenToUsername(parameter); + if (username == null) + return null; + } + else + return BadRequest(); + + Predictor predictor = _predictorService.GetPredictor(username, id); + + foreach(String i in inputs) + Debug.WriteLine(i); + return NoContent(); + } // PUT api/<PredictorController>/{name} diff --git a/backend/api/api/Models/Model.cs b/backend/api/api/Models/Model.cs index 2baab1c0..26f732ee 100644 --- a/backend/api/api/Models/Model.cs +++ b/backend/api/api/Models/Model.cs @@ -46,5 +46,7 @@ namespace api.Models public string nullValues { get; set; } public string[] nullValuesReplacers { get; set; } + + //public NullValues[] nullValues { get; set; } } } diff --git a/backend/api/api/Models/NullValues.cs b/backend/api/api/Models/NullValues.cs new file mode 100644 index 00000000..a8ce4f36 --- /dev/null +++ b/backend/api/api/Models/NullValues.cs @@ -0,0 +1,9 @@ +namespace api.Models +{ + public class NullValues + { + public string column { get; set; } + public string option { get; set; } + public string value { get; set; } + } +} diff --git a/backend/api/api/Models/Predictor.cs b/backend/api/api/Models/Predictor.cs index 568719fc..9c8d362f 100644 --- a/backend/api/api/Models/Predictor.cs +++ b/backend/api/api/Models/Predictor.cs @@ -20,3 +20,19 @@ namespace api.Models } } +/* +{ + "_id" : "6244950f26cf2385bc29ba28", + "username" : "ivan123", + "name" : "Neki prediktor", + "description" : "Neki opis prediktora koji je unet tamo", + "inputs": ["proba", + "proba2", + "proba3" + ], + "output" : "", + "isPublic" : true, + "accessibleByLink" : false, + "dateCreated" : "232" +} +*/
\ No newline at end of file diff --git a/frontend/src/app/_elements/item-predictor/item-predictor.component.ts b/frontend/src/app/_elements/item-predictor/item-predictor.component.ts index d864480a..b6b5c9db 100644 --- a/frontend/src/app/_elements/item-predictor/item-predictor.component.ts +++ b/frontend/src/app/_elements/item-predictor/item-predictor.component.ts @@ -1,4 +1,5 @@ import { Component, Input, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; import Predictor from 'src/app/_data/Predictor'; @Component({ @@ -10,13 +11,14 @@ export class ItemPredictorComponent implements OnInit { @Input() predictor: Predictor = new Predictor(); - constructor() { } + constructor(private router: Router) { } ngOnInit(): void { } openPredictor() { - console.log("iskoristi") + this.router.navigate(['predict/'+ '6244958a26cf2385bc29ba2c']); + //this.router.navigate(['predict'+this.predictor._id]); } } diff --git a/frontend/src/app/_pages/predict/predict.component.html b/frontend/src/app/_pages/predict/predict.component.html index 67d047b7..fe17c96d 100644 --- a/frontend/src/app/_pages/predict/predict.component.html +++ b/frontend/src/app/_pages/predict/predict.component.html @@ -9,52 +9,72 @@ <br> - <div class="form-group row mt-3 mb-2 d-flex justify-content-center"> + <div class="form-group row mt-3 mb-2 d-flex justify-content-left"> <!--justify-content-center--> <h2> Izabrani prediktor: </h2> - <div class="col-3"> - <label for="name" class="col-form-label">Naziv prediktora:</label> - <input type="text" class="form-control" name="name" [(ngModel)]="predictor.name"> + <div class="col-10"> + <label for="output" class="col-sm-5 col-form-label">Naziv prediktora: <b>{{predictor.name}}</b></label> </div> - <div class="col-5"> - <label for="desc" class="col-sm-2 col-form-label">Opis:</label> - <div> - <textarea class="form-control" name="desc" rows="3" [(ngModel)]="predictor.description"></textarea> - </div> + <div> + <label for="output" class="col-sm-5 col-form-label">Opis prediktora: <b>{{predictor.description}}</b></label> </div> </div> - + <br> + <div > + <!--input --> + <h3>Popunite ulazne kolone:</h3> + <div id="divInputs" class="form-check mt-2"> + <div *ngIf="predictor" class="form-group row mt-3 mb-2 d-flex justify-content-left"> + <div *ngFor="let input of predictor.inputs; let i = index"> + <label for="{{input}}" class="col-sm-2 col-form-label"><b>{{input}}</b></label> + <input name="{{input}}" type="text" [(ngModel)]="inputs[i]" > + + </div> + + </div> + </div> + + - <div class="col-3 mt-2"> + </div> + <div> + <label for="output" class="col-sm-2 col-form-label">Izlaz: <b>{{predictor.output}}</b></label> + </div> + <br> + <br> + <br> + <br> + <br> + + <div class="col-5 mt-2"> <label for="type" class="form-check-label">Da li je prediktor javan?</label> <input class="mx-3 form-check-input" type="checkbox" [(ngModel)]="predictor.isPublic" type="checkbox" value="" > </div> - <div class="col-3 mt-2"> + <div class="col-5 mt-2"> <label for="type" class="form-check-label">Da li je dostupan za deljenje?</label> <input class="mx-3 form-check-input" type="checkbox" [(ngModel)]="predictor.accessibleByLink" type="checkbox" value="" > </div> + <br> <div class="col-2"> - <label for="dateCreated" class="col-form-label">Datum:</label> + <label for="dateCreated" class="col-form-label">Datum:</label> <input type="text" class="form-control-plaintext" id="dateCreated" placeholder="--/--/--" value="{{predictor.dateCreated | date: 'dd/MM/yyyy'}}" readonly> </div> - <!-- + <br><br> <div class="form-group row mt-5 mb-3"> <div class="col"></div> <button class="btn btn-lg col-4" style="background-color:#003459; color:white;" - (click)="addModel();">Sačuvaj model</button> - <div class="col"></div> - <button class="btn btn-lg col-4" style="background-color:#003459; color:white;" - (click)="trainModel();">Treniraj model</button> + (click)="usePredictor();">Iskoristi prediktor</button> <div class="col"></div> + </div> - --> + </div> </div>
\ No newline at end of file diff --git a/frontend/src/app/_pages/predict/predict.component.ts b/frontend/src/app/_pages/predict/predict.component.ts index d5cb22bd..3f431fff 100644 --- a/frontend/src/app/_pages/predict/predict.component.ts +++ b/frontend/src/app/_pages/predict/predict.component.ts @@ -1,5 +1,7 @@ import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; import Predictor from 'src/app/_data/Predictor'; +import { PredictorsService } from 'src/app/_services/predictors.service'; @Component({ selector: 'app-predict', @@ -8,12 +10,28 @@ import Predictor from 'src/app/_data/Predictor'; }) export class PredictComponent implements OnInit { + inputs : String[] = []; + predictor:Predictor; - constructor() { + constructor(private predictS : PredictorsService, private route: ActivatedRoute) { this.predictor = new Predictor(); } ngOnInit(): void { + this.route.params.subscribe(url => { + this.predictS.getPredictor(url["id"]).subscribe(p => { + + this.predictor = p; + console.log(this.predictor); + }) + }); } + usePredictor(): void{ + this.predictS.usePredictor(this.predictor, this.inputs).subscribe(p => { + + alert("Uspesno ste poslali preditor!"); + }) + console.log(this.inputs); + } } diff --git a/frontend/src/app/_services/predictors.service.ts b/frontend/src/app/_services/predictors.service.ts index a2dc012f..54ae5694 100644 --- a/frontend/src/app/_services/predictors.service.ts +++ b/frontend/src/app/_services/predictors.service.ts @@ -17,5 +17,11 @@ export class PredictorsService { getPublicPredictors(): Observable<Predictor[]> { return this.http.get<Predictor[]>(`${API_SETTINGS.apiURL}/predictor/publicpredictors`, { headers: this.authService.authHeader() }); } + getPredictor(id : String): Observable<Predictor> { + return this.http.get<Predictor>(`${API_SETTINGS.apiURL}/predictor/getpredictor/`+ id, { headers: this.authService.authHeader() }); + } + usePredictor(predictor: Predictor, inputs : String[]) { + return this.http.post(`${API_SETTINGS.apiURL}/predictor/usepredictor/` + predictor._id, inputs, { headers: this.authService.authHeader() }); + } } diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index 1c368318..fd827ac9 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -24,7 +24,7 @@ const routes: Routes = [ { path: 'profile', component: ProfileComponent, canActivate: [AuthGuardService], data: { title: 'Profil' } }, { path: 'browse-datasets', component: FilterDatasetsComponent, 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/:id', component: PredictComponent, data: { title: 'Predvidi vrednosti' } } ]; @NgModule({ |