From ff5bf81a14d3024f8ff1764db488dec6790ed37e Mon Sep 17 00:00:00 2001 From: Ivan Ljubisavljevic Date: Sat, 19 Mar 2022 17:56:13 +0100 Subject: GetLatestDatasets i GetOldestDatasets odradjen. Potrebne ispravke #41 --- backend/api/api/Controllers/DatasetController.cs | 75 ++++++++++++++++++++++-- backend/api/api/Services/DatasetService.cs | 14 ++++- backend/api/api/Services/IDatasetService.cs | 3 +- 3 files changed, 84 insertions(+), 8 deletions(-) (limited to 'backend/api') diff --git a/backend/api/api/Controllers/DatasetController.cs b/backend/api/api/Controllers/DatasetController.cs index c0ba0039..1ad180b7 100644 --- a/backend/api/api/Controllers/DatasetController.cs +++ b/backend/api/api/Controllers/DatasetController.cs @@ -24,7 +24,7 @@ namespace api.Controllers // GET: api//mydatasets - [HttpGet("/mydatasets")] + [HttpGet("mydatasets")] [Authorize(Roles = "User")] public ActionResult> Get() { @@ -40,14 +40,77 @@ namespace api.Controllers } else return BadRequest(); - + //ako bude trebao ID, samo iz baze uzeti return _datasetService.GetMyDatesets(username); } + // GET: api//getlatestdataset/{number} + [HttpGet("getlatestdatasets/{latest}")] + [Authorize(Roles = "User")] + public ActionResult> GetLatestDatasets(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 lista = _datasetService.GetMyDatesets(username); + + List novaLista = new List(); + + lista.Reverse(); + + for(int i = 0; i < latest; i++) + novaLista.Add(lista[i]); + + return novaLista; + } + + // GET: api//getoldestdataset/{number} + [HttpGet("getoldestdatasets/{oldest}")] + [Authorize(Roles = "User")] + public ActionResult> 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 lista = _datasetService.GetMyDatesets(username); + + List novaLista = new List(); + + for (int i = 0; i < oldest; i++) + novaLista.Add(lista[i]); + + return novaLista; + } + + // GET: api//publicdatasets - [HttpGet("/datasets")] + [HttpGet("publicdatasets")] public ActionResult> GetPublicDS() { return _datasetService.GetPublicDatesets(); @@ -55,7 +118,7 @@ namespace api.Controllers // GET api//{name} //get odredjeni dataset - [HttpGet("/{name}")] + [HttpGet("{name}")] [Authorize(Roles = "User")] public ActionResult Get(string name) { @@ -114,7 +177,7 @@ namespace api.Controllers } // PUT api//{name} - [HttpPut("/{name}")] + [HttpPut("{name}")] [Authorize(Roles = "User")] public ActionResult Put(string name, [FromBody] Dataset dataset) { @@ -143,7 +206,7 @@ namespace api.Controllers } // DELETE api//name - [HttpDelete("/{name}")] + [HttpDelete("{name}")] [Authorize(Roles = "User")] public ActionResult Delete(string name) { diff --git a/backend/api/api/Services/DatasetService.cs b/backend/api/api/Services/DatasetService.cs index 27a8b3ee..880570dd 100644 --- a/backend/api/api/Services/DatasetService.cs +++ b/backend/api/api/Services/DatasetService.cs @@ -1,4 +1,5 @@ -using api.Interfaces; +using System.Linq; +using api.Interfaces; using api.Models; using MongoDB.Driver; @@ -30,6 +31,17 @@ namespace api.Services { return _dataset.Find(dataset => dataset.username == username).ToList(); } + + public List GetLatestDatasets(string username, int latest) + { + List list = _dataset.Find(dataset => dataset.username == username).ToList(); + + + + + return list; + } + public List GetPublicDatesets() { return _dataset.Find(dataset => dataset.isPublic == true).ToList(); diff --git a/backend/api/api/Services/IDatasetService.cs b/backend/api/api/Services/IDatasetService.cs index 61a04b94..19a0aabc 100644 --- a/backend/api/api/Services/IDatasetService.cs +++ b/backend/api/api/Services/IDatasetService.cs @@ -6,7 +6,8 @@ namespace api.Services public interface IDatasetService { Dataset GetOneDataset(string username, string name); - List GetMyDatesets(string username); + List GetMyDatesets(string username); + List GetLatestDatasets(string username, int latest); List GetPublicDatesets(); Dataset Create(Dataset dataset); void Update(string username, string name, Dataset dataset); -- cgit v1.2.3 From 02362378a6b0a7b2db6b7fb2ba09cf529b292508 Mon Sep 17 00:00:00 2001 From: Nevena Bojovic Date: Sat, 19 Mar 2022 22:39:12 +0100 Subject: Proveravanje hiperparametara mreze uradjeno. --- backend/api/api/Controllers/ModelController.cs | 2 ++ backend/api/api/Models/Model.cs | 2 ++ backend/api/api/Services/IModelService.cs | 1 + backend/api/api/Services/ModelService.cs | 12 ++++++- frontend/src/app/_data/Model.ts | 48 +++++++++++++++++++++++--- 5 files changed, 60 insertions(+), 5 deletions(-) (limited to 'backend/api') diff --git a/backend/api/api/Controllers/ModelController.cs b/backend/api/api/Controllers/ModelController.cs index 1d03d924..a4fa99c4 100644 --- a/backend/api/api/Controllers/ModelController.cs +++ b/backend/api/api/Controllers/ModelController.cs @@ -86,6 +86,8 @@ namespace api.Controllers [Authorize(Roles = "User")] public ActionResult 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) diff --git a/backend/api/api/Models/Model.cs b/backend/api/api/Models/Model.cs index dfc4336a..52516cd9 100644 --- a/backend/api/api/Models/Model.cs +++ b/backend/api/api/Models/Model.cs @@ -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/Services/IModelService.cs b/backend/api/api/Services/IModelService.cs index c1931ffa..887be4ae 100644 --- a/backend/api/api/Services/IModelService.cs +++ b/backend/api/api/Services/IModelService.cs @@ -11,6 +11,7 @@ namespace api.Services 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/ModelService.cs b/backend/api/api/Services/ModelService.cs index 2ba3c54d..3d5c3b3e 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; public ModelService(IUserStoreDatabaseSettings settings, IMongoClient mongoClient) @@ -46,6 +45,17 @@ 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/frontend/src/app/_data/Model.ts b/frontend/src/app/_data/Model.ts index a891c10c..594bf129 100644 --- a/frontend/src/app/_data/Model.ts +++ b/frontend/src/app/_data/Model.ts @@ -39,21 +39,61 @@ export enum ANNType { // removeOutliers export enum Encoding { Label = 'label', - OneHot = 'one hot' + OneHot = 'one hot', + BackwardDifference = 'backward difference', + BaseN = 'baseN', + Binary = 'binary', + CatBoost = 'cat boost', + Count = 'count', + GLMM = 'glmm', + Hashing = 'hashing', + Helmert = 'helmert', + JamesStein = 'james stein', + LeaveOneOut = 'leave one out', + MEstimate = 'MEstimate', + Ordinal = 'ordinal', + Sum = 'sum', + Polynomial = 'polynomial', + Target = 'target', + WOE = 'woe', + Quantile = 'quantile' } export enum ActivationFunction { + // linear + Binary_Step = 'binaryStep', + Linear = 'linear', + // non-linear Relu = 'relu', + Leaky_Relu = 'leakyRelu', + Parameterised_Relu = 'parameterisedRelu', + Exponential_Linear_Unit = 'exponentialLinearUnit', + Swish = 'swish', Sigmoid = 'sigmoid', Tanh = 'tanh', - Linear = 'linear' + Softmax = 'softmax' } export enum LossFunction { + // binary classification loss functions BinaryCrossEntropy = 'binary_crossentropy', - MeanSquaredError = 'mean_squared_error' + HingeLoss = 'hinge_loss', + // multi-class classiication loss functions + CategoricalCrossEntropy = 'categorical_crossentropy', + KLDivergence = 'kullback_leibler_divergence', + // regression loss functions + MeanSquaredError = 'mean_squared_error', + MeanAbsoluteError = 'mean_absolute_error', + HuberLoss = 'Huber', } export enum Optimizer { - Adam = 'adam' + Adam = 'Adam', + Adadelta = 'Adadelta', + Adagrad = 'Adagrad', + Ftrl = 'Ftrl', + Nadam = 'Nadam', + SGD = 'SGD', + SGDMomentum = 'SGDMomentum', + RMSprop = 'RMSprop' } \ No newline at end of file -- cgit v1.2.3 From 015ae7ec836d3b94795e5447d1179e3400d10c1f Mon Sep 17 00:00:00 2001 From: Ivan Ljubisavljevic Date: Sun, 20 Mar 2022 15:09:22 +0100 Subject: Odradjen GetLatestDataset, GetLatestModel i GetLatestPredictor. Ispravljeno rutiranje --- backend/api/api/Controllers/DatasetController.cs | 38 ++-------------- backend/api/api/Controllers/ModelController.cs | 50 ++++++++++++++++++--- backend/api/api/Controllers/PredictorController.cs | 51 +++++++++++++++++++--- backend/api/api/Models/Dataset.cs | 4 +- backend/api/api/Models/Model.cs | 6 +-- backend/api/api/Models/Predictor.cs | 2 +- backend/api/api/Services/DatasetService.cs | 7 ++- backend/api/api/Services/IDatasetService.cs | 2 +- backend/api/api/Services/IPredictorService.cs | 1 + backend/api/api/Services/PredictorService.cs | 9 ++++ 10 files changed, 111 insertions(+), 59 deletions(-) (limited to 'backend/api') 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 lista = _datasetService.GetMyDatesets(username); - - List novaLista = new List(); - - lista.Reverse(); - - for(int i = 0; i < latest; i++) - novaLista.Add(lista[i]); - - return novaLista; - } - - // GET: api//getoldestdataset/{number} - [HttpGet("getoldestdatasets/{oldest}")] - [Authorize(Roles = "User")] - public ActionResult> 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 lista = _datasetService.GetMyDatesets(username); + List lista = _datasetService.GetLatestDatasets(username, latest); List novaLista = new List(); - 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 a4fa99c4..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//mymodels - [HttpGet("/mymodels")] + [HttpGet("mymodels")] [Authorize(Roles = "User")] public ActionResult> Get() { @@ -54,9 +54,9 @@ namespace api.Controllers return _modelService.GetMyModels(username); } - // name modela + // vraca svoj model prema nekom imenu // GET api//{name} - [HttpGet("/{name}")] + [HttpGet("{name}")] [Authorize(Roles = "User")] public ActionResult Get(string name) { @@ -81,6 +81,45 @@ 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//getlatestmodels/{number} + [HttpGet("getlatestmodels/{latest}")] + [Authorize(Roles = "User")] + public ActionResult> 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 lista = _modelService.GetLatestModels(username); + + List novaLista = new List(); + + for (int i = 0; i < latest; i++) + novaLista.Add(lista[i]); + + return novaLista; + } + + + + // POST api//add [HttpPost("add")] [Authorize(Roles = "User")] @@ -88,6 +127,7 @@ namespace api.Controllers { 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) @@ -100,7 +140,7 @@ namespace api.Controllers } } - // PUT api//{username}/{name} + // PUT api//{name} [HttpPut("{name}")] [Authorize(Roles = "User")] public ActionResult Put(string name, [FromBody] Model model) @@ -128,7 +168,7 @@ namespace api.Controllers return NoContent(); } - // DELETE api//username + // DELETE api//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//{name} - [HttpGet("/{name}")] + [HttpGet("{name}")] [Authorize(Roles = "User")] public ActionResult 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//getlatestpredictors/{number} + [HttpGet("getlatestpredictors/{latest}")] + [Authorize(Roles = "User")] + public ActionResult> 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 lista = _predictorService.GetLatestPredictors(username); + + List novaLista = new List(); + + for (int i = 0; i < latest; i++) + novaLista.Add(lista[i]); + + return novaLista; + } // POST api//add [HttpPost("add")] [Authorize(Roles = "User")] public ActionResult 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//{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//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 52516cd9..7c884ae9 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,8 +36,6 @@ 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 GetLatestDatasets(string username, int latest) { List 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 GetMyDatesets(string username); + List GetMyDatesets(string username); List GetLatestDatasets(string username, int latest); List GetPublicDatesets(); Dataset Create(Dataset dataset); 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 GetMyPredictors(string username); + List GetLatestPredictors(string username); List GetPublicPredictors(); Predictor Create(Predictor predictor); void Update(string username, string name, Predictor predictor); 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 GetLatestPredictors(string username) + { + List list = _predictor.Find(predictor => predictor.username == username).ToList(); + + list = list.OrderByDescending(predictor => predictor.dateCreated).ToList(); + + return list; + } public List GetPublicPredictors() { -- cgit v1.2.3 From 1d89bde513583d9c28c4d6b7516265eb7fc633d1 Mon Sep 17 00:00:00 2001 From: "DESKTOP-S0O2C44\\ROG" Date: Sun, 20 Mar 2022 15:32:02 +0100 Subject: GetLatestModels FIX #41 --- backend/api/api/Models/Model.cs | 2 ++ backend/api/api/Services/IModelService.cs | 1 + backend/api/api/Services/ModelService.cs | 10 ++++++++++ 3 files changed, 13 insertions(+) (limited to 'backend/api') diff --git a/backend/api/api/Models/Model.cs b/backend/api/api/Models/Model.cs index 7c884ae9..5678daaf 100644 --- a/backend/api/api/Models/Model.cs +++ b/backend/api/api/Models/Model.cs @@ -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/Services/IModelService.cs b/backend/api/api/Services/IModelService.cs index 887be4ae..ee5c279f 100644 --- a/backend/api/api/Services/IModelService.cs +++ b/backend/api/api/Services/IModelService.cs @@ -7,6 +7,7 @@ namespace api.Services { Model GetOneModel(string username, string name); List GetMyModels(string username); + List GetLatestModels(string username); //List GetPublicModels(); Model Create(Model model); void Update(string username, string name, Model model); diff --git a/backend/api/api/Services/ModelService.cs b/backend/api/api/Services/ModelService.cs index 3d5c3b3e..f42219f5 100644 --- a/backend/api/api/Services/ModelService.cs +++ b/backend/api/api/Services/ModelService.cs @@ -30,6 +30,15 @@ namespace api.Services { return _model.Find(model => model.username == username).ToList(); } + public List GetLatestModels(string username) + { + List list = _model.Find(model => model.username == username).ToList(); + + list = list.OrderByDescending(model => model.lastUpdated).ToList(); + + return list; + } + /* public List GetPublicModels() { @@ -56,6 +65,7 @@ namespace api.Services return true; return false; } + } } -- cgit v1.2.3 From 255d683fb4f2e3d341fe41537691b0924aa80f46 Mon Sep 17 00:00:00 2001 From: Ivan Ljubisavljevic Date: Mon, 21 Mar 2022 00:10:41 +0100 Subject: Odradjena pretraga prediktora i datasetova #43 Ispravljen update Datasetova #41 --- backend/api/api/Controllers/DatasetController.cs | 62 ++++++++++++++++------ backend/api/api/Controllers/ModelController.cs | 2 +- backend/api/api/Controllers/PredictorController.cs | 53 ++++++++++++++---- backend/api/api/Services/DatasetService.cs | 19 +++++-- backend/api/api/Services/IDatasetService.cs | 7 +-- backend/api/api/Services/IPredictorService.cs | 3 +- backend/api/api/Services/PredictorService.cs | 13 ++++- 7 files changed, 123 insertions(+), 36 deletions(-) (limited to 'backend/api') diff --git a/backend/api/api/Controllers/DatasetController.cs b/backend/api/api/Controllers/DatasetController.cs index 7d754a9b..9f2013f5 100644 --- a/backend/api/api/Controllers/DatasetController.cs +++ b/backend/api/api/Controllers/DatasetController.cs @@ -22,7 +22,6 @@ namespace api.Controllers jwtToken = new JwtToken(configuration); } - // GET: api//mydatasets [HttpGet("mydatasets")] [Authorize(Roles = "User")] @@ -43,13 +42,16 @@ namespace api.Controllers //ako bude trebao ID, samo iz baze uzeti - return _datasetService.GetMyDatesets(username); + return _datasetService.GetMyDatasets(username); } - // GET: api//getlatestdataset/{number} - [HttpGet("getlatestdatasets/{latest}")] + // GET: api//datesort/{ascdsc}/{latest} + //asc - rastuce 1 + //desc - opadajuce 0 + //ako se posalje 0 kao latest onda ce da izlista sve u nekom poretku + [HttpGet("datesort/{ascdsc}/{latest}")] [Authorize(Roles = "User")] - public ActionResult> GetLatestDatasets(int latest) + public ActionResult> SortDatasets(bool ascdsc, int latest) { string username; var header = Request.Headers[HeaderNames.Authorization]; @@ -64,26 +66,52 @@ namespace api.Controllers else return BadRequest(); - //ako bude trebao ID, samo iz baze uzeti - - List lista = _datasetService.GetLatestDatasets(username, latest); - - List novaLista = new List(); + List lista = _datasetService.SortDatasets(username, ascdsc, latest); - for (int i = 0; i < latest; i++) - novaLista.Add(lista[i]); - return novaLista; + if (latest == 0) + return lista; + else + { + List novaLista = new List(); + for (int i = 0; i < latest; i++) + novaLista.Add(lista[i]); + return novaLista; + } } - // GET: api//publicdatasets [HttpGet("publicdatasets")] public ActionResult> GetPublicDS() { - return _datasetService.GetPublicDatesets(); + return _datasetService.GetPublicDatasets(); + } + + //SEARCH za datasets (public ili private sa ovim imenom ) + // GET api//search/{name} + [HttpGet("search/{name}")] + [Authorize(Roles = "User")] + public ActionResult> 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 + return BadRequest(); + + //ako bude trebao ID, samo iz baze uzeti + + return _datasetService.SearchDatasets(name, username); } + // GET api//{name} //get odredjeni dataset [HttpGet("{name}")] @@ -106,7 +134,7 @@ namespace api.Controllers var dataset = _datasetService.GetOneDataset(username, name); if (dataset == null) - return NotFound($"Dataset with name = {name} or user with username = {username} not found"); + return NotFound($"Dataset with name = {name} not found or dataset is not public"); return dataset; } @@ -168,6 +196,8 @@ namespace api.Controllers if (existingDataset == null) return NotFound($"Dataset with name = {name} or user with username = {username} not found"); + dataset.lastUpdated = DateTime.UtcNow; + _datasetService.Update(username, name, dataset); return Ok($"Dataset with name = {name} updated"); diff --git a/backend/api/api/Controllers/ModelController.cs b/backend/api/api/Controllers/ModelController.cs index 85fef848..1c5b3763 100644 --- a/backend/api/api/Controllers/ModelController.cs +++ b/backend/api/api/Controllers/ModelController.cs @@ -76,7 +76,7 @@ namespace api.Controllers var model = _modelService.GetOneModel(username, name); if (model == null) - return NotFound($"Model with name = {name} or user with username = {username} not found"); + return NotFound($"Model with name = {name} not found"); return model; } diff --git a/backend/api/api/Controllers/PredictorController.cs b/backend/api/api/Controllers/PredictorController.cs index 66a13aff..7f8f1692 100644 --- a/backend/api/api/Controllers/PredictorController.cs +++ b/backend/api/api/Controllers/PredictorController.cs @@ -48,6 +48,33 @@ namespace api.Controllers return _predictorService.GetPublicPredictors(); } + + + //SEARCH za predictore (public ili private sa ovim imenom ) + // GET api//search/{name} + [HttpGet("search/{name}")] + [Authorize(Roles = "User")] + public ActionResult> 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 + return BadRequest(); + + //ako bude trebao ID, samo iz baze uzeti + + return _predictorService.SearchPredictors(name, username); + } + + //da li da se odvoji search za public i posebno za private? // GET api//{name} [HttpGet("{name}")] [Authorize(Roles = "User")] @@ -69,16 +96,19 @@ namespace api.Controllers var predictor = _predictorService.GetOnePredictor(username, name); if (predictor == null) - return NotFound($"Predictor with name = {name} or user with username = {username} not found"); + return NotFound($"Predictor with name = {name} not found or predictor is not public"); return predictor; } // moze da vraca sve modele pa da se ovde odradi orderByDesc //odraditi to i u Datasetove i Predictore - // GET: api//getlatestpredictors/{number} - [HttpGet("getlatestpredictors/{latest}")] + // GET: api//datesort/{ascdsc}/{latest} + //asc - rastuce 1 + //desc - opadajuce 0 + //ako se posalje 0 kao latest onda ce da izlista sve u nekom poretku + [HttpGet("datesort/{ascdsc}/{latest}")] [Authorize(Roles = "User")] - public ActionResult> GetLatestPredictors(int latest) + public ActionResult> SortPredictors(bool ascdsc, int latest) { string username; var header = Request.Headers[HeaderNames.Authorization]; @@ -95,14 +125,19 @@ namespace api.Controllers //ako bude trebao ID, samo iz baze uzeti - List lista = _predictorService.GetLatestPredictors(username); + List lista = _predictorService.SortPredictors(username, ascdsc, latest); - List novaLista = new List(); + if(latest == 0) + return lista; + else + { + List novaLista = new List(); - for (int i = 0; i < latest; i++) - novaLista.Add(lista[i]); + for (int i = 0; i < latest; i++) + novaLista.Add(lista[i]); - return novaLista; + return novaLista; + } } // POST api//add [HttpPost("add")] diff --git a/backend/api/api/Services/DatasetService.cs b/backend/api/api/Services/DatasetService.cs index 27da2162..5e708d11 100644 --- a/backend/api/api/Services/DatasetService.cs +++ b/backend/api/api/Services/DatasetService.cs @@ -13,6 +13,12 @@ namespace api.Services var database = mongoClient.GetDatabase(settings.DatabaseName); _dataset = database.GetCollection(settings.DatasetCollectionName); } + + public List SearchDatasets(string name, string username) + { + return _dataset.Find(dataset => dataset.name == name && dataset.isPublic == true).ToList(); + } + //kreiranje dataseta public Dataset Create(Dataset dataset) { @@ -26,22 +32,25 @@ namespace api.Services _dataset.DeleteOne(dataset => (dataset.username == username && dataset.name == name)); } - public List GetMyDatesets(string username) + public List GetMyDatasets(string username) { return _dataset.Find(dataset => dataset.username == username).ToList(); } //poslednji datasetovi - public List GetLatestDatasets(string username, int latest) + public List SortDatasets(string username, bool ascdsc, int latest) { List list = _dataset.Find(dataset => dataset.username == username).ToList(); - list = list.OrderByDescending(dataset => dataset.lastUpdated).ToList(); + if(ascdsc) + list = list.OrderBy(dataset => dataset.lastUpdated).ToList(); + else + list = list.OrderByDescending(dataset => dataset.lastUpdated).ToList(); return list; } - public List GetPublicDatesets() + public List GetPublicDatasets() { return _dataset.Find(dataset => dataset.isPublic == true).ToList(); } @@ -57,5 +66,7 @@ namespace api.Services { _dataset.ReplaceOne(dataset => dataset.username == username && dataset.name == name, dataset); } + + } } diff --git a/backend/api/api/Services/IDatasetService.cs b/backend/api/api/Services/IDatasetService.cs index 40816b4c..be56f5cb 100644 --- a/backend/api/api/Services/IDatasetService.cs +++ b/backend/api/api/Services/IDatasetService.cs @@ -6,9 +6,10 @@ namespace api.Services public interface IDatasetService { Dataset GetOneDataset(string username, string name); - List GetMyDatesets(string username); - List GetLatestDatasets(string username, int latest); - List GetPublicDatesets(); + List SearchDatasets(string name, string username); + List GetMyDatasets(string username); + List SortDatasets(string username, bool ascdsc, int latest); + List GetPublicDatasets(); Dataset Create(Dataset dataset); void Update(string username, string name, Dataset dataset); void Delete(string username, string name); diff --git a/backend/api/api/Services/IPredictorService.cs b/backend/api/api/Services/IPredictorService.cs index e34ced7f..2017add2 100644 --- a/backend/api/api/Services/IPredictorService.cs +++ b/backend/api/api/Services/IPredictorService.cs @@ -6,8 +6,9 @@ namespace api.Services public interface IPredictorService { Predictor GetOnePredictor(string username, string name); + List SearchPredictors(string name, string username); List GetMyPredictors(string username); - List GetLatestPredictors(string username); + List SortPredictors(string username, bool ascdsc, int latest); List GetPublicPredictors(); Predictor Create(Predictor predictor); void Update(string username, string name, Predictor predictor); diff --git a/backend/api/api/Services/PredictorService.cs b/backend/api/api/Services/PredictorService.cs index d1190440..05860126 100644 --- a/backend/api/api/Services/PredictorService.cs +++ b/backend/api/api/Services/PredictorService.cs @@ -14,6 +14,11 @@ namespace api.Services _predictor = database.GetCollection(settings.PredictorCollectionName); } + public List SearchPredictors(string name, string username) + { + return _predictor.Find(predictor => predictor.name == name && predictor.isPublic == true).ToList(); + } + public Predictor Create(Predictor predictor) { _predictor.InsertOne(predictor); @@ -36,12 +41,15 @@ namespace api.Services } //last private models - public List GetLatestPredictors(string username) + public List SortPredictors(string username, bool ascdsc, int latest) { List list = _predictor.Find(predictor => predictor.username == username).ToList(); - list = list.OrderByDescending(predictor => predictor.dateCreated).ToList(); + if (ascdsc) + list = list.OrderBy(predictor => predictor.dateCreated).ToList(); + else + list = list.OrderByDescending(predictor => predictor.dateCreated).ToList(); return list; } @@ -55,5 +63,6 @@ namespace api.Services _predictor.ReplaceOne(predictor => predictor.username == username && predictor.name == name, predictor); } + } } -- cgit v1.2.3 From a77c7bff39574428953c162b17d4dee1113e68f7 Mon Sep 17 00:00:00 2001 From: Ivan Ljubisavljevic Date: Mon, 21 Mar 2022 16:31:12 +0100 Subject: api za myprofilepage --- backend/api/api/Controllers/UserController.cs | 31 ++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) (limited to 'backend/api') diff --git a/backend/api/api/Controllers/UserController.cs b/backend/api/api/Controllers/UserController.cs index 58121656..dcab53cc 100644 --- a/backend/api/api/Controllers/UserController.cs +++ b/backend/api/api/Controllers/UserController.cs @@ -2,7 +2,9 @@ using api.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.Net.Http.Headers; using System.Diagnostics; +using System.Net.Http.Headers; // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 //dovrsi kontroler @@ -13,10 +15,12 @@ namespace api.Controllers public class UserController : ControllerBase { private readonly IUserService userService; + private JwtToken jwtToken; - public UserController(IUserService userService) + public UserController(IUserService userService, IConfiguration configuration) { this.userService = userService; + jwtToken = new JwtToken(configuration); } // GET: api/ @@ -38,12 +42,29 @@ namespace api.Controllers return user; } - /* + + + + // GET api//5 //potrebno za profile page - [HttpGet("{id}")] - public ActionResult GetUserUsername(string username) + [HttpGet("myprofile")] + [Authorize(Roles = "User")] + public ActionResult 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 + return BadRequest(); + var user = userService.GetUserUsername(username); if (user == null) @@ -51,7 +72,7 @@ namespace api.Controllers return user; } - */ + // POST api/ [HttpPost] public ActionResult Post([FromBody] User user) -- cgit v1.2.3