diff options
| author | Nevena Bojovic <nenabojov@gmail.com> | 2022-03-19 22:38:34 +0100 | 
|---|---|---|
| committer | Nevena Bojovic <nenabojov@gmail.com> | 2022-03-19 22:38:34 +0100 | 
| commit | 5f40d4a21a09b481343f894eab7970de895744d7 (patch) | |
| tree | 3fcfaca394e9a9586bf944c389ffc4e907ec2664 /backend | |
| parent | 347ce115be33fce7ce3bd7a91e240f8f4e3fb901 (diff) | |
| parent | ff5bf81a14d3024f8ff1764db488dec6790ed37e (diff) | |
Merge branch 'dev' of http://gitlab.pmf.kg.ac.rs/igrannonica/neuronstellar into dev
Diffstat (limited to 'backend')
| -rw-r--r-- | backend/api/api/Controllers/DatasetController.cs | 214 | ||||
| -rw-r--r-- | backend/api/api/Controllers/ModelController.cs | 90 | ||||
| -rw-r--r-- | backend/api/api/Controllers/PredictorController.cs | 159 | ||||
| -rw-r--r-- | backend/api/api/Data/UserStoreDatabaseSettings.cs | 1 | ||||
| -rw-r--r-- | backend/api/api/Interfaces/IUserStoreDatabaseSettings.cs | 3 | ||||
| -rw-r--r-- | backend/api/api/Models/Dataset.cs | 4 | ||||
| -rw-r--r-- | backend/api/api/Models/Model.cs | 8 | ||||
| -rw-r--r-- | backend/api/api/Models/Predictor.cs | 22 | ||||
| -rw-r--r-- | backend/api/api/Program.cs | 1 | ||||
| -rw-r--r-- | backend/api/api/Services/DatasetService.cs | 21 | ||||
| -rw-r--r-- | backend/api/api/Services/IDatasetService.cs | 4 | ||||
| -rw-r--r-- | backend/api/api/Services/IModelService.cs | 3 | ||||
| -rw-r--r-- | backend/api/api/Services/IPredictorService.cs | 16 | ||||
| -rw-r--r-- | backend/api/api/Services/ModelService.cs | 9 | ||||
| -rw-r--r-- | backend/api/api/Services/PredictorService.cs | 50 | ||||
| -rw-r--r-- | backend/api/api/api.csproj | 1 | ||||
| -rw-r--r-- | backend/api/api/appsettings.json | 32 | ||||
| -rw-r--r-- | backend/microservice/mlservice.py | 27 | 
18 files changed, 580 insertions, 85 deletions
diff --git a/backend/api/api/Controllers/DatasetController.cs b/backend/api/api/Controllers/DatasetController.cs index 3d008744..1ad180b7 100644 --- a/backend/api/api/Controllers/DatasetController.cs +++ b/backend/api/api/Controllers/DatasetController.cs @@ -1,6 +1,9 @@  using api.Models;  using api.Services; +using Microsoft.AspNetCore.Authorization;  using Microsoft.AspNetCore.Mvc; +using Microsoft.Net.Http.Headers; +using System.Net.Http.Headers;  // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 @@ -11,24 +14,127 @@ namespace api.Controllers      public class DatasetController : ControllerBase      {          private readonly IDatasetService _datasetService; +        private JwtToken jwtToken; -        public DatasetController(IDatasetService datasetService) +        public DatasetController(IDatasetService datasetService, IConfiguration configuration)          {              _datasetService = datasetService; +            jwtToken = new JwtToken(configuration);          } -        // GET: api/<DatasetController>/{username}/datasets -        [HttpGet("{username}/datasets")] -        public ActionResult<List<Dataset>> Get(string username) +        // GET: api/<DatasetController>/mydatasets +        [HttpGet("mydatasets")] +        [Authorize(Roles = "User")] +        public ActionResult<List<Dataset>> Get()          { -            return _datasetService.GetAllDatesets(username); +            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.GetMyDatesets(username); +        } + +        // GET: api/<DatasetController>/getlatestdataset/{number} +        [HttpGet("getlatestdatasets/{latest}")] +        [Authorize(Roles = "User")] +        public ActionResult<List<Dataset>> 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<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> novaLista = new List<Dataset>(); + +            for (int i = 0; i < oldest; i++) +                novaLista.Add(lista[i]); + +            return novaLista;          } -        // GET api/<DatasetController>/{username}/{name} -        [HttpGet("{username}/{name}")] -        public ActionResult<Dataset> Get(string username, string name) + +        // GET: api/<DatasetController>/publicdatasets +        [HttpGet("publicdatasets")] +        public ActionResult<List<Dataset>> GetPublicDS()          { +            return _datasetService.GetPublicDatesets(); +        } + +        // GET api/<DatasetController>/{name} +        //get odredjeni dataset +        [HttpGet("{name}")] +        [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 +                return BadRequest(); +              var dataset = _datasetService.GetOneDataset(username, name);              if (dataset == null) @@ -37,10 +143,27 @@ 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")]          public ActionResult<Dataset> Post([FromBody] Dataset dataset)          { +            //da li ce preko tokena da se ubaci username ili front salje +            //dataset.username = usernameToken;              var existingDataset = _datasetService.GetOneDataset(dataset.username, dataset.name);              if (existingDataset != null) @@ -53,10 +176,24 @@ namespace api.Controllers              }          } -        // PUT api/<DatasetController>/{username}/{name} -        [HttpPut("{username}/{name}")] -        public ActionResult Put(string username, string name, [FromBody] Dataset dataset) +        // PUT api/<DatasetController>/{name} +        [HttpPut("{name}")] +        [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 +                return BadRequest(); +              var existingDataset = _datasetService.GetOneDataset(username, name);              //ne mora da se proverava @@ -64,13 +201,28 @@ namespace api.Controllers                  return NotFound($"Dataset with name = {name} or user with username = {username} not found");              _datasetService.Update(username, name, dataset); -            return NoContent(); + +            return Ok($"Dataset with name = {name} updated");          } -        // DELETE api/<DatasetController>/username/name -        [HttpDelete("{username}/{name}")] -        public ActionResult Delete(string username, string name) +        // DELETE api/<DatasetController>/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 +                return BadRequest(); +              var dataset = _datasetService.GetOneDataset(username, name);              if (dataset == null) @@ -86,27 +238,15 @@ namespace api.Controllers  /*  { -  "_id": "", -  "uploaderId" : "uploaderId", -  "name" : "name", -  "description" : "description", -  "dateCreated" : "dateCreated", -  "inputColumns" : [2,3,4], -  "columnToPredict" : 1, -  "randomTestSet" : true, -  "randomTestSetDistribution" : 1, -  "type" : "type", -  "encoding" : "encoding", -  "optimizer" : "optimizer", -  "lossFunction" : "lossFunction", -  "inputNeurons" : 2, -  "hiddenLayerNeurons" : 3, -  "hiddenLayers" : 8, -  "batchSize" : 6, -  "inputLayerActivationFunction" : "inputLayerActivationFunction", -  "hiddenLayerActivationFunction" : "hiddenLayerActivationFunction", -  "outputLayerActivationFunction" : "outputLayerActivationFunction", -  "extension" : "extension" - +    "_id": "", +    "name": "name", +    "description": "description", +    "header" : ["ag","rt"], +    "fileId" : "652", +    "extension": "csb", +    "isPublic" : true, +    "accessibleByLink": true, +    "dateCreated": "dateCreated", +    "lastUpdated" : "proba12"  }  */
\ No newline at end of file diff --git a/backend/api/api/Controllers/ModelController.cs b/backend/api/api/Controllers/ModelController.cs index deb622b8..1d03d924 100644 --- a/backend/api/api/Controllers/ModelController.cs +++ b/backend/api/api/Controllers/ModelController.cs @@ -3,6 +3,8 @@ 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;  namespace api.Controllers  { @@ -13,12 +15,14 @@ namespace api.Controllers          private IMlConnectionService _mlService;          private readonly IModelService _modelService; -         +        private JwtToken jwtToken; -        public ModelController(IMlConnectionService mlService, IModelService modelService) + +        public ModelController(IMlConnectionService mlService, IModelService modelService, IConfiguration configuration)          {              _mlService = mlService;              _modelService = modelService; +            jwtToken = new JwtToken(configuration);          }          [HttpPost("sendModel")] @@ -29,18 +33,46 @@ namespace api.Controllers              return Ok(result);          } -        // GET: api/<ModelController>/{username}/models -        [HttpGet("{username}/models")] -        public ActionResult<List<Model>> Get(string username) +        // GET: api/<ModelController>/mymodels +        [HttpGet("/mymodels")] +        [Authorize(Roles = "User")] +        public ActionResult<List<Model>> Get()          { -            return _modelService.GetAllModels(username); +            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(); + +            return _modelService.GetMyModels(username);          } -        //id korisnika, name modela -        // GET api/<ModelController>/{username}/{name} -        [HttpGet("{username}/{name}")] -        public ActionResult<Model> Get(string username, string name) +        // name modela +        // GET api/<ModelController>/{name} +        [HttpGet("/{name}")] +        [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 +                return BadRequest(); +              var model = _modelService.GetOneModel(username, name);              if (model == null) @@ -51,6 +83,7 @@ namespace api.Controllers          // POST api/<ModelController>/add          [HttpPost("add")] +        [Authorize(Roles = "User")]          public ActionResult<Model> Post([FromBody] Model model)          {              var existingModel = _modelService.GetOneModel(model.username, model.name); @@ -66,9 +99,24 @@ namespace api.Controllers          }          // PUT api/<ModelController>/{username}/{name} -        [HttpPut("{username}/{name}")] -        public ActionResult Put(string username, string name, [FromBody] Model model) +        [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 +                return BadRequest(); + +              var existingModel = _modelService.GetOneModel(username, name);              if (existingModel == null) @@ -79,9 +127,23 @@ namespace api.Controllers          }          // DELETE api/<ModelController>/username -        [HttpDelete("{username}/{name}")] -        public ActionResult Delete(string username, string 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 +                return BadRequest(); +              var model = _modelService.GetOneModel(username, name);              if (model == null) diff --git a/backend/api/api/Controllers/PredictorController.cs b/backend/api/api/Controllers/PredictorController.cs new file mode 100644 index 00000000..d5a55b3c --- /dev/null +++ b/backend/api/api/Controllers/PredictorController.cs @@ -0,0 +1,159 @@ +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; + +namespace api.Controllers +{ +    [Route("api/[controller]")] +    [ApiController] +    public class PredictorController : Controller +    { +        private readonly IPredictorService _predictorService; +        private JwtToken jwtToken; + +        public PredictorController(IPredictorService predictorService, IConfiguration configuration) +        { +            _predictorService = predictorService; +            jwtToken = new JwtToken(configuration); +        } + +        // GET: api/<PredictorController>/mypredictors +        [HttpGet("mypredictors")] +        [Authorize(Roles = "User")] +        public ActionResult<List<Predictor>> 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 +                return BadRequest(); + +            return _predictorService.GetMyPredictors(username); +        } +        // GET: api/<PredictorController>/publicpredictors +        [HttpGet("publicpredictors")] +        public ActionResult<List<Predictor>> GetPublicPredictors() +        { +            return _predictorService.GetPublicPredictors(); +        } + +        // 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 +                return BadRequest(); + +            var predictor = _predictorService.GetOnePredictor(username, name); + +            if (predictor == null) +                return NotFound($"Predictor with name = {name} or user with username = {username} not found"); + +            return predictor; +        } + +        // POST api/<PredictorController>/add +        [HttpPost("add")] +        [Authorize(Roles = "User")] +        public ActionResult<Predictor> Post([FromBody] Predictor predictor) +        { +            var existingModel = _predictorService.GetOnePredictor(predictor.username, predictor.name); + +            if (existingModel != null) +                return NotFound($"Predictor with name = {predictor.name} exisits"); +            else +            { +                _predictorService.Create(predictor); + +                return CreatedAtAction(nameof(Get), new { id = predictor._id }, predictor); +            } +        } + + + +        // 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 +                return BadRequest(); + +            var existingDataset = _predictorService.GetOnePredictor(username, name); + +            //ne mora da se proverava +            if (existingDataset == null) +                return NotFound($"Predictor with name = {name} or user with username = {username} not found"); + +            _predictorService.Update(username, name, predictor); + +            return Ok($"Predictor with name = {name} updated"); +        } + + +        // 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 +                return BadRequest(); + +            var predictor = _predictorService.GetOnePredictor(username, name); + +            if (predictor == null) +                return NotFound($"Predictor with name = {name} or user with username = {username} not found"); + +            _predictorService.Delete(predictor.username, predictor.name); + +            return Ok($"Predictor with name = {name} deleted"); + +        } + + + + +    } +} diff --git a/backend/api/api/Data/UserStoreDatabaseSettings.cs b/backend/api/api/Data/UserStoreDatabaseSettings.cs index 6416ab05..e83d2b54 100644 --- a/backend/api/api/Data/UserStoreDatabaseSettings.cs +++ b/backend/api/api/Data/UserStoreDatabaseSettings.cs @@ -10,6 +10,7 @@ namespace api.Data          public string DatabaseName { get; set; } = String.Empty;          public string CollectionName { get; set; } = String.Empty;          public string DatasetCollectionName { get; set; } = String.Empty; +        public string PredictorCollectionName { get; set; } = String.Empty;          public string ModelCollectionName { get; set; } = String.Empty;          public string FilesCollectionName { get; set; } = String.Empty;      } diff --git a/backend/api/api/Interfaces/IUserStoreDatabaseSettings.cs b/backend/api/api/Interfaces/IUserStoreDatabaseSettings.cs index 82312649..a5b5f5eb 100644 --- a/backend/api/api/Interfaces/IUserStoreDatabaseSettings.cs +++ b/backend/api/api/Interfaces/IUserStoreDatabaseSettings.cs @@ -6,7 +6,8 @@          string DatabaseName { get; set; }          string CollectionName { get; set; }          string DatasetCollectionName { get; set; } -        string ModelCollectionName { get; } +        string PredictorCollectionName { get; set; } +        string ModelCollectionName { get; set; }          string FilesCollectionName { get; set; }      }  } diff --git a/backend/api/api/Models/Dataset.cs b/backend/api/api/Models/Dataset.cs index 6cb0b1e9..d4649c17 100644 --- a/backend/api/api/Models/Dataset.cs +++ b/backend/api/api/Models/Dataset.cs @@ -6,7 +6,7 @@ namespace api.Models  {  	public class Dataset  	{ -        public string username; +        public string username { get; set; }          [BsonId]          [BsonRepresentation(BsonType.ObjectId)]//mongo data type to .net @@ -14,7 +14,7 @@ namespace api.Models          public string name { get; set; }          public string description { get; set; }          public string[] header { get; set; } -        public int fileId { get; set; } +        public string fileId { get; set; }          public string extension { get; set; }          public bool isPublic { get; set; }          public bool accessibleByLink { get; set; } diff --git a/backend/api/api/Models/Model.cs b/backend/api/api/Models/Model.cs index 7b22ded8..dfc4336a 100644 --- a/backend/api/api/Models/Model.cs +++ b/backend/api/api/Models/Model.cs @@ -21,11 +21,11 @@ namespace api.Models          public string datasetId { get; set; }          //Test set settings -        public int[] inputColumns { get; set; } -        public int columnToPredict { get; set; } -        public bool radnomOrder {get;set;} +        public string[] inputColumns { get; set; } +        public string columnToPredict { get; set; } +        public bool randomOrder {get;set;}          public bool randomTestSet { get; set; } -        public int randomTestSetDistribution { get; set; } +        public float randomTestSetDistribution { get; set; }          //Neural net training          public string type { get; set; } diff --git a/backend/api/api/Models/Predictor.cs b/backend/api/api/Models/Predictor.cs new file mode 100644 index 00000000..cd2f4557 --- /dev/null +++ b/backend/api/api/Models/Predictor.cs @@ -0,0 +1,22 @@ +using System; +using MongoDB.Bson; +using MongoDB.Bson.Serialization.Attributes; + +namespace api.Models +{ +	public class Predictor +	{ +		[BsonId] +		[BsonRepresentation(BsonType.ObjectId)]//mongo data type to .net +		public string _id { get; set; } +		public string username { get; set; } +		public string name { get; set; } +		public string description { get; set; } +		public string[] inputs { get; set; } +		public string output { get; set; } +		public bool isPublic { get; set; } +		public bool accessibleByLink { get; set; } +		public string dateCreated { get; set; } +	} +} + diff --git a/backend/api/api/Program.cs b/backend/api/api/Program.cs index f3287b4c..65399bdf 100644 --- a/backend/api/api/Program.cs +++ b/backend/api/api/Program.cs @@ -30,6 +30,7 @@ builder.Services.AddScoped<IUserService, UserService>();  builder.Services.AddScoped<IAuthService, AuthService>();  builder.Services.AddScoped<IMlConnectionService, MlConnectionService>();  builder.Services.AddScoped<IModelService, ModelService>(); +builder.Services.AddScoped<IPredictorService, PredictorService>();  builder.Services.AddScoped<IFileService, FileService>(); diff --git a/backend/api/api/Services/DatasetService.cs b/backend/api/api/Services/DatasetService.cs index 80c31758..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; @@ -26,15 +27,31 @@ namespace api.Services              _dataset.DeleteOne(dataset => (dataset.username == username && dataset.name == name));           } -        public List<Dataset> GetAllDatesets(string username) +        public List<Dataset> GetMyDatesets(string username)          {              return _dataset.Find(dataset => dataset.username == username).ToList();          } +        public List<Dataset> GetLatestDatasets(string username, int latest) +        { +            List<Dataset> list = _dataset.Find(dataset => dataset.username == username).ToList(); + + +          + +            return list; +        } + +        public List<Dataset> GetPublicDatesets() +        { +            return _dataset.Find(dataset => dataset.isPublic == true).ToList(); +        } +          public Dataset GetOneDataset(string username, string name)          {              return _dataset.Find(dataset => dataset.username == username && dataset.name == name).FirstOrDefault();          } +        //odraditi za pretragu getOne          //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 49013e29..19a0aabc 100644 --- a/backend/api/api/Services/IDatasetService.cs +++ b/backend/api/api/Services/IDatasetService.cs @@ -6,7 +6,9 @@ namespace api.Services      public interface IDatasetService      {          Dataset GetOneDataset(string username, string name); -        List<Dataset> GetAllDatesets(string username); +        List<Dataset> GetMyDatesets(string username);  +        List<Dataset> GetLatestDatasets(string username, int latest); +        List<Dataset> GetPublicDatesets();          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/IModelService.cs b/backend/api/api/Services/IModelService.cs index 149afd4a..c1931ffa 100644 --- a/backend/api/api/Services/IModelService.cs +++ b/backend/api/api/Services/IModelService.cs @@ -6,7 +6,8 @@ namespace api.Services  	public interface IModelService  	{          Model GetOneModel(string username, string name); -        List<Model> GetAllModels(string username); +        List<Model> GetMyModels(string username); +        //List<Model> GetPublicModels();          Model Create(Model model);          void Update(string username, string name, Model model);          void Delete(string username, string name); diff --git a/backend/api/api/Services/IPredictorService.cs b/backend/api/api/Services/IPredictorService.cs new file mode 100644 index 00000000..594b233b --- /dev/null +++ b/backend/api/api/Services/IPredictorService.cs @@ -0,0 +1,16 @@ +using System; +using api.Models; + +namespace api.Services +{ +	public interface IPredictorService +	{ +        Predictor GetOnePredictor(string username, string name); +        List<Predictor> GetMyPredictors(string username); +        List<Predictor> GetPublicPredictors(); +        Predictor Create(Predictor predictor); +        void Update(string username, string name, Predictor predictor); +        void Delete(string username, string name); +    } +} + diff --git a/backend/api/api/Services/ModelService.cs b/backend/api/api/Services/ModelService.cs index 33dea30e..2ba3c54d 100644 --- a/backend/api/api/Services/ModelService.cs +++ b/backend/api/api/Services/ModelService.cs @@ -27,11 +27,16 @@ namespace api.Services              _model.DeleteOne(model => (model.username == username && model.name == name));          } -        public List<Model> GetAllModels(string username) +        public List<Model> GetMyModels(string username)          {              return _model.Find(model => model.username == username).ToList();          } - +        /* +        public List<Model> GetPublicModels() +        { +            return _model.Find(model => model.isPublic == true).ToList(); +        } +        */          public Model GetOneModel(string username, string name)          {              return _model.Find(model => model.username == username && model.name == name).FirstOrDefault(); diff --git a/backend/api/api/Services/PredictorService.cs b/backend/api/api/Services/PredictorService.cs new file mode 100644 index 00000000..69fb25c9 --- /dev/null +++ b/backend/api/api/Services/PredictorService.cs @@ -0,0 +1,50 @@ +using api.Interfaces; +using api.Models; +using MongoDB.Driver; + +namespace api.Services +{ +    public class PredictorService : IPredictorService +    { +        private readonly IMongoCollection<Predictor> _predictor; + +        public PredictorService(IUserStoreDatabaseSettings settings, IMongoClient mongoClient) +        { +            var database = mongoClient.GetDatabase(settings.DatabaseName); +            _predictor = database.GetCollection<Predictor>(settings.PredictorCollectionName); +        } + +        public Predictor Create(Predictor predictor) +        { +            _predictor.InsertOne(predictor); +            return predictor; +        } + +        public void Delete(string username, string name) +        { +            _predictor.DeleteOne(predictor => (predictor.username == username && predictor.name == name)); +        } + +        public List<Predictor> GetMyPredictors(string username) +        { +            return _predictor.Find(predictor => predictor.username == username).ToList(); +        } + +        public Predictor GetOnePredictor(string username, string name) +        { +            return _predictor.Find(predictor => predictor.username == username && predictor.name == name).FirstOrDefault(); + +        } + +        public List<Predictor> GetPublicPredictors() +        { +            return _predictor.Find(predictor => predictor.isPublic == true).ToList(); +        } + +        public void Update(string username, string name, Predictor predictor) +        { +            _predictor.ReplaceOne(predictor => predictor.username == username && predictor.name == name, predictor); + +        } +    } +} diff --git a/backend/api/api/api.csproj b/backend/api/api/api.csproj index f38621ca..f63407ca 100644 --- a/backend/api/api/api.csproj +++ b/backend/api/api/api.csproj @@ -22,6 +22,7 @@    <ItemGroup>      <Folder Include="UploadedFiles\" /> +    <Folder Include="UploadedFiles\tester1\" />    </ItemGroup>  </Project> diff --git a/backend/api/api/appsettings.json b/backend/api/api/appsettings.json index 86363075..fdccfb07 100644 --- a/backend/api/api/appsettings.json +++ b/backend/api/api/appsettings.json @@ -9,19 +9,23 @@      }    },    "AllowedHosts": "*", -    "UserStoreDatabaseSettings": { -        /* LocalHost +  "UserStoreDatabaseSettings": { +    /* LocalHost +    */       "ConnectionString": "mongodb://127.0.0.1:27017/",      "DatabaseName": "si_project", -    "CollectionName": "User", -    "DatasetCollectionName" : "Dataset", -    "ModelCollectionName" : "Model" -    */ -        "ConnectionString": "mongodb+srv://si_user:si_user@sidatabase.twtfm.mongodb.net/myFirstDatabase?retryWrites=true&w=majority", -        "DatabaseName": "si_db", -        "CollectionName": "users", -        "DatasetCollectionName": "Dataset", -        "ModelCollectionName": "Model", -        "FilesCollectionName": "Files" -    } -} +    "CollectionName": "users", +    "DatasetCollectionName": "Dataset", +    "ModelCollectionName": "Model", +    "PredictorCollectionName": "Predictor", +    "FilesCollectionName": "Files" +    /* +    "ConnectionString": "mongodb+srv://si_user:si_user@sidatabase.twtfm.mongodb.net/myFirstDatabase?retryWrites=true&w=majority", +    "DatabaseName": "si_db", +    "CollectionName": "users", +    "DatasetCollectionName": "Dataset", +    "ModelCollectionName": "Model", +    "PredictorCollectionName": "Predictor", +    "FilesCollectionName": "Files"*/ +  } +}
\ No newline at end of file diff --git a/backend/microservice/mlservice.py b/backend/microservice/mlservice.py index 7f5ab9f2..01a79c1a 100644 --- a/backend/microservice/mlservice.py +++ b/backend/microservice/mlservice.py @@ -33,12 +33,27 @@ class fCallback(tf.keras.callbacks.Callback):      def on_epoch_end(self, epoch, logs=None):          print('Evaluation: ', self.model.evaluate(self.x_test)) -    ### 1)Ucitavanje vrednosti -def obuka(data,params): +     +def obuka(dataunos,params):      import numpy as np      import pandas as pd      import tensorflow as tf -    import matplotlib.pyplot as plt    +    import matplotlib.pyplot as plt + +    ### 0) Pretvaranje data seta u novi, sa kolonama koje je korisnik izabrao za obuku +  +    data=pd.DataFrame() +    zeljenekolone=params["inputColumns"] +    for i in range(len(zeljenekolone)): +        data[zeljenekolone[i]]=dataunos[zeljenekolone[i]] +    #print(data.head(10)) + +    #predvidetikol=input("UNETI NAZIV KOLONE ČIJU VREDNOST TREBA PREDVIDETI ") +    ###sta se cuva od promenjivih broj kolone ili naziv kolone??? +    predvidetikol=params["columnToPredict"] + +    data[predvidetikol]=dataunos[predvidetikol] +    ### 1)Ucitavanje vrednosti       #print(1)      #data1=pd.read_csv('titanic.csv')      #data=data1.copy() @@ -134,9 +149,6 @@ def obuka(data,params):      ### 7)Podela skupa na skup za trening i skup za testiranje -    #predvidetikol=input("UNETI NAZIV KOLONE ČIJU VREDNOST TREBA PREDVIDETI ") -    ###sta se cuva od promenjivih broj kolone ili naziv kolone??? -    predvidetikol=params["columnToPredict"]      xkolone=[]      for k in range(len(kolone)): @@ -223,6 +235,7 @@ def obuka(data,params):      ### 13.1)Izbor metrike za kompajler PART2      metrike=['mae','mse'] +    lossf=params["lossFunction"]      '''      while(1):          m=params['lossFunction'] @@ -230,7 +243,7 @@ def obuka(data,params):          if(m=='KRAJ'):              break             metrike.append(m)''' -    classifier.compile(optimizer=optimizator, loss='binary_crossentropy',metrics =metrike) +    classifier.compile(optimizer=optimizator, loss=lossf,metrics =metrike)      performance_simple = fCallback(x_test, y_test)      ### 14)       #uzorci=int(input("UNETI KOLIKO UZORAKA ĆE BITI UNETO U ISTO VREME "))  | 
