aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/api/api/Controllers/DatasetController.cs105
-rw-r--r--backend/api/api/Controllers/ExperimentController.cs56
-rw-r--r--backend/api/api/Controllers/FileController.cs83
-rw-r--r--backend/api/api/Controllers/ModelController.cs122
-rw-r--r--backend/api/api/Controllers/PredictorController.cs142
-rw-r--r--backend/api/api/Controllers/UserController.cs76
-rw-r--r--backend/api/api/Models/Dataset.cs1
-rw-r--r--backend/api/api/Models/Experiment.cs1
-rw-r--r--backend/api/api/Models/Model.cs1
-rw-r--r--backend/api/api/Models/Predictor.cs9
-rw-r--r--backend/api/api/Services/IPredictorService.cs1
-rw-r--r--backend/api/api/Services/PredictorService.cs14
-rw-r--r--backend/microservice/api/ml_service.py138
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