Beispiel #1
0
        /// <summary>
        /// Genere les controllers des relations ressources
        /// </summary>
        private void PopulateControllerRelationShip(ControllerFeature feature, Type typeRessource)
        {
            foreach (Tuple <PropertyInfo, RelationshipJsonApiAttribute> relation in AttributeRelationsHandling.GetRelationshipProperties(typeRessource))
            {
                if (relation.Item2 is HasOneJsonApiAttribute)
                {
                    continue;
                }

                if (relation.Item1.GetPropertyTypeSample() == typeRessource)
                {
                    continue;
                }

                ControllerRelationJsonApiAttribute controllerRelationAttribute =
                    relation.Item1.GetCustomAttribute <ControllerRelationJsonApiAttribute>();

                if (controllerRelationAttribute != null && controllerRelationAttribute.None)
                {
                    continue;
                }

                feature.Controllers.Add(new ControllerMaker(typeRessource, relation.Item1.GetPropertyTypeSample(), controllerRelationAttribute?.ReadOnly ?? false).MakeRelationController());
            }
        }
Beispiel #2
0
        /// <summary>
        ///  Récupere la liste des champs donnés dans la Query String pour un type de modele
        ///  Si des "include" sont demandés, les champs clés des relations sont ajoutés également dans la liste des champs
        /// </summary>
        public override List <string> GetListeFields(Type type, string relationPath)
        {
            IEnumerable <PropertyInfo> relationshipProperties =
                AttributeRelationsHandling.GetRelationshipProperties(type)
                .Where(p => Utils.IsRelationInInclude(relationPath + "." + AttributeHandling.GetLabelProperty(p.Item1), this._includes))
                .Select(p => p.Item1);

            return(this.GetListeFieldsFromRelations(type, relationshipProperties));
        }