Conversation
Запутался в коде и пытаюсь исправить проблему с контейнерами
…ременную... Это была война не на жизнь, а на смерть с 2 часами сна, кровью из носа и криками боли.
alxmcs
left a comment
There was a problem hiding this comment.
Как и в #15, у тебя на запрос с одним и тем же идентификатором возвращаются разные результаты генерации.
Мне не очень интересно, кто из вас у кого украл код (и за кого из вас Богу стыдно).
Но воровство подобного кода равноценно похищению пакета с мусором с помойки.
| catch (Exception ex) | ||
| { | ||
| _logger.LogError(ex, "Error getting credit application {CreditId}", id); | ||
| return StatusCode(500, "Internal server error"); |
There was a problem hiding this comment.
Этот код в атрибутах не описан
| /// <summary> | ||
| /// Сгенерировать кредитную заявку с указанным seed | ||
| /// </summary> | ||
| [HttpGet] | ||
| [ProducesResponseType(typeof(CreditApplication), StatusCodes.Status200OK)] | ||
| public async Task<ActionResult<CreditApplication>> GenerateCredit( | ||
| [FromQuery] int? seed, | ||
| CancellationToken cancellationToken) | ||
| { | ||
| _logger.LogInformation("Generating credit application with seed: {Seed}", seed); | ||
|
|
||
| var id = new Random().Next(1, 10000); | ||
|
|
||
| CreditApplication creditApplication; | ||
|
|
||
| if (seed.HasValue) | ||
| { | ||
| creditApplication = await _creditService.GetAsync(id, seed.Value, cancellationToken); | ||
| _logger.LogInformation("Generated credit application with seed {Seed}: {CreditId}", seed, id); | ||
| } | ||
| else | ||
| { | ||
| creditApplication = await _creditService.GetAsync(id, cancellationToken); | ||
| _logger.LogInformation("Generated random credit application: {CreditId}", id); | ||
| } | ||
|
|
||
| return Ok(creditApplication); | ||
| } | ||
|
|
||
| /// <summary> | ||
| /// Удалить заявку из кэша | ||
| /// </summary> | ||
| [HttpDelete("{id:int}")] | ||
| [ProducesResponseType(StatusCodes.Status204NoContent)] | ||
| [ProducesResponseType(StatusCodes.Status400BadRequest)] | ||
| public async Task<IActionResult> RemoveCreditApplication( | ||
| int id, | ||
| CancellationToken cancellationToken) | ||
| { | ||
| if (id <= 0) | ||
| { | ||
| return BadRequest("Id must be positive number"); | ||
| } | ||
|
|
||
| await _creditService.RemoveAsync(id, cancellationToken); | ||
| return NoContent(); | ||
| } | ||
| } No newline at end of file |
There was a problem hiding this comment.
Не надо вносить функциональность, которая в софте не требуется
| private readonly ICreditService _creditService; | ||
| private readonly ILogger<CreditController> _logger; | ||
|
|
||
| public CreditController( | ||
| ICreditService creditService, | ||
| ILogger<CreditController> logger) | ||
| { | ||
| _creditService = creditService; | ||
| _logger = logger; | ||
| } |
There was a problem hiding this comment.
Использовать праймари конструктор
А знаешь, где еще такая же проблема? В #15
| var faker = new Faker<CreditApplication>() | ||
| .RuleFor(x => x.Id, id) | ||
| .RuleFor(x => x.CreditType, f => f.PickRandom(_types)) | ||
| .RuleFor(x => x.RequestedAmount, f => Math.Round(f.Random.Decimal(10000, 5_000_000), 2)) | ||
| .RuleFor(x => x.TermMonths, f => f.Random.Int(6, 360)) | ||
| .RuleFor(x => x.InterestRate, f => Math.Round(f.Random.Double(CbRate, CbRate + 5), 2)) | ||
| .RuleFor(x => x.ApplicationDate, f => DateOnly.FromDateTime(f.Date.Past(2))) | ||
| .RuleFor(x => x.HasInsurance, f => f.Random.Bool()) | ||
| .RuleFor(x => x.Status, f => f.PickRandom(_statuses)) | ||
| .RuleFor(x => x.DecisionDate, (f, x) => | ||
| x.Status is "Одобрена" or "Отклонена" | ||
| ? DateOnly.FromDateTime( | ||
| f.Date.Between( | ||
| x.ApplicationDate.ToDateTime(TimeOnly.MinValue), | ||
| DateTime.Now)) | ||
| : null) | ||
| .RuleFor(x => x.ApprovedAmount, (f, x) => | ||
| x.Status == "Одобрена" | ||
| ? Math.Round(f.Random.Decimal(10000, x.RequestedAmount), 2) | ||
| : null); | ||
|
|
There was a problem hiding this comment.
Вынести в статику, чтобы не создавать каждый запрос
There was a problem hiding this comment.
Выпилить отсюда лишний функционал
CreditApp.Api/CreditApp.Api.csproj
Outdated
| <PackageReference Include="Microsoft.Extensions.Caching.Redis" Version="2.3.0" /> | ||
| <PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.3" /> |
There was a problem hiding this comment.
Тебе не нужны эти библиотеки, ты уже пользуешься аспаеровской либой
CreditApp.AppHost/AppHost.cs
Outdated
| var redisCommander = builder.AddContainer("redis-commander", "rediscommander/redis-commander") | ||
| .WithEnvironment("REDIS_HOSTS", "local:redis:6379") | ||
| .WithReference(redis) | ||
| .WaitFor(redis) | ||
| .WithEndpoint(port: 8081, targetPort: 8081); |
There was a problem hiding this comment.
Редис коммандер есть в интеграции аспаер
Знаешь, где я это уже видел? В #15
| <ItemGroup> | ||
| <ProjectReference Include="..\Client.Wasm\Client.Wasm.csproj" /> | ||
| <ProjectReference Include="..\CreditApp.Api\CreditApp.Api.csproj" /> | ||
| <ProjectReference Include="..\CreditApp.Domain\CreditApp.Domain.csproj" /> |
There was a problem hiding this comment.
Потрясающее совпадение, тут тоже, как и в #15 класс либа добавлена в оркестратор
CreditApp.Domain/Program.cs
Outdated
| # Visual Studio Version 18 | ||
| VisualStudioVersion = 18.3.11512.155 d18.3 |
There was a problem hiding this comment.
Мог бы и 10 дотнет с 13 аспаером использовать, раз ты 2026 вижуал студией пользуешься
|
Не воровали, просто рядом сидели делали в бреду, но я понял про код и его качество |


ФИО: Уваров Никита Дмитриевич
Номер группы: 6513
Номер лабораторной: 1
Номер варианта: 53
Краткое описание предметной области: Кредитная Заявка
Краткое описание добавленных фич: Добавлен сервис генерации с кэшированием, структурное логирование