diff options
author | Sonja Galovic <galovicsonja@gmail.com> | 2022-05-04 20:47:19 +0200 |
---|---|---|
committer | Sonja Galovic <galovicsonja@gmail.com> | 2022-05-04 20:47:19 +0200 |
commit | bae455c30570d97ded6a291238f2393628d7cefa (patch) | |
tree | dc2b9cb7cb34e2499dd2feb0bb61fbbf2500b5a6 /backend | |
parent | eee8b1f3790b243be19b015a37a2acd4e882b31e (diff) | |
parent | 0e945bd6f428edb13718aed247209f215b93e735 (diff) |
Merge branch 'redesign' of http://gitlab.pmf.kg.ac.rs/igrannonica/neuronstellar into redesign
Diffstat (limited to 'backend')
-rw-r--r-- | backend/api/api/Controllers/DatasetController.cs | 14 | ||||
-rw-r--r-- | backend/api/api/Controllers/ExperimentController.cs | 32 | ||||
-rw-r--r-- | backend/api/api/Controllers/ModelController.cs | 10 | ||||
-rw-r--r-- | backend/api/api/Interfaces/IDatasetService.cs | 3 | ||||
-rw-r--r-- | backend/api/api/Interfaces/IExperimentService.cs | 3 | ||||
-rw-r--r-- | backend/api/api/Interfaces/IModelService.cs | 6 | ||||
-rw-r--r-- | backend/api/api/Models/Model.cs | 2 | ||||
-rw-r--r-- | backend/api/api/Services/DatasetService.cs | 31 | ||||
-rw-r--r-- | backend/api/api/Services/ExperimentService.cs | 21 | ||||
-rw-r--r-- | backend/api/api/Services/FillAnEmptyDb.cs | 10 | ||||
-rw-r--r-- | backend/api/api/Services/ModelService.cs | 14 | ||||
-rw-r--r-- | backend/microservice/api/newmlservice.py | 6 |
12 files changed, 112 insertions, 40 deletions
diff --git a/backend/api/api/Controllers/DatasetController.cs b/backend/api/api/Controllers/DatasetController.cs index 58a903eb..1873d9ec 100644 --- a/backend/api/api/Controllers/DatasetController.cs +++ b/backend/api/api/Controllers/DatasetController.cs @@ -18,14 +18,14 @@ namespace api.Controllers private readonly IFileService _fileService; private IJwtToken jwtToken; - public DatasetController(IDatasetService datasetService, IConfiguration configuration,IJwtToken Token,IMlConnectionService mlConnectionService, IFileService fileService) + public DatasetController(IDatasetService datasetService, IConfiguration configuration, IJwtToken Token, IMlConnectionService mlConnectionService, IFileService fileService) { _datasetService = datasetService; _mlConnectionService = mlConnectionService; _fileService = fileService; jwtToken = Token; } - + public string getUserId() { string userId; @@ -116,7 +116,7 @@ namespace api.Controllers if (userId == null) return BadRequest(); - var dataset = _datasetService.GetOneDataset(userId, name); + var dataset = _datasetService.GetOneDatasetN(userId, name); if (dataset == null) return NotFound($"Dataset with name = {name} not found or dataset is not public or not preprocessed"); @@ -129,11 +129,13 @@ namespace api.Controllers public async Task<ActionResult<Dataset>> Post([FromBody] Dataset dataset) { string uploaderId = getUserId(); - + + dataset.uploaderId = uploaderId; + //da li ce preko tokena da se ubaci username ili front salje //dataset.username = usernameToken; //username = "" ako je GUEST DODAO - var existingDataset = _datasetService.GetOneDataset(dataset.uploaderId, dataset.name); + var existingDataset = _datasetService.GetOneDatasetN(dataset.uploaderId, dataset.name); if (existingDataset != null) return NotFound($"Dateset with name = {dataset.name} exisits"); @@ -142,7 +144,7 @@ namespace api.Controllers FileModel fileModel = _fileService.getFile(dataset.fileId); dataset.isPreProcess = false; _datasetService.Create(dataset); - _mlConnectionService.PreProcess(dataset,fileModel.path,uploaderId); + _mlConnectionService.PreProcess(dataset, fileModel.path, uploaderId); return Ok(); } } diff --git a/backend/api/api/Controllers/ExperimentController.cs b/backend/api/api/Controllers/ExperimentController.cs index eecbe756..1cac386a 100644 --- a/backend/api/api/Controllers/ExperimentController.cs +++ b/backend/api/api/Controllers/ExperimentController.cs @@ -53,6 +53,7 @@ namespace api.Controllers return BadRequest(); experiment.uploaderId = uploaderId; + var existingExperiment = _experimentService.Get(uploaderId, experiment.name); if(existingExperiment != null) return NotFound($"Experiment with this name exists"); @@ -99,10 +100,10 @@ namespace api.Controllers if (uploaderId == null) return BadRequest(); - var existingDataset = _experimentService.GetOneExperiment(uploaderId, id); + var existingExperiment = _experimentService.GetOneExperiment(uploaderId, id); //ne mora da se proverava - if (existingDataset == null) + if (existingExperiment == null) return NotFound($"Experiment with ID = {id} or user with ID = {uploaderId} not found"); experiment.lastUpdated = DateTime.UtcNow; @@ -111,5 +112,32 @@ namespace api.Controllers return Ok($"Experiment with ID = {id} updated"); } + + // DELETE api/<ExperimentController>/name + [HttpDelete("{id}")] + [Authorize(Roles = "User")] + public ActionResult Delete(string id) + { + string uploaderId = getUserId(); + + if (uploaderId == null) + return BadRequest(); + + var experiment = _experimentService.GetOneExperiment(uploaderId, id); + + if (experiment == null) + return NotFound($"Experiment with ID = {id} or user with ID = {uploaderId} not found"); + + _experimentService.Delete(experiment.uploaderId, experiment._id); + + return Ok($"Experiment with ID = {id} deleted"); + + } + + public void DeleteHelper(string uploaderId, string experimentId) + { + _experimentService.Delete(uploaderId, experimentId); + } + } } diff --git a/backend/api/api/Controllers/ModelController.cs b/backend/api/api/Controllers/ModelController.cs index d68e98e2..2916fa98 100644 --- a/backend/api/api/Controllers/ModelController.cs +++ b/backend/api/api/Controllers/ModelController.cs @@ -91,10 +91,12 @@ namespace api.Controllers return Ok(); } - - - - + // GET: api/<ModelController>/publicmodels + [HttpGet("publicmodels")] + public ActionResult<List<Model>> GetPublicModels() + { + return _modelService.GetPublicModels(); + } // GET: api/<ModelController>/mymodels [HttpGet("mymodels")] diff --git a/backend/api/api/Interfaces/IDatasetService.cs b/backend/api/api/Interfaces/IDatasetService.cs index f493a2ec..2f7d0010 100644 --- a/backend/api/api/Interfaces/IDatasetService.cs +++ b/backend/api/api/Interfaces/IDatasetService.cs @@ -5,7 +5,8 @@ namespace api.Services { public interface IDatasetService { - Dataset GetOneDataset(string userId, string name); + Dataset GetOneDataset(string userId, string id); + Dataset GetOneDatasetN(string userId, string name); Dataset GetOneDataset(string id); List<Dataset> SearchDatasets(string name); List<Dataset> GetMyDatasets(string userId); diff --git a/backend/api/api/Interfaces/IExperimentService.cs b/backend/api/api/Interfaces/IExperimentService.cs index 2a69cff9..311560e8 100644 --- a/backend/api/api/Interfaces/IExperimentService.cs +++ b/backend/api/api/Interfaces/IExperimentService.cs @@ -8,8 +8,9 @@ namespace api.Services public Experiment Get(string id); public List<Experiment> GetMyExperiments(string id); public Experiment Get(string uploaderId, string name); - Experiment GetOneExperiment(string userId, string name); + Experiment GetOneExperiment(string userId, string id); void Update(string userId, string id, Experiment experiment); + void Delete(string userId, string id); } }
\ No newline at end of file diff --git a/backend/api/api/Interfaces/IModelService.cs b/backend/api/api/Interfaces/IModelService.cs index 00299979..8c4543de 100644 --- a/backend/api/api/Interfaces/IModelService.cs +++ b/backend/api/api/Interfaces/IModelService.cs @@ -3,14 +3,14 @@ using api.Models; namespace api.Services { - public interface IModelService - { + public interface IModelService + { Model GetOneModel(string userId, string name); Model GetOneModel(string id); List<Model> GetMyModels(string userId); List<Model> GetMyModelsByType(string userId, string problemType); List<Model> GetLatestModels(string userId); - //List<Model> GetPublicModels(); + List<Model> GetPublicModels(); Model Create(Model model); Model Replace(Model model); void Update(string userId, string name, Model model); diff --git a/backend/api/api/Models/Model.cs b/backend/api/api/Models/Model.cs index d8921713..f95be715 100644 --- a/backend/api/api/Models/Model.cs +++ b/backend/api/api/Models/Model.cs @@ -40,6 +40,8 @@ namespace api.Models public bool randomOrder { get; set; } public bool randomTestSet { get; set; } public float randomTestSetDistribution { get; set; } + public bool isPublic { get; set; } + public bool accessibleByLink { get; set; } } public class Layer diff --git a/backend/api/api/Services/DatasetService.cs b/backend/api/api/Services/DatasetService.cs index f39cac29..f38a363b 100644 --- a/backend/api/api/Services/DatasetService.cs +++ b/backend/api/api/Services/DatasetService.cs @@ -1,4 +1,5 @@ -using api.Interfaces; +using api.Controllers; +using api.Interfaces; using api.Models; using MongoDB.Driver; @@ -7,11 +8,15 @@ namespace api.Services public class DatasetService : IDatasetService { private readonly IMongoCollection<Dataset> _dataset; + private readonly IMongoCollection<Experiment> _experiment; + private readonly IExperimentService _experimentService; - public DatasetService(IUserStoreDatabaseSettings settings, IMongoClient mongoClient) + public DatasetService(IUserStoreDatabaseSettings settings, IMongoClient mongoClient, IExperimentService experimentService) { var database = mongoClient.GetDatabase(settings.DatabaseName); _dataset = database.GetCollection<Dataset>(settings.DatasetCollectionName); + _experiment = database.GetCollection<Experiment>(settings.ExperimentCollectionName); + _experimentService = experimentService; } public List<Dataset> SearchDatasets(string name) @@ -29,7 +34,13 @@ namespace api.Services //brisanje odredjenog name-a public void Delete(string userId, string id) { - _dataset.DeleteOne(dataset => (dataset.uploaderId == userId && dataset._id == id)); + List<Experiment> experiment = null; + _dataset.DeleteOne(dataset => (dataset.uploaderId == userId && dataset._id == id)); + + experiment = _experiment.Find(experiment => (experiment.datasetId == id && experiment.uploaderId == userId)).ToList(); + + foreach (Experiment experimentItem in experiment) + _experimentService.Delete(userId, experimentItem._id); } public List<Dataset> GetMyDatasets(string userId) @@ -39,7 +50,7 @@ namespace api.Services public List<Dataset> GetGuestDatasets() { //Join Igranonica public datasetove sa svim temp uploadanim datasetovima - List<Dataset> datasets= _dataset.Find(dataset => dataset.uploaderId == "000000000000000000000000" && dataset.isPublic == true && dataset.isPreProcess).ToList(); + List<Dataset> datasets = _dataset.Find(dataset => dataset.uploaderId == "000000000000000000000000" && dataset.isPublic == true && dataset.isPreProcess).ToList(); datasets.AddRange(_dataset.Find(dataset => dataset.uploaderId == "" && dataset.isPreProcess).ToList()); return datasets; } @@ -49,7 +60,7 @@ namespace api.Services { List<Dataset> list = _dataset.Find(dataset => dataset.uploaderId == userId && dataset.isPreProcess).ToList(); - if(ascdsc) + if (ascdsc) list = list.OrderBy(dataset => dataset.lastUpdated).ToList(); else list = list.OrderByDescending(dataset => dataset.lastUpdated).ToList(); @@ -62,7 +73,11 @@ namespace api.Services return _dataset.Find(dataset => dataset.isPublic == true && dataset.isPreProcess).ToList(); } - public Dataset GetOneDataset(string userId, string name) + public Dataset GetOneDataset(string userId, string id) + { + return _dataset.Find(dataset => dataset.uploaderId == userId && dataset._id == id && dataset.isPreProcess).FirstOrDefault(); + } + public Dataset GetOneDatasetN(string userId, string name) { return _dataset.Find(dataset => dataset.uploaderId == userId && dataset.name == name && dataset.isPreProcess).FirstOrDefault(); } @@ -74,13 +89,13 @@ namespace api.Services } //ako je potrebno da se zameni name ili ekstenzija - public void Update(string userId, string id, Dataset dataset ) + public void Update(string userId, string id, Dataset dataset) { _dataset.ReplaceOne(dataset => dataset.uploaderId == userId && dataset._id == id, dataset); } public void Update(Dataset dataset) { - _dataset.ReplaceOne(x=>x._id==dataset._id, dataset); + _dataset.ReplaceOne(x => x._id == dataset._id, dataset); } public string GetDatasetId(string fileId) diff --git a/backend/api/api/Services/ExperimentService.cs b/backend/api/api/Services/ExperimentService.cs index 539e4c08..2ad9d606 100644 --- a/backend/api/api/Services/ExperimentService.cs +++ b/backend/api/api/Services/ExperimentService.cs @@ -7,10 +7,13 @@ namespace api.Services public class ExperimentService : IExperimentService { private readonly IMongoCollection<Experiment> _experiment; + private readonly IMongoCollection<Predictor> _predictor; + public ExperimentService(IUserStoreDatabaseSettings settings, IMongoClient mongoClient) { var database = mongoClient.GetDatabase(settings.DatabaseName); _experiment = database.GetCollection<Experiment>(settings.ExperimentCollectionName); + _predictor = database.GetCollection<Predictor>(settings.PredictorCollectionName); } public Experiment Create(Experiment experiment) @@ -20,31 +23,37 @@ namespace api.Services } public Experiment Get(string id) { - return _experiment.Find(exp=>exp._id == id).FirstOrDefault(); + return _experiment.Find(exp => exp._id == id).FirstOrDefault(); } public Experiment Get(string uploaderId, string name) { - return _experiment.Find(exp => exp.uploaderId == uploaderId && exp.name == name ).FirstOrDefault(); + return _experiment.Find(exp => exp.uploaderId == uploaderId && exp.name == name).FirstOrDefault(); } public void Update(string id, Experiment experiment) { _experiment.ReplaceOne(experiment => experiment._id == id, experiment); } - public List<Experiment> GetMyExperiments(string id) + public List<Experiment> GetMyExperiments(string userId) { - return _experiment.Find(e=>e.uploaderId==id).ToList(); + return _experiment.Find(experiment => experiment.uploaderId == userId).ToList(); } - public Experiment GetOneExperiment(string userId, string name) + public Experiment GetOneExperiment(string userId, string id) { - return _experiment.Find(experiment => experiment.uploaderId == userId && experiment.name == name).FirstOrDefault(); + return _experiment.Find(experiment => experiment.uploaderId == userId && experiment._id == id).FirstOrDefault(); } public void Update(string userId, string id, Experiment experiment) { _experiment.ReplaceOne(experiment => experiment.uploaderId == userId && experiment._id == id, experiment); } + + public void Delete(string userId, string id) + { + _experiment.DeleteOne(experiment => (experiment.uploaderId == userId && experiment._id == id)); + _predictor.DeleteMany(predictor => (predictor.uploaderId == userId && predictor.experimentId == id)); + } } } diff --git a/backend/api/api/Services/FillAnEmptyDb.cs b/backend/api/api/Services/FillAnEmptyDb.cs index 99bbb91f..6148efb6 100644 --- a/backend/api/api/Services/FillAnEmptyDb.cs +++ b/backend/api/api/Services/FillAnEmptyDb.cs @@ -19,9 +19,9 @@ namespace api.Services var database = mongoClient.GetDatabase(settings.DatabaseName); _fileService = new FileService(settings, mongoClient); - _datasetService = new DatasetService(settings, mongoClient); - _modelService = new ModelService(settings, mongoClient); _experimentService = new ExperimentService(settings, mongoClient); + _datasetService = new DatasetService(settings, mongoClient, _experimentService); + _modelService = new ModelService(settings, mongoClient); _predictorService = new PredictorService(settings, mongoClient); } @@ -104,6 +104,8 @@ namespace api.Services model.outputLayerActivationFunction = "sigmoid"; model.metrics = new string[] { }; model.epochs = 5; + model.isPublic = true; + model.accessibleByLink = true; _modelService.Create(model); @@ -215,6 +217,8 @@ namespace api.Services model.outputLayerActivationFunction = "relu"; model.metrics = new string[] { }; model.epochs = 5; + model.isPublic = true; + model.accessibleByLink = true; _modelService.Create(model); @@ -321,6 +325,8 @@ namespace api.Services model.outputLayerActivationFunction = "softmax"; model.metrics = new string[] { }; model.epochs = 1; + model.isPublic = true; + model.accessibleByLink = true; _modelService.Create(model); diff --git a/backend/api/api/Services/ModelService.cs b/backend/api/api/Services/ModelService.cs index 12297635..e852d71f 100644 --- a/backend/api/api/Services/ModelService.cs +++ b/backend/api/api/Services/ModelService.cs @@ -5,14 +5,16 @@ using MongoDB.Driver; namespace api.Services { - public class ModelService : IModelService + public class ModelService : IModelService { private readonly IMongoCollection<Model> _model; + private readonly IMongoCollection<Predictor> _predictor; public ModelService(IUserStoreDatabaseSettings settings, IMongoClient mongoClient) { var database = mongoClient.GetDatabase(settings.DatabaseName); _model = database.GetCollection<Model>(settings.ModelCollectionName); + _predictor = database.GetCollection<Predictor>(settings.PredictorCollectionName); } public Model Create(Model model) @@ -28,7 +30,11 @@ namespace api.Services public void Delete(string userId, string name) { + Model model = _model.Find(model => model.uploaderId == userId && model.name == name).FirstOrDefault(); + _model.DeleteOne(model => (model.uploaderId == userId && model.name == name)); + _predictor.DeleteMany(predictor => (predictor.uploaderId == userId && predictor.modelId == model._id)); + } public List<Model> GetMyModels(string userId) @@ -48,12 +54,12 @@ namespace api.Services return list; } - /* + public List<Model> GetPublicModels() { return _model.Find(model => model.isPublic == true).ToList(); } - */ + public Model GetOneModel(string userId, string name) { return _model.Find(model => model.uploaderId == userId && model.name == name).FirstOrDefault(); @@ -93,7 +99,7 @@ namespace api.Services return false; else return true; - + } } } diff --git a/backend/microservice/api/newmlservice.py b/backend/microservice/api/newmlservice.py index 3244e82f..9e26b03a 100644 --- a/backend/microservice/api/newmlservice.py +++ b/backend/microservice/api/newmlservice.py @@ -349,7 +349,7 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): classifier.compile(loss =paramsModel["lossFunction"] , optimizer = opt, metrics =paramsModel['metrics']) - history=classifier.fit(x_train, y_train, epochs = paramsModel['epochs'],batch_size=paramsModel['batchSize'],callbacks=callback(x_test, y_test,paramsModel['_id'])) + history=classifier.fit(x_train, y_train, epochs = paramsModel['epochs'],batch_size=float(paramsModel['batchSize']),callbacks=callback(x_test, y_test,paramsModel['_id'])) hist=history.history #plt.plot(hist['accuracy']) @@ -403,7 +403,7 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): classifier.compile(loss =paramsModel["lossFunction"] , optimizer = opt , metrics =paramsModel['metrics']) - history=classifier.fit(x_train, y_train, epochs = paramsModel['epochs'],batch_size=paramsModel['batchSize'],callbacks=callback(x_test, y_test,paramsModel['_id'])) + history=classifier.fit(x_train, y_train, epochs = paramsModel['epochs'],batch_size=float(paramsModel['batchSize']),callbacks=callback(x_test, y_test,paramsModel['_id'])) hist=history.history y_pred=classifier.predict(x_test) y_pred=(y_pred>=0.5).astype('int') @@ -452,7 +452,7 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): classifier.compile(loss =paramsModel["lossFunction"] , optimizer = opt , metrics =paramsModel['metrics']) - history=classifier.fit(x_train, y_train, epochs = paramsModel['epochs'],batch_size=paramsModel['batchSize'],callbacks=callback(x_test, y_test,paramsModel['_id'])) + history=classifier.fit(x_train, y_train, epochs = paramsModel['epochs'],batch_size=float(paramsModel['batchSize']),callbacks=callback(x_test, y_test,paramsModel['_id'])) hist=history.history y_pred=classifier.predict(x_test) #print(classifier.evaluate(x_test, y_test)) |