private async Task AddVersionAsync(Common.Api.Request.MediaPart requestedPart, Dal.Model.MediaPart addedPart, Dal.Model.User loggedUser) { var version = requestedPart.Version.MediaVersionId == null ? new Dal.Model.MediaVersion() : await context.MediaVersions.SingleOrDefaultAsync(v => v.MediaVersionId == requestedPart.Version.MediaVersionId); version.MediaPartId = addedPart.MediaPartId; version.VersionComment = requestedPart.Version.VersionComment; version.UserId = loggedUser.UserId; version.Created = DateTime.Now; if (requestedPart.Version.MediaVersionId == null) { await context.MediaVersions.AddAsync(version); } await context.SaveChangesAsync(); requestedPart.Version.MediaVersionId = version.MediaVersionId; // Media version tags await AddVersionTagsAsync(requestedPart); // Links await AddLinksAsync(requestedPart.Version, loggedUser); }
private async Task AddVersionTagsAsync(Common.Api.Request.MediaPart requestedPart) { if (requestedPart.Version.Tags != null) { List <Dal.Model.MediaTag> tagsInRequestVersion = new(); foreach (var reqVersionTag in requestedPart.Version.Tags) { var tag = await context.MediaTags.SingleOrDefaultAsync(t => t.Name == reqVersionTag.Name); if (tag == null) { tag = new Dal.Model.MediaTag { Name = reqVersionTag.Name }; await context.MediaTags.AddAsync(tag); await context.SaveChangesAsync(); } tagsInRequestVersion.Add(tag); // Version-Tag link if (!await context.MediaVersionTags.AnyAsync(vt => vt.MediaVersionId == (int)requestedPart.Version.MediaVersionId && vt.MediaTagId == tag.MediaTagId)) { await context.MediaVersionTags.AddAsync(new Dal.Model.MediaVersionTag { MediaVersionId = (int)requestedPart.Version.MediaVersionId, MediaTagId = tag.MediaTagId }); await context.SaveChangesAsync(); } } // Remove tags that are not in request. var allTagsForVersion = await context.MediaVersionTags.Where(vt => vt.MediaVersionId == (int)requestedPart.Version.MediaVersionId).ToListAsync(); context.MediaVersionTags.RemoveRange(allTagsForVersion.Where(versionTag => !tagsInRequestVersion.Any(requestTag => requestTag.MediaTagId == versionTag.MediaTagId))); await context.SaveChangesAsync(); } }