public async Task <IActionResult> PostRegister([FromBody] RegistrationViewModel model) { if (!ModelState.IsValid) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } var userIdentity = _mapper.Map <User>(model); var result = await _userManager.CreateAsync(userIdentity, model.Password); if (!result.Succeeded) { return(new ConflictObjectResult(Errors.AddErrorsToModelState(result, ModelState))); } await _context.UserInfo.AddAsync(new UserInfo { UserId = userIdentity.Id, FullName = model.FullName, BirthDate = DateTime.Now }); await _context.SaveChangesAsync(); await _userManager.AddToRoleAsync(userIdentity, "Member"); var localUserInfo = await _context.UserInfo.FindAsync(userIdentity.Id); var jwt = await Tokens.GenerateJwt(userIdentity, localUserInfo?.FullName ?? "noname", _jwtOptions, _userManager); return(Ok(new Response { Status = 201, Module = jwt })); }
public async Task <IActionResult> PutEvents([FromRoute] int id, [FromBody] Events events) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != events.EventId) { return(BadRequest()); } _context.Entry(events).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!EventsExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
public async Task <IActionResult> PutOrderDetails([FromRoute] int orderId, [FromRoute] int productId, [FromBody] OrderDetails orderDetails) { if (!ModelState.IsValid) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } if (orderId != orderDetails.OrderId) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } _context.Entry(orderDetails).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!OrderDetailsExists(orderId, productId)) { return(Ok(new Response { IsError = true, Status = 404, Message = "Không tìm thấy dữ liệu" })); } else { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); throw; } } return(Ok(new Response { Status = 204 })); }
public async Task <IActionResult> PutProductCategories([FromRoute] int id, [FromBody] ProductCategories productCategories) { if (!ModelState.IsValid) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } if (id != productCategories.CategoryId) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } _context.Entry(productCategories).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ProductCategoriesExists(id)) { return(Ok(new Response { IsError = true, Status = 404, Message = "Không tìm thấy dữ liệu" })); } else { return(Ok(new Response { IsError = true, Status = 409, Message = "Không thể lưu dữ liệu" })); throw; } } return(Ok(new Response { Status = 204 })); }
public async Task <IActionResult> UpdateStock([FromRoute] Guid userId, [FromRoute] int productId, [FromBody] JsonPatchDocument <CartDetails> cart) { if (!ModelState.IsValid) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } var cartdetail = await _context.CartDetails.Where(e => e.ProductId == productId && e.UserId == userId).SingleOrDefaultAsync(); if (cartdetail == null) { return(Ok(new Response { IsError = true, Status = 404, Message = "không tìm thấy sản phẩm để thay đổi số lượng" })); } Task <int> t = GetStock(productId); await t; int stock = t.Result; var element = cart.Operations.Where(c => c.path.Equals("/quantity")).Select(c => c.value).SingleOrDefault(); if (!Int32.TryParse(element.ToString(), out int quantity)) { return(Ok(new Response { IsError = true, Status = 412, Message = "dữ liệu đầu vào sai" })); } if (quantity > stock) { return(Ok(new Response { IsError = true, Status = 406, Message = "Không đủ số lượng" })); } cart.ApplyTo(cartdetail, ModelState); await _context.SaveChangesAsync(); return(Ok(new Response { Status = 204 })); }
public async Task <IActionResult> PutConfirmOrders([FromRoute] int id, [FromRoute] int status) { if (!ModelState.IsValid) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } Orders orders = _context.Orders.Include(o => o.OrderDetails).Where(o => o.OrderId == id).SingleOrDefault(); orders.Status = status; if (status == Globals.KHACH_HUY || status == Globals.SHOP_HUY) { foreach (var details in orders.OrderDetails) { var product = _context.Products.Find(details.ProductId); product.Stock += details.Quantity; _context.Entry(product).State = EntityState.Modified; } } _context.Entry(orders).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!OrdersExists(id)) { return(Ok(new Response { IsError = true, Status = 404, Message = "Không tìm thấy dữ liệu" })); } else { throw; } } return(Ok(new Response { Status = 204 })); }
public async Task <IActionResult> PutSuppliers([FromRoute] int id, [FromBody] Suppliers suppliers) { if (!ModelState.IsValid) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } if (id != suppliers.SupplierId) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } _context.Entry(suppliers).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!SuppliersExists(id)) { return(Ok(new Response { IsError = true, Status = 404, Message = "Không tìm thấy dữ liệu" })); } else { throw; } } return(Ok(new Response { Status = 204 })); }
public async Task <IActionResult> ChangeStatus(int id, string status) { if (!ModelState.IsValid) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } if (status == "discontinued" || status == "index") { var product = await _context.Products.FindAsync(id); if (product == null) { return(Ok(new Response { IsError = true, Message = "not found", Status = 404 })); } if (status == "discontinued") { product.Discontinued = !product.Discontinued; } else { product.DisplayIndex = !product.DisplayIndex; } _context.Entry(product).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { return(Ok(new Response { IsError = true, Message = "not save", Status = 409 })); } return(Ok(new Response { Status = 204 })); } return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); }
public async Task <IActionResult> PutUserInfo([FromRoute] Guid id, [FromBody] UserInfoViewModel userInfo) { if (!ModelState.IsValid) { return(Ok(new Response { IsError = true, Message = "dữ liệu đầu vào sai", Status = 400 })); } if (id != userInfo.UserId) { return(Ok(new Response { IsError = true, Message = "dữ liệu đầu vào sai", Status = 400 })); } if (userInfo.BirthDate == null) { userInfo.BirthDate = DateTime.Now; } User user = await _context.User.FindAsync(id); if (user == null) { return(Ok(new Response { IsError = true, Message = "dữ liệu chỉnh sửa không tồn tại", Status = 404 })); } user.PhoneNumber = userInfo.PhoneNumber; UserInfo info = _mapper.Map <UserInfo>(userInfo); _context.Entry(user).State = EntityState.Modified; _context.Entry(info).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!UserInfoExists(id)) { return(Ok(new Response { IsError = true, Message = "dữ liệu chỉnh sửa không tồn tại", Status = 404 })); } else { return(Ok(new Response { IsError = true, Message = "có lỗi khi chỉnh sửa", Status = 409 })); throw; } } return(Ok(new Response { Status = 204 })); }
public async Task <IActionResult> SaveOrdersImportGoods([FromRoute] int id, [FromBody] OrderImportUpdateViewModel ordersView) { if (!ModelState.IsValid) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } if (id != ordersView.OrderId) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } var orders = await _context.OrdersImportGoods.FindAsync(id); orders.SupplierId = ordersView.SupplierId; decimal totalPrice = 0; foreach (var detail in ordersView.Product) { totalPrice += detail.Quantity * detail.UnitPrice; detail.OrderId = id; _context.Entry(detail).State = EntityState.Modified; //update stock var product = await _context.Products.FindAsync(detail.ProductId); product.Stock += detail.Quantity; _context.Entry(product).State = EntityState.Modified; } orders.TotalPrice = totalPrice; _context.Entry(orders).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!OrdersImportGoodsExists(id)) { return(Ok(new Response { IsError = true, Status = 404, Message = "Không tìm thấy dữ liệu" })); } else { return(Ok(new Response { IsError = true, Status = 409, Message = "Không thể lưu dữ liệu" })); throw; } } return(Ok(new Response { Status = 204 })); }
public async Task <IActionResult> Post([FromBody] AccessTokenViewModel model, [FromRoute] string platform) { if (!ModelState.IsValid) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } if (platform == "google") { var userInfoResponse = await Client.GetStringAsync($"https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={model.AccessToken}"); var userInfo = JsonConvert.DeserializeObject <UserData>(userInfoResponse); if (!string.Equals(userInfo.ClientId, _ggAuthSettings.ClientId)) { return(Ok(new Response { IsError = true, Status = 404, Message = "Đăng nhập thất bại" })); } var user = await _userManager.FindByEmailAsync(userInfo.Email); if (user == null) { var appUser = new User { Email = userInfo.Email, UserName = userInfo.Email, }; var result = await _userManager.CreateAsync(appUser, Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8)); if (!result.Succeeded) { return(Ok(new Response { IsError = true, Status = 409, Message = "Lỗi khi thêm tài khoản" })); } await _appDbContext.UserInfo.AddAsync(new UserInfo { UserId = appUser.Id, FullName = userInfo.Name, BirthDate = DateTime.Now }); await _appDbContext.SaveChangesAsync(); await _userManager.AddToRoleAsync(appUser, "Member"); } // generate the jwt for the local user... var localUser = await _userManager.FindByNameAsync(userInfo.Email); if (localUser == null) { return(Ok(new Response { IsError = true, Status = 409, Message = "lỗi khi thêm tài khoản" })); } var localUserInfo = await _appDbContext.UserInfo.FindAsync(localUser.Id); var jwt = await Tokens.GenerateJwt(localUser, localUserInfo?.FullName ?? "noname", _jwtOptions, _userManager); return(Ok(new Response { Status = 200, Module = jwt })); } else if (platform == "facebook") { // 1.generate an app access token var appAccessTokenResponse = await Client.GetStringAsync($"https://graph.facebook.com/oauth/access_token?client_id={_fbAuthSettings.AppId}&client_secret={_fbAuthSettings.AppSecret}&grant_type=client_credentials"); var appAccessToken = JsonConvert.DeserializeObject <FacebookAppAccessToken>(appAccessTokenResponse); // 2. validate the user access token var userAccessTokenValidationResponse = await Client.GetStringAsync($"https://graph.facebook.com/debug_token?input_token={model.AccessToken}&access_token={appAccessToken.AccessToken}"); var userAccessTokenValidation = JsonConvert.DeserializeObject <FacebookUserAccessTokenValidation>(userAccessTokenValidationResponse); if (!userAccessTokenValidation.Data.IsValid) { return(Ok(new Response { IsError = true, Status = 400, Message = "Invalid facebook token" })); } // 3. we've got a valid token so we can request user data from fb var userInfoResponse = await Client.GetStringAsync($"https://graph.facebook.com/v3.2/me?fields=id,email,name,gender,birthday&access_token={model.AccessToken}"); var userInfo = JsonConvert.DeserializeObject <UserData>(userInfoResponse); var user = await _userManager.FindByEmailAsync(userInfo.Email); if (user == null) { var appUser = new User { Email = userInfo.Email, UserName = userInfo.Email, }; var result = await _userManager.CreateAsync(appUser, Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8)); if (!result.Succeeded) { return(Ok(new Response { IsError = true, Status = 409, Message = "lỗi khi thêm tài khoản" })); } await _appDbContext.UserInfo.AddAsync(new UserInfo { UserId = appUser.Id, FullName = userInfo.Name, BirthDate = DateTime.Now }); await _appDbContext.SaveChangesAsync(); await _userManager.AddToRoleAsync(appUser, "Member"); } // generate the jwt for the local user... var localUser = await _userManager.FindByNameAsync(userInfo.Email); if (localUser == null) { return(Ok(new Response { IsError = true, Status = 409, Message = "lỗi khi thêm tài khoản" })); } var localUserInfo = await _appDbContext.UserInfo.FindAsync(localUser.Id); var jwt = await Tokens.GenerateJwt(localUser, localUserInfo?.FullName ?? "noname", _jwtOptions, _userManager); return(Ok(new Response { Status = 200, Module = jwt })); } return(Ok(new Response { IsError = true, Status = 400, Message = "chỉ hỗ trợ google facebook" })); }
public async Task <IActionResult> PutAddress([FromRoute] int id, [FromBody] Address address) { if (!ModelState.IsValid) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } if (id != address.AddressId) { return(Ok(new Response { IsError = true, Status = 400, Message = "Sai dữ liệu đầu vào" })); } var addressDefault = await _context.Address.Where(a => a.IsDefault == true && a.UserId == address.UserId).SingleOrDefaultAsync(); //if(addressDefault == null) //{ //} if (addressDefault.AddressId == id) { address.IsDefault = true; _context.Entry(addressDefault).CurrentValues.SetValues(address); } else if (address.IsDefault == true && addressDefault.AddressId != id) { addressDefault.IsDefault = false; _context.Entry(addressDefault).State = EntityState.Modified; _context.Entry(address).State = EntityState.Modified; } else { _context.Entry(address).State = EntityState.Modified; } try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!AddressExists(id)) { return(Ok(new Response { IsError = true, Status = 404, Message = "Không tìm thấy địa chỉ" })); } else { throw; } } return(Ok(new Response { Status = 204 })); }