aboutsummaryrefslogtreecommitdiff
path: root/backend/api
diff options
context:
space:
mode:
Diffstat (limited to 'backend/api')
-rw-r--r--backend/api/api/Controllers/DatasetController.cs79
-rw-r--r--backend/api/api/Controllers/ModelController.cs56
-rw-r--r--backend/api/api/Controllers/PredictorController.cs88
-rw-r--r--backend/api/api/Controllers/UserController.cs31
-rw-r--r--backend/api/api/Models/Dataset.cs4
-rw-r--r--backend/api/api/Models/Model.cs6
-rw-r--r--backend/api/api/Models/Predictor.cs2
-rw-r--r--backend/api/api/Services/DatasetService.cs26
-rw-r--r--backend/api/api/Services/IDatasetService.cs6
-rw-r--r--backend/api/api/Services/IModelService.cs2
-rw-r--r--backend/api/api/Services/IPredictorService.cs2
-rw-r--r--backend/api/api/Services/ModelService.cs22
-rw-r--r--backend/api/api/Services/PredictorService.cs18
13 files changed, 303 insertions, 39 deletions
diff --git a/backend/api/api/Controllers/DatasetController.cs b/backend/api/api/Controllers/DatasetController.cs
index f08e55f8..bae05ba9 100644
--- a/backend/api/api/Controllers/DatasetController.cs
+++ b/backend/api/api/Controllers/DatasetController.cs
@@ -22,9 +22,8 @@ namespace api.Controllers
jwtToken = new JwtToken(configuration);
}
-
// GET: api/<DatasetController>/mydatasets
- [HttpGet("/mydatasets")]
+ [HttpGet("mydatasets")]
[Authorize(Roles = "User")]
public ActionResult<List<Dataset>> Get()
{
@@ -43,19 +42,79 @@ namespace api.Controllers
//ako bude trebao ID, samo iz baze uzeti
- return _datasetService.GetMyDatesets(username);
+ return _datasetService.GetMyDatasets(username);
+ }
+
+ // GET: api/<DatasetController>/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<List<Dataset>> SortDatasets(bool ascdsc, 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();
+
+ List<Dataset> lista = _datasetService.SortDatasets(username, ascdsc, latest);
+
+
+ if (latest == 0)
+ return lista;
+ else
+ {
+ List<Dataset> novaLista = new List<Dataset>();
+ for (int i = 0; i < latest; i++)
+ novaLista.Add(lista[i]);
+ return novaLista;
+ }
}
// GET: api/<DatasetController>/publicdatasets
- [HttpGet("/datasets")]
+ [HttpGet("publicdatasets")]
public ActionResult<List<Dataset>> GetPublicDS()
{
- return _datasetService.GetPublicDatesets();
+ return _datasetService.GetPublicDatasets();
}
+ //SEARCH za datasets (public ili private sa ovim imenom )
+ // GET api/<DatasetController>/search/{name}
+ [HttpGet("search/{name}")]
+ [Authorize(Roles = "User")]
+ public ActionResult<List<Dataset>> 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/<DatasetController>/{name}
//get odredjeni dataset
- [HttpGet("/{name}")]
+ [HttpGet("{name}")]
[Authorize(Roles = "User")]
public ActionResult<Dataset> Get(string name)
{
@@ -75,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;
}
@@ -115,7 +174,7 @@ namespace api.Controllers
}
// PUT api/<DatasetController>/{name}
- [HttpPut("/{name}")]
+ [HttpPut("{name}")]
[Authorize(Roles = "User")]
public ActionResult Put(string name, [FromBody] Dataset dataset)
{
@@ -138,13 +197,15 @@ 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");
}
// DELETE api/<DatasetController>/name
- [HttpDelete("/{name}")]
+ [HttpDelete("{name}")]
[Authorize(Roles = "User")]
public ActionResult Delete(string name)
{
diff --git a/backend/api/api/Controllers/ModelController.cs b/backend/api/api/Controllers/ModelController.cs
index 77bf1ef3..b4a4b4f2 100644
--- a/backend/api/api/Controllers/ModelController.cs
+++ b/backend/api/api/Controllers/ModelController.cs
@@ -1,4 +1,4 @@
-using api.Models;
+using api.Models;
using api.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
@@ -34,7 +34,7 @@ namespace api.Controllers
}
// GET: api/<ModelController>/mymodels
- [HttpGet("/mymodels")]
+ [HttpGet("mymodels")]
[Authorize(Roles = "User")]
public ActionResult<List<Model>> Get()
{
@@ -54,9 +54,9 @@ namespace api.Controllers
return _modelService.GetMyModels(username);
}
- // name modela
+ // vraca svoj model prema nekom imenu
// GET api/<ModelController>/{name}
- [HttpGet("/{name}")]
+ [HttpGet("{name}")]
[Authorize(Roles = "User")]
public ActionResult<Model> Get(string name)
{
@@ -76,17 +76,59 @@ 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;
}
+ //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/<ModelController>/getlatestmodels/{number}
+ [HttpGet("getlatestmodels/{latest}")]
+ [Authorize(Roles = "User")]
+ public ActionResult<List<Model>> 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<Model> lista = _modelService.GetLatestModels(username);
+
+ List<Model> novaLista = new List<Model>();
+
+ for (int i = 0; i < latest; i++)
+ novaLista.Add(lista[i]);
+
+ return novaLista;
+ }
+
+
+
+
// POST api/<ModelController>/add
[HttpPost("add")]
[Authorize(Roles = "User,Guest")]
public ActionResult<Model> Post([FromBody] Model model)
{
//username="" ako je GUEST
+ 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)
@@ -99,7 +141,7 @@ namespace api.Controllers
}
}
- // PUT api/<ModelController>/{username}/{name}
+ // PUT api/<ModelController>/{name}
[HttpPut("{name}")]
[Authorize(Roles = "User")]
public ActionResult Put(string name, [FromBody] Model model)
@@ -127,7 +169,7 @@ namespace api.Controllers
return NoContent();
}
- // DELETE api/<ModelController>/username
+ // DELETE api/<ModelController>/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..7f8f1692 100644
--- a/backend/api/api/Controllers/PredictorController.cs
+++ b/backend/api/api/Controllers/PredictorController.cs
@@ -48,8 +48,35 @@ namespace api.Controllers
return _predictorService.GetPublicPredictors();
}
+
+
+ //SEARCH za predictore (public ili private sa ovim imenom )
+ // GET api/<PredictorController>/search/{name}
+ [HttpGet("search/{name}")]
+ [Authorize(Roles = "User")]
+ public ActionResult<List<Predictor>> 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/<PredictorController>/{name}
- [HttpGet("/{name}")]
+ [HttpGet("{name}")]
[Authorize(Roles = "User")]
public ActionResult<Predictor> Get(string name)
{
@@ -69,19 +96,57 @@ 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/<PredictorController>/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<List<Predictor>> SortPredictors(bool ascdsc, 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<Predictor> lista = _predictorService.SortPredictors(username, ascdsc, latest);
+
+ if(latest == 0)
+ return lista;
+ else
+ {
+ List<Predictor> novaLista = new List<Predictor>();
+
+ for (int i = 0; i < latest; i++)
+ novaLista.Add(lista[i]);
+
+ return novaLista;
+ }
+ }
// POST api/<PredictorController>/add
[HttpPost("add")]
[Authorize(Roles = "User")]
public ActionResult<Predictor> 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 +159,7 @@ namespace api.Controllers
// PUT api/<PredictorController>/{name}
- [HttpPut("/{name}")]
+ [HttpPut("{name}")]
[Authorize(Roles = "User")]
public ActionResult Put(string name, [FromBody] Predictor predictor)
{
@@ -111,10 +176,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 +187,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/<PredictorController>/name
- [HttpDelete("/{name}")]
+ [HttpDelete("{name}")]
[Authorize(Roles = "User")]
public ActionResult Delete(string name)
{
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/<UserController>
@@ -38,12 +42,29 @@ namespace api.Controllers
return user;
}
- /*
+
+
+
+
// GET api/<UserController>/5
//potrebno za profile page
- [HttpGet("{id}")]
- public ActionResult<User> GetUserUsername(string username)
+ [HttpGet("myprofile")]
+ [Authorize(Roles = "User")]
+ public ActionResult<User> 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/<UserController>
[HttpPost]
public ActionResult<User> Post([FromBody] User user)
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 dfc4336a..5678daaf 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,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/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 27a8b3ee..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<Dataset>(settings.DatasetCollectionName);
}
+
+ public List<Dataset> SearchDatasets(string name, string username)
+ {
+ return _dataset.Find(dataset => dataset.name == name && dataset.isPublic == true).ToList();
+ }
+
//kreiranje dataseta
public Dataset Create(Dataset dataset)
{
@@ -26,11 +32,25 @@ namespace api.Services
_dataset.DeleteOne(dataset => (dataset.username == username && dataset.name == name));
}
- public List<Dataset> GetMyDatesets(string username)
+ public List<Dataset> GetMyDatasets(string username)
{
return _dataset.Find(dataset => dataset.username == username).ToList();
}
- public List<Dataset> GetPublicDatesets()
+
+ //poslednji datasetovi
+ public List<Dataset> SortDatasets(string username, bool ascdsc, int latest)
+ {
+ List<Dataset> list = _dataset.Find(dataset => dataset.username == username).ToList();
+
+ if(ascdsc)
+ list = list.OrderBy(dataset => dataset.lastUpdated).ToList();
+ else
+ list = list.OrderByDescending(dataset => dataset.lastUpdated).ToList();
+
+ return list;
+ }
+
+ public List<Dataset> GetPublicDatasets()
{
return _dataset.Find(dataset => dataset.isPublic == true).ToList();
}
@@ -46,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 61a04b94..be56f5cb 100644
--- a/backend/api/api/Services/IDatasetService.cs
+++ b/backend/api/api/Services/IDatasetService.cs
@@ -6,8 +6,10 @@ namespace api.Services
public interface IDatasetService
{
Dataset GetOneDataset(string username, string name);
- List<Dataset> GetMyDatesets(string username);
- List<Dataset> GetPublicDatesets();
+ List<Dataset> SearchDatasets(string name, string username);
+ List<Dataset> GetMyDatasets(string username);
+ List<Dataset> SortDatasets(string username, bool ascdsc, int latest);
+ List<Dataset> 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/IModelService.cs b/backend/api/api/Services/IModelService.cs
index c1931ffa..ee5c279f 100644
--- a/backend/api/api/Services/IModelService.cs
+++ b/backend/api/api/Services/IModelService.cs
@@ -7,10 +7,12 @@ namespace api.Services
{
Model GetOneModel(string username, string name);
List<Model> GetMyModels(string username);
+ List<Model> GetLatestModels(string username);
//List<Model> GetPublicModels();
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/IPredictorService.cs b/backend/api/api/Services/IPredictorService.cs
index 594b233b..2017add2 100644
--- a/backend/api/api/Services/IPredictorService.cs
+++ b/backend/api/api/Services/IPredictorService.cs
@@ -6,7 +6,9 @@ namespace api.Services
public interface IPredictorService
{
Predictor GetOnePredictor(string username, string name);
+ List<Predictor> SearchPredictors(string name, string username);
List<Predictor> GetMyPredictors(string username);
+ List<Predictor> SortPredictors(string username, bool ascdsc, int latest);
List<Predictor> GetPublicPredictors();
Predictor Create(Predictor predictor);
void Update(string username, string name, Predictor predictor);
diff --git a/backend/api/api/Services/ModelService.cs b/backend/api/api/Services/ModelService.cs
index 2ba3c54d..f42219f5 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> _model;
public ModelService(IUserStoreDatabaseSettings settings, IMongoClient mongoClient)
@@ -31,6 +30,15 @@ namespace api.Services
{
return _model.Find(model => model.username == username).ToList();
}
+ public List<Model> GetLatestModels(string username)
+ {
+ List<Model> list = _model.Find(model => model.username == username).ToList();
+
+ list = list.OrderByDescending(model => model.lastUpdated).ToList();
+
+ return list;
+ }
+
/*
public List<Model> GetPublicModels()
{
@@ -46,6 +54,18 @@ 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/backend/api/api/Services/PredictorService.cs b/backend/api/api/Services/PredictorService.cs
index 69fb25c9..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<Predictor>(settings.PredictorCollectionName);
}
+ public List<Predictor> SearchPredictors(string name, string username)
+ {
+ return _predictor.Find(predictor => predictor.name == name && predictor.isPublic == true).ToList();
+ }
+
public Predictor Create(Predictor predictor)
{
_predictor.InsertOne(predictor);
@@ -35,6 +40,18 @@ namespace api.Services
return _predictor.Find(predictor => predictor.username == username && predictor.name == name).FirstOrDefault();
}
+ //last private models
+ public List<Predictor> SortPredictors(string username, bool ascdsc, int latest)
+ {
+ List<Predictor> list = _predictor.Find(predictor => predictor.username == username).ToList();
+
+
+ if (ascdsc)
+ list = list.OrderBy(predictor => predictor.dateCreated).ToList();
+ else
+ list = list.OrderByDescending(predictor => predictor.dateCreated).ToList();
+ return list;
+ }
public List<Predictor> GetPublicPredictors()
{
@@ -46,5 +63,6 @@ namespace api.Services
_predictor.ReplaceOne(predictor => predictor.username == username && predictor.name == name, predictor);
}
+
}
}