From 03b6cee1ac70c01be5f97688b0af6da8cab84236 Mon Sep 17 00:00:00 2001 From: vnugent Date: Mon, 22 Jan 2024 12:20:57 -0500 Subject: optional auto-correct upload errors --- back-end/src/Model/BookmarkStore.cs | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'back-end/src/Model') diff --git a/back-end/src/Model/BookmarkStore.cs b/back-end/src/Model/BookmarkStore.cs index fbd3213..8578976 100644 --- a/back-end/src/Model/BookmarkStore.cs +++ b/back-end/src/Model/BookmarkStore.cs @@ -19,10 +19,13 @@ using System; using System.Linq; using System.Threading; using System.Threading.Tasks; +using System.Collections.Generic; +using VNLib.Utils; using VNLib.Plugins.Extensions.Data; -using VNLib.Plugins.Extensions.Data.Abstractions; using VNLib.Plugins.Extensions.Loading; +using VNLib.Plugins.Extensions.Data.Abstractions; + namespace SimpleBookmark.Model { @@ -113,6 +116,37 @@ namespace SimpleBookmark.Model .ToArray(); } + public async Task AddBulkAsync(IEnumerable bookmarks, string userId, DateTimeOffset now, CancellationToken cancellation) + { + //Init new db connection + await using SimpleBookmarkContext context = new(dbOptions.Value); + await context.OpenTransactionAsync(cancellation); + + //Setup clean bookmark instances + bookmarks = bookmarks.Select(b => new BookmarkEntry + { + Id = GetNewRecordId(), //new uuid + UserId = userId, //Set userid + LastModified = now.DateTime, + + //Allow reuse of created time + Created = b.Created, + Description = b.Description, + Name = b.Name, + Tags = b.Tags, + Url = b.Url, + }); + + //Filter out bookmarks that already exist + bookmarks = bookmarks.Where(b => !context.Bookmarks.Any(b2 => b2.UserId == userId && b2.Url == b.Url)); + + //Add bookmarks to db + context.AddRange(bookmarks); + + //Commit transaction + return await context.SaveAndCloseAsync(true, cancellation); + } + private sealed class BookmarkQueryLookup : IDbQueryLookup { public IQueryable GetCollectionQueryBuilder(IDbContextHandle context, params string[] constraints) -- cgit