public HttpResponseMessage CreateList(TodolistModel model,
                                              [ValueProvider(typeof(HeaderValueProviderFactory <string>))]
                                              string accessToken)
        {
            return(this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new TasksManagerDbContext();
                var meUser = this.GetUserByAccessToken(accessToken, context);
                this.ValidateList(model);

                var listEntity = model.ToEntity();
                listEntity.Owner = meUser;
                meUser.TodoLists.Add(listEntity);
                context.SaveChanges();

                var responseModel = new ListCreatedModel()
                {
                    Id = listEntity.Id,
                    Owner = meUser.Username
                };
                var response = this.Request.CreateResponse(HttpStatusCode.Created, responseModel);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { listId = listEntity.Id }));
                return response;
            }));
        }
        public HttpResponseMessage ChangeTodoStatus(int todoId,
                                                    [ValueProvider(typeof(HeaderValueProviderFactory <string>))]
                                                    string accessToken)
        {
            return(this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new TasksManagerDbContext();

                var meUser = this.GetUserByAccessToken(accessToken, context);

                var todo = context.Todos.Find(todoId);
                if (todo == null)
                {
                    throw new ArgumentNullException("Wrong Todo");
                }

                if (todo.List.Owner != meUser)
                {
                    throw new InvalidOperationException("This is no your todo to check");
                }

                todo.IsDone = (todo.IsDone) ? false : true;
                context.SaveChanges();


                var responseModel = new ListCreatedModel()
                {
                    Id = todo.List.Id,
                    Owner = meUser.Username
                };
                var response = this.Request.CreateResponse(HttpStatusCode.Created, responseModel);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { listId = responseModel.Id }));
                return response;
            }));
        }
        public HttpResponseMessage RegisterUser(UserModel model)
        {
            return(this.ExecuteOperationAndHandleExceptions(() =>
            {
                this.ValidateUser(model);
                this.ValidateEmail(model.Email);

                var context = new TasksManagerDbContext();
                var dbUser = GetUserByUsernameOrEmail(model, context);
                if (dbUser != null)
                {
                    throw new InvalidOperationException("This user already exists in the database");
                }
                dbUser = new User()
                {
                    Username = model.Username,
                    Email = model.Email,
                    AuthenticationCode = model.AuthCode
                };
                context.Users.Add(dbUser);

                context.SaveChanges();

                var responseModel = new RegisterUserResponseModel()
                {
                    Id = dbUser.Id,
                    Username = dbUser.Username,
                };

                var response = this.Request.CreateResponse(HttpStatusCode.Created, responseModel);
                return response;
            }));
        }
 public AppointmentsController()
 {
     using (var context = new TasksManagerDbContext())
     {
         var finishedState = context.States.FirstOrDefault(st => st.Value == "finished");
         var currentState  = context.States.FirstOrDefault(st => st.Value == "current");
         var appointments  = context.Appointments;
         foreach (var app in appointments)
         {
             if (app.AppointmentDate <= DateTime.Now)
             {
                 var from = app.AppointmentDate;
                 var to   = app.AppointmentDate.AddMinutes(app.Duration);
                 if (from <= DateTime.Now && DateTime.Now <= to)
                 {
                     app.State = currentState;
                 }
                 else if (app.StateId != finishedState.Id)
                 {
                     app.State = finishedState;
                 }
             }
         }
         context.SaveChanges();
     }
 }
        private User GetUserByUsernameOrEmail(UserModel model, TasksManagerDbContext context)
        {
            var usernameToLower = model.Username.ToLower();
            var emailToLower    = model.Email.ToLower();
            var dbUser          = context.Users.FirstOrDefault(u => u.Username == usernameToLower || u.Email == emailToLower);

            return(dbUser);
        }
Beispiel #6
0
        protected void Application_Start()
        {
            WebApiConfig.Register(GlobalConfiguration.Configuration);

            using (TasksManagerDbContext context = new TasksManagerDbContext())
            {
                context.Database.Initialize(true);
            }
        }
