/// <summary> /// Initializes a new instance of the <see cref="UserVoteController"/> class. /// </summary> /// <param name="logger">Logger implementation to send logs to the logger service.</param> /// <param name="telemetryClient">The Application Insights telemetry client.</param> /// <param name="userVoteStorageProvider">Instance of user vote storage provider to add and delete user vote.</param> /// <param name="teamIdeaStorageProvider">Instance of team post storage provider to update post and get information of posts.</param> /// <param name="teamIdeaSearchService">The team post search service dependency injection.</param> public UserVoteController( ILogger <UserVoteController> logger, TelemetryClient telemetryClient, IUserVoteStorageProvider userVoteStorageProvider, IIdeaStorageProvider teamIdeaStorageProvider, IIdeaSearchService teamIdeaSearchService) : base(telemetryClient) { this.logger = logger; this.userVoteStorageProvider = userVoteStorageProvider; this.teamIdeaStorageProvider = teamIdeaStorageProvider; this.teamIdeaSearchService = teamIdeaSearchService; this.retryPolicy = Policy.Handle <StorageException>(ex => ex.RequestInformation.HttpStatusCode == StatusCodes.Status412PreconditionFailed) .WaitAndRetryAsync(Backoff.ConstantBackoff(TimeSpan.FromMilliseconds(250), 25)); }
/// <summary> /// Initializes a new instance of the <see cref="IdeaController"/> class. /// </summary> /// <param name="logger">Logger implementation to send logs to the logger service.</param> /// <param name="telemetryClient">The Application Insights telemetry client.</param> /// <param name="ideaStorageHelper">Team post storage helper dependency injection.</param> /// <param name="ideaStorageProvider">Team idea storage provider dependency injection.</param> /// <param name="ideaSearchService">The team post search service dependency injection.</param> /// <param name="categoryStorageProvider">Category storage provider dependency injection.</param> /// <param name="teamCategoryStorageProvider">Team category storage provider dependency injection.</param> public IdeaController( ILogger <IdeaController> logger, TelemetryClient telemetryClient, IIdeaStorageHelper ideaStorageHelper, IIdeaStorageProvider ideaStorageProvider, IIdeaSearchService ideaSearchService, ICategoryStorageProvider categoryStorageProvider, ITeamCategoryStorageProvider teamCategoryStorageProvider) : base(telemetryClient) { this.logger = logger; this.ideaStorageHelper = ideaStorageHelper; this.ideaSearchService = ideaSearchService; this.ideaStorageProvider = ideaStorageProvider; this.categoryStorageProvider = categoryStorageProvider; this.teamCategoryStorageProvider = teamCategoryStorageProvider; }
/// <summary> /// Initializes a new instance of the <see cref="IdeaSearchService"/> class. /// </summary> /// <param name="optionsAccessor">A set of key/value application configuration properties.</param> /// <param name="teamIdeaStorageProvider">Team idea storage provider dependency injection.</param> /// <param name="logger">Logger implementation to send logs to the logger service.</param> /// <param name="searchServiceClient">Search service client dependency injection.</param> /// <param name="searchIndexClient">Search index client dependency injection.</param> public IdeaSearchService( IOptions <SearchServiceSettings> optionsAccessor, IIdeaStorageProvider teamIdeaStorageProvider, ILogger <IdeaSearchService> logger, SearchServiceClient searchServiceClient, SearchIndexClient searchIndexClient) { optionsAccessor = optionsAccessor ?? throw new ArgumentNullException(nameof(optionsAccessor)); this.options = optionsAccessor.Value; this.initializeTask = new Lazy <Task>(() => this.InitializeAsync()); this.teamIdeaStorageProvider = teamIdeaStorageProvider; this.logger = logger; this.searchServiceClient = searchServiceClient; this.searchIndexClient = searchIndexClient; this.retryPolicy = Policy.Handle <CloudException>( ex => (int)ex.Response.StatusCode == StatusCodes.Status409Conflict || (int)ex.Response.StatusCode == StatusCodes.Status429TooManyRequests) .WaitAndRetryAsync(Backoff.LinearBackoff(TimeSpan.FromMilliseconds(2000), 2)); }