public async Task <ActionResult> Post(string email, string password)
        {
            using var db = new DutyingContext();

            if (!db.Users.Any(user => user.Email == email))
            {
                return(NotFound("No user found!"));
            }

            var user = db.Users
                       .Include(user => user.UserRoles)
                       .ThenInclude(userRole => userRole.Role)
                       .Where(user => user.Email == email)
                       .First();

            var salt           = Convert.FromBase64String(user.Salt);
            var hashedPassword = RegisterController.HashPasswordPbkdf2(password, salt);

            if (user.Password != hashedPassword)
            {
                return(BadRequest("Wrong password!"));
            }

            var token = await CreateTokenAsync(user);

            return(Ok(token));
        }
Exemple #2
0
        public ActionResult <Ward> Post([FromBody] Ward ward)
        {
            using var db = new DutyingContext();

            var hospital = db.Hospitals
                           .Include(hospital => hospital.Wards)
                           .FirstOrDefault(hospital => hospital.Id == ward.HospitalId);

            if (hospital is null)
            {
                return(NotFound());
            }

            if (hospital.Wards is null)
            {
                hospital.Wards = new List <Ward>();
            }

            hospital.Wards.Add(ward);

            db.Hospitals.Update(hospital);
            db.SaveChanges();

            return(Created("", ward));
        }
Exemple #3
0
        public ActionResult <IEnumerable <Hospital> > Get([FromRoute] string searchPhrase,
                                                          [FromHeader(Name = "Paging-PageNo")] int pageNo,
                                                          [FromHeader(Name = "Paging-PageSize")] int pageSize)
        {
            int skipRecords = (pageNo - 1) * pageSize;

            using var db = new DutyingContext();

            var query = db.Hospitals.AsQueryable();

            if (!string.IsNullOrEmpty(searchPhrase))
            {
                query = query.Where(hospital =>
                                    hospital.Name.ToLower().Contains(searchPhrase.ToLower()));
            }

            int totalRecords = query.Count();

            int pageCount = totalRecords > 0 ? (int)Math.Ceiling(totalRecords / (double)pageSize) : 0;

            var hospitals = query.OrderBy(hospital => hospital.Name)
                            .Skip(skipRecords)
                            .Take(pageSize)
                            .ToList();

            pageNo = Math.Min(pageCount, pageNo);

            Response.Headers.Add("Paging-PageNo", pageNo.ToString());
            Response.Headers.Add("Paging-PageSize", pageSize.ToString());
            Response.Headers.Add("Paging-PageCount", pageCount.ToString());
            Response.Headers.Add("Paging-TotalRecordsCount", totalRecords.ToString());

            return(Ok(hospitals));
        }
        public ActionResult Put([FromBody] SchedulerEvent schedulerEvent)
        {
            using var db = new DutyingContext();

            var user = db.Users
                       .Include(user => user.SchedulerEvents)
                       .FirstOrDefault(user => user.Id == schedulerEvent.UserId);

            if (user is null)
            {
                NotFound();
            }

            user.SchedulerEvents
            .Where(e => e.Id == schedulerEvent.Id)
            .Select(e =>
            {
                e.StartsAt = e.StartsAt != schedulerEvent.StartsAt ? schedulerEvent.StartsAt : e.StartsAt;
                e.EndsAt   = e.EndsAt != schedulerEvent.EndsAt ? schedulerEvent.EndsAt : e.EndsAt;
                e.Comment  = e.Comment != schedulerEvent.Comment ? schedulerEvent.Comment : e.Comment;
                return(e);
            }).ToList();
            db.Users.Update(user);
            db.SaveChanges();

            return(Ok());
        }
