aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/Database
diff options
context:
space:
mode:
Diffstat (limited to 'code/api/Database')
-rw-r--r--code/api/Database/AppDatabase.cs36
-rw-r--r--code/api/Database/Models/File.cs13
-rw-r--r--code/api/Database/Models/Folder.cs10
-rw-r--r--code/api/Database/Models/Permission.cs11
-rw-r--r--code/api/Database/Models/PermissionGroup.cs8
-rw-r--r--code/api/Database/Models/User.cs23
-rw-r--r--code/api/Database/Models/_Base.cs34
7 files changed, 135 insertions, 0 deletions
diff --git a/code/api/Database/AppDatabase.cs b/code/api/Database/AppDatabase.cs
new file mode 100644
index 0000000..722a3e0
--- /dev/null
+++ b/code/api/Database/AppDatabase.cs
@@ -0,0 +1,36 @@
+using File = I2R.Storage.Api.Database.Models.File;
+
+namespace I2R.Storage.Api.Database;
+
+public class AppDatabase : DbContext
+{
+ public AppDatabase(DbContextOptions<AppDatabase> options) : base(options) { }
+ public DbSet<User> Users { get; set; }
+ public DbSet<File> Files { get; set; }
+ public DbSet<Folder> Folders { get; set; }
+ public DbSet<Permission> Permissions { get; set; }
+ public DbSet<PermissionGroup> PermissionGroups { get; set; }
+
+ protected override void OnModelCreating(ModelBuilder modelBuilder) {
+ modelBuilder.Entity<User>(e => { e.ToTable("users"); });
+ modelBuilder.Entity<File>(e => {
+ e.HasMany(c => c.Permissions);
+ e.HasOne(c => c.Folder);
+ e.ToTable("files");
+ });
+ modelBuilder.Entity<Folder>(e => {
+ e.HasMany(c => c.Files);
+ e.HasMany(c => c.Permissions);
+ e.ToTable("folders");
+ });
+ modelBuilder.Entity<PermissionGroup>(e => {
+ e.HasMany(c => c.Users);
+ e.ToTable("permission_groups");
+ });
+ modelBuilder.Entity<Permission>(e => {
+ e.HasOne(c => c.Group);
+ e.ToTable("permissions");
+ });
+ base.OnModelCreating(modelBuilder);
+ }
+} \ No newline at end of file
diff --git a/code/api/Database/Models/File.cs b/code/api/Database/Models/File.cs
new file mode 100644
index 0000000..b1f51a5
--- /dev/null
+++ b/code/api/Database/Models/File.cs
@@ -0,0 +1,13 @@
+namespace I2R.Storage.Api.Database.Models;
+
+public class File : Base
+{
+ public string Name { get; set; }
+ public string MimeType { get; set; }
+ public long SizeInBytes { get; set; }
+ public Folder Folder { get; set; }
+ public Guid FolderId { get; set; }
+ public bool IsEncrypted { get; set; }
+ public bool IsBinned { get; set; }
+ public List<Permission> Permissions { get; set; }
+} \ No newline at end of file
diff --git a/code/api/Database/Models/Folder.cs b/code/api/Database/Models/Folder.cs
new file mode 100644
index 0000000..ecfed1e
--- /dev/null
+++ b/code/api/Database/Models/Folder.cs
@@ -0,0 +1,10 @@
+namespace I2R.Storage.Api.Database.Models;
+
+public class Folder : Base
+{
+ public string Name { get; set; }
+ public List<File> Files { get; set; }
+ public List<Permission> Permissions { get; set; }
+ public bool IsEncrypted { get; set; }
+ public bool IsBinned { get; set; }
+} \ No newline at end of file
diff --git a/code/api/Database/Models/Permission.cs b/code/api/Database/Models/Permission.cs
new file mode 100644
index 0000000..3076d0e
--- /dev/null
+++ b/code/api/Database/Models/Permission.cs
@@ -0,0 +1,11 @@
+namespace I2R.Storage.Api.Database.Models;
+
+public class Permission : Base
+{
+ public Guid ContentId { get; set; }
+ public bool IsFile { get; set; }
+ public bool CanRead { get; set; }
+ public bool CanWrite { get; set; }
+ public Guid GroupId { get; set; }
+ public PermissionGroup Group { get; set; }
+} \ No newline at end of file
diff --git a/code/api/Database/Models/PermissionGroup.cs b/code/api/Database/Models/PermissionGroup.cs
new file mode 100644
index 0000000..712f0cb
--- /dev/null
+++ b/code/api/Database/Models/PermissionGroup.cs
@@ -0,0 +1,8 @@
+namespace I2R.Storage.Api.Database.Models;
+
+public class PermissionGroup : Base
+{
+ public string Name { get; set; }
+ public string Description { get; set; }
+ public List<User> Users { get; set; }
+} \ No newline at end of file
diff --git a/code/api/Database/Models/User.cs b/code/api/Database/Models/User.cs
new file mode 100644
index 0000000..7f7b0e9
--- /dev/null
+++ b/code/api/Database/Models/User.cs
@@ -0,0 +1,23 @@
+using System.Security.Claims;
+
+namespace I2R.Storage.Api.Database.Models;
+
+public class User : Base
+{
+ public User() { }
+
+ public User(Guid createdBy) : base(createdBy) { }
+ public string Username { get; set; }
+ public string Password { get; set; }
+ public EUserRole Role { get; set; }
+ public string FirstName { get; set; }
+ public string LastName { get; set; }
+ public DateTime? LastLoggedOn { get; set; }
+
+
+ public IEnumerable<Claim> DefaultClaims() => new List<Claim>() {
+ new(AppClaims.USER_ID, Id.ToString()),
+ new(AppClaims.USERNAME, Username),
+ new(AppClaims.USER_ROLE, UserRole.ToString(Role))
+ };
+} \ No newline at end of file
diff --git a/code/api/Database/Models/_Base.cs b/code/api/Database/Models/_Base.cs
new file mode 100644
index 0000000..2a05a3a
--- /dev/null
+++ b/code/api/Database/Models/_Base.cs
@@ -0,0 +1,34 @@
+namespace I2R.Storage.Api.Database.Models;
+
+public class Base
+{
+ public Base() {
+ Id = Guid.NewGuid();
+ CreatedAt = AppDateTime.UtcNow;
+ }
+
+ public Base(Guid createdBy) {
+ Id = Guid.NewGuid();
+ CreatedAt = AppDateTime.UtcNow;
+ CreatedBy = createdBy;
+ }
+
+ public Guid Id { get; set; }
+ public DateTime CreatedAt { get; set; }
+ public DateTime? LastModifiedAt { get; set; }
+ public DateTime? LastDeletedAt { get; set; }
+ public Guid? OwningUserId { get; set; }
+ public Guid? LastModifiedBy { get; set; }
+ public Guid? LastDeletedBy { get; set; }
+ public Guid? CreatedBy { get; set; }
+
+ public void SetDeleted(Guid performingUserId = default) {
+ LastDeletedAt = AppDateTime.UtcNow;
+ LastDeletedBy = performingUserId;
+ }
+
+ public void SetModified(Guid performingUserId = default) {
+ LastModifiedAt = AppDateTime.UtcNow;
+ LastModifiedBy = performingUserId;
+ }
+} \ No newline at end of file