public async Task UpdateAsync(ContentItem contentItem) { contentItem.ApplySchema(); var drafts = GetMongoCollection(contentItem.Schema.Name); contentItem.Validate(); //update all fields, version MongoContentItem result = await drafts.FindOneAndUpdateAsync( Builders <MongoContentItem> .Filter.Eq(x => x.Id, contentItem.Id), Builders <MongoContentItem> .Update .Set(x => x.Fields, contentItem.Fields.ToMongo()) .Set(x => x.ModifiedAt, DateTimeService.Current()) .Set(x => x.PublishedAt, null) .Set(x => x.SchemaVersion, contentItem.SchemaVersion) .Inc(x => x.Version, 1)); ContentItem content = result.ToModel(contentItem.Schema); //execute interceptors foreach (IContentInterceptor interceptor in Interceptors) { await interceptor.OnUpdatedAsync(this, content); } }
public static MongoContentItem ToMongo(this ContentItem contentItem) { MongoContentItem mongoContentItem = new MongoContentItem(); mongoContentItem.Id = contentItem.Id; mongoContentItem.CreatedAt = contentItem.CreatedAt; mongoContentItem.ModifiedAt = contentItem.ModifiedAt; mongoContentItem.PublishedAt = contentItem.PublishedAt; mongoContentItem.Version = contentItem.Version; mongoContentItem.Fields = contentItem.Fields.ToMongo(); mongoContentItem.SchemaVersion = contentItem.Schema.Version; return(mongoContentItem); }
public static ContentItem ToModel(this MongoContentItem mongoContentItem, ContentSchema schema) { ContentItem contentItem = schema.CreateContentItem(); contentItem.Id = mongoContentItem.Id; contentItem.CreatedAt = mongoContentItem.CreatedAt; contentItem.ModifiedAt = mongoContentItem.ModifiedAt; contentItem.PublishedAt = mongoContentItem.PublishedAt; contentItem.Version = mongoContentItem.Version; contentItem.SchemaVersion = mongoContentItem.SchemaVersion; foreach (var mongoField in mongoContentItem.Fields) { mongoField.Value.FromBsonValue(mongoField.Key, contentItem, schema); } return(contentItem); }
public async Task PublishAsync(string schema, Guid id) { ContentItem contentItem = await GetContentItemAsync(schema, id); //execute interceptors foreach (IContentInterceptor interceptor in Interceptors) { await interceptor.OnPublishingAsync(this, contentItem); } var drafts = GetMongoCollection(schema, false); var published = GetMongoCollection(schema, true); //find contentitem MongoContentItem found = await drafts.AsQueryable().FirstOrDefaultAsync(x => x.Id == id); if (found == null) { throw new Exception($"content item not found: {schema}/{id}"); } //add contentitem to published collection await published.ReplaceOneAsync( Builders <MongoContentItem> .Filter.Eq(x => x.Id, id), found, new ReplaceOptions() { IsUpsert = true }); //update publish date await drafts.UpdateOneAsync( Builders <MongoContentItem> .Filter.Eq(x => x.Id, id), Builders <MongoContentItem> .Update.Set(x => x.PublishedAt, DateTimeService.Current())); //refresh contentitem contentItem = await GetContentItemAsync(schema, id); //execute interceptors foreach (IContentInterceptor interceptor in Interceptors) { await interceptor.OnPublishedAsync(this, contentItem); } }
public async Task CreateAsync(ContentItem contentItem) { if (contentItem.Id == Guid.Empty) { contentItem.Id = Guid.NewGuid(); } DateTime now = DateTimeService.Current(); contentItem.CreatedAt = now; contentItem.ModifiedAt = now; var items = GetMongoCollection(contentItem.Schema.Name); contentItem.Validate(); MongoContentItem mongo = contentItem.ToMongo(); await items.InsertOneAsync(mongo); contentItem.Id = mongo.Id; }