Exemple #5
0
        public ActionResult <Hospital> Post(string street, string zip, string city, string district, string name)
        {
            using var db = new DutyingContext();

            var hospital = new Hospital()
            {
                Street   = street,
                Zip      = zip,
                City     = city,
                District = district,
                Name     = name,
            };

            try
            {
                db.Add(hospital);

                db.SaveChanges();
            }
            catch (Exception ex)
            {
                return(Problem(
                           title: "Database communication error!",
                           statusCode: StatusCodes.Status500InternalServerError,
                           detail: ex.Message));
            }

            return(Created("Hospital created", hospital));
        }
        public ActionResult <SchedulerEvent> Post([FromBody] SchedulerEvent schedulerEvent)
        {
            using var db = new DutyingContext();

            var user = db.Users
                       .Include(user => user.SchedulerEvents)
                       .FirstOrDefault(user => user.Id == schedulerEvent.UserId);

            if (user is null)
            {
                NotFound();
            }

            if (user.SchedulerEvents is null)
            {
                user.SchedulerEvents = new List <SchedulerEvent>();
            }

            user.SchedulerEvents.Add(schedulerEvent);

            db.Users.Update(user);
            db.SaveChanges();

            return(Created("", schedulerEvent));
        }
        public ActionResult <IEnumerable <User> > Get()
        {
            using var db = new DutyingContext();

            var hospitals = db.Hospitals.ToList();

            return(Ok(hospitals));
        }
        public ActionResult <IEnumerable <Role> > Get()
        {
            using var db = new DutyingContext();

            var dbRoles = db.Roles
                          .ToList();

            return(Ok(dbRoles));
        }
        public ActionResult <IEnumerable <SchedulerEvent> > Get()
        {
            using var db = new DutyingContext();

            var schedulerEvents = db.SchedulerEvents
                                  .ToList();

            return(Ok(schedulerEvents));
        }
Exemple #10
0
        public ActionResult <User> Post([FromBody] User user)
        {
            using var db = new DutyingContext();

            if (db.Users.Any(u => u.Email == user.Email))
            {
                return(Problem(title: "User with given email already exists!", statusCode: StatusCodes.Status409Conflict));
            }

            var ward = db.Wards
                       .Include(ward => ward.Users)
                       .ThenInclude(users => user.UserRoles)
                       .FirstOrDefault(ward => ward.Id == user.WardId);

            if (ward.Users is null)
            {
                ward.Users = new List <User>();
            }

            var salt           = GenerateSalt();
            var hashedPassword = HashPasswordPbkdf2(user.Password, salt);

            user.Password  = hashedPassword;
            user.Salt      = Convert.ToBase64String(salt);
            user.CreatedAt = DateTime.Now;

            try
            {
                var role = db.Roles
                           .Where(role => role.Symbol == (int)RoleEnum.Doctor)
                           .First();

                user.UserRoles = new List <UserRole>()
                {
                    new UserRole()
                    {
                        Role = role
                    }
                };

                ward.Users.Add(user);

                db.Wards.Update(ward);
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                return(Problem(
                           title: "Database communication error!",
                           statusCode: StatusCodes.Status500InternalServerError,
                           detail: ex.Message));
            }

            return(Created("User created", user));
        }
        public ActionResult <User> Put([FromBody] User user)
        {
            using var db = new DutyingContext();

            if (!db.Users.Any(u => u.Id == user.Id))
            {
                return(NotFound());
            }

            var dbUser = db.Users
                         .Include(user => user.UserRoles)
                         .ThenInclude(uRoles => uRoles.Role)
                         .FirstOrDefault(u => u.Id == user.Id);

            if (dbUser.FirstName != user.FirstName)
            {
                dbUser.FirstName = user.FirstName;
            }
            if (dbUser.LastName != user.LastName)
            {
                dbUser.LastName = user.LastName;
            }
            if (dbUser.Email != user.Email)
            {
                dbUser.Email = user.Email;
            }
            if (dbUser.WardId != user.WardId)
            {
                dbUser.WardId = user.WardId;
            }

            dbUser.UserRoles.RemoveAll(dbUr => !user.UserRoles.Any(ur => dbUr.RoleId == ur.RoleId));
            user.UserRoles.RemoveAll(ur => dbUser.UserRoles.Any(dbUr => dbUr.RoleId == ur.RoleId));

            if (user.UserRoles.Count > 0)
            {
                dbUser.UserRoles.AddRange(user.UserRoles);
            }

            if (!string.IsNullOrEmpty(user.Password) && dbUser.Password !=
                RegisterController.HashPasswordPbkdf2(user.Password, Convert.FromBase64String(dbUser.Salt)))
            {
                var salt           = RegisterController.GenerateSalt();
                var hashedPassword = RegisterController.HashPasswordPbkdf2(user.Password, salt);

                dbUser.Password = hashedPassword;
                dbUser.Salt     = Convert.ToBase64String(salt);
            }

            db.Users.Update(dbUser);
            db.SaveChanges();

            return(Ok(dbUser));
        }
        public ActionResult <SchedulerEvent> GetByEventId([FromRoute] int eventId)
        {
            using var db = new DutyingContext();

            var _event = db.SchedulerEvents
                         .FirstOrDefault(e => e.Id == eventId);

            if (_event is null)
            {
                return(NotFound());
            }

            return(Ok(_event));
        }
