From ed4597e6b36a53f1ddd1db48c890b327e123e04b Mon Sep 17 00:00:00 2001 From: Giacomo Bertolazzi <20015159@studenti.uniupo.it> Date: Fri, 4 Jan 2019 18:26:00 +0100 Subject: [PATCH] Refactoring api --- .../Controllers/AccountController.cs | 21 +++- .../Controllers/Services/BaseController.cs | 9 +- .../Controllers/Services/CrudController.cs | 30 ++--- .../Services/CrudTimeController.cs | 108 ++++++++++-------- SeniorAssistant/Views/Home/Data.cshtml | 47 ++++++-- SeniorAssistant/Views/Shared/Logout.cshtml | 27 ++--- SeniorAssistant/Views/Shared/Profile.cshtml | 6 +- SeniorAssistant/Views/_ViewImports.cshtml | 1 + SeniorAssistant/senior.db | Bin 655360 -> 667648 bytes 9 files changed, 149 insertions(+), 100 deletions(-) diff --git a/SeniorAssistant/Controllers/AccountController.cs b/SeniorAssistant/Controllers/AccountController.cs index c7d8ef1..6a999d4 100644 --- a/SeniorAssistant/Controllers/AccountController.cs +++ b/SeniorAssistant/Controllers/AccountController.cs @@ -13,7 +13,7 @@ namespace IdentityDemo.Controllers [Route("[controller]/[action]")] public class AccountController : BaseController { - private readonly JsonResponse OkJson = new JsonResponse(); + private static readonly string NoteModified = "Il tuo dottore ha modificato la nota per te"; [HttpPost] public ActionResult _login(string username, string password) @@ -35,9 +35,8 @@ namespace IdentityDemo.Controllers HttpContext.Session.SetString(Username, username); HttpContext.Session.SetString("email", user.Email); HttpContext.Session.SetString("name", user.Name); - //HttpContext.Session.SetString("lastname", user.LastName); - - + HttpContext.Session.SetString("lastname", user.LastName); + var isDoc = (from d in Db.Doctors where d.Username.Equals(username) select d).ToArray().FirstOrDefault() != null; @@ -168,5 +167,19 @@ namespace IdentityDemo.Controllers return Json(new JsonResponse()); }); } + + [HttpPut] + public ActionResult _addNote(string patient, string text) + { + return LoggedAccessDataOf(patient, () => + { + var pat = Db.Patients.Where((p) => p.Username.Equals(patient)).FirstOrDefault(); + pat.Notes = text; + Db.Update(pat); + _notification(patient, NoteModified); + + return Json(OkJson); + }); + } } } \ No newline at end of file diff --git a/SeniorAssistant/Controllers/Services/BaseController.cs b/SeniorAssistant/Controllers/Services/BaseController.cs index 0c963ad..94dc2fb 100644 --- a/SeniorAssistant/Controllers/Services/BaseController.cs +++ b/SeniorAssistant/Controllers/Services/BaseController.cs @@ -12,6 +12,7 @@ namespace SeniorAssistant.Controllers protected static readonly string InvalidModel = "Modello non valido"; protected static readonly string NoAuthorized = "Non sei autorizzato a vedere questi dati"; protected static readonly string Username = "username"; + protected readonly JsonResponse OkJson = new JsonResponse(); IDataContextFactory dbFactory; SeniorDataContext db; @@ -59,16 +60,16 @@ namespace SeniorAssistant.Controllers }); } - protected ActionResult LoggedAccessDataOf(string username, Func success) + protected ActionResult LoggedAccessDataOf(string username, Func success, bool patients = true) { return LoggedAction(() => { var loggedUser = HttpContext.Session.GetString(Username); var condition = username.Equals(loggedUser); - condition = condition || (from patient in Db.Patients - where patient.Doctor.Equals(loggedUser) && patient.Username.Equals(username) - select patient).ToArray().FirstOrDefault() != null; + condition = condition || (patients && (from patient in Db.Patients + where patient.Doctor.Equals(loggedUser) && patient.Username.Equals(username) + select patient).ToArray().FirstOrDefault() != null); return condition ? success.Invoke() : diff --git a/SeniorAssistant/Controllers/Services/CrudController.cs b/SeniorAssistant/Controllers/Services/CrudController.cs index 7bb68b8..4ba8e87 100644 --- a/SeniorAssistant/Controllers/Services/CrudController.cs +++ b/SeniorAssistant/Controllers/Services/CrudController.cs @@ -10,24 +10,24 @@ namespace SeniorAssistant.Controllers.Services public abstract class CrudController : BaseController where TEntity : class, IHasUsername { - [HttpGet] - public async Task> Read() => await Db.GetTable().ToListAsync(); - [HttpGet("{username}")] - public async Task Read(string username) => await Db.GetTable().FirstOrDefaultAsync(c => c.Username.Equals(username)); - - [HttpPost] - public async Task Create([FromBody]TEntity item) => await Db.InsertAsync(item); - - [HttpPut("{username}")] - public async Task Update(string username, [FromBody]TEntity item) + public async Task Read(string username) { - item.Username = username; - - await Db.UpdateAsync(item); + return LoggedAccessDataOf(username, () => + { + return Json(Db.GetTable().Where((u) => u.Username.Equals(username)).ToArray()); + }); } - [HttpDelete("{username}")] - public async Task Delete(string username) => await Db.GetTable().Where(c => c.Username.Equals(username)).DeleteAsync(); + [HttpPut("{username}")] + public async Task Update(string username, [FromBody] TEntity entity) + { + return LoggedAccessDataOf(username, () => + { + entity.Username = username; + Db.Update(entity); + return Json(OkJson); + }, false); + } } } diff --git a/SeniorAssistant/Controllers/Services/CrudTimeController.cs b/SeniorAssistant/Controllers/Services/CrudTimeController.cs index 9e3d1c3..1235bdf 100644 --- a/SeniorAssistant/Controllers/Services/CrudTimeController.cs +++ b/SeniorAssistant/Controllers/Services/CrudTimeController.cs @@ -2,74 +2,86 @@ using Microsoft.AspNetCore.Mvc; using SeniorAssistant.Models; using System; -using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace SeniorAssistant.Controllers.Services { - public class CrudTimeController : BaseController + public class CrudTimeController : CrudController where TEntity : class, IHasTime { - static readonly object Empty = new { }; - - [HttpGet] - public async Task> Read() => await Db.GetTable().ToListAsync(); - - [HttpGet("{username}")] - public async Task> Read(string username) => await Db.GetTable().Where(e => e.Username.Equals(username)).ToListAsync(); + private static readonly string DateNotCorrect = "Il formato della data non e' corretto"; [HttpGet("{username}/{date:regex((today|\\d{{4}}-\\d{{2}}-\\d{{2}}))}/{hour:range(0, 23)?}")] - public async Task> Read(string username, string date, int hour = -1) => await Read(username, date, date, hour); + public async Task Read(string username, string date, int hour = -1) => await Read(username, date, date, hour); [HttpGet("{username}/{from:regex((today|\\d{{4}}-\\d{{2}}-\\d{{2}}))}/{to:regex((today|\\d{{4}}-\\d{{2}}-\\d{{2}}))}/{hour:range(0, 23)?}")] - public async Task> Read(string username, string from, string to, int hour = -1) + public async Task Read(string username, string from, string to, int hour = -1) { - try + return LoggedAccessDataOf(username, () => { - DateTime dateFrom = (from.Equals("today") ? DateTime.Now : DateTime.ParseExact(from, "yyyy-MM-dd", null)); - DateTime dateTo = (to.Equals("today") ? DateTime.Now : DateTime.ParseExact(to, "yyyy-MM-dd", null)); + try + { + DateTime dateFrom = (from.Equals("today") ? DateTime.Now : DateTime.ParseExact(from, "yyyy-MM-dd", null)); + DateTime dateTo = (to.Equals("today") ? DateTime.Now : DateTime.ParseExact(to, "yyyy-MM-dd", null)); - return await Db.GetTable().Where(e => e.Username.Equals(username) && dateFrom.Date<=e.Time.Date && dateTo.Date>=e.Time.Date && (hour < 0 || e.Time.Hour == hour)).ToListAsync(); - } - catch - { - return new List(); - } + return Json((from entity in Db.GetTable() + where entity.Username.Equals(username) + && dateFrom.Date <= entity.Time.Date + && dateTo.Date >= entity.Time.Date + && (hour < 0 || entity.Time.Hour == hour) + select entity).ToArray()); + } + catch + { + return Json(new JsonResponse(false, DateNotCorrect)); + } + }); } [HttpGet("{username}/last/{hour:min(1)}")] - public async Task> Read(string username, int hour) + public async Task Read(string username, int hour) { - DateTime date = DateTime.Now.AddHours(-hour); - return await Db.GetTable().Where(e => e.Username.Equals(username) && date <= e.Time).ToListAsync(); + return LoggedAccessDataOf(username, () => + { + DateTime date = DateTime.Now.AddHours(-hour); + return Json((from entity in Db.GetTable() + where entity.Username.Equals(username) + && date <= entity.Time + select entity).ToArray()); + }); + } + + [HttpPost] + public async Task Create([FromBody]TEntity item) + { + return Action(() => + { + Db.Insert(item); + return Json(OkJson); + }); + } + + [HttpPut] + public async Task Update([FromBody]TEntity item) + { + return LoggedAccessDataOf(item.Username, () => + { + var e = Read(item.Username, item.Time); + if (e == null) + { + Create(item); + } + else + { + Db.UpdateAsync(item); + } + + return Json(OkJson); + }, false); } [NonAction] - public async Task Read(string username, DateTime date) => await Db.GetTable().FirstOrDefaultAsync(e => e.Username.Equals(username) && date == e.Time); - - [HttpPost] - public async Task Create([FromBody]TEntity item) => await Db.InsertAsync(item); - - [HttpPut] - public async Task Update([FromBody]TEntity item) - { - var e = await Read(item.Username, item.Time); - if (e == null) - { - await Create(item); - } - else - { - await Db.UpdateAsync(item); - } - - return Empty; - } - - /* - [HttpDelete("{username}")] - public async Task Delete(string username) => await Db.GetTable().Where(c => c.Username.Equals(username)).DeleteAsync(); - */ + private TEntity Read(string username, DateTime date) => Db.GetTable().FirstOrDefault(e => e.Username.Equals(username) && date == e.Time); } } diff --git a/SeniorAssistant/Views/Home/Data.cshtml b/SeniorAssistant/Views/Home/Data.cshtml index 5eb10df..1322faa 100644 --- a/SeniorAssistant/Views/Home/Data.cshtml +++ b/SeniorAssistant/Views/Home/Data.cshtml @@ -8,13 +8,15 @@ var username = session.GetString("username"); bool auth = username.Equals(Model); - if (session.GetString("role").Equals("doctor")) + bool isDoc = session.GetString("role").Equals("doctor"); + Patient patient = null; + if (isDoc) { var db = dbFactory.Create(); - var isDocPatient = (from p in db.Patients - where p.Username.Equals(Model) && p.Doctor.Equals(username) - select p).ToArray().FirstOrDefault() != null; - auth = auth || isDocPatient; + patient = (from p in db.Patients + where p.Username.Equals(Model) && p.Doctor.Equals(username) + select p).ToArray().FirstOrDefault(); + auth = auth || patient != null; } } @@ -25,9 +27,38 @@ else { // Aggiungere un qualcosa per scegliere le ore da vedere (Max 48?) - - -
+
+ + +
+
+ @if(isDoc && patient != null) + { +
+

NOTEEEEEEEEEEEE: l'alunno dorme durante la lezione

+ + +

+
+ + } + + +