Browse Source

Minor fix for flat content.

pull/537/head
Sebastian 6 years ago
parent
commit
a254639a5b
  1. 16
      backend/src/Squidex.Domain.Apps.Core.Operations/ConvertContent/ContentConverterFlat.cs
  2. 2
      backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/QueryIdsAsync.cs
  3. 19
      backend/src/Squidex.Domain.Apps.Entities/History/NotifoService.cs
  4. 3
      backend/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEventStore.cs
  5. 4
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/ContentConversionFlatTests.cs
  6. 20
      frontend/app/shared/state/contents.state.ts

16
backend/src/Squidex.Domain.Apps.Core.Operations/ConvertContent/ContentConverterFlat.cs

@ -20,7 +20,12 @@ namespace Squidex.Domain.Apps.Core.ConvertContent
foreach (var (key, value) in content) foreach (var (key, value) in content)
{ {
result[key] = GetFirst(value); var first = GetFirst(value);
if (first != null)
{
result[key] = first;
}
} }
return result; return result;
@ -32,7 +37,12 @@ namespace Squidex.Domain.Apps.Core.ConvertContent
foreach (var (key, value) in content) foreach (var (key, value) in content)
{ {
result[key] = GetFirst(value, fallback); var first = GetFirst(value, fallback);
if (first != null)
{
result[key] = first;
}
} }
return result; return result;
@ -40,7 +50,7 @@ namespace Squidex.Domain.Apps.Core.ConvertContent
private static object? GetFirst(ContentFieldData? fieldData) private static object? GetFirst(ContentFieldData? fieldData)
{ {
if (fieldData == null) if (fieldData == null || fieldData.Count == 0)
{ {
return null; return null;
} }

2
backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/QueryIdsAsync.cs

@ -96,7 +96,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents.Operations
private static string GetSchemaIdField() private static string GetSchemaIdField()
{ {
return BsonClassMap.LookupClassMap(typeof(MongoContentEntity)).GetMemberMap(nameof(MongoContentEntity.Id)).ElementName; return BsonClassMap.LookupClassMap(typeof(MongoContentEntity)).GetMemberMap(nameof(MongoContentEntity.IndexedSchemaId)).ElementName;
} }
} }
} }

19
backend/src/Squidex.Domain.Apps.Entities/History/NotifoService.cs

@ -7,6 +7,7 @@
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Grpc.Core;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using NodaTime; using NodaTime;
using Notifo.SDK; using Notifo.SDK;
@ -178,7 +179,14 @@ namespace Squidex.Domain.Apps.Entities.History
var request = BuildAllowedTopicRequest(contributorAssigned, contributorAssigned.ContributorId); var request = BuildAllowedTopicRequest(contributorAssigned, contributorAssigned.ContributorId);
await client.AddAllowedTopicAsync(request); try
{
await client.AddAllowedTopicAsync(request);
}
catch (RpcException ex) when (ex.StatusCode == StatusCode.NotFound)
{
break;
}
break; break;
} }
@ -187,7 +195,14 @@ namespace Squidex.Domain.Apps.Entities.History
{ {
var request = BuildAllowedTopicRequest(contributorRemoved, contributorRemoved.ContributorId); var request = BuildAllowedTopicRequest(contributorRemoved, contributorRemoved.ContributorId);
await client.RemoveAllowedTopicAsync(request); try
{
await client.RemoveAllowedTopicAsync(request);
}
catch (RpcException ex) when (ex.StatusCode == StatusCode.NotFound)
{
break;
}
break; break;
} }

3
backend/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEventStore.cs

