Skip to content

Commit 1300834

Browse files
authored
Merge pull request #83 from soft-eng-practicum/postgre-versioning
implemented notebook saving and versioning.
2 parents 7e82782 + 835342d commit 1300834

24 files changed

+2252
-144
lines changed

src/Analysim.Core/Entities/Notebook.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.ComponentModel.DataAnnotations;
44
using System.ComponentModel.DataAnnotations.Schema;
5+
using Analysim.Core.Entities;
56
using Core.Entities;
67

78
namespace Core.Entities
@@ -49,6 +50,11 @@ public ICollection<ObservableNotebookDataset> observableNotebookDatasets
4950
get;set;
5051
}
5152

53+
public ICollection<NotebookContent> NotebookContents
54+
{
55+
get;set;
56+
}
57+
5258

5359

5460
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using Core.Entities;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.ComponentModel.DataAnnotations.Schema;
5+
using System.ComponentModel.DataAnnotations;
6+
using System.Linq;
7+
using System.Text;
8+
using System.Threading.Tasks;
9+
10+
namespace Analysim.Core.Entities
11+
{
12+
public class NotebookContent
13+
{
14+
[Key, Column(Order = 1)]
15+
[ForeignKey("Notebook")]
16+
public int NotebookID { get; set; }
17+
public Notebook Notebook { get; set; }
18+
19+
[Key, Column(Order = 2)]
20+
public int Version { get; set; }
21+
22+
[Required(ErrorMessage = "Notebook Content is a required field.")]
23+
public byte[] Content { get; set; }
24+
25+
[Required(ErrorMessage = "Notebook Author is a required field.")]
26+
public string Author { get; set; }
27+
28+
[Required(ErrorMessage = "Notebook Size is a required field.")]
29+
public int Size { get; set; }
30+
31+
[Required(ErrorMessage = "Notebook Date is a required field.")]
32+
public DateTimeOffset DateCreated { get; set; }
33+
}
34+
}

src/Analysim.Infrastructure/Data/ApplicationDbContext.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
33
using Microsoft.EntityFrameworkCore;
44
using Core.Entities;
5+
using Analysim.Core.Entities;
56

