コード例 #1
0
        public DTO.Messages.Wrapper GetChilds(string id = "")
        {
            var Result = new DTO.Messages.Wrapper();

            if (string.IsNullOrWhiteSpace(id))
            {
                Result.Messages.Add("Parameter", "ID can't be empty");
            }

            if (Result.Messages.Count > 0)
            {
                Result.Status = "Bad Request";
                Result.Code   = 400;
                return(Result);
            }

            var Query = SubRepo.QueryableCollection.Where(x => x.ParentId == id);

            if (Query.Count() == 0)
            {
                Result.Status = "Not Found";
                Result.Code   = 404;
            }
            else
            {
                Result.Data = Query.Select(Sub => new DTO.Projection.SubCategory {
                    Name = Sub.Name, Id = Sub.Id, Parent = Sub.ParentId
                });
            }
            return(Result);
        }
コード例 #2
0
        public DTO.Messages.Wrapper GetOnSale([FromBody] DTO.Messages.SearchPage Search = null)
        {
            var Result = new DTO.Messages.Wrapper();

            if (Search == null)
            {
                Search = new DTO.Messages.SearchPage();
            }
            else
            {
                var Max = (Search.MaxPrice > Search.MinPrice) ? Search.MaxPrice : Search.MinPrice;
                var Min = (Search.MaxPrice < Search.MinPrice) ? Search.MaxPrice : Search.MinPrice;

                Search.MaxPrice = Max;
                Search.MinPrice = Min;
            }

            IQueryable <DTO.Databases.Product> Query = null;

            if (string.IsNullOrWhiteSpace(Search.SearchTerm))
            {
                Query = MongoItems.QueryableCollection;
            }
            else
            {
                var SearchKey = new DTO.Projection.Search
                {
                    SearchTerm    = Search.SearchTerm,
                    Categories    = Search.Categories,
                    SubCategories = Search.SubCategories
                };

                var Cached = RedisItems.GetList(SearchKey);
                if (Cached == null || Cached.Count() == 0)
                {
                    Cached = MongoItems.SearchThru(Search);
                    RedisItems.SaveList(Cached, SearchKey);
                    Query = Cached.AsQueryable();
                }
                else
                {
                    Query = Cached.AsQueryable();
                }

                var Offset = Query.Count() < (Search.Page + 1) * Search.PageLimit ? Query.Count() : (Search.Page + 1) * Search.PageLimit;
                Offset = (Offset - Search.PageLimit < 0) ? 0 : Offset - Search.PageLimit;
                var Taken = Query.Count() - Offset;

                Query       = Query.Skip(Offset).Take(Taken);
                Result.Data = Query;

                if (Query.Count() == 0)
                {
                    Result.Code   = 404;
                    Result.Status = "Not Found";
                }
            }
            return(Result);
        }
コード例 #3
0
        protected DTO.Messages.Wrapper AuthorizeResponse(HashSet <string> Roles = null)
        {
            var Result = new DTO.Messages.Wrapper();

            var Verification = Sekrit.Value.Verify(Authorization);

            switch (Verification)
            {
            case 1:
                break;

            case 0:
                Result.Messages.Add("Authorization", "Token's header not found");
                break;

            case -1:
                Result.Messages.Add("Expiration", "Token expirated");
                break;

            case -2:
                Result.Messages.Add("Signature", "Token can't be verified");
                break;

            default:
                break;
            }
            if (Verification == 1)
            {
                Token = Sekrit.Value.Decode(Authorization);
                var Session = TokenRepo.GetOne(Token.jti);

                if (Session == null)
                {
                    Result.Messages.Add("Session", "not found");
                }
            }

            if (Roles != null && Roles.Count > 0)
            {
                var Origin = new HashSet <string>();
                if (Token != null)
                {
                    Origin.Add(Token.aud);
                }
                Origin.IntersectWith(Roles);

                if (Origin.Count == 0)
                {
                    Result.Messages.Add("Role", "failed to meet conditions");
                }
            }

            if (Result.Messages.Count > 0)
            {
                Result.Code   = 400;
                Result.Status = "Bad Request";
            }
            return(Result);
        }
コード例 #4
0
        public DTO.Messages.Wrapper GetAll()
        {
            var Result = new DTO.Messages.Wrapper
            {
                Data = SubRepo.QueryableCollection.Select(Sub => new DTO.Projection.SubCategory {
                    Name = Sub.Name, Id = Sub.Id, Parent = Sub.ParentId
                })
            };

            return(Result);
        }
コード例 #5
0
        public DTO.Messages.Wrapper GetAll()
        {
            var Result = new DTO.Messages.Wrapper
            {
                Data = CatRepo.QueryableCollection.Select(Cat => new DTO.Projection.Category {
                    Name = Cat.Name, Id = Cat.Id
                })
            };

            return(Result);
        }
