private async Task <Dal.Model.MediaHeader> AddOrUpdateHeaderAsync(Common.Api.Request.MediaHeader requestedHeader, Dal.Model.User loggedUser) { Dal.Model.MediaHeader header = requestedHeader.MediaHeaderId == null ? new Dal.Model.MediaHeader() : await context.MediaHeaders.SingleOrDefaultAsync(h => h.MediaHeaderId == (int)requestedHeader.MediaHeaderId); // Change all values except PK (MediaHeaderId) header.Name = requestedHeader.Name; header.Year = requestedHeader.Year; header.Description = requestedHeader.Description; header.ReferenceLink = !string.IsNullOrWhiteSpace(requestedHeader.ReferenceLink) ? new Uri(requestedHeader.ReferenceLink) : null; header.UserId = loggedUser.UserId; if (requestedHeader.MediaHeaderId == null) { await context.MediaHeaders.AddAsync(header); } await context.SaveChangesAsync(); // Save to get MediaId. requestedHeader.MediaHeaderId = header.MediaHeaderId; // Populate id in request structure, so it can be used later if needed. // Header tags await AddHeaderTagsAsync(requestedHeader); // Parts await AddPartsAsync(requestedHeader, header, loggedUser); return(header); }
public static void MapResponseMedia(this Dal.Model.MediaHeader media, ref Common.Api.Response.MediaHeader responseHeader) { responseHeader.MediaHeaderId = media.MediaHeaderId; responseHeader.Name = media.Name; responseHeader.Year = media.Year; responseHeader.Description = media.Description; responseHeader.ReferenceLink = media.ReferenceLink != null ? media.ReferenceLink.AbsoluteUri : string.Empty; responseHeader.User = media.User.MapReponseUser(); }
private async Task AddPartsAsync(Common.Api.Request.MediaHeader requestedHeader, Dal.Model.MediaHeader addedHeader, Dal.Model.User loggedUser) { if (requestedHeader.Parts != null) { foreach (var requestedPart in requestedHeader.Parts) { Dal.Model.MediaPart part = requestedPart.MediaPartId == null ? new Dal.Model.MediaPart() : await context.MediaParts.SingleOrDefaultAsync(p => p.MediaPartId == requestedPart.MediaPartId); part.MediaHeaderId = addedHeader.MediaHeaderId; part.Season = requestedPart.Season; part.Episode = requestedPart.Episode; part.Name = requestedPart.Name; part.Description = requestedPart.Description; part.ReferenceLink = !string.IsNullOrWhiteSpace(requestedPart.ReferenceLink) ? new Uri(requestedPart.ReferenceLink) : null; part.UserId = loggedUser.UserId; part.Created = DateTime.Now; if (requestedPart.MediaPartId == null) { await context.MediaParts.AddAsync(part); } await context.SaveChangesAsync(); requestedPart.MediaPartId = part.MediaPartId; // Part tags await AddPartTagsAsync(requestedPart); // Media versions and tags await AddVersionAsync(requestedPart, part, loggedUser); } } }