aboutsummaryrefslogtreecommitdiff
path: root/back-end/src/Model/BookmarkStore.cs
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2024-01-22 12:20:57 -0500
committerLibravatar vnugent <public@vaughnnugent.com>2024-01-22 12:20:57 -0500
commit03b6cee1ac70c01be5f97688b0af6da8cab84236 (patch)
treeaa994632faf48db087fdcfce714badb3074bb527 /back-end/src/Model/BookmarkStore.cs
parent32553068b151712100826b6de6b0c68f7f46f9cc (diff)
optional auto-correct upload errors
Diffstat (limited to 'back-end/src/Model/BookmarkStore.cs')
-rw-r--r--back-end/src/Model/BookmarkStore.cs36
1 files changed, 35 insertions, 1 deletions
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<ERRNO> AddBulkAsync(IEnumerable<BookmarkEntry> 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<BookmarkEntry>
{
public IQueryable<BookmarkEntry> GetCollectionQueryBuilder(IDbContextHandle context, params string[] constraints)