aboutsummaryrefslogtreecommitdiff
path: root/backend/api
diff options
context:
space:
mode:
Diffstat (limited to 'backend/api')
-rw-r--r--backend/api/api/Controllers/DatasetController.cs38
-rw-r--r--backend/api/api/Controllers/ModelController.cs52
-rw-r--r--backend/api/api/Controllers/PredictorController.cs51
-rw-r--r--backend/api/api/Models/Dataset.cs4
-rw-r--r--backend/api/api/Models/Model.cs6
-rw-r--r--backend/api/api/Models/Predictor.cs2
-rw-r--r--backend/api/api/Services/DatasetService.cs7
-rw-r--r--backend/api/api/Services/IDatasetService.cs2
-rw-r--r--backend/api/api/Services/IModelService.cs2
-rw-r--r--backend/api/api/Services/IPredictorService.cs1
-rw-r--r--backend/api/api/Services/ModelService.cs22
-rw-r--r--backend/api/api/Services/PredictorService.cs9
12 files changed, 138 insertions, 58 deletions
diff --git a/backend/api/api/Controllers/DatasetController.cs b/backend/api/api/Controllers/DatasetController.cs
index 1ad180b7..7d754a9b 100644
--- a/backend/api/api/Controllers/DatasetController.cs
+++ b/backend/api/api/Controllers/DatasetController.cs
@@ -40,7 +40,7 @@ namespace api.Controllers
}
else
return BadRequest();
-
+
//ako bude trebao ID, samo iz baze uzeti
return _datasetService.GetMyDatesets(username);
@@ -66,43 +66,11 @@ namespace api.Controllers
//ako bude trebao ID, samo iz baze uzeti
- List<Dataset> lista = _datasetService.GetMyDatesets(username);
-
- List<Dataset> novaLista = new List<Dataset>();
-
- lista.Reverse();
-
- for(int i = 0; i < latest; i++)
- novaLista.Add(lista[i]);
-
- return novaLista;
- }
-
- // GET: api/<DatasetController>/getoldestdataset/{number}
- [HttpGet("getoldestdatasets/{oldest}")]
- [Authorize(Roles = "User")]
- public ActionResult<List<Dataset>> GetOldestDatasets(int oldest)
- {
- 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();
-
- //ako bude trebao ID, samo iz baze uzeti
-
- List<Dataset> lista = _datasetService.GetMyDatesets(username);
+ List<Dataset> lista = _datasetService.GetLatestDatasets(username, latest);
List<Dataset> novaLista = new List<Dataset>();
- for (int i = 0; i < oldest; i++)
+ for (int i = 0; i < latest; i++)
novaLista.Add(lista[i]);
return novaLista;
diff --git a/backend/api/api/Controllers/ModelController.cs b/backend/api/api/Controllers/ModelController.cs
index 1d03d924..85fef848 100644
--- a/backend/api/api/Controllers/ModelController.cs
+++ b/backend/api/api/Controllers/ModelController.cs
@@ -34,7 +34,7 @@ namespace api.Controllers
}
// GET: api/<ModelController>/mymodels
- [HttpGet("/mymodels")]
+ [HttpGet("mymodels")]
[Authorize(Roles = "User")]
public ActionResult<List<Model>> Get()
{
@@ -54,9 +54,9 @@ namespace api.Controllers
return _modelService.GetMyModels(username);
}
- // name modela
+ // vraca svoj model prema nekom imenu
// GET api/<ModelController>/{name}
- [HttpGet("/{name}")]
+ [HttpGet("{name}")]
[Authorize(Roles = "User")]
public ActionResult<Model> Get(string name)
{
@@ -81,11 +81,53 @@ namespace api.Controllers
return model;
}
+ //odraditi da vraca modele prema nekom imenu
+
+
+
+ // moze da vraca sve modele pa da se ovde odradi orderByDesc
+ //odraditi to i u Datasetove i Predictore
+ // GET: api/<ModelController>/getlatestmodels/{number}
+ [HttpGet("getlatestmodels/{latest}")]
+ [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
+ return BadRequest();
+
+ //ako bude trebao ID, samo iz baze uzeti
+
+ List<Model> lista = _modelService.GetLatestModels(username);
+
+ List<Model> novaLista = new List<Model>();
+
+ for (int i = 0; i < latest; i++)
+ novaLista.Add(lista[i]);
+
+ return novaLista;
+ }
+
+
+
+
// POST api/<ModelController>/add
[HttpPost("add")]
[Authorize(Roles = "User")]
public ActionResult<Model> Post([FromBody] Model model)
{
+ if (_modelService.CheckHyperparameters(model.inputNeurons, model.hiddenLayerNeurons, model.hiddenLayers, model.outputNeurons) == false)
+ return BadRequest("Bad parameters!");
+
var existingModel = _modelService.GetOneModel(model.username, model.name);
if (existingModel != null)
@@ -98,7 +140,7 @@ namespace api.Controllers
}
}
- // PUT api/<ModelController>/{username}/{name}
+ // PUT api/<ModelController>/{name}
[HttpPut("{name}")]
[Authorize(Roles = "User")]
public ActionResult Put(string name, [FromBody] Model model)
@@ -126,7 +168,7 @@ namespace api.Controllers
return NoContent();
}
- // DELETE api/<ModelController>/username
+ // DELETE api/<ModelController>/name
[HttpDelete("{name}")]
[Authorize(Roles = "User")]
public ActionResult Delete(string name)
diff --git a/backend/api/api/Controllers/PredictorController.cs b/backend/api/api/Controllers/PredictorController.cs
index d5a55b3c..66a13aff 100644
--- a/backend/api/api/Controllers/PredictorController.cs
+++ b/backend/api/api/Controllers/PredictorController.cs
@@ -49,7 +49,7 @@ namespace api.Controllers
}
// GET api/<PredictorController>/{name}
- [HttpGet("/{name}")]
+ [HttpGet("{name}")]
[Authorize(Roles = "User")]
public ActionResult<Predictor> Get(string name)
{
@@ -73,15 +73,45 @@ namespace api.Controllers
return predictor;
}
+ // moze da vraca sve modele pa da se ovde odradi orderByDesc
+ //odraditi to i u Datasetove i Predictore
+ // GET: api/<PredictorController>/getlatestpredictors/{number}
+ [HttpGet("getlatestpredictors/{latest}")]
+ [Authorize(Roles = "User")]
+ public ActionResult<List<Predictor>> GetLatestPredictors(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();
+
+ //ako bude trebao ID, samo iz baze uzeti
+ List<Predictor> lista = _predictorService.GetLatestPredictors(username);
+
+ List<Predictor> novaLista = new List<Predictor>();
+
+ for (int i = 0; i < latest; i++)
+ novaLista.Add(lista[i]);
+
+ return novaLista;
+ }
// POST api/<PredictorController>/add
[HttpPost("add")]
[Authorize(Roles = "User")]
public ActionResult<Predictor> Post([FromBody] Predictor predictor)
{
- var existingModel = _predictorService.GetOnePredictor(predictor.username, predictor.name);
+ var existingPredictor = _predictorService.GetOnePredictor(predictor.username, predictor.name);
- if (existingModel != null)
+ if (existingPredictor != null)
return NotFound($"Predictor with name = {predictor.name} exisits");
else
{
@@ -94,7 +124,7 @@ namespace api.Controllers
// PUT api/<PredictorController>/{name}
- [HttpPut("/{name}")]
+ [HttpPut("{name}")]
[Authorize(Roles = "User")]
public ActionResult Put(string name, [FromBody] Predictor predictor)
{
@@ -111,10 +141,10 @@ namespace api.Controllers
else
return BadRequest();
- var existingDataset = _predictorService.GetOnePredictor(username, name);
+ var existingPredictor = _predictorService.GetOnePredictor(username, name);
//ne mora da se proverava
- if (existingDataset == null)
+ if (existingPredictor == null)
return NotFound($"Predictor with name = {name} or user with username = {username} not found");
_predictorService.Update(username, name, predictor);
@@ -122,9 +152,16 @@ 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}")]
+ [HttpDelete("{name}")]
[Authorize(Roles = "User")]
public ActionResult Delete(string name)
{
diff --git a/backend/api/api/Models/Dataset.cs b/backend/api/api/Models/Dataset.cs
index d4649c17..1bf080ec 100644
--- a/backend/api/api/Models/Dataset.cs
+++ b/backend/api/api/Models/Dataset.cs
@@ -18,8 +18,8 @@ namespace api.Models
public string extension { get; set; }
public bool isPublic { get; set; }
public bool accessibleByLink { get; set; }
- public string dateCreated { get; set; }
- public string lastUpdated { get; set; }
+ public DateTime dateCreated { get; set; }
+ public DateTime lastUpdated { get; set; }
}
}
diff --git a/backend/api/api/Models/Model.cs b/backend/api/api/Models/Model.cs
index dfc4336a..5678daaf 100644
--- a/backend/api/api/Models/Model.cs
+++ b/backend/api/api/Models/Model.cs
@@ -15,8 +15,8 @@ namespace api.Models
public string name { get; set; }
public string description { get; set; }
//datetime
- public string dateCreated { get; set; }
- public string lastUpdated { get; set; }
+ public DateTime dateCreated { get; set; }
+ public DateTime lastUpdated { get; set; }
//proveriti id
public string datasetId { get; set; }
@@ -36,6 +36,8 @@ namespace api.Models
public int hiddenLayerNeurons { get; set; }
public int hiddenLayers { get; set; }
public int batchSize { get; set; }
+ // na izlazu je moguce da bude vise neurona (klasifikacioni problem sa vise od 2 klase)
+ public int outputNeurons { get; set; }
public string inputLayerActivationFunction { get; set; }
public string hiddenLayerActivationFunction { get; set; }
public string outputLayerActivationFunction { get; set; }
diff --git a/backend/api/api/Models/Predictor.cs b/backend/api/api/Models/Predictor.cs
index cd2f4557..568719fc 100644
--- a/backend/api/api/Models/Predictor.cs
+++ b/backend/api/api/Models/Predictor.cs
@@ -16,7 +16,7 @@ namespace api.Models
public string output { get; set; }
public bool isPublic { get; set; }
public bool accessibleByLink { get; set; }
- public string dateCreated { get; set; }
+ public DateTime dateCreated { get; set; }
}
}
diff --git a/backend/api/api/Services/DatasetService.cs b/backend/api/api/Services/DatasetService.cs
index 880570dd..27da2162 100644
--- a/backend/api/api/Services/DatasetService.cs
+++ b/backend/api/api/Services/DatasetService.cs
@@ -1,5 +1,4 @@
-using System.Linq;
-using api.Interfaces;
+using api.Interfaces;
using api.Models;
using MongoDB.Driver;
@@ -32,12 +31,12 @@ namespace api.Services
return _dataset.Find(dataset => dataset.username == username).ToList();
}
+ //poslednji datasetovi
public List<Dataset> GetLatestDatasets(string username, int latest)
{
List<Dataset> list = _dataset.Find(dataset => dataset.username == username).ToList();
-
-
+ list = list.OrderByDescending(dataset => dataset.lastUpdated).ToList();
return list;
}
diff --git a/backend/api/api/Services/IDatasetService.cs b/backend/api/api/Services/IDatasetService.cs
index 19a0aabc..40816b4c 100644
--- a/backend/api/api/Services/IDatasetService.cs
+++ b/backend/api/api/Services/IDatasetService.cs
@@ -6,7 +6,7 @@ namespace api.Services
public interface IDatasetService
{
Dataset GetOneDataset(string username, string name);
- List<Dataset> GetMyDatesets(string username);
+ List<Dataset> GetMyDatesets(string username);
List<Dataset> GetLatestDatasets(string username, int latest);
List<Dataset> GetPublicDatesets();
Dataset Create(Dataset dataset);
diff --git a/backend/api/api/Services/IModelService.cs b/backend/api/api/Services/IModelService.cs
index c1931ffa..ee5c279f 100644
--- a/backend/api/api/Services/IModelService.cs
+++ b/backend/api/api/Services/IModelService.cs
@@ -7,10 +7,12 @@ namespace api.Services
{
Model GetOneModel(string username, string name);
List<Model> GetMyModels(string username);
+ List<Model> GetLatestModels(string username);
//List<Model> GetPublicModels();
Model Create(Model model);
void Update(string username, string name, Model model);
void Delete(string username, string name);
+ bool CheckHyperparameters(int inputNeurons, int hiddenLayerNeurons, int hiddenLayers, int outputNeurons);
}
}
diff --git a/backend/api/api/Services/IPredictorService.cs b/backend/api/api/Services/IPredictorService.cs
index 594b233b..e34ced7f 100644
--- a/backend/api/api/Services/IPredictorService.cs
+++ b/backend/api/api/Services/IPredictorService.cs
@@ -7,6 +7,7 @@ namespace api.Services
{
Predictor GetOnePredictor(string username, string name);
List<Predictor> GetMyPredictors(string username);
+ List<Predictor> GetLatestPredictors(string username);
List<Predictor> GetPublicPredictors();
Predictor Create(Predictor predictor);
void Update(string username, string name, Predictor predictor);
diff --git a/backend/api/api/Services/ModelService.cs b/backend/api/api/Services/ModelService.cs
index 2ba3c54d..f42219f5 100644
--- a/backend/api/api/Services/ModelService.cs
+++ b/backend/api/api/Services/ModelService.cs
@@ -7,7 +7,6 @@ namespace api.Services
{
public class ModelService : IModelService
{
-
private readonly IMongoCollection<Model> _model;
public ModelService(IUserStoreDatabaseSettings settings, IMongoClient mongoClient)
@@ -31,6 +30,15 @@ namespace api.Services
{
return _model.Find(model => model.username == username).ToList();
}
+ public List<Model> GetLatestModels(string username)
+ {
+ List<Model> list = _model.Find(model => model.username == username).ToList();
+
+ list = list.OrderByDescending(model => model.lastUpdated).ToList();
+
+ return list;
+ }
+
/*
public List<Model> GetPublicModels()
{
@@ -46,6 +54,18 @@ namespace api.Services
{
_model.ReplaceOne(model => model.username == username && model.name == name, model);
}
+ //
+ public bool CheckHyperparameters(int inputNeurons, int hiddenLayerNeurons, int hiddenLayers, int outputNeurons)
+ {
+ if (hiddenLayers <= 0 || hiddenLayerNeurons <= 0)
+ return false;
+ if (hiddenLayers > inputNeurons)
+ return false;
+ if (hiddenLayerNeurons <= 2 * inputNeurons || hiddenLayerNeurons <= (2 / 3) * inputNeurons + outputNeurons || (hiddenLayerNeurons <= Math.Max(inputNeurons, outputNeurons) && hiddenLayerNeurons >= Math.Min(inputNeurons, outputNeurons)))
+ return true;
+ return false;
+ }
+
}
}
diff --git a/backend/api/api/Services/PredictorService.cs b/backend/api/api/Services/PredictorService.cs
index 69fb25c9..d1190440 100644
--- a/backend/api/api/Services/PredictorService.cs
+++ b/backend/api/api/Services/PredictorService.cs
@@ -35,6 +35,15 @@ namespace api.Services
return _predictor.Find(predictor => predictor.username == username && predictor.name == name).FirstOrDefault();
}
+ //last private models
+ public List<Predictor> GetLatestPredictors(string username)
+ {
+ List<Predictor> list = _predictor.Find(predictor => predictor.username == username).ToList();
+
+ list = list.OrderByDescending(predictor => predictor.dateCreated).ToList();
+
+ return list;
+ }
public List<Predictor> GetPublicPredictors()
{