public Task Serialize(ISingleResourceDocument document, JsonWriter writer)
        {
            writer.WriteStartObject();

            writer.WritePropertyName(PrimaryDataKeyName);

            ResourceObjectFormatter.Serialize(document.PrimaryData, writer);

            if (document.RelatedData != null && document.RelatedData.Any())
            {
                writer.WritePropertyName(RelatedDataKeyName);
                writer.WriteStartArray();
                foreach (var resourceObject in document.RelatedData)
                {
                    ResourceObjectFormatter.Serialize(resourceObject, writer);
                }
                writer.WriteEndArray();
            }

            if (document.Metadata != null)
            {
                writer.WritePropertyName(MetaKeyName);
                MetadataFormatter.Serialize(document.Metadata, writer);
            }

            writer.WriteEndObject();

            return(Task.FromResult(0));
        }
예제 #2
0
        /// <summary>
        /// Creates a new record corresponding to the data in the request document.
        /// </summary>
        public virtual async Task <IHttpActionResult> Post(string resourceType, [FromBody] ISingleResourceDocument requestDocument, CancellationToken cancellationToken)
        {
            var materializer = _documentMaterializerLocator.GetMaterializerByResourceTypeName(resourceType);
            var document     = await materializer.CreateRecord(requestDocument, Request, cancellationToken);

            return(Ok(document));
        }
        public Task Serialize(ISingleResourceDocument document, JsonWriter writer)
        {
            writer.WriteStartObject();

            writer.WritePropertyName(PrimaryDataKeyName);

            _resourceObjectFormatter.Serialize(document.PrimaryData, writer);

            if (document.RelatedData != null && document.RelatedData.Any())
            {
                writer.WritePropertyName(RelatedDataKeyName);
                writer.WriteStartArray();
                foreach (var resourceObject in document.RelatedData)
                {
                    _resourceObjectFormatter.Serialize(resourceObject, writer);
                }
                writer.WriteEndArray();
            }

            if (document.Metadata != null)
            {
                writer.WritePropertyName(MetaKeyName);
                _metadataFormatter.Serialize(document.Metadata, writer);
            }

            writer.WriteEndObject();

            return Task.FromResult(0);
        }
예제 #4
0
        public virtual async Task <ISingleResourceDocument> UpdateRecord(string id, ISingleResourceDocument requestDocument,
                                                                         HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var apiBaseUrl = GetBaseUrlFromRequest(request);
            var newRecord  = await MaterializeAsync(requestDocument.PrimaryData, cancellationToken);

            var returnDocument = _singleResourceDocumentBuilder.BuildDocument(newRecord, apiBaseUrl, null, null);
            await _dbContext.SaveChangesAsync(cancellationToken);

            return(returnDocument);
        }
        public virtual async Task <ISingleResourceDocument> CreateRecord(ISingleResourceDocument requestDocument,
                                                                         HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var apiBaseUrl = GetBaseUrlFromRequest(request);
            var newRecord  = MaterializeAsync(requestDocument.PrimaryData, cancellationToken);

            await OnCreate(newRecord);

            await DbContext.SaveChangesAsync(cancellationToken);

            var includes       = _includeExpressionExtractor.ExtractIncludeExpressions(request);
            var returnDocument = _singleResourceDocumentBuilder.BuildDocument(await newRecord, apiBaseUrl, includes, null);

            return(returnDocument);
        }
 public abstract Task <ISingleResourceDocument> UpdateRecord(string id, ISingleResourceDocument requestDocument,
                                                             HttpRequestMessage request,
                                                             CancellationToken cancellationToken);
 public override Task <ISingleResourceDocument> UpdateRecord(string id, ISingleResourceDocument requestDocument, HttpRequestMessage request,
                                                             CancellationToken cancellationToken)
 {
     throw new NotImplementedException();
 }