Skip to content

Commit

Permalink
feat: Added boilerplate for members
Browse files Browse the repository at this point in the history
  • Loading branch information
nikcio committed Jun 19, 2022
1 parent b0486d9 commit 1dd04b7
Show file tree
Hide file tree
Showing 11 changed files with 272 additions and 0 deletions.
32 changes: 32 additions & 0 deletions src/Nikcio.UHeadless.Members/Commands/CreateMember.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Nikcio.UHeadless.Base.Elements.Commands;
using Nikcio.UHeadless.Core.Commands;
using Umbraco.Cms.Core.Models.PublishedContent;

namespace Nikcio.UHeadless.Members.Commands {
/// <summary>
/// A command to create a member
/// </summary>
public class CreateMember : ICommand {
/// <inheritdoc/>
public CreateMember(IPublishedContent? member, string? culture, CreateElement createElement) {
Member = member;
Culture = culture;
CreateElement = createElement;
}

/// <summary>
/// The published member
/// </summary>
public virtual IPublishedContent? Member { get; set; }

/// <summary>
/// The culture
/// </summary>
public virtual string? Culture { get; set; }

/// <summary>
/// The create element command
/// </summary>
public virtual CreateElement CreateElement { get; set; }
}
}
19 changes: 19 additions & 0 deletions src/Nikcio.UHeadless.Members/Extensions/FactoryExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using Microsoft.Extensions.DependencyInjection;
using Nikcio.UHeadless.Members.Factories;

namespace Nikcio.UHeadless.Members.Extensions {
/// <inheritdoc/>
public static class FactoryExtensions {
/// <summary>
/// Adds factories
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection AddFactories(this IServiceCollection services) {
services
.AddScoped(typeof(IMemberFactory<,>), typeof(MemberFactory<,>));

return services;
}
}
}
21 changes: 21 additions & 0 deletions src/Nikcio.UHeadless.Members/Extensions/MemberExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using Microsoft.Extensions.DependencyInjection;

namespace Nikcio.UHeadless.Members.Extensions {
/// <summary>
/// Member extensions
/// </summary>
public static class MemberExtensions {
/// <summary>
/// Adds all the Member services
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection AddMemberServices(this IServiceCollection services) {
services
.AddMemberRepositories()
.AddFactories();

return services;
}
}
}
21 changes: 21 additions & 0 deletions src/Nikcio.UHeadless.Members/Extensions/RepositoryExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using Microsoft.Extensions.DependencyInjection;
using Nikcio.UHeadless.Members.Repositories;

namespace Nikcio.UHeadless.Members.Extensions {
/// <summary>
/// Repository extensions
/// </summary>
public static class RepositoryExtensions {
/// <summary>
/// Adds all the Member repositories
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection AddMemberRepositories(this IServiceCollection services) {
services
.AddScoped(typeof(IMemberRepository<,>), typeof(MemberRepository<,>));

return services;
}
}
}
23 changes: 23 additions & 0 deletions src/Nikcio.UHeadless.Members/Factories/IMemberFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using Nikcio.UHeadless.Base.Elements.Factories;
using Nikcio.UHeadless.Base.Properties.Models;
using Nikcio.UHeadless.Members.Models;
using Umbraco.Cms.Core.Models.PublishedContent;

namespace Nikcio.UHeadless.Members.Factories {
/// <summary>
/// A factory for creating members
/// </summary>
/// <typeparam name="TMember"></typeparam>
/// <typeparam name="TProperty"></typeparam>
public interface IMemberFactory<TMember, TProperty> : IElementFactory<TMember, TProperty>
where TMember : IMember<TProperty>
where TProperty : IProperty {
/// <summary>
/// Creates a member
/// </summary>
/// <param name="member"></param>
/// <param name="culture"></param>
/// <returns></returns>
TMember? CreateMember(IPublishedContent member, string? culture);
}
}
37 changes: 37 additions & 0 deletions src/Nikcio.UHeadless.Members/Factories/MemberFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using Nikcio.UHeadless.Base.Elements.Commands;
using Nikcio.UHeadless.Base.Properties.Models;
using Nikcio.UHeadless.Core.Reflection.Factories;
using Nikcio.UHeadless.Members.Commands;
using Nikcio.UHeadless.Members.Models;
using Umbraco.Cms.Core.Models.PublishedContent;

namespace Nikcio.UHeadless.Members.Factories {
/// <inheritdoc/>
public class MemberFactory<TMember, TProperty> : IMemberFactory<TMember, TProperty>
where TMember : IMember<TProperty>
where TProperty : IProperty {
/// <summary>
/// A factory for creating object with DI
/// </summary>
protected readonly IDependencyReflectorFactory dependencyReflectorFactory;

/// <inheritdoc/>
public MemberFactory(IDependencyReflectorFactory dependencyReflectorFactory) {
this.dependencyReflectorFactory = dependencyReflectorFactory;
}

/// <inheritdoc/>
public TMember? CreateElement(IPublishedContent? element, string? culture) {
var createElementCommand = new CreateElement(element, culture);
var createMemberCommand = new CreateMember(element, culture, createElementCommand);

var createdContent = dependencyReflectorFactory.GetReflectedType<IMember<TProperty>>(typeof(TMember), new object[] { createMemberCommand });
return createdContent == null ? default : (TMember) createdContent;
}

/// <inheritdoc/>
public virtual TMember? CreateMember(IPublishedContent member, string? culture) {
return CreateElement(member, culture);
}
}
}
14 changes: 14 additions & 0 deletions src/Nikcio.UHeadless.Members/Models/IMember.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using HotChocolate;
using Nikcio.UHeadless.Base.Elements.Models;
using Nikcio.UHeadless.Base.Properties.Models;

