Челаев Петр Лаб. 3 Группа 6512 #89
Conversation
…кам чёткое без огрехов, как ыло с автоматической
| // Сервис генерации теперь делится на 5 реплик | ||
| var generators = new List<IResourceBuilder<ProjectResource>>(); | ||
| // Minio (объектное хранилище) | ||
| var minio = builder.AddContainer("minio", "minio/minio") |
There was a problem hiding this comment.
Лучше использовать готовый aspire пакет (CommunityToolkit.Aspire.Hosting.Minio), в просто поднятом контейнере не будет телеметрии и сервис дискавери
|
|
||
| // Эмулятор Amazon SQS, добавлен для корректной отработки тестов | ||
| // (до этого были постоянные ошибки тестов из-за рандомизации портов) | ||
| var sqs = builder.AddContainer("elasticmq", "softwaremill/elasticmq") |
| .WithHttpEndpoint(port: 9324, targetPort: 9324, name: "http"); | ||
|
|
||
| // Создаём 5 генераторов в цикле | ||
| var generators = new List<IResourceBuilder<ProjectResource>>(); |
There was a problem hiding this comment.
Генераторам стоит добавить ожидание брокера
| public SqsBackgroundService( | ||
| IAmazonSQS sqsClient, | ||
| IMinioClient minioClient, | ||
| IConfiguration configuration, | ||
| ILogger<SqsBackgroundService> logger) | ||
| { | ||
| _sqsClient = sqsClient; | ||
| _minioClient = minioClient; | ||
| _logger = logger; | ||
|
|
||
| _queueUrl = configuration["SQS:QueueUrl"] ?? "http://localhost:9324/queue/projects"; | ||
| _bucketName = configuration["Minio:BucketName"] ?? "projects"; | ||
| } |
There was a problem hiding this comment.
SqsBackgroundService сейчас выполняет инициализацию инфраструктуры, чтение из очереди и сохраняет данные в объектное хранилище. Думаю стоит разбить на несколько служб, сейчас нарушается srp
| { | ||
| public DistributedApplication App { get; private set; } = null!; | ||
| public IAmazonS3 S3Client { get; private set; } = null!; | ||
| public string SqsUrl { get; private set; } = null!; |
| try | ||
| { | ||
| await S3Client.GetBucketLocationAsync("projects"); | ||
| Console.WriteLine("Бакет projects существует"); | ||
| } | ||
| catch (AmazonS3Exception ex) when (ex.ErrorCode == "NoSuchBucket") | ||
| { | ||
| await S3Client.PutBucketAsync("projects"); | ||
| Console.WriteLine("Бакет projects создан"); | ||
| } |
There was a problem hiding this comment.
Разве файловый сервис сам не создаст бакет?
| /// Проверяет, что все поля модели программного проекта заполнены корректно | ||
| /// </summary> | ||
| [Fact] | ||
| public async Task AllFieldsPopulated() |
There was a problem hiding this comment.
Мне кажется этот и Generator_GetById_ReturnsValidProject можно объединить, один чуть шире проверяет поля чем другой
| /// Сквозной тест, проверяющий полный путь данных через GenerationService,SQS, FileService и Mini | ||
| /// </summary> | ||
| [Fact] | ||
| public async Task Minio_FileSaved() |
There was a problem hiding this comment.
Может тут и в Minio_FileContentMatchesApiResponse обращаться не к сервису генерации, а к gateway, чтобы пройти весь путь
| Assert.Equal(apiProject.Name, savedProject.Name); | ||
| Assert.Equal(apiProject.Customer, savedProject.Customer); | ||
| Assert.Equal(apiProject.Budget, savedProject.Budget); |
There was a problem hiding this comment.
Возможно лучше использовать
Assert.Equivalent(apiProject, savedProject);
ФИО: Челаев Петр
Номер группы: 6512
Номер лабораторной: 3
Номер варианта: 35
Краткое описание предметной области: Программный проект
Краткое описание добавленных фич: Реализован файловый сервис, добавлено объектное хранилище и интеграционные тесты