Extending Media Data Structures in Nikcio.UHeadless
Nikcio.UHeadless provides flexibility to extend and replace media data structures to accommodate your specific needs. This documentation outlines three examples of how you can extend the media data structures.
Example 1: Simple Media Model
Section titled “Example 1: Simple Media Model”- Create your own media model by inheriting from
BasicMedia:
using Nikcio.UHeadless.Base.Basics.Models;using Nikcio.UHeadless.Base.Properties.Factories;using Nikcio.UHeadless.ContentTypes.Basics.Models;using Nikcio.UHeadless.ContentTypes.Factories;using Nikcio.UHeadless.Media.Basics.Models;using Nikcio.UHeadless.Media.Commands;using Nikcio.UHeadless.Media.Factories;
public class MyMedia : BasicMedia{ public string MyCustomValue { get; set; }
public MyMedia(CreateMedia createMedia, IPropertyFactory<BasicProperty> propertyFactory, IContentTypeFactory<BasicContentType> contentTypeFactory, IMediaFactory<BasicMedia> mediaFactory) : base(createMedia, propertyFactory, contentTypeFactory, mediaFactory) { MyCustomValue = "Custom Value"; }}- Extend the query where you want the model to be present. In this example, we extend the
MediaAtRootquery:
using Nikcio.UHeadless.Media.Queries;
public class MyMediaAtRootQuery : MediaAtRootQuery<MyMedia>{}- Register the query in Nikcio.UHeadless:
.AddUHeadless(new(){ UHeadlessGraphQLOptions = new() { GraphQLExtensions = (IRequestExecutorBuilder builder) => { builder.UseMediaQueries(); // Use this from v4.1.0+ (Only add one) builder.AddTypeExtension<MyMediaAtRootQuery>(); return builder; }, },})- Open
/graphqland observe your new model for theMediaAtRootquery.
Example 2: Extended Media Model with Custom Property
Section titled “Example 2: Extended Media Model with Custom Property”- Create your property model by inheriting from
BasicProperty:
using Nikcio.UHeadless.Base.Basics.Models;using Nikcio.UHeadless.Base.Properties.Commands;using Nikcio.UHeadless.Base.Properties.Factories;
public class MyProperty : BasicProperty{ public string MyString { get; set; }
public MyProperty(CreateProperty createProperty, IPropertyValueFactory propertyValueFactory) : base(createProperty, propertyValueFactory) { MyString = "My string"; }}- Create your media model by inheriting from
BasicMedia<TProperty>:
using Nikcio.UHeadless.Base.Basics.Models;using Nikcio.UHeadless.Base.Properties.Factories;using Nikcio.UHeadless.ContentTypes.Basics.Models;using Nikcio.UHeadless.ContentTypes.Factories;using Nikcio.UHeadless.Media.Basics.Models;using Nikcio.UHeadless.Media.Commands;using Nikcio.UHeadless.Media.Factories;
public class MyMediaWithMyProperty : BasicMedia<MyProperty>{ public string MyCustomValue { get; set; }
public MyMediaWithMyProperty(CreateMedia createMedia, IPropertyFactory<MyProperty> propertyFactory, IContentTypeFactory<BasicContentType> contentTypeFactory, IMediaFactory<BasicMedia<MyProperty, BasicContentType>> mediaFactory) : base(createMedia, propertyFactory, contentTypeFactory, mediaFactory) { MyCustomValue = "Custom Value"; }}- Extend the query where you want the model to be present. In this example, we extend the
MediaAtRootquery:
using Nikcio.UHeadless.Media.Queries;
public class MyMediaAtRootQueryWithMyProperty : MediaAtRootQuery<MyMediaWithMyProperty>{}- Register the query in Nikcio.UHeadless:
.AddUHeadless(new(){ UHeadlessGraphQLOptions = new() { GraphQLExtensions = (IRequestExecutorBuilder builder) => { builder.UseMediaQueries(); // Use this from v4.1.0+ (Only add one) builder.AddTypeExtension<MyMediaAtRootQueryWithMyProperty>(); return builder; }, },})- Open
/graphqland observe your new model for theMediaAtRootquery.
Example 3: Creating Media Model from Scratch
Section titled “Example 3: Creating Media Model from Scratch”- Create your own media model by inheriting from
Media<TProperty>:
using System.Collections.Generic;using HotChocolate;using HotChocolate.Data;using Nikcio.UHeadless.Base.Basics.Models;using Nikcio.UHeadless.Base.Properties.Factories;using Nikcio.UHeadless.Media.Commands;using Nikcio.UHeadless.Media.Models;
public class MyMediaFromScratch : Media<BasicProperty>{ public string MyCustomValue { get; set; }
/// <inheritdoc/> [GraphQLDescription("Gets the properties of the element.")] [UseFiltering] public virtual IEnumerable<BasicProperty?>? Properties => Content != null ? PropertyFactory.CreateProperties(Content, Culture, Segment, Fallback) : default;
public MyMediaFromScratch(CreateMedia createMedia, IPropertyFactory<BasicProperty> propertyFactory) : base(createMedia, propertyFactory) { MyCustomValue = "Custom Value"; }}- Extend the query where you want the model to be present. In this example, we extend the
MediaAtRootquery:
using Nikcio.UHeadless.Media.Queries;
public class MyMediaAtRootQueryWithMyMediaFromScratch : MediaAtRootQuery<MyMediaFromScratch>{}- Register the query in Nikcio.UHeadless:
.AddUHeadless(new(){ UHeadlessGraphQLOptions = new() { GraphQLExtensions = (IRequestExecutorBuilder builder) => { builder.UseMediaQueries(); // Use this from v4.1.0+ (Only add one) builder.AddTypeExtension<MyMediaAtRootQueryWithMyMediaFromScratch>(); return builder; }, },})- Open
/graphqland observe your new model for theMediaAtRootquery.
These examples demonstrate different ways to extend media data structures in Nikcio.UHeadless. Choose the method that best suits your requirements and customize the models and queries accordingly.
Note: Make sure to include the necessary namespaces and dependencies based on your project structure.