コード例 #6
0
        public DTO.Messages.Wrapper SignIn([FromBody] DTO.Messages.SigningInUser Login)
        {
            var Result = new DTO.Messages.Wrapper();

            if (Login == null)
            {
                Result.Messages.Add("PostBody", "can't be empty");
            }
            else
            {
                if (string.IsNullOrWhiteSpace(Login.Email) || !DTO.Generator.IsEmail(Login.Email))
                {
                    Result.Messages.Add("Email", "must be a valid Email address");
                }
                if (string.IsNullOrWhiteSpace(Login.Password) || Login.Password.Length < 12)
                {
                    Result.Messages.Add("Password", "must be at least 12 characters");
                }
            }

            DTO.Databases.User User = null;

            if (Result.Messages.Count == 0)
            {
                var Count = UserRepo.QueryableCollection.Where(x => x.Email == Login.Email).Count();
                if (Count == 0)
                {
                    Result.Messages.Add("Account", "Email is not registered");
                }

                User = UserRepo.QueryableCollection.Where(x => x.Email == Login.Email).First();
                if (!Configs.Hashing.Compare(Login.Password, User.Id, User.Password))
                {
                    Result.Messages.Add("Account", "Password mismatched");
                }

                if (Login.AdminMode && !User.Roles.Contains("Administrator"))
                {
                    Result.Messages.Add("Roles", "can't enter Admin Mode");
                }
            }

            if (Result.Messages.Count > 0)
            {
                Result.Status = "Bad Request";
                Result.Code   = 400;
            }
            else
            {
                Result.Data = OnSignedIn(User, Login.AdminMode);
            }
            return(Result);
        }
コード例 #7
0
        public DTO.Messages.Wrapper GetOf(string id)
        {
            var Result = new DTO.Messages.Wrapper();

            if (string.IsNullOrWhiteSpace(id))
            {
                Result.Messages.Add("Id", "can't be empty");
            }

            if (Result.Messages.Count > 0)
            {
                Result.Code   = 400;
                Result.Status = "Bad Request";
                return(Result);
            }

            var List = Re2po.QueryableCollection
                       .Where(x => x.List.Contains(id))
                       .SelectMany(x => x.List)
                       .Distinct()
                       .ToList();

            List.Remove(id);
            if (List.Count == 0)
            {
                Result.Code   = 404;
                Result.Status = "Not Found";
                Result.Data   = null;

                return(Result);
            }

            List.Shuffle();
            var Conditions = List.Take((List.Count < 5) ? List.Count : 5);

            var Return = ProductRepo.QueryableCollection
                         .Where(x => Conditions.Contains(x.Id))
                         .Select(x => new DTO.Projection.Recommendation
            {
                Id     = x.Id,
                Name   = x.Name,
                Images = x.Images,
                Price  = x.Price
            });

            Result.Data = Return;
            return(Result);
        }
コード例 #8
0
        public DTO.Messages.Wrapper Register([FromBody] DTO.Messages.RegisteringUser Registry)
        {
            var Result = new DTO.Messages.Wrapper();

            if (Registry == null)
            {
                Result.Messages.Add("PostBody", "can't be empty");
            }
            else
            {
                if (string.IsNullOrWhiteSpace(Registry.Email))
                {
                    Result.Messages.Add("Email", "can't be empty");
                }
                else if (!DTO.Generator.IsEmail(Registry.Email))
                {
                    Result.Messages.Add("Email", "must be a valid Email");
                }
                if (string.IsNullOrWhiteSpace(Registry.Password) || Registry.Password.Length < 12)
                {
                    Result.Messages.Add("Password", "can't be less than 12 characters");
                }
                if (string.IsNullOrWhiteSpace(Registry.Fullname))
                {
                    Result.Messages.Add("Fullname", "can't be empty");
                }
                if (Registry.Gender < 0 || Registry.Gender > 1)
                {
                    Result.Messages.Add("Gender", "can't be lower than 0 or higher than 1");
                }
                try
                {
                    Convert.ToDateTime(Registry.Birthday, new System.Globalization.CultureInfo("en-US"));
                }
                catch (FormatException)
                {
                    Result.Messages.Add("Birthday", "must be formated as 'M/d/YYYY'");
                }

                var Count = UserRepo.QueryableCollection.Where(x => x.Email == Registry.Email).Count();
                if (Count > 0)
                {
                    Result.Messages.Add("Account", "Email is registered");
                }
            }

            if (Result.Messages.Count > 0)
            {
                Result.Status = "Bad Request";
                Result.Code   = 400;

                return(Result);
            }
            // do registering user here

            var NewUser = new DTO.Databases.User
            {
                Email    = Registry.Email,
                Fullname = Registry.Fullname,
                Birthday = Registry.Birthday,
                Gender   = Registry.Gender
            };

            NewUser.Password = Configs.Hashing.Hash(Registry.Password, NewUser.Id);
            UserRepo.Save(NewUser);

            Result.Data = OnSignedIn(NewUser);
            return(Result);
        }