Пример #1
0
        public async Task <TUrlRecord> FindBySlugAsync(string slug, CancellationToken cancellationToken = default)
        {
            if (UrlRecordLookupServiceProvider == null)
            {
                return(await _urlRecordRepository.FindBySlugAsync(slug, cancellationToken));
            }

            ISeoData externalUrlRecord;

            try
            {
                externalUrlRecord =
                    await UrlRecordLookupServiceProvider.FindBySlugAsync(slug, cancellationToken);

                if (externalUrlRecord == null)
                {
                    var localExistingUrlRecord = await _urlRecordRepository.FindBySlugAsync(slug, cancellationToken);

                    if (localExistingUrlRecord != null)
                    {
                        //TODO: Instead of deleting, should be make it passive or something like that?
                        await WithNewUowAsync(() =>
                                              _urlRecordRepository.DeleteAsync(localExistingUrlRecord.Id,
                                                                               cancellationToken: cancellationToken));
                    }

                    return(null);
                }
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);

                return(await _urlRecordRepository.FindBySlugAsync(slug, cancellationToken));
            }

            var localUrlRecord = await _urlRecordRepository.FindBySlugAsync(slug, cancellationToken);

            if (localUrlRecord == null)
            {
                await WithNewUowAsync(() =>
                                      _urlRecordRepository.InsertAsync(CreateUrlRecord(externalUrlRecord),
                                                                       cancellationToken: cancellationToken));

                return(await _urlRecordRepository.FindAsync(externalUrlRecord.Id, cancellationToken : cancellationToken));
            }

            if (localUrlRecord is IUpdateUrlRecord && ((IUpdateUrlRecord)localUrlRecord).Update(externalUrlRecord))
            {
                await WithNewUowAsync(() =>
                                      _urlRecordRepository.UpdateAsync(localUrlRecord, cancellationToken: cancellationToken));
            }
            else
            {
                return(localUrlRecord);
            }

            return(await _urlRecordRepository.FindAsync(externalUrlRecord.Id, cancellationToken : cancellationToken));
        }
Пример #2
0
        public async Task <TUrlRecord> FindByIdAsync(Guid id, CancellationToken cancellationToken = default)
        {
            if (UrlRecordLookupServiceProvider == null)
            {
                return(await _urlRecordRepository.FindAsync(id, cancellationToken : cancellationToken));
            }

            ISeoData externalUrlRecord;

            try
            {
                externalUrlRecord = await UrlRecordLookupServiceProvider.FindByIdAsync(id, cancellationToken);

                if (externalUrlRecord == null)
                {
                    await WithNewUowAsync(() =>
                                          _urlRecordRepository.DeleteAsync(id, cancellationToken: cancellationToken));

                    return(null);
                }
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);

                return(await _urlRecordRepository.FindAsync(id, cancellationToken : cancellationToken));
            }

            var localUrlRecord = await _urlRecordRepository.FindAsync(id, cancellationToken : cancellationToken);

            if (localUrlRecord == null)
            {
                await WithNewUowAsync(() =>
                                      _urlRecordRepository.InsertAsync(CreateUrlRecord(externalUrlRecord),
                                                                       cancellationToken: cancellationToken));

                return(await _urlRecordRepository.FindAsync(id, cancellationToken : cancellationToken));
            }

            if (localUrlRecord is IUpdateUrlRecord && ((IUpdateUrlRecord)localUrlRecord).Update(externalUrlRecord))
            {
                await WithNewUowAsync(() =>
                                      _urlRecordRepository.UpdateAsync(localUrlRecord, cancellationToken: cancellationToken));
            }
            else
            {
                return(localUrlRecord);
            }

            return(await _urlRecordRepository.FindAsync(id, cancellationToken : cancellationToken));
        }