public IHttpActionResult PostCustomer([FromUri] string senderID, [FromBody] GeneralUserModel userModel)
        {
            Customer customer = new Customer(userModel.Username, userModel.Password)
            {
                FirstName = userModel.FirstName,
                LastName  = userModel.LastName,
                Gender    = userModel.Gender,
                JMBG      = userModel.JMBG,
                Phone     = userModel.Phone,
                Email     = userModel.Email,
            };

            userModel.TaxiDrivesIDs.ForEach(td => customer.TaxiDrives.Add(DbTaxiDrive.GetSingleEntityByKey(td)));

            //Customer ne pravi sam svoj nalog
            if (senderID != customer.Username)
            {
                if (!LoggedUsers.Contains(senderID))
                {
                    return(Content(HttpStatusCode.Unauthorized, "Not logged in."));
                }
                else if (!DbAdmin.Exists(senderID))
                {
                    return(Content(HttpStatusCode.Unauthorized, "Not a dispatcher nor the user to be added."));
                }
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            bool result;

            try
            {
                result = DbCustomer.Add(customer);
            }
            catch (Exception e)
            {
                Trace.Write($"Error on 'PostCustomer()'. Error message: {e.Message}");
                Trace.Write($"[STACK_TRACE] {e.StackTrace}");
                return(InternalServerError(e));
            }

            if (result)
            {
                return(Ok(customer));
            }
            else
            {
                return(BadRequest("Customer already exists."));
            }
        }
        public IHttpActionResult PostDriver([FromUri] string senderID, [FromBody] DriverModel driverModel)
        {
            Driver driver = new Driver(driverModel.Username, driverModel.Password)
            {
                FirstName       = driverModel.FirstName,
                LastName        = driverModel.LastName,
                Gender          = driverModel.Gender,
                JMBG            = driverModel.JMBG,
                Phone           = driverModel.Phone,
                Email           = driverModel.Email,
                DriversLocation = DbLocation.GetSingleEntityByKey(driverModel.DriversLocationID),
                DriversVehicle  = DbVehicle.GetSingleEntityByKey(driverModel.DriversVehicleID),
            };

            driverModel.TaxiDrivesIDs.ForEach(td => driver.TaxiDrives.Add(DbTaxiDrive.GetSingleEntityByKey(td)));

            if (!LoggedUsers.Contains(senderID))
            {
                return(Content(HttpStatusCode.Unauthorized, "Not logged in."));
            }
            else if (!DbAdmin.Exists(senderID))
            {
                return(Content(HttpStatusCode.Unauthorized, "Not a dispatcher."));
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            bool result;

            try
            {
                result = DbDriver.Add(driver);
            }
            catch (Exception e)
            {
                Trace.Write($"Error on 'PostDriver()'. Error message: {e.Message}");
                Trace.Write($"[STACK_TRACE] {e.StackTrace}");
                return(InternalServerError(e));
            }

            if (result)
            {
                return(Ok(driver));
            }
            else
            {
                return(BadRequest("Driver already exists."));
            }
        }
        // PUT api/drivers/5
        public IHttpActionResult PutDriver([FromUri] string senderID, [FromBody] DriverModel driverModel)
        {
            bool result = false;

            if (!LoggedUsers.Contains(senderID))
            {
                return(Content(HttpStatusCode.Unauthorized, "Not logged in."));
            }

            if (DbDriver.Exists(driverModel.Username))
            {
                if (!DbAdmin.Exists(senderID) || senderID != driverModel.Username)
                {
                    return(Content(HttpStatusCode.Unauthorized, "Not a dispatcher nor a user to be modified."));
                }


                try
                {
                    Driver driver = new Driver(driverModel.Username, driverModel.Password)
                    {
                        FirstName       = driverModel.FirstName,
                        LastName        = driverModel.LastName,
                        Gender          = driverModel.Gender,
                        JMBG            = driverModel.JMBG,
                        Phone           = driverModel.Phone,
                        Email           = driverModel.Email,
                        DriversLocation = DbLocation.GetSingleEntityByKey(driverModel.DriversLocationID),
                        DriversVehicle  = DbVehicle.GetSingleEntityByKey(driverModel.DriversVehicleID),
                    };
                    driverModel.TaxiDrivesIDs.ForEach(td => driver.TaxiDrives.Add(DbTaxiDrive.GetSingleEntityByKey(td)));

                    result = DbDriver.Modify(driver);
                }
                catch (Exception e)
                {
                    Trace.Write($"Error on 'PutDriver()'. Error message: {e.Message}");
                    Trace.Write($"[STACK_TRACE] {e.StackTrace}");
                    return(InternalServerError(e));
                }
            }

            if (result)
            {
                return(Ok(driverModel));
            }
            else
            {
                return(NotFound());
            }
        }
        // PUT api/drivers/5
        public IHttpActionResult PutNonDriver([FromUri] string senderID, [FromBody] GeneralUserModel user)
        {
            if (!LoggedUsers.Contains(senderID))
            {
                return(Content(HttpStatusCode.Unauthorized, "Not logged in."));
            }

            bool result = false;

            if (DbAdmin.Exists(user.Username))
            {
                if (!DbAdmin.Exists(senderID))
                {
                    return(Content(HttpStatusCode.Unauthorized, "Not a dispatcher."));
                }

                try
                {
                    Admin admin = new Admin(user.Username, user.Password)
                    {
                        FirstName = user.FirstName,
                        LastName  = user.LastName,
                        Gender    = user.Gender,
                        JMBG      = user.JMBG,
                        Phone     = user.Phone,
                        Email     = user.Email,
                    };
                    user.TaxiDrivesIDs.ForEach(td => admin.TaxiDrives.Add(DbTaxiDrive.GetSingleEntityByKey(td)));

                    result = DbAdmin.Modify(admin as Admin);
                }
                catch (Exception e)
                {
                    Trace.Write($"Error on 'PutNonDriver()'. Error message: {e.Message}");
                    Trace.Write($"[STACK_TRACE] {e.StackTrace}");
                    return(InternalServerError(e));
                }
            }
            else if (DbCustomer.Exists(user.Username))
            {
                if (!DbAdmin.Exists(senderID) || senderID != user.Username)
                {
                    return(Content(HttpStatusCode.Unauthorized, "Not a dispatcher nor the user to be modifed."));
                }

                try
                {
                    Customer customer = new Customer(user.Username, user.Password)
                    {
                        FirstName = user.FirstName,
                        LastName  = user.LastName,
                        Gender    = user.Gender,
                        JMBG      = user.JMBG,
                        Phone     = user.Phone,
                        Email     = user.Email,
                    };
                    user.TaxiDrivesIDs.ForEach(td => customer.TaxiDrives.Add(DbTaxiDrive.GetSingleEntityByKey(td)));

                    result = DbCustomer.Modify(customer as Customer);
                }
                catch (Exception e)
                {
                    Trace.Write($"Error on 'PutNonDriver()'. Error message: {e.Message}");
                    Trace.Write($"[STACK_TRACE] {e.StackTrace}");
                    return(InternalServerError(e));
                }
            }

            if (result)
            {
                return(Ok(user));
            }
            else
            {
                return(NotFound());
            }
        }