Skip to content
This repository was archived by the owner on Oct 14, 2025. It is now read-only.

Commit a79e13a

Browse files
committed
feature(ReversoClientConfig) add support of ReversoClientConfig
1 parent b76850a commit a79e13a

12 files changed

Lines changed: 100 additions & 47 deletions

File tree

ReversoAPI.Web/ConjugationFeature/Application/Services/ConjugationService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ public class ConjugationService : IConjugationService
1414
private string ConjugationURL = "https://conjugator.reverso.net/conjugation-";
1515

1616
private readonly IAPIConnector _apiConnector;
17-
private readonly IParser<ConjugationData> _parser;
17+
private readonly IParseService<ConjugationData> _parser;
1818

1919
public ConjugationService(
2020
IAPIConnector apiConnector,
21-
IParser<ConjugationData> parser)
21+
IParseService<ConjugationData> parser)
2222
{
2323
_apiConnector = apiConnector;
2424
_parser = parser;

ReversoAPI.Web/ConjugationFeature/Domain/Core/Services/ConjugationParserService.cs renamed to ReversoAPI.Web/ConjugationFeature/Domain/Core/Services/ConjugationParseService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
namespace ReversoAPI.Web.ConjugationFeature.Domain.Core.Services
77
{
8-
public class ConjugationParserService : BaseParser<ConjugationData>
8+
public class ConjugationParseService : BaseParser<ConjugationData>
99
{
1010
private readonly ILogger _log;
1111

12-
public ConjugationParserService(ILogger log)
12+
public ConjugationParseService(ILogger log)
1313
{
1414
_log = log;
1515
}

ReversoAPI.Web/ContextFeature/Application/Services/ContextService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ public class ContextService : IContextService
1212
private const string ContextURL = "https://context.reverso.net/translation/";
1313

1414
private readonly IAPIConnector _apiConnector;
15-
private readonly IParser<ContextData> _parser;
15+
private readonly IParseService<ContextData> _parser;
1616

1717
public ContextService(IAPIConnector apiConnector,
18-
IParser<ContextData> parser)
18+
IParseService<ContextData> parser)
1919
{
2020
_apiConnector = apiConnector;
2121
_parser = parser;

ReversoAPI.Web/ContextFeature/Domain/Core/Services/ContextParserService.cs renamed to ReversoAPI.Web/ContextFeature/Domain/Core/Services/ContextParseService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55

66
namespace ReversoAPI.Web.ContextFeature.Domain.Core.Services
77
{
8-
public class ContextParserService : BaseParser<ContextData>
8+
public class ContextParseService : BaseParser<ContextData>
99
{
1010
private readonly ILogger _log;
11-
public ContextParserService(ILogger log)
11+
public ContextParseService(ILogger log)
1212
{
1313
_log = log;
1414
}

ReversoAPI.Web/GrammarCheckFeature/Application/DTOs/SpellingRequest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public SpellingRequest(string text, Language language, Locale locale)
1717
AutoReplace = true;
1818
EnglishDialect = "indifferent";
1919
GetCorrectionDetails = true;
20-
InterfaceLanguage = "eu";
20+
InterfaceLanguage = "en";
2121
IsHtml = false;
2222
Locale = locale == ReversoAPI.Locale.None ? string.Empty : locale.ToString();
2323
Origin = "interactive";

ReversoAPI.Web/ReversoClient.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
using ReversoAPI.Web.ConjugationFeature.Application.Services;
2-
using ReversoAPI.Web.ConjugationFeature.Domain.Core.Services;
32
using ReversoAPI.Web.ContextFeature.Application.Services;
4-
using ReversoAPI.Web.ContextFeature.Domain.Core.Services;
53
using ReversoAPI.Web.GrammarCheckFeature.Application.Services;
64
using ReversoAPI.Web.PronunciationFeature.Application.Services;
75
using ReversoAPI.Web.SynonymsFeature.Application.Services;
8-
using ReversoAPI.Web.SynonymsFeature.Domain.Core.Services;
96
using ReversoAPI.Web.TranslationFeature.Application.Services;
10-
using ReversoAPI.Web.Shared.Infrastructure.Http;
117

128
namespace ReversoAPI.Web
139
{
1410
public class ReversoClient : IReversoClient
1511
{
16-
public ReversoClient()
12+
public ReversoClient(ReversoClientConfig config)
1713
{
18-
var apiConnector = new APIConnector(new CachedHttpClient());
14+
var apiConnector = config.APIConnector;
1915

20-
Context = new ContextClient(new ContextService(apiConnector, new ContextParserService()));
21-
Synonyms = new SynonymsClient(new SynonymsService(apiConnector, new SynonymsParserService()));
22-
Conjugation = new ConjugationClient(new ConjugationService(apiConnector, new ConjugationParserService()));
16+
Context = new ContextClient(new ContextService(apiConnector, config.ContextParser));
17+
Synonyms = new SynonymsClient(new SynonymsService(apiConnector, config.SynonymsParser));
18+
Conjugation = new ConjugationClient(new ConjugationService(apiConnector, config.ConjugationParser));
2319

24-
Spelling = new SpellingClient(new SpellingService(apiConnector));
25-
Translation = new TranslationClient(new TranslationService(apiConnector));
20+
Spelling = new SpellingClient(new SpellingService(apiConnector, config.Logger));
21+
Translation = new TranslationClient(new TranslationService(apiConnector, config.Logger));
2622
Pronunciation = new PronunciationClient(new PronunciationService(apiConnector));
2723
}
2824

25+
public ReversoClient() : this(new ReversoClientConfig().CreateDefault())
26+
{
27+
}
28+
2929
public IContextClient Context { get; }
3030
public ISynonymsClient Synonyms { get; }
3131
public ISpellingClient Spelling { get; }

ReversoAPI.Web/ReversoClientConfig.cs

Lines changed: 73 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,127 @@
1-
using ReversoAPI.Web.ContextFeature.Domain.Core.Services;
1+
using System;
2+
using ReversoAPI.Web.ConjugationFeature.Domain.Core.Services;
3+
using ReversoAPI.Web.ContextFeature.Domain.Core.Services;
4+
using ReversoAPI.Web.SynonymsFeature.Domain.Core.Services;
25
using ReversoAPI.Web.Shared.Domain.Interfaces.Services;
36
using ReversoAPI.Web.Shared.Infrastructure.Http;
47
using ReversoAPI.Web.Shared.Infrastructure.Http.Interfaces;
58
using ReversoAPI.Web.Shared.Infrastructure.Logger;
6-
using ReversoAPI.Web.SynonymsFeature.Domain.Core.Services;
7-
using System;
89

910
namespace ReversoAPI.Web
1011
{
1112
public class ReversoClientConfig
1213
{
1314
// General
14-
public IHttpClient HttpClient { get; private set; }
15-
public IAPIConnector APIConnector { get; private set; }
15+
private IHttpClient _httpClient;
16+
public IHttpClient HttpClient
17+
{
18+
get => _httpClient ?? new CachedHttpClient();
19+
private set => _httpClient = value;
20+
}
21+
22+
private IAPIConnector _apiConnector;
23+
public IAPIConnector APIConnector
24+
{
25+
get => _apiConnector ?? new APIConnector(new CachedHttpClient());
26+
private set => _apiConnector = value;
27+
}
1628

17-
// Let's fill up only elementary fields
18-
// complex objects neither will be filled by user or will be setted by default
19-
private IParser<ContextData> _contextParser;
20-
public IParser<ContextData> ContextParser
29+
private IParseService<ContextData> _contextParser;
30+
public IParseService<ContextData> ContextParser
2131
{
22-
get => _contextParser ?? new ContextParserService(Logger);
32+
get => _contextParser ?? new ContextParseService(Logger);
2333
private set => _contextParser = value;
2434
}
25-
public IParser<SynonymsData> SynonymsParser { get; private set; }
35+
36+
private IParseService<SynonymsData> _synonymsParser;
37+
public IParseService<SynonymsData> SynonymsParser
38+
{
39+
get => _synonymsParser ?? new SynonymsParseService(Logger);
40+
private set => _synonymsParser = value;
41+
}
42+
43+
private IParseService<ConjugationData> _conjugationParser;
44+
public IParseService<ConjugationData> ConjugationParser
45+
{
46+
get => _conjugationParser ?? new ConjugationParseService(Logger);
47+
private set => _conjugationParser = value;
48+
}
2649

2750
// Extra
2851
public ILogger Logger { get; private set; }
2952

30-
private ReversoClientConfig(
53+
public ReversoClientConfig() { }
54+
55+
public ReversoClientConfig(
3156
IHttpClient httpClient,
3257
IAPIConnector apiConnector,
33-
IParser<ContextData> contextParser,
34-
IParser<SynonymsData> synonymsParser,
58+
IParseService<ContextData> contextParser,
59+
IParseService<SynonymsData> synonymsParser,
60+
IParseService<ConjugationData> conjugationParser,
3561
ILogger logger)
3662
{
3763
HttpClient = httpClient;
3864
APIConnector = apiConnector;
3965
ContextParser = contextParser;
66+
SynonymsParser = synonymsParser;
67+
ConjugationParser = conjugationParser;
4068
Logger = logger;
4169
}
4270

43-
ReversoClientConfig CreateDefault()
71+
public ReversoClientConfig CreateDefault()
4472
{
4573
var httpClient = new CachedHttpClient();
4674

4775
return new ReversoClientConfig(
4876
httpClient,
4977
new APIConnector(httpClient),
50-
new ContextParserService(null),
51-
new SynonymsParserService(null),
78+
new ContextParseService(null),
79+
new SynonymsParseService(null),
80+
new ConjugationParseService(null),
5281
null);
5382
}
5483

55-
ReversoClientConfig WithHttpClient(IHttpClient httpClient)
84+
public ReversoClientConfig WithHttpClient(IHttpClient httpClient)
5685
{
5786
if(httpClient is null) throw new ArgumentNullException(nameof(httpClient));
5887

5988
HttpClient = httpClient;
6089
return this;
6190
}
6291

63-
ReversoClientConfig WithApiConnector(IAPIConnector apiConnector)
92+
public ReversoClientConfig WithApiConnector(IAPIConnector apiConnector)
6493
{
6594
if (apiConnector is null) throw new ArgumentNullException(nameof(apiConnector));
6695

6796
APIConnector = apiConnector;
6897
return this;
6998
}
7099

71-
ReversoClientConfig WithLogger(ILogger logger)
100+
public ReversoClientConfig WithContextParseService(IParseService<ContextData> contextParser)
101+
{
102+
if (contextParser is null) throw new ArgumentNullException(nameof(contextParser));
103+
104+
ContextParser = contextParser;
105+
return this;
106+
}
107+
108+
public ReversoClientConfig WithSynonymsParseService(IParseService<SynonymsData> synonymsParser)
109+
{
110+
if (synonymsParser is null) throw new ArgumentNullException(nameof(synonymsParser));
111+
112+
SynonymsParser = synonymsParser;
113+
return this;
114+
}
115+
116+
public ReversoClientConfig WithConjugationParseService(IParseService<ConjugationData> conjugationParser)
117+
{
118+
if (conjugationParser is null) throw new ArgumentNullException(nameof(conjugationParser));
119+
120+
ConjugationParser = conjugationParser;
121+
return this;
122+
}
123+
124+
public ReversoClientConfig WithLogger(ILogger logger)
72125
{
73126
Logger = logger;
74127
return this;

ReversoAPI.Web/Shared/Domain/Interfaces/Services/IParser.cs renamed to ReversoAPI.Web/Shared/Domain/Interfaces/Services/IParseService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace ReversoAPI.Web.Shared.Domain.Interfaces.Services
44
{
5-
public interface IParser<TResult>
5+
public interface IParseService<TResult>
66
{
77
TResult Invoke(Stream html);
88
}

ReversoAPI.Web/Shared/Domain/Services/BaseParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace ReversoAPI.Web.Shared.Domain.Services
66
{
7-
public abstract class BaseParser<TResult> : IParser<TResult>
7+
public abstract class BaseParser<TResult> : IParseService<TResult>
88
{
99
public TResult Invoke(Stream htmlStream)
1010
{

ReversoAPI.Web/Shared/Infrastructure/Http/HttpClientCacheWrapper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace ReversoAPI.Web.Shared.Infrastructure.Http
55
{
66
public class HttpClientCacheWrapper
77
{
8-
private const string RandomUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36";
8+
private const string RandomUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36";
99
private const bool DefaultCacheKey = true;
1010

1111
private static HttpClientCacheWrapper _instance;

0 commit comments

Comments
 (0)