diff --git a/FreeTubeSync.sln.DotSettings.user b/FreeTubeSync.sln.DotSettings.user
new file mode 100644
index 0000000..6675bb5
--- /dev/null
+++ b/FreeTubeSync.sln.DotSettings.user
@@ -0,0 +1,3 @@
+
+ ForceIncluded
+ ForceIncluded
\ No newline at end of file
diff --git a/FreeTubeSync/Database/DataContext.cs b/FreeTubeSync/Database/DataContext.cs
index e4810d1..a4d16de 100644
--- a/FreeTubeSync/Database/DataContext.cs
+++ b/FreeTubeSync/Database/DataContext.cs
@@ -1,4 +1,4 @@
-using FreeTubeSync.Model;
+using FreeTubeSync.Model.Database;
using Microsoft.EntityFrameworkCore;
namespace FreeTubeSync.Database;
@@ -12,25 +12,8 @@ public class DataContext : DbContext
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
- modelBuilder.Entity()
- .ToTable("Settings")
- .HasKey(s => s._id);
-
- modelBuilder.Entity()
- .Property(s => s.ValueJson)
- .HasColumnName("Value")
- .IsRequired();
-
- modelBuilder.Entity()
- .ToTable("Profiles")
- .HasKey(s => s._id);
-
modelBuilder.Entity()
.Navigation(e => e.subscriptions).AutoInclude();
-
- modelBuilder.Entity()
- .ToTable("Playlists")
- .HasKey(s => s._id);
modelBuilder.Entity()
.Navigation(e => e.videos).AutoInclude();
diff --git a/FreeTubeSync/Database/MapData.cs b/FreeTubeSync/Database/MapData.cs
new file mode 100644
index 0000000..f6dc079
--- /dev/null
+++ b/FreeTubeSync/Database/MapData.cs
@@ -0,0 +1,36 @@
+using System.Collections;
+
+namespace FreeTubeSync.Database;
+
+public static class MapData
+{
+ public static void MapFrom(this object obj1, object obj2)
+ {
+ var props = new Dictionary();
+ var t1Type = obj1.GetType();
+ var t2Type = obj2.GetType();
+
+ var properties = t1Type.GetProperties();
+ foreach (var property in properties)
+ {
+ props[property.Name] = property.GetValue(obj1);
+ }
+ properties = t2Type.GetProperties();
+ foreach (var property in properties)
+ {
+ if (props[property.Name] is not IEnumerable)
+ property.SetValue(obj2, props[property.Name]);
+ }
+ }
+
+ public static void MapTo(this IEnumerable obj1, IList obj2)
+ where T1 : class where T2 : class, new()
+ {
+ foreach (var obj in obj1)
+ {
+ var newObj = new T2();
+ newObj.MapFrom(obj);
+ obj2.Add(newObj);
+ }
+ }
+}
\ No newline at end of file
diff --git a/FreeTubeSync/EndPoints/HistoryEndpoint.cs b/FreeTubeSync/EndPoints/HistoryEndpoint.cs
index d57c233..93dac26 100644
--- a/FreeTubeSync/EndPoints/HistoryEndpoint.cs
+++ b/FreeTubeSync/EndPoints/HistoryEndpoint.cs
@@ -1,4 +1,6 @@
-using FreeTubeSync.Model;
+using FreeTubeSync.Database;
+using FreeTubeSync.Model.Database;
+using FreeTubeSync.Model.Json;
namespace FreeTubeSync.EndPoints;
@@ -11,17 +13,23 @@ public static class HistoryEndpoint
group.MapGet("/", async (IRepository repository, CancellationToken ct) =>
{
var results = await repository.GetAllAsync(ct);
- return Results.Ok(results);
+ var jsonResults = new List();
+ results.MapTo(jsonResults);
+ return Results.Ok(jsonResults);
});
- group.MapPost("/", async (IRepository repository, CancellationToken ct, History history) =>
+ group.MapPost("/", async (IRepository repository, CancellationToken ct, HistoryJson historyJson) =>
{
- var results = await repository.GetByIdAsync(history._id, ct);
+ var results = await repository.GetByIdAsync(historyJson._id, ct);
if (results == null)
- await repository.AddAsync(history, ct);
+ {
+ results = new History();
+ results.MapFrom(historyJson);
+ await repository.AddAsync(results, ct);
+ }
else
{
- results.Update(history);
+ results.MapFrom(historyJson);
await repository.UpdateAsync(results, ct);
}
return Results.Ok();
diff --git a/FreeTubeSync/EndPoints/PlaylistEndpoint.cs b/FreeTubeSync/EndPoints/PlaylistEndpoint.cs
index 383d8da..293792a 100644
--- a/FreeTubeSync/EndPoints/PlaylistEndpoint.cs
+++ b/FreeTubeSync/EndPoints/PlaylistEndpoint.cs
@@ -1,4 +1,6 @@
-using FreeTubeSync.Model;
+using FreeTubeSync.Database;
+using FreeTubeSync.Model.Database;
+using FreeTubeSync.Model.Json;
namespace FreeTubeSync.EndPoints;
@@ -10,18 +12,53 @@ public static class PlaylistEndpoint
group.MapGet("/", async (IRepository repository, CancellationToken ct) =>
{
- var results = await repository.GetAllAsync(ct);
- return Results.Ok(results);
+ var results = (await repository.GetAllAsync(ct)).ToList();
+ var jsonResults = new List();
+ results.MapTo(jsonResults);
+ for (var i = 0; i < jsonResults.Count; i++)
+ results[i].videos.MapTo(jsonResults[i].videos);
+
+ return Results.Ok(jsonResults);
});
- group.MapPost("/", async (IRepository repository, CancellationToken ct, Playlist playlist) =>
+ group.MapPost("/", async (IRepository repository, IRepository