Exemple #13
0
        public ActionResult <IEnumerable <Hospital> > Get([FromRoute] int hospitalId)
        {
            using var db = new DutyingContext();

            var hospital = db.Hospitals
                           .Where(hospital => hospital.Id == hospitalId)
                           .FirstOrDefault();

            if (hospital is null)
            {
                return(NotFound());
            }

            return(Ok(hospital));
        }
        public ActionResult <Role> GetBySymbol([FromRoute] int roleSymbol)
        {
            using var db = new DutyingContext();

            var role = db.Roles
                       .Where(role => role.Symbol == roleSymbol)
                       .FirstOrDefault();

            if (role is null)
            {
                return(NotFound());
            }

            return(Ok(role));
        }
Exemple #15
0
        public ActionResult <Ward> GetByUserId([FromRoute] int userId)
        {
            using var db = new DutyingContext();

            var ward = db.Wards
                       .Where(ward => ward.Users.Any(user => user.Id == userId))
                       .FirstOrDefault();

            if (ward is null)
            {
                return(NotFound());
            }

            return(Ok(ward));
        }
Exemple #16
0
        public ActionResult <Hospital> GetByWardId([FromRoute] int wardId)
        {
            using var db = new DutyingContext();

            var hospitals = db.Hospitals
                            .Include(hospital => hospital.Wards)
                            .Where(hospital => hospital.Wards.Any(ward => ward.Id == wardId))
                            .ToList();

            if (hospitals is null)
            {
                return(NotFound());
            }

            return(Ok(hospitals));
        }
        public ActionResult <User> GetByWardId([FromRoute] int wardId)
        {
            using var db = new DutyingContext();

            var users = db.Wards
                        .Include(ward => ward.Users)
                        .Where(ward => ward.Id == wardId)
                        .Select(ward => ward.Users)
                        .ToList();

            if (users is null)
            {
                return(NotFound());
            }

            return(Ok(users));
        }
        public ActionResult <IEnumerable <SchedulerEvent> > GetByUserId([FromRoute] int userId)
        {
            using var db = new DutyingContext();

            var _events = db.Users
                          .Include(user => user.SchedulerEvents)
                          .Where(user => user.Id == userId)
                          .Select(user => user.SchedulerEvents)
                          .ToList();

            if (_events is null)
            {
                return(NotFound());
            }

            return(Ok(_events));
        }
        public ActionResult <User> Get([FromRoute] int userId)
        {
            using var db = new DutyingContext();

            var user = db.Users
                       .Where(user => user.Id == userId)
                       .Include(user => user.UserRoles)
                       .ThenInclude(userRole => userRole.Role)
                       .FirstOrDefault();

            if (user is null)
            {
                return(NotFound());
            }

            return(Ok(user));
        }
        public ActionResult Delete([FromRoute] int eventId)
        {
            using var db = new DutyingContext();

            var _event = db.SchedulerEvents
                         .FirstOrDefault(e => e.Id == eventId);

            if (_event is null)
            {
                return(NotFound());
            }

            db.SchedulerEvents.Remove(_event);
            db.SaveChanges();

            return(Ok());
        }
        public ActionResult Delete([FromRoute] int userId)
        {
            using var db = new DutyingContext();

            var user = db.Users
                       .FirstOrDefault(user => user.Id == userId);

            if (user is null)
            {
                return(NotFound());
            }

            db.Users.Remove(user);
            db.SaveChanges();

            return(Ok());
        }
