Ejemplo n.º 1
0
        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
            }));
        }
Ejemplo n.º 2
0
        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
            }));
        }
Ejemplo n.º 4
0
        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
            }));
        }
Ejemplo n.º 5
0
        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
            }));
        }
Ejemplo n.º 6
0
        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
            }));
        }
Ejemplo n.º 7
0
        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
            }));
        }
Ejemplo n.º 8
0
        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"
            }));
        }
Ejemplo n.º 9
0
        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"
            }));
        }
Ejemplo n.º 12
0
        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
            }));
        }