namespace Nikcio.UHeadless.Members.Models {
/// <summary>
/// Represents a member
/// </summary>
/// <typeparam name="TProperty"></typeparam>
[GraphQLDescription("Represents a member.")]
public interface IMember<TProperty> : IElement<TProperty>
where TProperty : IProperty {
}
}
17 changes: 17 additions & 0 deletions src/Nikcio.UHeadless.Members/Models/Member.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using Nikcio.UHeadless.Base.Elements.Models;
using Nikcio.UHeadless.Base.Properties.Factories;
using Nikcio.UHeadless.Base.Properties.Models;
using Nikcio.UHeadless.Members.Commands;

namespace Nikcio.UHeadless.Members.Models {
/// <summary>
/// A base for member
/// </summary>
/// <typeparam name="TProperty"></typeparam>
public abstract class Member<TProperty> : Element<TProperty>, IMember<TProperty>
where TProperty : IProperty {
/// <inheritdoc/>
protected Member(CreateMember createMember, IPropertyFactory<TProperty> propertyFactory) : base(createMember.CreateElement, propertyFactory) {
}
}
}
15 changes: 15 additions & 0 deletions src/Nikcio.UHeadless.Members/Queries/MemberQuery.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Nikcio.UHeadless.Base.Properties.Models;
using Nikcio.UHeadless.Members.Models;

namespace Nikcio.UHeadless.Members.Queries {
/// <summary>
/// The base implementation of the Member queries
/// </summary>
/// <typeparam name="TMember"></typeparam>
/// <typeparam name="TProperty"></typeparam>
public class MemberQuery<TMember, TProperty>
where TMember : IMember<TProperty>
where TProperty : IProperty {

}
}
37 changes: 37 additions & 0 deletions src/Nikcio.UHeadless.Members/Repositories/IMemberRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using Nikcio.UHeadless.Base.Properties.Models;
using Nikcio.UHeadless.Members.Models;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;

namespace Nikcio.UHeadless.Members.Repositories {
/// <summary>
/// A repository to get Member from Umbraco
/// </summary>
public interface IMemberRepository<TMember, TProperty>
where TMember : IMember<TProperty>
where TProperty : IProperty {
/// <summary>
/// Gets the Member based on a fetch method
/// </summary>
/// <param name="fetch">The fetch method</param>
/// <param name="culture">The culture</param>
/// <returns></returns>
TMember? GetMember(Func<IPublishedMemberCache?, IPublishedContent?> fetch, string? culture);

/// <summary>
/// Gets a Member lsit based on a fetch method
/// </summary>
/// <param name="fetch">The fetch method</param>
/// <param name="culture">The culture</param>
/// <returns></returns>
IEnumerable<TMember?> GetMemberList(Func<IPublishedMemberCache?, IEnumerable<IPublishedContent>?> fetch, string? culture);

/// <summary>
/// Gets a <see cref="IPublishedContent"/> converted to T
/// </summary>
/// <param name="Member">The published Member</param>
/// <param name="culture">The culture</param>
/// <returns></returns>
TMember? GetConvertedMember(IPublishedContent Member, string culture);
}
}
36 changes: 36 additions & 0 deletions src/Nikcio.UHeadless.Members/Repositories/MemberRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using Microsoft.Extensions.Logging;
using Nikcio.UHeadless.Base.Elements.Repositories;
using Nikcio.UHeadless.Base.Properties.Models;
using Nikcio.UHeadless.Members.Factories;
using Nikcio.UHeadless.Members.Models;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Web;

namespace Nikcio.UHeadless.Members.Repositories {
/// <inheritdoc/>
public class MemberRepository<TMember, TProperty> : NonCachedElementRepository<TMember, TProperty>, IMemberRepository<TMember, TProperty>
where TMember : IMember<TProperty>
where TProperty : IProperty {

/// <inheritdoc/>
public MemberRepository(IPublishedSnapshotAccessor publishedSnapshotAccessor, IUmbracoContextFactory umbracoContextFactory, IMemberFactory<TMember, TProperty> MemberFactory, ILogger<MemberRepository<TMember, TProperty>> logger) : base(publishedSnapshotAccessor, umbracoContextFactory, MemberFactory, logger) {
umbracoContextFactory.EnsureUmbracoContext();
}

/// <inheritdoc/>
public virtual TMember? GetMember(Func<IPublishedMemberCache?, IPublishedContent?> fetch, string? culture) {
throw new NotImplementedException();
}

/// <inheritdoc/>
public virtual IEnumerable<TMember?> GetMemberList(Func<IPublishedMemberCache?, IEnumerable<IPublishedContent>?> fetch, string? culture) {
throw new NotImplementedException();
}

/// <inheritdoc/>
public virtual TMember? GetConvertedMember(IPublishedContent Member, string? culture) {
return base.GetConvertedElement(Member, culture);
}
}
}

0 comments on commit 1dd04b7

Please sign in to comment.