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 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 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(); } }
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 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 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; }); }
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 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; }); }