@ -48,6 +48,9 @@ namespace Squidex.Infrastructure.EventSourcing
{ {
return collection.Indexes.CreateManyAsync(new[] return collection.Indexes.CreateManyAsync(new[]
{ {
new CreateIndexModel<MongoEventCommit>(
Index
.Ascending(x => x.Timestamp)),
new CreateIndexModel<MongoEventCommit>( new CreateIndexModel<MongoEventCommit>(
Index Index
.Ascending(x => x.EventStream) .Ascending(x => x.EventStream)

4
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/ContentConversionFlatTests.cs

@ -31,7 +31,9 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
.AddValue("en", 6)) .AddValue("en", 6))
.AddField("field4", .AddField("field4",
new ContentFieldData() new ContentFieldData()
.AddValue("it", 7)); .AddValue("it", 7))
.AddField("field5",
new ContentFieldData());
[Fact] [Fact]
public void Should_return_flatten_value() public void Should_return_flatten_value()

20
frontend/app/shared/state/contents.state.ts

@ -115,7 +115,7 @@ export abstract class ContentsStateBase extends State<Snapshot> {
of(this.snapshot.contents.find(x => x.id === id)).pipe( of(this.snapshot.contents.find(x => x.id === id)).pipe(
switchMap(content => { switchMap(content => {
if (!content) { if (!content) {
return this.contentsService.getContent(this.appName, this.schemaId, id).pipe(catchError(() => of(null))); return this.contentsService.getContent(this.appName, this.schemaName, id).pipe(catchError(() => of(null)));
} else { } else {
return of(content); return of(content);
} }
@ -152,7 +152,7 @@ export abstract class ContentsStateBase extends State<Snapshot> {
} }
private loadInternalCore(isReload: boolean) { private loadInternalCore(isReload: boolean) {
if (!this.appName || !this.schemaId) { if (!this.appName || !this.schemaName) {
return empty(); return empty();
} }
@ -167,7 +167,7 @@ export abstract class ContentsStateBase extends State<Snapshot> {
query.query = this.snapshot.contentsQuery; query.query = this.snapshot.contentsQuery;
} }
return this.contentsService.getContents(this.appName, this.schemaId, query).pipe( return this.contentsService.getContents(this.appName, this.schemaName, query).pipe(
tap(({ total, items: contents, canCreate, canCreateAndPublish, statuses }) => { tap(({ total, items: contents, canCreate, canCreateAndPublish, statuses }) => {
if (isReload) { if (isReload) {
this.dialogs.notifyInfo('Contents reloaded.'); this.dialogs.notifyInfo('Contents reloaded.');
@ -202,12 +202,12 @@ export abstract class ContentsStateBase extends State<Snapshot> {
} }
public loadVersion(content: ContentDto, version: Version): Observable<Versioned<any>> { public loadVersion(content: ContentDto, version: Version): Observable<Versioned<any>> {
return this.contentsService.getVersionData(this.appName, this.schemaId, content.id, version).pipe( return this.contentsService.getVersionData(this.appName, this.schemaName, content.id, version).pipe(
shareSubscribed(this.dialogs)); shareSubscribed(this.dialogs));
} }
public create(request: any, publish: boolean): Observable<ContentDto> { public create(request: any, publish: boolean): Observable<ContentDto> {
return this.contentsService.postContent(this.appName, this.schemaId, request, publish).pipe( return this.contentsService.postContent(this.appName, this.schemaName, request, publish).pipe(
tap(payload => { tap(payload => {
this.dialogs.notifyInfo('Content created successfully.'); this.dialogs.notifyInfo('Content created successfully.');
@ -330,6 +330,8 @@ export abstract class ContentsStateBase extends State<Snapshot> {
} }
public abstract get schemaId(): string; public abstract get schemaId(): string;
public abstract get schemaName(): string;
} }
@Injectable() @Injectable()
@ -343,6 +345,10 @@ export class ContentsState extends ContentsStateBase {
public get schemaId() { public get schemaId() {
return this.schemasState.schemaId; return this.schemasState.schemaId;
} }
public get schemaName() {
return this.schemasState.schemaName;
}
} }
@Injectable() @Injectable()
@ -358,6 +364,10 @@ export class ManualContentsState extends ContentsStateBase {
public get schemaId() { public get schemaId() {
return this.schema.id; return this.schema.id;
} }
public get schemaName() {
return this.schema.name;
}
} }
function buildStatusQueries(statuses: ReadonlyArray<StatusInfo> | undefined): ReadonlyArray<SavedQuery> { function buildStatusQueries(statuses: ReadonlyArray<StatusInfo> | undefined): ReadonlyArray<SavedQuery> {

Loading…
Cancel
Save