Beispiel #7
0
        protected User GetUserByAccessToken(string accessToken, TasksManagerDbContext context)
        {
            var user = context.Users.FirstOrDefault(usr => usr.AccessToken == accessToken);

            if (user == null)
            {
                throw new InvalidOperationException("Invalid user credentials");
            }
            return(user);
        }
 public IQueryable <TodolistModel> GetAll(
     [ValueProvider(typeof(HeaderValueProviderFactory <string>))]
     string accessToken)
 {
     return(this.ExecuteOperationAndHandleExceptions(() =>
     {
         var context = new TasksManagerDbContext();
         var user = this.GetUserByAccessToken(accessToken, context);
         var lists = user.TodoLists.AsQueryable().OrderBy(tl => tl.Title)
                     .Select(TodolistModel.FromTodoList);
         return lists;
     }));
 }
        public HttpResponseMessage LogoutUser(
            [ValueProvider(typeof(HeaderValueProviderFactory <string>))]
            string accessToken)
        {
            return(this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new TasksManagerDbContext();
                var user = this.GetUserByAccessToken(accessToken, context);
                user.AccessToken = null;
                context.SaveChanges();

                var response = this.Request.CreateResponse(HttpStatusCode.NoContent);
                return response;
            }));
        }
 public IQueryable <AppointmentModel> GetAll(
     [ValueProvider(typeof(HeaderValueProviderFactory <string>))]
     string accessToken)
 {
     return(this.ExecuteOperationAndHandleExceptions(() =>
     {
         var context = new TasksManagerDbContext();
         var meUser = this.GetUserByAccessToken(accessToken, context);
         var appointmentModels = meUser.Appointments
                                 .AsQueryable()
                                 .OrderByDescending(app => app.AppointmentDate)
                                 .Select(AppointmentModel.FromAppointment);
         return appointmentModels;
     }));
 }
        public HttpResponseMessage LoginUser(UserModel model)
        {
            return(this.ExecuteOperationAndHandleExceptions(() =>
            {
                this.ValidateUser(model);

                if (model == null)
                {
                    throw new FormatException("invalid username and/or password");
                }
                this.ValidateAuthCode(model.AuthCode);
                try
                {
                    this.ValidateUsername(model.Username);
                }
                catch (Exception ex)
                {
                    this.ValidateEmail(model.Email);
                }

                var context = new TasksManagerDbContext();
                var username = ((string.IsNullOrEmpty(model.Username)) ? model.Email : model.Username).ToLower();
                var user = context.Users.FirstOrDefault(u => u.Username == username || u.Email == username);
                if (user == null)
                {
                    throw new InvalidOperationException("Invalid username or password");
                }
                if (user.AccessToken == null)
                {
                    user.AccessToken = this.GenerateAccessToken(user.Id);
                    context.SaveChanges();
                }
                var responseModel = new LoginResponseModel()
                {
                    Id = user.Id,
                    Username = user.Username,
                    AccessToken = user.AccessToken
                };
                var response = this.Request.CreateResponse(HttpStatusCode.OK, responseModel);
                return response;
            }));
        }
        public HttpResponseMessage CreateTodoForList(int listId, TodoModel model,
                                                     [ValueProvider(typeof(HeaderValueProviderFactory <string>))]
                                                     string accessToken)
        {
            return(this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new TasksManagerDbContext();
                var meUser = this.GetUserByAccessToken(accessToken, context);
                var list = context.TodoLists.Find(listId);
                if (list == null)
                {
                    throw new ArgumentNullException("Wrong TODO list");
                }

                if (string.IsNullOrEmpty(model.Text))
                {
                    throw new ArgumentNullException("Invalid TODO properties");
                }

                var todoEntity = new Todo()
                {
                    Text = model.Text,
                    IsDone = false
                };

                list.Todos.Add(todoEntity);
                context.SaveChanges();

                var responseModel = new ListCreatedModel()
                {
                    Id = listId,
                    Owner = meUser.Username
                };
                var response = this.Request.CreateResponse(HttpStatusCode.Created, responseModel);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { listId = responseModel.Id }));
                return response;
            }));
        }
        public HttpResponseMessage CreateAppointment(AppointmentModel model,
                                                     [ValueProvider(typeof(HeaderValueProviderFactory <string>))]
                                                     string accessToken)
        {
            return(this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new TasksManagerDbContext();
                var meUser = this.GetUserByAccessToken(accessToken, context);
                this.ValidateAppointment(model);
                var appointmentEntity = model.ToEntity();
                appointmentEntity.Owner = meUser;
                appointmentEntity.State = context.States.FirstOrDefault(st => st.Value == "upcomming");

                meUser.Appointments.Add(appointmentEntity);
                context.SaveChanges();
                var responseModel = new AppointmentCreatedModel()
                {
                    Id = appointmentEntity.Id,
                    Owner = appointmentEntity.Owner.Username
                };
                var response = this.Request.CreateResponse(HttpStatusCode.Created, responseModel);
                return response;
            }));
        }