aboutsummaryrefslogtreecommitdiff
path: root/backend/api
diff options
context:
space:
mode:
Diffstat (limited to 'backend/api')
-rw-r--r--backend/api/api/Controllers/DatasetController.cs5
-rw-r--r--backend/api/api/Controllers/ModelController.cs12
-rw-r--r--backend/api/api/Controllers/PredictorController.cs30
-rw-r--r--backend/api/api/Controllers/UserController.cs3
-rw-r--r--backend/api/api/Models/Model.cs7
-rw-r--r--backend/api/api/Services/DatasetService.cs12
-rw-r--r--backend/api/api/Services/IDatasetService.cs2
-rw-r--r--backend/api/api/Services/IMlConnectionService.cs2
-rw-r--r--backend/api/api/Services/IModelService.cs1
-rw-r--r--backend/api/api/Services/IPredictorService.cs1
-rw-r--r--backend/api/api/Services/IUserService.cs2
-rw-r--r--backend/api/api/Services/MlConnectionService.cs18
-rw-r--r--backend/api/api/Services/ModelService.cs5
-rw-r--r--backend/api/api/Services/PredictorService.cs5
-rw-r--r--backend/api/api/Services/UserService.cs51
15 files changed, 138 insertions, 18 deletions
diff --git a/backend/api/api/Controllers/DatasetController.cs b/backend/api/api/Controllers/DatasetController.cs
index bae05ba9..d9803744 100644
--- a/backend/api/api/Controllers/DatasetController.cs
+++ b/backend/api/api/Controllers/DatasetController.cs
@@ -24,7 +24,7 @@ namespace api.Controllers
// GET: api/<DatasetController>/mydatasets
[HttpGet("mydatasets")]
- [Authorize(Roles = "User")]
+ [Authorize(Roles = "User,Guest")]
public ActionResult<List<Dataset>> Get()
{
string username;
@@ -39,6 +39,9 @@ namespace api.Controllers
}
else
return BadRequest();
+ //U slucaju da je korisnik gost vrati dataSetove igrannonice
+ if (username == "")
+ return _datasetService.GetGuestDatasets();
//ako bude trebao ID, samo iz baze uzeti
diff --git a/backend/api/api/Controllers/ModelController.cs b/backend/api/api/Controllers/ModelController.cs
index b997efa3..4bc094cd 100644
--- a/backend/api/api/Controllers/ModelController.cs
+++ b/backend/api/api/Controllers/ModelController.cs
@@ -14,22 +14,28 @@ namespace api.Controllers
{
private IMlConnectionService _mlService;
+ private readonly IDatasetService _datasetService;
+ private readonly IFileService _fileService;
private readonly IModelService _modelService;
private JwtToken jwtToken;
- public ModelController(IMlConnectionService mlService, IModelService modelService, IConfiguration configuration)
+ public ModelController(IMlConnectionService mlService, IModelService modelService, IDatasetService datasetService, IFileService fileService, IConfiguration configuration)
{
_mlService = mlService;
_modelService = modelService;
+ _datasetService = datasetService;
+ _fileService = fileService;
jwtToken = new JwtToken(configuration);
}
[HttpPost("sendModel")]
[Authorize(Roles = "User")]
- public async Task<ActionResult<string>> Test([FromBody] object model)
+ public async Task<ActionResult<string>> Test([FromBody] Model model)
{
- var result = await _mlService.SendModelAsync(model);
+ var dataset = _datasetService.GetOneDataset(model.datasetId);
+ var filepath = _fileService.GetFilePath(dataset.fileId, dataset.username);
+ var result = await _mlService.SendModelAsync(model, filepath);
return Ok(result);
}
diff --git a/backend/api/api/Controllers/PredictorController.cs b/backend/api/api/Controllers/PredictorController.cs
index 7f8f1692..63c5d2bf 100644
--- a/backend/api/api/Controllers/PredictorController.cs
+++ b/backend/api/api/Controllers/PredictorController.cs
@@ -74,6 +74,36 @@ namespace api.Controllers
return _predictorService.SearchPredictors(name, username);
}
+ //SEARCH za predictore (public ili private sa ovim imenom )
+ // GET api/<PredictorController>/search/{name}
+ [HttpGet("{id}")]
+ [Authorize(Roles = "User")]
+ 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();
+
+ //ako bude trebao ID, samo iz baze uzeti
+
+ Predictor predictor = _predictorService.GetPredictor(username, id);
+
+ if (predictor == null)
+ return NotFound($"Predictor with id = {id} not found");
+
+ return predictor;
+ }
+
+
//da li da se odvoji search za public i posebno za private?
// GET api/<PredictorController>/{name}
[HttpGet("{name}")]
diff --git a/backend/api/api/Controllers/UserController.cs b/backend/api/api/Controllers/UserController.cs
index 0287f3cb..741382b8 100644
--- a/backend/api/api/Controllers/UserController.cs
+++ b/backend/api/api/Controllers/UserController.cs
@@ -135,8 +135,7 @@ namespace api.Controllers
else
return BadRequest();
- userService.Update(username, user);
- return NoContent();
+ return Ok(userService.Update(username, user));
}
// DELETE api/<UserController>/5
diff --git a/backend/api/api/Models/Model.cs b/backend/api/api/Models/Model.cs
index 5678daaf..2baab1c0 100644
--- a/backend/api/api/Models/Model.cs
+++ b/backend/api/api/Models/Model.cs
@@ -38,10 +38,13 @@ namespace api.Models
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[] hiddenLayerActivationFunctions { get; set; }
public string outputLayerActivationFunction { get; set; }
+ public string[] metrics { get; set; }
+ public int epochs { get; set; }
+ public string nullValues { get; set; }
+ public string[] nullValuesReplacers { get; set; }
}
}
diff --git a/backend/api/api/Services/DatasetService.cs b/backend/api/api/Services/DatasetService.cs
index 5e708d11..2ff271f3 100644
--- a/backend/api/api/Services/DatasetService.cs
+++ b/backend/api/api/Services/DatasetService.cs
@@ -36,6 +36,13 @@ namespace api.Services
{
return _dataset.Find(dataset => dataset.username == username).ToList();
}
+ public List<Dataset> GetGuestDatasets()
+ {
+ //Join Igranonica public datasetove sa svim temp uploadanim datasetovima
+ List<Dataset> datasets= _dataset.Find(dataset => dataset.username == "Igrannonica" && dataset.isPublic == true).ToList();
+ datasets.AddRange(_dataset.Find(dataset => dataset.username == "").ToList());
+ return datasets;
+ }
//poslednji datasetovi
public List<Dataset> SortDatasets(string username, bool ascdsc, int latest)
@@ -61,6 +68,11 @@ namespace api.Services
}
//odraditi za pretragu getOne
+ public Dataset GetOneDataset(string id)
+ {
+ return _dataset.Find(dataset => dataset._id == id).FirstOrDefault();
+ }
+
//ako je potrebno da se zameni name ili ekstenzija
public void Update(string username, string name, Dataset dataset)
{
diff --git a/backend/api/api/Services/IDatasetService.cs b/backend/api/api/Services/IDatasetService.cs
index be56f5cb..8e62ba43 100644
--- a/backend/api/api/Services/IDatasetService.cs
+++ b/backend/api/api/Services/IDatasetService.cs
@@ -6,6 +6,7 @@ namespace api.Services
public interface IDatasetService
{
Dataset GetOneDataset(string username, string name);
+ Dataset GetOneDataset(string id);
List<Dataset> SearchDatasets(string name, string username);
List<Dataset> GetMyDatasets(string username);
List<Dataset> SortDatasets(string username, bool ascdsc, int latest);
@@ -13,5 +14,6 @@ namespace api.Services
Dataset Create(Dataset dataset);
void Update(string username, string name, Dataset dataset);
void Delete(string username, string name);
+ public List<Dataset> GetGuestDatasets();
}
}
diff --git a/backend/api/api/Services/IMlConnectionService.cs b/backend/api/api/Services/IMlConnectionService.cs
index f38fb50a..ee839d28 100644
--- a/backend/api/api/Services/IMlConnectionService.cs
+++ b/backend/api/api/Services/IMlConnectionService.cs
@@ -3,6 +3,6 @@ namespace api.Services
{
public interface IMlConnectionService
{
- Task<string> SendModelAsync(object model);
+ Task<string> SendModelAsync(object model, object dataset);
}
} \ No newline at end of file
diff --git a/backend/api/api/Services/IModelService.cs b/backend/api/api/Services/IModelService.cs
index ee5c279f..637d09a3 100644
--- a/backend/api/api/Services/IModelService.cs
+++ b/backend/api/api/Services/IModelService.cs
@@ -6,6 +6,7 @@ namespace api.Services
public interface IModelService
{
Model GetOneModel(string username, string name);
+ Model GetOneModel(string id);
List<Model> GetMyModels(string username);
List<Model> GetLatestModels(string username);
//List<Model> GetPublicModels();
diff --git a/backend/api/api/Services/IPredictorService.cs b/backend/api/api/Services/IPredictorService.cs
index 2017add2..729dd0b6 100644
--- a/backend/api/api/Services/IPredictorService.cs
+++ b/backend/api/api/Services/IPredictorService.cs
@@ -6,6 +6,7 @@ namespace api.Services
public interface IPredictorService
{
Predictor GetOnePredictor(string username, string name);
+ Predictor GetPredictor(string username, string GetPredictor);
List<Predictor> SearchPredictors(string name, string username);
List<Predictor> GetMyPredictors(string username);
List<Predictor> SortPredictors(string username, bool ascdsc, int latest);
diff --git a/backend/api/api/Services/IUserService.cs b/backend/api/api/Services/IUserService.cs
index 1cb6a609..e4a23213 100644
--- a/backend/api/api/Services/IUserService.cs
+++ b/backend/api/api/Services/IUserService.cs
@@ -8,7 +8,7 @@ namespace api.Services
List<User> Get();// daje sve korisnike
User GetUserUsername(string username); //daje korisnika po korisnickom imenu
User Create(User user); // kreira korisnika
- void Update(string username, User user); //apdejtuje korisnika po idu
+ bool Update(string username, User user); //apdejtuje korisnika po idu
void Delete(string username);//brise korisnika
}
}
diff --git a/backend/api/api/Services/MlConnectionService.cs b/backend/api/api/Services/MlConnectionService.cs
index 9b167537..9c3b3fd8 100644
--- a/backend/api/api/Services/MlConnectionService.cs
+++ b/backend/api/api/Services/MlConnectionService.cs
@@ -6,13 +6,19 @@ namespace api.Services
{
public class MlConnectionService : IMlConnectionService
{
- public async Task<string> SendModelAsync(object model)
+ private RestClient client;
+
+ public MlConnectionService()
+ {
+ this.client = new RestClient("http://127.0.0.1:5543");
+ }
+
+ public async Task<string> SendModelAsync(object model, object dataset)
{
- RestClient client = new RestClient("http://localhost:5000");
- var request = new RestRequest("data", Method.Post);
- request.AddJsonBody(model);
- var result = await client.ExecuteAsync(request);
- return result.Content;//Response od ML microservisa
+ var request = new RestRequest("train", Method.Post);
+ request.AddJsonBody(new { model, dataset});
+ var result = await this.client.ExecuteAsync(request);
+ return result.Content; //Response od ML microservisa
}
}
}
diff --git a/backend/api/api/Services/ModelService.cs b/backend/api/api/Services/ModelService.cs
index f42219f5..eae8c78b 100644
--- a/backend/api/api/Services/ModelService.cs
+++ b/backend/api/api/Services/ModelService.cs
@@ -50,6 +50,11 @@ namespace api.Services
return _model.Find(model => model.username == username && model.name == name).FirstOrDefault();
}
+ public Model GetOneModel(string id)
+ {
+ return _model.Find(model => model._id == id).FirstOrDefault();
+ }
+
public void Update(string username, string name, Model model)
{
_model.ReplaceOne(model => model.username == username && model.name == name, model);
diff --git a/backend/api/api/Services/PredictorService.cs b/backend/api/api/Services/PredictorService.cs
index 05860126..01bc8359 100644
--- a/backend/api/api/Services/PredictorService.cs
+++ b/backend/api/api/Services/PredictorService.cs
@@ -40,6 +40,11 @@ namespace api.Services
return _predictor.Find(predictor => predictor.username == username && predictor.name == name).FirstOrDefault();
}
+ public Predictor GetPredictor(string username, string id)
+ {
+ return _predictor.Find(predictor => predictor.username == username && predictor._id == id).FirstOrDefault();
+
+ }
//last private models
public List<Predictor> SortPredictors(string username, bool ascdsc, int latest)
{
diff --git a/backend/api/api/Services/UserService.cs b/backend/api/api/Services/UserService.cs
index f613f923..607bb04b 100644
--- a/backend/api/api/Services/UserService.cs
+++ b/backend/api/api/Services/UserService.cs
@@ -7,11 +7,22 @@ namespace api.Services
public class UserService : IUserService
{
private readonly IMongoCollection<User> _users;
+ private readonly IMongoClient _client;
+ private readonly IMongoCollection<Model> _models;
+ private readonly IMongoCollection<Dataset> _datasets;
+ private readonly IMongoCollection<FileModel> _fileModels;
+ private readonly IMongoCollection<Predictor> _predictors;
+
public UserService(IUserStoreDatabaseSettings settings, IMongoClient mongoClient)
{
var database = mongoClient.GetDatabase(settings.DatabaseName);
_users = database.GetCollection<User>(settings.CollectionName);
+ _models = database.GetCollection<Model>(settings.ModelCollectionName);
+ _datasets= database.GetCollection<Dataset>(settings.DatasetCollectionName);
+ _fileModels = database.GetCollection<FileModel>(settings.FilesCollectionName);
+ _predictors= database.GetCollection<Predictor>(settings.PredictorCollectionName);
+ _client = mongoClient;
}
public User Create(User user)
{
@@ -26,10 +37,46 @@ namespace api.Services
{
return _users.Find(user => user.Username == username).FirstOrDefault();
}
- public void Update(string username, User user)
+ public bool Update(string username, User user)
{
//username koji postoji u bazi
- _users.ReplaceOne(user => user.Username == username, user);
+ using (var session = _client.StartSession())
+ {
+
+ if(_users.Find(u => u.Username == user.Username).FirstOrDefault()!=null)
+ {
+ return false;
+ }
+
+ //Trenutan MongoDB Server ne podrzava transakcije.Omoguciti Podrsku
+ //session.StartTransaction();
+ try
+ {
+ _users.ReplaceOne(user => user.Username == username, user);
+ if (username != user.Username)
+ {
+ var builderModel = Builders<Model>.Update;
+ var builderDataset = Builders<Dataset>.Update;
+ var builderFileModel = Builders<FileModel>.Update;
+ var builderPredictor = Builders<Predictor>.Update;
+ _models.UpdateMany(x => x.username == username, builderModel.Set(x => x.username, user.Username));
+ _datasets.UpdateMany(x => x.username == username, builderDataset.Set(x => x.username, user.Username));
+ _fileModels.UpdateMany(x => x.username == username, builderFileModel.Set(x => x.username, user.Username));
+ _predictors.UpdateMany(x => x.username == username, builderPredictor.Set(x => x.username, user.Username));
+ }
+
+ //session.AbortTransaction();
+
+
+ //session.CommitTransaction();
+ }
+ catch (Exception e)
+ {
+ //session.AbortTransaction();
+ return false;
+ }
+ return true;
+ }
}
public void Delete(string username)
{