public async Task <IHttpActionResult> PrepareAsset(int id, string link, string lang) { try { if (string.IsNullOrWhiteSpace(link)) { Log.Warning("'deepLinkToVe' is null or white spaces"); } if (string.IsNullOrWhiteSpace(lang)) { Log.Warning("'language' is null or white spaces"); } var access = GetUserAccessFunc(null); var userId = access.UserId; var record = GetRecord(id, access); if (record == null) { return(NotFound()); } var packageId = record.PrimaryData.FirstOrDefault()?.PackageId ?? string.Empty; var status = CheckStatusAsync(packageId, record, access); if (!(status is StatusCodeResult) || ((StatusCodeResult)status).StatusCode != HttpStatusCode.OK) { return(status); } var prepareAssetRequest = new PrepareAssetRequest { ArchiveRecordId = id.ToString(), AssetType = AssetType.Gebrauchskopie, CallerId = access.UserId, AssetId = packageId, RetentionCategory = await cacheHelper.GetRetentionCategory(record, access.RolePublicClient, orderDataAccess), Recipient = userId, DeepLinkToVe = link, Language = lang ?? access.Language }; var result = await prepareClient.Request(prepareAssetRequest); return(Ok(result)); } catch (Exception e) { Log.Error(e, "(FileController:PrepareAsset({ID}))", id); throw; } }
public async Task Consume(ConsumeContext <IDigitalisierungsAuftragErledigt> context) { using (LogContext.PushProperty(nameof(context.ConversationId), context.ConversationId)) { var message = context.Message; Log.Information("Received {CommandName} command with conversationId {ConversationId} from the bus", message.GetType().Name, context.ConversationId); // Wir warten hier, damit wir sicher sind, das Elastic den neuen Record auch aktualisiert und nach aussen öffentlich verfügbar hat. // Nicht vergessen. Elastic ist nur "near real time". https://www.elastic.co/guide/en/elasticsearch/reference/master/near-real-time.html await Task.Delay(5000); var archiveRecord = (await findArchiveRecordClient.GetResponse <FindArchiveRecordResponse>(new FindArchiveRecordRequest { ArchiveRecordId = message.ArchiveRecordId })).Message; // Ist das LastSyncDate der VE im Elastic-Index grösser als das Bestelldatum? (--> Es wurde eine Synchronisation mit dem AIS durchgeführt.) // und enthält das Attribut PrimaryDataLink der VE im Elastic-Index einen Wert? (--> Es sind Primärdaten vorhanden.) // dann sind die Primärdaten im DIR hinterlegt worden und die Daten sind bereit. if (archiveRecord.ElasticArchiveRecord.LastSyncDate > message.OrderDate && !string.IsNullOrEmpty(archiveRecord.ElasticArchiveRecord.PrimaryDataLink)) { // Die Daten sind vorhanden. Durch auslösen des Downloads werden die Daten aufbereitet und der Benutzer informiert. // Der Download wird automatisch ausgelöst, nachdem dieser Auftrag registriert wurde var prepareAssetRequest = new PrepareAssetRequest { ArchiveRecordId = message.ArchiveRecordId, AssetType = AssetType.Gebrauchskopie, CallerId = message.GetType().Name, AssetId = archiveRecord.ElasticArchiveRecord.PrimaryDataLink, RetentionCategory = await cacheHelper.GetRetentionCategory(archiveRecord.ElasticArchiveRecord, message.OrderUserRolePublicClient, orderDataAccess), Recipient = message.OrderUserId, }; var result = (await prepareClient.GetResponse <PrepareAssetResult>(prepareAssetRequest)).Message; Log.Information("Successfully registered Download after {name} with status {status}", message.GetType().Name, result.Status); } else { Log.Information( "Die VE mit Id {ArchiveRecordId} wurde digitalisiert, aber bis jetzt nicht neu synchronisiert. Wir schreiben sie in die Wait List", message.ArchiveRecordId); await orderDataAccess.AddToOrderExecutedWaitList(Convert.ToInt32(message.ArchiveRecordId), JsonConvert.SerializeObject(message)); } } }