67
namespace Infrastructure.Data
78
{
@@ -21,6 +22,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
2122
modelBuilder.Entity<ProjectUser>().HasKey(pu => new { pu.UserID, pu.ProjectID });
2223
modelBuilder.Entity<ProjectTag>().HasKey(pt => new { pt.ProjectID, pt.TagID });
2324
modelBuilder.Entity<UserUser>().HasKey(uu => new { uu.UserID, uu.FollowerID });
25+
modelBuilder.Entity<NotebookContent>().HasKey(nc => new { nc.NotebookID, nc.Version });
2426

2527
// Many To Many Relationship (ProjectUser -> User)
2628
modelBuilder.Entity<ProjectUser>()
@@ -77,12 +79,20 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
7779
.WithOne(p => p.Project)
7880
.HasForeignKey(p => p.ProjectID);
7981

82+
// One To Many Relationship (Notebook -> NotebookContent)
83+
modelBuilder.Entity<Notebook>()
84+
.HasMany(n => n.NotebookContents)
85+
.WithOne(n => n.Notebook)
86+
.HasForeignKey(n => n.NotebookID)
87+
.OnDelete(DeleteBehavior.Cascade);
88+
8089
modelBuilder.Entity<IdentityRole<int>>().HasData(
8190
new IdentityRole<int> { Id = 1, Name = "Admin", NormalizedName = "ADMIN"},
8291
new IdentityRole<int> { Id = 2, Name = "Customer", NormalizedName = "CUSTOMER" },
8392
new IdentityRole<int> { Id = 3, Name = "Moderator", NormalizedName = "MODERATOR" }
8493
);
8594

95+
// Many To One Relationship ( ObservableNotebookDataset -> Notebook)
8696
modelBuilder.Entity<ObservableNotebookDataset>()
8797
.HasOne(d=>d.notebook)
8898
.WithMany(n=>n.observableNotebookDatasets)
@@ -100,6 +110,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
100110

101111
public DbSet<Notebook> Notebook {get;set;}
102112
public DbSet<ObservableNotebookDataset> ObservableNotebookDataset { get;set;}
113+
public DbSet<NotebookContent> NotebookContent { get; set; }
103114

104115

105116

src/Analysim.Infrastructure/Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,35 @@ protected override void BuildModel(ModelBuilder modelBuilder)
2222

2323
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
2424

25+
modelBuilder.Entity("Analysim.Core.Entities.NotebookContent", b =>
26+
{
27+
b.Property<int>("NotebookID")
28+
.HasColumnType("integer")
29+
.HasColumnOrder(1);
30+
31+
b.Property<int>("Version")
32+
.HasColumnType("integer")
33+
.HasColumnOrder(2);
34+
35+
b.Property<string>("Author")
36+
.IsRequired()
37+
.HasColumnType("text");
38+
39+
b.Property<byte[]>("Content")
40+
.IsRequired()
41+
.HasColumnType("bytea");
42+
43+
b.Property<DateTimeOffset>("DateCreated")
44+
.HasColumnType("timestamp with time zone");
45+
46+
b.Property<int>("Size")
47+
.HasColumnType("integer");
48+
49+
b.HasKey("NotebookID", "Version");
50+
51+
b.ToTable("NotebookContent");
52+
});
53+
2554
modelBuilder.Entity("Core.Entities.BlobFile", b =>
2655
{
2756
b.Property<int>("BlobFileID")
@@ -375,21 +404,21 @@ protected override void BuildModel(ModelBuilder modelBuilder)
375404
new
376405
{
377406
Id = 1,
378-
ConcurrencyStamp = "54f675a4-9023-4eae-b3cb-5465a1fd9ad1",
407+
ConcurrencyStamp = "93ca655e-a94a-403a-a5e7-cf1db3905ccd",
379408
Name = "Admin",
380409
NormalizedName = "ADMIN"
381410
},
382411
new
383412
{
384413
Id = 2,
385-
ConcurrencyStamp = "546de497-8f57-423b-bc75-704996fad40a",
414+
ConcurrencyStamp = "0a6522d2-c24e-4969-8491-a2b3475b8678",
386415
Name = "Customer",
387416
NormalizedName = "CUSTOMER"
388417
},
389418
new
390419
{
391420
Id = 3,
392-
ConcurrencyStamp = "1b82e1d9-15ec-410f-9f54-fe0661fe72cb",
421+
ConcurrencyStamp = "2a2b0fb9-7f18-4cbc-9fcb-bb72c436400b",
393422
Name = "Moderator",
394423
NormalizedName = "MODERATOR"
395424
});
@@ -498,6 +527,17 @@ protected override void BuildModel(ModelBuilder modelBuilder)
498527
b.ToTable("AspNetUserTokens", (string)null);
499528
});
500529

530+
modelBuilder.Entity("Analysim.Core.Entities.NotebookContent", b =>
531+
{
532+
b.HasOne("Core.Entities.Notebook", "Notebook")
533+
.WithMany("NotebookContents")
534+
.HasForeignKey("NotebookID")
535+
.OnDelete(DeleteBehavior.Cascade)
536+
.IsRequired();
537+
538+
b.Navigation("Notebook");
539+
});
540+
501541
modelBuilder.Entity("Core.Entities.BlobFile", b =>
502542
{
503543
b.HasOne("Core.Entities.Project", "Project")
@@ -645,6 +685,8 @@ protected override void BuildModel(ModelBuilder modelBuilder)
645685

646686
modelBuilder.Entity("Core.Entities.Notebook", b =>
647687
{
688+
b.Navigation("NotebookContents");
689+
648690
b.Navigation("observableNotebookDatasets");
649691
});
650692

0 commit comments

Comments
 (0)