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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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;
        }