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
- 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
MediaAtRoot
query:
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
/graphql
and observe your new model for theMediaAtRoot
query.
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
MediaAtRoot
query:
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
/graphql
and observe your new model for theMediaAtRoot
query.
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
MediaAtRoot
query:
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
/graphql
and observe your new model for theMediaAtRoot
query.
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.