diff --git a/zero.Core/Api/SpacesApi.cs b/zero.Core/Api/SpacesApi.cs
index ff35cd56..bc98a965 100644
--- a/zero.Core/Api/SpacesApi.cs
+++ b/zero.Core/Api/SpacesApi.cs
@@ -1,4 +1,5 @@
-using Microsoft.Extensions.Options;
+using FluentValidation.Results;
+using Microsoft.Extensions.Options;
using Raven.Client.Documents;
using Raven.Client.Documents.Linq;
using Raven.Client.Documents.Session;
@@ -39,15 +40,32 @@ namespace zero.Core.Api
}
+ ///
+ public async Task GetItem(string alias) where T : SpaceContent
+ {
+ using (IAsyncDocumentSession session = Raven.OpenAsyncSession())
+ {
+ return await session.Query()
+ .Where(x => x.SpaceAlias == alias)
+ .ProjectInto()
+ .FirstOrDefaultAsync();
+ }
+ }
+
+
///
public async Task> GetList(string alias) where T : SpaceContent
{
using (IAsyncDocumentSession session = Raven.OpenAsyncSession())
{
- return await session.Query().ProjectInto().ToListAsync();
+ return await session.Query()
+ .Where(x => x.SpaceAlias == alias)
+ .ProjectInto()
+ .ToListAsync();
}
}
+
///
public async Task> GetListByQuery(string alias, ListQuery query, string appId = null) where T : SpaceContent
{
@@ -57,10 +75,40 @@ namespace zero.Core.Api
{
return await session.Query()
.ForApp(appId)
- .Where(x => x.Alias == alias)
+ .Where(x => x.SpaceAlias == alias)
.ToQueriedListAsync(query);
}
}
+
+
+ ///
+ public async Task> Save(string alias, T model) where T : SpaceContent
+ {
+ Space space = Options.Spaces.GetByAlias(alias);
+ //ValidationResult validation = await new CountryValidator().ValidateAsync(model);
+
+ //if (!validation.IsValid)
+ //{
+ // return EntityResult.Fail(validation);
+ //}
+
+ if (model.Id.IsNullOrEmpty())
+ {
+ model.AppId = "zero.applications.1-A"; // TODO real app id
+ model.CreatedDate = DateTimeOffset.Now;
+ }
+
+ model.SpaceAlias = alias;
+ model.Alias = Alias.Generate(model.Name);
+
+ using (IAsyncDocumentSession session = Raven.OpenAsyncSession())
+ {
+ await session.StoreAsync(model);
+ await session.SaveChangesAsync();
+ }
+
+ return EntityResult.Success(model);
+ }
}
@@ -77,13 +125,23 @@ namespace zero.Core.Api
SpaceCollection GetAll();
///
- /// Get all list items by a list collection alias
+ /// Get editor item for a space
+ ///
+ Task GetItem(string alias) where T : SpaceContent;
+
+ ///
+ /// Get all list items by space alias
///
Task> GetList(string alias) where T : SpaceContent;
///
- /// Get all list items for a collection (with query)
+ /// Get all list items for a space (with query)
///
Task> GetListByQuery(string alias, ListQuery query, string appId = null) where T : SpaceContent;
+
+ ///
+ /// Saves a content item in a space
+ ///
+ Task> Save(string alias, T model) where T : SpaceContent;
}
}
diff --git a/zero.Core/Entities/Spaces/SpaceCollection.cs b/zero.Core/Entities/Spaces/SpaceCollection.cs
index 4b4b6251..b7d2c0f8 100644
--- a/zero.Core/Entities/Spaces/SpaceCollection.cs
+++ b/zero.Core/Entities/Spaces/SpaceCollection.cs
@@ -1,10 +1,17 @@
using System;
using System.Collections.Generic;
+using System.Linq;
namespace zero.Core.Entities
{
public class SpaceCollection : List
{
+ public Space GetByAlias(string alias)
+ {
+ return this.FirstOrDefault(x => x.Alias.Equals(alias, StringComparison.InvariantCultureIgnoreCase));
+ }
+
+
public void AddList(string alias, string name, string description, string icon) where T : SpaceContent, new()
{
Add(new Space()
diff --git a/zero.Core/Entities/Spaces/SpaceContent.cs b/zero.Core/Entities/Spaces/SpaceContent.cs
index ba423a00..270fc11e 100644
--- a/zero.Core/Entities/Spaces/SpaceContent.cs
+++ b/zero.Core/Entities/Spaces/SpaceContent.cs
@@ -6,6 +6,6 @@
///
public class SpaceContent : DatabaseEntity
{
-
+ public string SpaceAlias { get; set; }
}
}
\ No newline at end of file
diff --git a/zero.Core/Extensions/StringExtensions.cs b/zero.Core/Extensions/StringExtensions.cs
index f3a7c784..0533b036 100644
--- a/zero.Core/Extensions/StringExtensions.cs
+++ b/zero.Core/Extensions/StringExtensions.cs
@@ -81,7 +81,11 @@ namespace zero.Core.Extensions
public static string ToCamelCase(this string input)
{
- return Char.ToLowerInvariant(input[0]) + input.Substring(1);
+ if (!String.IsNullOrEmpty(input) && input.Length > 1)
+ {
+ return Char.ToLowerInvariant(input[0]) + input.Substring(1);
+ }
+ return input;
}
}
}
diff --git a/zero.Core/Renderer/AbstractRenderer.cs b/zero.Core/Renderer/AbstractRenderer.cs
index c3d6da20..99bd2738 100644
--- a/zero.Core/Renderer/AbstractRenderer.cs
+++ b/zero.Core/Renderer/AbstractRenderer.cs
@@ -13,8 +13,11 @@ namespace zero.Core.Renderer
{
public class AbstractGenericRenderer : AbstractRenderer