diff options
Diffstat (limited to 'backend/api')
-rw-r--r-- | backend/api/api/Controllers/DatasetController.cs | 5 | ||||
-rw-r--r-- | backend/api/api/Controllers/ModelController.cs | 2 | ||||
-rw-r--r-- | backend/api/api/Controllers/PredictorController.cs | 30 | ||||
-rw-r--r-- | backend/api/api/Controllers/UserController.cs | 3 | ||||
-rw-r--r-- | backend/api/api/Services/DatasetService.cs | 7 | ||||
-rw-r--r-- | backend/api/api/Services/IDatasetService.cs | 1 | ||||
-rw-r--r-- | backend/api/api/Services/IPredictorService.cs | 1 | ||||
-rw-r--r-- | backend/api/api/Services/IUserService.cs | 2 | ||||
-rw-r--r-- | backend/api/api/Services/PredictorService.cs | 5 | ||||
-rw-r--r-- | backend/api/api/Services/UserService.cs | 51 |
10 files changed, 100 insertions, 7 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 4bc094cd..355eb9f4 100644 --- a/backend/api/api/Controllers/ModelController.cs +++ b/backend/api/api/Controllers/ModelController.cs @@ -30,7 +30,7 @@ namespace api.Controllers } [HttpPost("sendModel")] - [Authorize(Roles = "User")] + [Authorize(Roles = "User,Guest")] public async Task<ActionResult<string>> Test([FromBody] Model model) { var dataset = _datasetService.GetOneDataset(model.datasetId); 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/Services/DatasetService.cs b/backend/api/api/Services/DatasetService.cs index 45ed18a9..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) diff --git a/backend/api/api/Services/IDatasetService.cs b/backend/api/api/Services/IDatasetService.cs index dbe43321..8e62ba43 100644 --- a/backend/api/api/Services/IDatasetService.cs +++ b/backend/api/api/Services/IDatasetService.cs @@ -14,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/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/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) { |