diff options
Diffstat (limited to 'backend')
-rw-r--r-- | backend/api/api/Controllers/DatasetController.cs | 105 | ||||
-rw-r--r-- | backend/api/api/Controllers/ExperimentController.cs | 56 | ||||
-rw-r--r-- | backend/api/api/Controllers/FileController.cs | 83 | ||||
-rw-r--r-- | backend/api/api/Controllers/ModelController.cs | 122 | ||||
-rw-r--r-- | backend/api/api/Controllers/PredictorController.cs | 142 | ||||
-rw-r--r-- | backend/api/api/Controllers/UserController.cs | 76 | ||||
-rw-r--r-- | backend/api/api/Models/Dataset.cs | 1 | ||||
-rw-r--r-- | backend/api/api/Models/Experiment.cs | 1 | ||||
-rw-r--r-- | backend/api/api/Models/Model.cs | 1 | ||||
-rw-r--r-- | backend/api/api/Models/Predictor.cs | 9 | ||||
-rw-r--r-- | backend/api/api/Services/IPredictorService.cs | 1 | ||||
-rw-r--r-- | backend/api/api/Services/PredictorService.cs | 14 | ||||
-rw-r--r-- | backend/microservice/api/ml_service.py | 138 |
13 files changed, 285 insertions, 464 deletions
diff --git a/backend/api/api/Controllers/DatasetController.cs b/backend/api/api/Controllers/DatasetController.cs index 375b5bfd..add85aba 100644 --- a/backend/api/api/Controllers/DatasetController.cs +++ b/backend/api/api/Controllers/DatasetController.cs @@ -25,11 +25,7 @@ namespace api.Controllers _fileService = fileService; jwtToken = Token; } - - // GET: api/<DatasetController>/mydatasets - [HttpGet("mydatasets")] - [Authorize(Roles = "User,Guest")] - public ActionResult<List<Dataset>> Get() + public string getUsername() { string username; var header = Request.Headers[HeaderNames.Authorization]; @@ -42,8 +38,21 @@ namespace api.Controllers return null; } else + return null; + + return username; + } + + // GET: api/<DatasetController>/mydatasets + [HttpGet("mydatasets")] + [Authorize(Roles = "User,Guest")] + public ActionResult<List<Dataset>> Get() + { + string username = getUsername(); + + if (username == null) return BadRequest(); - //U slucaju da je korisnik gost vrati dataSetove igrannonice + if (username == "") return _datasetService.GetGuestDatasets(); @@ -60,22 +69,13 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult<List<Dataset>> SortDatasets(bool ascdsc, int latest) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); List<Dataset> lista = _datasetService.SortDatasets(username, ascdsc, latest); - if (latest == 0) return lista; else @@ -100,17 +100,9 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult<List<Dataset>> Search(string name) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); //ako bude trebao ID, samo iz baze uzeti @@ -125,17 +117,9 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult<Dataset> Get(string name) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); var dataset = _datasetService.GetOneDataset(username, name); @@ -145,18 +129,6 @@ namespace api.Controllers return dataset; } - /*za pretragu vratiti dataset koji je public - public ActionResult<Dataset> Get(string name) - { - var dataset = _datasetService.GetOneDataset(username, name); - - if (dataset == null) - return NotFound($"Dataset with name = {name} or user with username = {username} not found"); - - return dataset; - } - */ - // POST api/<DatasetController>/add [HttpPost("add")] [Authorize(Roles = "User,Guest")] @@ -183,7 +155,6 @@ namespace api.Controllers return NotFound($"Dateset with name = {dataset.name} exisits"); else { - FileModel fileModel = _fileService.getFile(dataset.fileId); dataset.isPreProcess = false; _datasetService.Create(dataset); @@ -198,17 +169,9 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult Put(string name, [FromBody] Dataset dataset) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); var existingDataset = _datasetService.GetOneDataset(username, name); @@ -229,17 +192,9 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult Delete(string name) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); var dataset = _datasetService.GetOneDataset(username, name); diff --git a/backend/api/api/Controllers/ExperimentController.cs b/backend/api/api/Controllers/ExperimentController.cs index 0063c532..3fa02943 100644 --- a/backend/api/api/Controllers/ExperimentController.cs +++ b/backend/api/api/Controllers/ExperimentController.cs @@ -25,10 +25,7 @@ namespace api.Controllers _mlConnectionService = mlConnectionService; _fileService = fileService; } - - [HttpPost("add")] - [Authorize(Roles = "User,Guest")] - public async Task<ActionResult<Experiment>> Post([FromBody] Experiment experiment) + public string getUserId() { string uploaderId; var header = Request.Headers[HeaderNames.Authorization]; @@ -38,15 +35,27 @@ namespace api.Controllers var parameter = headerValue.Parameter; uploaderId = jwtToken.TokenToId(parameter); if (uploaderId == null) - return BadRequest(); + return null; } else + return null; + + return uploaderId; + } + + [HttpPost("add")] + [Authorize(Roles = "User,Guest")] + public async Task<ActionResult<Experiment>> Post([FromBody] Experiment experiment) + { + string uploaderId = getUserId(); + + if (uploaderId == null) return BadRequest(); experiment.uploaderId = uploaderId; var existingExperiment = _experimentService.Get(uploaderId, experiment.name); if(existingExperiment != null) - return NotFound($"Experiment with name = {experiment.name} exisits"); + return NotFound($"Experiment with this name exists"); _experimentService.Create(experiment); return Ok(experiment); } @@ -55,17 +64,9 @@ namespace api.Controllers [Authorize(Roles = "User,Guest")] public async Task<ActionResult<Experiment>> Get(string id) { - string uploaderId; - var header = Request.Headers[HeaderNames.Authorization]; - if (AuthenticationHeaderValue.TryParse(header, out var headerValue)) - { - var scheme = headerValue.Scheme; - var parameter = headerValue.Parameter; - uploaderId = jwtToken.TokenToId(parameter); - if (uploaderId == null) - return null; - } - else + string uploaderId = getUserId(); + + if (uploaderId == null) return BadRequest(); var experiment = _experimentService.Get(id); @@ -75,28 +76,17 @@ namespace api.Controllers return Ok(experiment); } - [HttpPost("getMyExperiments")] + [HttpGet("getMyExperiments")] [Authorize(Roles = "User,Guest")] public async Task<ActionResult<List<Experiment>>> getMyExperiments() { - string uploaderId; - var header = Request.Headers[HeaderNames.Authorization]; - if (AuthenticationHeaderValue.TryParse(header, out var headerValue)) - { - var scheme = headerValue.Scheme; - var parameter = headerValue.Parameter; - uploaderId = jwtToken.TokenToId(parameter); - if (uploaderId == null) - return null; - } - else + string uploaderId = getUserId(); + + if (uploaderId == null) return BadRequest(); + var experiments=_experimentService.GetMyExperiments(uploaderId); return Ok(experiments); - } - - - } } diff --git a/backend/api/api/Controllers/FileController.cs b/backend/api/api/Controllers/FileController.cs index 0be480f2..b9b31500 100644 --- a/backend/api/api/Controllers/FileController.cs +++ b/backend/api/api/Controllers/FileController.cs @@ -25,18 +25,12 @@ namespace api.Controllers _fileservice = fileService; } - [HttpPost("h5")] - [Authorize(Roles = "User,Guest")] - public async Task<ActionResult<string>> H5Upload([FromForm] IFormFile file) + public string getUserId() { - - //get username from jwtToken string uploaderId; - string folderName; var header = Request.Headers[HeaderNames.Authorization]; if (AuthenticationHeaderValue.TryParse(header, out var headerValue)) { - var scheme = headerValue.Scheme; var parameter = headerValue.Parameter; uploaderId = _token.TokenToId(parameter); @@ -44,7 +38,25 @@ namespace api.Controllers return null; } else + return null; + + return uploaderId; + } + + [HttpPost("h5")] + [Authorize(Roles = "User,Guest")] + public async Task<ActionResult<string>> H5Upload([FromForm] IFormFile file) + { + + //get username from jwtToken + + string folderName; + + string uploaderId = getUserId(); + + if (uploaderId == null) return BadRequest(); + if (uploaderId == "") { folderName = "TempFiles"; @@ -101,18 +113,9 @@ namespace api.Controllers public ActionResult<string> CsvRead(bool hasHeader, string fileId) { - string uploaderId; - var header = Request.Headers[HeaderNames.Authorization]; - if (AuthenticationHeaderValue.TryParse(header, out var headerValue)) - { + string uploaderId = getUserId(); - var scheme = headerValue.Scheme; - var parameter = headerValue.Parameter; - uploaderId = _token.TokenToId(parameter); - if (uploaderId == null) - return null; - } - else + if (uploaderId == null) return BadRequest(); //String csvContent = System.IO.File.ReadAllText(fileModel.path); @@ -121,9 +124,9 @@ namespace api.Controllers if (hasHeader) - return String.Join("", System.IO.File.ReadLines(filePath).Take(11)); + return String.Join("\n", System.IO.File.ReadLines(filePath).Take(11)); else - return String.Join("", System.IO.File.ReadLines(filePath).Take(10)); + return String.Join("\n", System.IO.File.ReadLines(filePath).Take(10)); } @@ -135,18 +138,12 @@ namespace api.Controllers { //get username from jwtToken - string uploaderId; + string folderName; - var header = Request.Headers[HeaderNames.Authorization]; - if (AuthenticationHeaderValue.TryParse(header, out var headerValue)) - { - var scheme = headerValue.Scheme; - var parameter = headerValue.Parameter; - uploaderId = _token.TokenToId(parameter); - if (uploaderId == null) - return null; - }else + string uploaderId = getUserId(); + + if (uploaderId == null) return BadRequest(); if (uploaderId == "") @@ -215,18 +212,9 @@ namespace api.Controllers public async Task<ActionResult> DownloadH5(string id) { //Get Username - string uploaderId; - var header = Request.Headers[HeaderNames.Authorization]; - if (AuthenticationHeaderValue.TryParse(header, out var headerValue)) - { + string uploaderId = getUserId(); - var scheme = headerValue.Scheme; - var parameter = headerValue.Parameter; - uploaderId = _token.TokenToId(parameter); - if (uploaderId == null) - return null; - } - else + if (uploaderId == null) return BadRequest(); string filePath = _fileservice.GetFilePath(id, uploaderId); @@ -242,18 +230,9 @@ namespace api.Controllers public async Task<ActionResult> DownloadFile(string id) { //Get Username - string uploaderId; - var header = Request.Headers[HeaderNames.Authorization]; - if (AuthenticationHeaderValue.TryParse(header, out var headerValue)) - { + string uploaderId = getUserId(); - var scheme = headerValue.Scheme; - var parameter = headerValue.Parameter; - uploaderId = _token.TokenToId(parameter); - if (uploaderId == null) - return null; - } - else + if (uploaderId == null) return BadRequest(); string filePath = _fileservice.GetFilePath(id, uploaderId); diff --git a/backend/api/api/Controllers/ModelController.cs b/backend/api/api/Controllers/ModelController.cs index 618b15e8..29911e07 100644 --- a/backend/api/api/Controllers/ModelController.cs +++ b/backend/api/api/Controllers/ModelController.cs @@ -33,9 +33,7 @@ namespace api.Controllers _mlConnectionService = mlConnectionService; } - [HttpPost("sendModel")] - [Authorize(Roles = "User,Guest")] - public async Task<ActionResult<string>> Test([FromBody] string modelId,string experimentId) + public string getUserId() { string uploaderId; var header = Request.Headers[HeaderNames.Authorization]; @@ -45,10 +43,43 @@ namespace api.Controllers var parameter = headerValue.Parameter; uploaderId = jwtToken.TokenToId(parameter); if (uploaderId == null) - return BadRequest(); + return null; } else + return null; + + return uploaderId; + } + public string getUsername() + { + 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 null; + + return username; + } + + [HttpPost("trainModel")] + [Authorize(Roles = "User,Guest")] + public async Task<ActionResult<string>> Test([FromBody] TrainModelObject trainModelObject) + { + string experimentId = trainModelObject.ExperimentId; + string modelId = trainModelObject.ModelId; + + string uploaderId = getUserId(); + + if (uploaderId == null) return BadRequest(); + var experiment=_experimentService.Get(experimentId); var dataset = _datasetService.GetOneDataset(experiment.datasetId); var filepath = _fileService.GetFilePath(dataset.fileId, uploaderId); @@ -62,17 +93,9 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult<List<Model>> Get() { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); return _modelService.GetMyModels(username); @@ -84,17 +107,9 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult<Model> Get(string name) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); var model = _modelService.GetOneModel(username, name); @@ -116,17 +131,9 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult<List<Model>> GetLatestModels(int latest) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); //ako bude trebao ID, samo iz baze uzeti @@ -142,8 +149,6 @@ namespace api.Controllers } - - // POST api/<ModelController>/add [HttpPost("add")] [Authorize(Roles = "User,Guest")] @@ -176,26 +181,14 @@ namespace api.Controllers } } - - - - // PUT api/<ModelController>/{name} [HttpPut("{name}")] [Authorize(Roles = "User")] public ActionResult Put(string name, [FromBody] Model model) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); @@ -213,17 +206,9 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult Delete(string name) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); var model = _modelService.GetOneModel(username, name); @@ -238,4 +223,11 @@ namespace api.Controllers } } + + public class TrainModelObject + { + public string ModelId { get; set; } + public string ExperimentId { get; set; } + + } } diff --git a/backend/api/api/Controllers/PredictorController.cs b/backend/api/api/Controllers/PredictorController.cs index b9215822..233ea401 100644 --- a/backend/api/api/Controllers/PredictorController.cs +++ b/backend/api/api/Controllers/PredictorController.cs @@ -1,7 +1,6 @@ using api.Models; using api.Services; using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Net.Http.Headers; using System.Net.Http.Headers; @@ -22,13 +21,9 @@ namespace api.Controllers _predictorService = predictorService; jwtToken = Token; _mlConnectionService = mlConnectionService; - } - // GET: api/<PredictorController>/mypredictors - [HttpGet("mypredictors")] - [Authorize(Roles = "User")] - public ActionResult<List<Predictor>> Get() + public string getUsername() { string username; var header = Request.Headers[HeaderNames.Authorization]; @@ -41,10 +36,24 @@ namespace api.Controllers return null; } else + return null; + + return username; + } + + // GET: api/<PredictorController>/mypredictors + [HttpGet("mypredictors")] + [Authorize(Roles = "User")] + public ActionResult<List<Predictor>> Get() + { + string username = getUsername(); + + if (username == null) return BadRequest(); return _predictorService.GetMyPredictors(username); } + // GET: api/<PredictorController>/publicpredictors [HttpGet("publicpredictors")] public ActionResult<List<Predictor>> GetPublicPredictors() @@ -52,29 +61,17 @@ namespace api.Controllers return _predictorService.GetPublicPredictors(); } - - //SEARCH za predictore (public ili private sa ovim imenom ) // GET api/<PredictorController>/search/{name} [HttpGet("search/{name}")] [Authorize(Roles = "User")] public ActionResult<List<Predictor>> Search(string name) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); - //ako bude trebao ID, samo iz baze uzeti - return _predictorService.SearchPredictors(name, username); } @@ -83,20 +80,10 @@ namespace api.Controllers [Authorize(Roles = "User,Guest")] public ActionResult<Predictor> GetPredictor(string id) { - 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(); + string username = getUsername(); - //ako bude trebao ID, samo iz baze uzeti + if (username == null) + return BadRequest(); Predictor predictor = _predictorService.GetPredictor(username, id); @@ -106,24 +93,14 @@ namespace api.Controllers return predictor; } - - //da li da se odvoji search za public i posebno za private? // GET api/<PredictorController>/{name} [HttpGet("{name}")] [Authorize(Roles = "User")] public ActionResult<Predictor> Get(string name) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); var predictor = _predictorService.GetOnePredictor(username, name); @@ -143,20 +120,10 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult<List<Predictor>> SortPredictors(bool ascdsc, int latest) { - 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(); + string username = getUsername(); - //ako bude trebao ID, samo iz baze uzeti + if (username == null) + return BadRequest(); List<Predictor> lista = _predictorService.SortPredictors(username, ascdsc, latest); @@ -172,6 +139,7 @@ namespace api.Controllers return novaLista; } } + // POST api/<PredictorController>/add [HttpPost("add")] [Authorize(Roles = "User")] @@ -194,18 +162,9 @@ namespace api.Controllers [Authorize(Roles = "User,Guest")] public ActionResult UsePredictor(String id, [FromBody] PredictorColumns[] inputs) { + string username = getUsername(); - 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 + if (username == null) return BadRequest(); Predictor predictor = _predictorService.GetPredictor(username, id); @@ -215,23 +174,14 @@ namespace api.Controllers return NoContent(); } - // PUT api/<PredictorController>/{name} [HttpPut("{name}")] [Authorize(Roles = "User")] public ActionResult Put(string name, [FromBody] Predictor predictor) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); var existingPredictor = _predictorService.GetOnePredictor(username, name); @@ -245,30 +195,14 @@ namespace api.Controllers return Ok($"Predictor with name = {name} updated"); } - // odraditi pretragu predictora - //potrebna public i private pretraga - //prvo da napakuje svoje pa onda ostale - // - //isto odraditi i za datasetove - // - - // DELETE api/<PredictorController>/name [HttpDelete("{name}")] [Authorize(Roles = "User")] public ActionResult Delete(string name) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); var predictor = _predictorService.GetOnePredictor(username, name); @@ -281,9 +215,5 @@ namespace api.Controllers return Ok($"Predictor with name = {name} deleted"); } - - - - } } diff --git a/backend/api/api/Controllers/UserController.cs b/backend/api/api/Controllers/UserController.cs index 782a02cf..9f736679 100644 --- a/backend/api/api/Controllers/UserController.cs +++ b/backend/api/api/Controllers/UserController.cs @@ -22,6 +22,23 @@ namespace api.Controllers this.userService = userService; jwtToken = token; } + public string getUsername() + { + 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 null; + + return username; + } // GET: api/<UserController> [HttpGet] @@ -36,17 +53,9 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult<User> MyProfilePage() { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); var user = userService.GetUserUsername(username); @@ -61,7 +70,6 @@ namespace api.Controllers [HttpPost] public ActionResult<User> Post([FromBody] User user) { - var existingUser = userService.GetUserUsername(user.Username); if (existingUser != null) @@ -81,20 +89,10 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult PutPass([FromBody] string[] Password) { - 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(); - + string username = getUsername(); + if (username == null) + return BadRequest(); User user = new User(); @@ -122,17 +120,9 @@ namespace api.Controllers [HttpPut("changeinfo")] public ActionResult Put([FromBody] User user) { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); return Ok(userService.Update(username, user)); @@ -143,17 +133,9 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult Delete() { - 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 + string username = getUsername(); + + if (username == null) return BadRequest(); var user = userService.GetUserUsername(username); diff --git a/backend/api/api/Models/Dataset.cs b/backend/api/api/Models/Dataset.cs index 12dcfa08..47814449 100644 --- a/backend/api/api/Models/Dataset.cs +++ b/backend/api/api/Models/Dataset.cs @@ -25,6 +25,7 @@ namespace api.Models public bool hasHeader { get; set; } public ColumnInfo[] columnInfo { get; set; } + public int rowCount { get; set; } public int nullCols { get; set; } public int nullRows { get; set; } public bool isPreProcess { get; set; } diff --git a/backend/api/api/Models/Experiment.cs b/backend/api/api/Models/Experiment.cs index d5ce7627..bf029116 100644 --- a/backend/api/api/Models/Experiment.cs +++ b/backend/api/api/Models/Experiment.cs @@ -10,6 +10,7 @@ namespace api.Models public string _id { get; set; } public string name { get; set; } public string description { get; set; } + public string encoding { get; set; } public List<string> ModelIds { get; set; } public string datasetId { get; set; } public string uploaderId { get; set; } diff --git a/backend/api/api/Models/Model.cs b/backend/api/api/Models/Model.cs index f0e4d346..72f989a6 100644 --- a/backend/api/api/Models/Model.cs +++ b/backend/api/api/Models/Model.cs @@ -23,7 +23,6 @@ namespace api.Models //Neural net training public string type { get; set; } - public string encoding { get; set; } public string optimizer { get; set; } public string lossFunction { get; set; } //public int inputNeurons { get; set; } diff --git a/backend/api/api/Models/Predictor.cs b/backend/api/api/Models/Predictor.cs index 911a9aee..b1d6444b 100644 --- a/backend/api/api/Models/Predictor.cs +++ b/backend/api/api/Models/Predictor.cs @@ -24,7 +24,7 @@ namespace api.Models /* { - "_id" : "6244950f26cf2385bc29ba28", + "_id" : "", "username" : "ivan123", "name" : "Neki prediktor", "description" : "Neki opis prediktora koji je unet tamo", @@ -32,9 +32,10 @@ namespace api.Models "proba2", "proba3" ], - "output" : "", + "output" : "izlaz", "isPublic" : true, - "accessibleByLink" : false, - "dateCreated" : "232" + "accessibleByLink" : true, + "dateCreated" : "2022-04-11T20:33:26.937+00:00", + "experimentId" : "Neki id eksperimenta" } */
\ No newline at end of file diff --git a/backend/api/api/Services/IPredictorService.cs b/backend/api/api/Services/IPredictorService.cs index 7ea8d85e..729dd0b6 100644 --- a/backend/api/api/Services/IPredictorService.cs +++ b/backend/api/api/Services/IPredictorService.cs @@ -14,7 +14,6 @@ namespace api.Services Predictor Create(Predictor predictor); void Update(string username, string name, Predictor predictor); void Delete(string username, string name); - bool CheckDb(); } } diff --git a/backend/api/api/Services/PredictorService.cs b/backend/api/api/Services/PredictorService.cs index 22432ec2..b89eaded 100644 --- a/backend/api/api/Services/PredictorService.cs +++ b/backend/api/api/Services/PredictorService.cs @@ -45,12 +45,11 @@ namespace api.Services return _predictor.Find(predictor => predictor._id == id && (predictor.username == username || predictor.isPublic == true)).FirstOrDefault(); } - //last private models + public List<Predictor> SortPredictors(string username, bool ascdsc, int latest) { List<Predictor> list = _predictor.Find(predictor => predictor.username == username).ToList(); - if (ascdsc) list = list.OrderBy(predictor => predictor.dateCreated).ToList(); else @@ -66,17 +65,6 @@ namespace api.Services public void Update(string username, string name, Predictor predictor) { _predictor.ReplaceOne(predictor => predictor.username == username && predictor.name == name, predictor); - - } - public bool CheckDb() - { - Predictor? predictor = null; - predictor = _predictor.Find(predictor => predictor.username == "igrannonica").FirstOrDefault(); - - if (predictor != null) - return false; - else - return true; } } } diff --git a/backend/microservice/api/ml_service.py b/backend/microservice/api/ml_service.py index b5f5e9bf..4d2212f7 100644 --- a/backend/microservice/api/ml_service.py +++ b/backend/microservice/api/ml_service.py @@ -101,99 +101,103 @@ class TrainingResultRegression: class TrainingResult: metrics: dict ''' -def train(dataset, params, callback): - problem_type = params["type"] - data = pd.DataFrame() - for col in params["inputColumns"]: - data[col]=dataset[col] +def train(dataset, paramsModel, paramsExperiment, callback): + problem_type = paramsModel["type"] + dataModel = pd.DataFrame() + dataExperiment = pd.DataFrame() + for col in paramsModel["inputColumns"]: + dataModel[col]=dataset[col] + for col in paramsExperiment["inputColumns"]: + dataExperiment[col]=dataset[col] - print(data.head()) - output_column = params["columnToPredict"] - data[output_column] = dataset[output_column] + print(dataModel.head()) + output_column_model = paramsModel["columnToPredict"] + output_column_experiment = paramsExperiment["outputColumn"] + dataModel[output_column_model] = dataset[output_column_model] # # Brisanje null kolona / redova / zamena #nullreplace=[ # {"column":"Embarked","value":"C","deleteRow":false,"deleteCol":true}, # {"column": "Cabin","value":"C123","deleteRow":"0","deleteCol":"0"}] - null_value_options = params["nullValues"] - null_values_replacers = params["nullValuesReplacers"] + null_value_options = paramsModel["nullValues"] + null_values_replacers = paramsModel["nullValuesReplacers"] if(null_value_options=='replace'): print("replace null") # TODO elif(null_value_options=='delete_rows'): - data=data.dropna() + dataModel=dataModel.dropna() elif(null_value_options=='delete_columns'): - data=data.dropna() + dataModel=dataModel.dropna() # #print(data.isnull().any()) # # Brisanje kolona koje ne uticu na rezultat # - num_rows=data.shape[0] - for col in data.columns: - if((data[col].nunique()==(num_rows)) and (data[col].dtype==np.object_)): - data.pop(col) + num_rows=dataModel.shape[0] + for col in dataModel.columns: + if((dataModel[col].nunique()==(num_rows)) and (dataModel[col].dtype==np.object_)): + dataModel.pop(col) # # Enkodiranje # https://www.analyticsvidhya.com/blog/2020/08/types-of-categorical-data-encoding/ # - encoding=params["encoding"] + encoding=paramsModel["encoding"] if(encoding=='label'): encoder=LabelEncoder() - for col in data.columns: - if(data[col].dtype==np.object_): - data[col]=encoder.fit_transform(data[col]) + for col in dataModel.columns: + if(dataModel[col].dtype==np.object_): + dataModel[col]=encoder.fit_transform(dataModel[col]) elif(encoding=='onehot'): category_columns=[] - for col in data.columns: - if(data[col].dtype==np.object_): + for col in dataModel.columns: + if(dataModel[col].dtype==np.object_): category_columns.append(col) - data=pd.get_dummies(data, columns=category_columns, prefix=category_columns) + dataModel=pd.get_dummies(dataModel, columns=category_columns, prefix=category_columns) elif(encoding=='ordinal'): encoder = OrdinalEncoder() - for col in data.columns: - if(data[col].dtype==np.object_): - data[col]=encoder.fit_transform(data[col]) + for col in dataModel.columns: + if(dataModel[col].dtype==np.object_): + dataModel[col]=encoder.fit_transform(dataModel[col]) elif(encoding=='hashing'): category_columns=[] - for col in data.columns: - if(data[col].dtype==np.object_): + for col in dataModel.columns: + if(dataModel[col].dtype==np.object_): category_columns.append(col) encoder=ce.HashingEncoder(cols=category_columns, n_components=len(category_columns)) - encoder.fit_transform(data) + encoder.fit_transform(dataModel) elif(encoding=='binary'): category_columns=[] - for col in data.columns: - if(data[col].dtype==np.object_): + for col in dataModel.columns: + if(dataModel[col].dtype==np.object_): category_columns.append(col) encoder=ce.BinaryEncoder(cols=category_columns, return_df=True) - encoder.fit_transform(data) + encoder.fit_transform(dataModel) elif(encoding=='baseN'): category_columns=[] - for col in data.columns: - if(data[col].dtype==np.object_): + for col in dataModel.columns: + if(dataModel[col].dtype==np.object_): category_columns.append(col) encoder=ce.BaseNEncoder(cols=category_columns, return_df=True, base=5) - encoder.fit_transform(data) + encoder.fit_transform(dataModel) # # Input - output # x_columns = [] - for col in data.columns: - if(col!=output_column): + for col in dataModel.columns: + if(col!=output_column_model): x_columns.append(col) - x = data[x_columns].values - y = data[output_column].values + x = dataModel[x_columns].values + y = dataModel[output_column_model].values print(x_columns) print(x) # # Podela na test i trening skupove # - test=params["randomTestSetDistribution"] - randomOrder = params["randomOrder"] + test=paramsModel["randomTestSetDistribution"] + randomOrder = paramsModel["randomOrder"] if(randomOrder): random=123 else: @@ -213,60 +217,60 @@ def train(dataset, params, callback): # Treniranje modela # # - hidden_layer_neurons = params["hiddenLayerNeurons"] + hidden_layer_neurons = paramsModel["hiddenLayerNeurons"] if(problem_type=='multi-klasifikacioni'): - func=params['hiddenLayerActivationFunctions'] - output_func = params["outputLayerActivationFunction"] - optimizer = params["optimizer"] - metrics=params['metrics'] - loss_func=params["lossFunction"] - batch_size = params["batchSize"] - epochs = params["epochs"] - inputDim = len(data.columns) - 1 + func=paramsModel['hiddenLayerActivationFunctions'] + output_func = paramsModel["outputLayerActivationFunction"] + optimizer = paramsModel["optimizer"] + metrics=paramsModel['metrics'] + loss_func=paramsModel["lossFunction"] + batch_size=paramsModel["batchSize"] + epochs=paramsModel["epochs"] + inputDim=len(dataModel.columns) - 1 ''' classifier=tf.keras.Sequential() - classifier.add(tf.keras.layers.Dense(units=len(data.columns),input_dim=inputDim))#input layer + classifier.add(tf.keras.layers.Dense(units=len(dataModel.columns),input_dim=inputDim))#input layer for f in func:#hidden layers classifier.add(tf.keras.layers.Dense(hidden_layer_neurons,activation=f)) - numberofclasses=len(output_column.unique()) + numberofclasses=len(output_column_model.unique()) classifier.add(tf.keras.layers.Dense(numberofclasses,activation=output_func))#output layer ''' model=tf.keras.Sequential() model.add(tf.keras.layers.Dense(1,input_dim=x_train.shape[1]))#input layer model.add(tf.keras.layers.Dense(1, activation='sigmoid')) - model.add(tf.keras.layers.Dense(len(output_column.unique())+1, activation='softmax')) + model.add(tf.keras.layers.Dense(len(output_column_model.unique())+1, activation='softmax')) classifier.compile(optimizer=optimizer, loss=loss_func,metrics=metrics) history=classifier.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, callbacks=callback(x_test, y_test)) else: classifier=tf.keras.Sequential() - for func in params["hiddenLayerActivationFunctions"]: - layers = params["hiddenLayers"] - for numNeurons in params["hiddenLayerNeurons"]: + for func in paramsModel["hiddenLayerActivationFunctions"]: + layers = paramsModel["hiddenLayers"] + for numNeurons in paramsModel["hiddenLayerNeurons"]: classifier.add(tf.keras.layers.Dense(units=numNeurons,activation=func)) - output_func = params["outputLayerActivationFunction"] + output_func = paramsModel["outputLayerActivationFunction"] if(problem_type!="regresioni"): classifier.add(tf.keras.layers.Dense(units=1,activation=output_func)) else: classifier.add(tf.keras.layers.Dense(units=1)) - optimizer = params["optimizer"] - metrics=params['metrics'] - loss_func=params["lossFunction"] + optimizer = paramsModel["optimizer"] + metrics=paramsModel['metrics'] + loss_func=paramsModel["lossFunction"] classifier.compile(optimizer=optimizer, loss=loss_func,metrics=metrics) - batch_size = params["batchSize"] - epochs = params["epochs"] + batch_size = paramsModel["batchSize"] + epochs = paramsModel["epochs"] history=classifier.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, callbacks=callback(x_test, y_test), validation_split=0.2) # TODO params["validationSplit"] # # Test # - model_name = params['_id'] + model_name = paramsModel['_id'] #y_pred=classifier.predict(x_test) if(problem_type == "regresioni"): y_pred=classifier.predict(x_test) @@ -375,8 +379,8 @@ def manageH5(datain,params,h5model): data = pd.DataFrame() for col in params["inputColumns"]: data[col]=dataset[col] - output_column = params["columnToPredict"] - data[output_column] = dataset[output_column] + output_column_model = params["columnToPredict"] + data[output_column_model] = dataset[output_column_model] # # Brisanje null kolona / redova / zamena #nullreplace=[ @@ -450,10 +454,10 @@ def manageH5(datain,params,h5model): # x_columns = [] for col in data.columns: - if(col!=output_column): + if(col!=output_column_model): x_columns.append(col) x = data[x_columns].values - y = data[output_column].values + y = data[output_column_model].values y_pred=h5model.predict_classes(x)
\ No newline at end of file |