public static IServiceCollection AddProfilesMvc(
            this IServiceCollection services,
            ProfilesRoleConfiguration roles)
        {
            services.AddMvcCore()
            .AddJsonFormatters()
            .AddAuthorization(options =>
                              options.AddPolicy("admin", builder => builder.RequireRole(roles.Admin)))
            .AddApiExplorer()
            .AddPhemaRouting(routing =>
                             routing.AddProfilesController(roles)
                             .AddVersionController())
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            return(services);
        }
        public static IRoutingBuilder AddProfilesController(this IRoutingBuilder builder, ProfilesRoleConfiguration roles)
        {
            builder.AddController <ProfilesController>(controller =>
            {
                controller.AddRoute("profiles", c => c.Create(From.Body <CreateProfileRequest>()))
                .HttpPost()
                .Authorize();

                controller.AddRoute("profiles", c => c.Read())
                .HttpGet()
                .Authorize();

                controller.AddRoute("{accountId}/profile", c => c.ReadById(From.Route <int>()))
                .HttpGet()
                .Authorize();

                controller.AddRoute("profiles", c => c.Update(From.Body <UpdateProfileRequest>()))
                .HttpPut()
                .Authorize();

                controller.AddRoute("profiles", c => c.Delete(From.Any <DeleteProfileRequest>()))
                .HttpDelete()
                .Authorize();

                controller.AddRoute("admin/profiles", c => c.AdminRead(From.Query <FilterRequest>()))
                .HttpGet()
                .Authorize(roles.Admin);

                controller.AddRoute("admin/profiles/{profileId}", c => c.AdminReadById(From.Route <int>()))
                .HttpGet()
                .Authorize(roles.Admin);

                controller.AddRoute("admin/profiles/{profileId}",
                                    c => c.AdminUpdateById(From.Body <AdminUpdateByIdProfileRequest>(), From.Route <int>()))
                .HttpPut()
                .Authorize(roles.Admin);

                controller.AddRoute("admin/profiles/{profileId}", c => c.AdminDeleteById(From.Route <AdminDeleteByIdProfileRequest>()))
                .HttpDelete()
                .Authorize(roles.Admin);
            });

            return(builder);
        }