Exemple #22
0
        public ActionResult Delete([FromRoute] int hospitalId)
        {
            using var db = new DutyingContext();

            var hospital = db.Hospitals
                           .FirstOrDefault(hospital => hospital.Id == hospitalId);

            if (hospital is null)
            {
                return(NotFound());
            }

            db.Hospitals.Remove(hospital);
            db.SaveChanges();

            return(Ok());
        }
Exemple #23
0
        public ActionResult Delete([FromRoute] int wardId)
        {
            using var db = new DutyingContext();

            var ward = db.Wards
                       .FirstOrDefault(ward => ward.Id == wardId);

            if (ward is null)
            {
                return(NotFound());
            }

            db.Wards.Remove(ward);
            db.SaveChanges();

            return(Ok());
        }
Exemple #24
0
        public ActionResult <IEnumerable <Ward> > Get([FromRoute] int hospitalId)
        {
            using var db = new DutyingContext();

            var wards = db.Hospitals
                        .Include(hospital => hospital.Wards)
                        .Where(hospital => hospital.Id == hospitalId)
                        .Select(hospital => hospital.Wards)
                        .ToList();

            if (wards is null)
            {
                return(NotFound());
            }

            return(Ok(wards));
        }
Exemple #25
0
        public ActionResult <Hospital> Put([FromBody] Hospital hospital)
        {
            using var db = new DutyingContext();

            if (!db.Hospitals.Any(h => h.Id == hospital.Id))
            {
                return(NotFound());
            }

            var dbHospital = db.Hospitals
                             .FirstOrDefault(h => h.Id == hospital.Id);

            if (dbHospital.Street != hospital.Street)
            {
                dbHospital.Street = hospital.Street;
            }
            if (dbHospital.Zip != hospital.Zip)
            {
                dbHospital.Zip = hospital.Zip;
            }
            if (dbHospital.City != hospital.City)
            {
                dbHospital.City = hospital.City;
            }
            if (dbHospital.District != hospital.District)
            {
                dbHospital.District = hospital.District;
            }
            if (dbHospital.Name != hospital.Name)
            {
                dbHospital.Name = hospital.Name;
            }

            db.Hospitals.Update(dbHospital);
            db.SaveChanges();


            return(Ok(dbHospital));
        }
        public ActionResult <IEnumerable <User> > Get([FromRoute] string searchPhrase,
                                                      [FromHeader(Name = "Paging-PageNo")] int pageNo,
                                                      [FromHeader(Name = "Paging-PageSize")] int pageSize)
        {
            int skipRecords = (pageNo - 1) * pageSize;

            using var db = new DutyingContext();

            var query = db.Users.AsQueryable();

            if (!string.IsNullOrEmpty(searchPhrase))
            {
                query = query.Where(user =>
                                    user.Email.ToLower().Contains(searchPhrase.ToLower()) ||
                                    user.FirstName.ToLower().Contains(searchPhrase.ToLower()) ||
                                    user.LastName.ToLower().Contains(searchPhrase.ToLower()));
            }

            int totalRecords = query.Count();

            int pageCount = totalRecords > 0 ? (int)Math.Ceiling(totalRecords / (double)pageSize) : 0;

            var users = query.OrderBy(user => user.LastName)
                        .Skip(skipRecords)
                        .Take(pageSize)
                        .Include(user => user.UserRoles)
                        .ThenInclude(userRole => userRole.Role)
                        .ToList();

            pageNo = Math.Min(pageCount, pageNo);

            Response.Headers.Add("Paging-PageNo", pageNo.ToString());
            Response.Headers.Add("Paging-PageSize", pageSize.ToString());
            Response.Headers.Add("Paging-PageCount", pageCount.ToString());
            Response.Headers.Add("Paging-TotalRecordsCount", totalRecords.ToString());

            return(Ok(users));
        }