diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2022-12-21 23:37:23 +0100 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2022-12-21 23:37:23 +0100 |
| commit | 82ade3c31fb17b662feec59e9e654ceb66edbb7a (patch) | |
| tree | 26443c41c55d2cd2ae46fdd0d663aca84b779ffe /code/api/Database | |
| parent | e60703aadca7d423c0fbfb189d5ef439fc1df072 (diff) | |
| download | storage-82ade3c31fb17b662feec59e9e654ceb66edbb7a.tar.xz storage-82ade3c31fb17b662feec59e9e654ceb66edbb7a.zip | |
feat: Add initial schema and start login
Diffstat (limited to 'code/api/Database')
| -rw-r--r-- | code/api/Database/AppDatabase.cs | 36 | ||||
| -rw-r--r-- | code/api/Database/Models/File.cs | 13 | ||||
| -rw-r--r-- | code/api/Database/Models/Folder.cs | 10 | ||||
| -rw-r--r-- | code/api/Database/Models/Permission.cs | 11 | ||||
| -rw-r--r-- | code/api/Database/Models/PermissionGroup.cs | 8 | ||||
| -rw-r--r-- | code/api/Database/Models/User.cs | 23 | ||||
| -rw-r--r-- | code/api/Database/Models/_Base.cs | 34 |
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 |
