aboutsummaryrefslogtreecommitdiff
path: root/src/Data/DevHive.Data/DevHiveContext.cs
diff options
context:
space:
mode:
authorKamen Mladenov <kamen.d.mladenov@protonmail.com>2021-04-09 19:51:35 +0300
committerGitHub <noreply@github.com>2021-04-09 19:51:35 +0300
commit233f38915ba0079079233eff55434ef349c05c45 (patch)
tree6c5f69017865bcab87355e910c87339453da1406 /src/Data/DevHive.Data/DevHiveContext.cs
parentf4a70c6430db923af9fa9958a11c2d6612cb52cc (diff)
parenta992357efcf1bc1ece81b95ecee5e05a0b73bfdc (diff)
downloadDevHive-main.tar
DevHive-main.tar.gz
DevHive-main.zip
Merge pull request #28 from Team-Kaleidoscope/devHEADv0.2mainheroku/main
Second stage: Complete
Diffstat (limited to 'src/Data/DevHive.Data/DevHiveContext.cs')
-rw-r--r--src/Data/DevHive.Data/DevHiveContext.cs103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/Data/DevHive.Data/DevHiveContext.cs b/src/Data/DevHive.Data/DevHiveContext.cs
new file mode 100644
index 0000000..0606864
--- /dev/null
+++ b/src/Data/DevHive.Data/DevHiveContext.cs
@@ -0,0 +1,103 @@
+using System;
+using DevHive.Data.Models;
+using DevHive.Data.Models.Relational;
+using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
+
+namespace DevHive.Data
+{
+ public class DevHiveContext : IdentityDbContext<User, Role, Guid>
+ {
+ public DevHiveContext(DbContextOptions<DevHiveContext> options)
+ : base(options) { }
+
+ public DbSet<Technology> Technologies { get; set; }
+ public DbSet<Language> Languages { get; set; }
+ public DbSet<Post> Posts { get; set; }
+ public DbSet<PostAttachments> PostAttachments { get; set; }
+ public DbSet<Comment> Comments { get; set; }
+ public DbSet<Rating> Rating { get; set; }
+ public DbSet<ProfilePicture> ProfilePicture { get; set; }
+
+ protected override void OnModelCreating(ModelBuilder builder)
+ {
+ /* User */
+ builder.Entity<User>()
+ .HasIndex(x => x.UserName)
+ .IsUnique();
+
+ /* Roles */
+ builder.Entity<User>()
+ .HasMany(x => x.Roles)
+ .WithMany(x => x.Users);
+
+ /* Languages */
+ builder.Entity<User>()
+ .HasMany(x => x.Languages)
+ .WithMany(x => x.Users)
+ .UsingEntity(x => x.ToTable("LanguageUser"));
+
+ builder.Entity<Language>()
+ .HasMany(x => x.Users)
+ .WithMany(x => x.Languages)
+ .UsingEntity(x => x.ToTable("LanguageUser"));
+
+ /* Technologies */
+ builder.Entity<User>()
+ .HasMany(x => x.Technologies)
+ .WithMany(x => x.Users)
+ .UsingEntity(x => x.ToTable("TechnologyUser"));
+
+ builder.Entity<Technology>()
+ .HasMany(x => x.Users)
+ .WithMany(x => x.Technologies)
+ .UsingEntity(x => x.ToTable("TechnologyUser"));
+
+ /* Post */
+ builder.Entity<Post>()
+ .HasOne(x => x.Creator)
+ .WithMany(x => x.Posts);
+
+ builder.Entity<Post>()
+ .HasMany(x => x.Comments)
+ .WithOne(x => x.Post);
+
+ /* Post attachments */
+ builder.Entity<PostAttachments>()
+ .HasOne(x => x.Post)
+ .WithMany(x => x.Attachments);
+
+ /* Comment */
+ builder.Entity<Comment>()
+ .HasOne(x => x.Post)
+ .WithMany(x => x.Comments);
+
+ builder.Entity<Comment>()
+ .HasOne(x => x.Creator)
+ .WithMany(x => x.Comments);
+
+ /* Rating */
+ builder.Entity<Rating>()
+ .HasKey(x => x.Id);
+
+ builder.Entity<Rating>()
+ .HasOne(x => x.Post)
+ .WithMany(x => x.Ratings);
+
+ builder.Entity<Post>()
+ .HasMany(x => x.Ratings)
+ .WithOne(x => x.Post);
+
+ /* Profile Picture */
+ builder.Entity<ProfilePicture>()
+ .HasKey(x => x.Id);
+
+ builder.Entity<User>()
+ .HasOne(x => x.ProfilePicture)
+ .WithOne(x => x.User)
+ .HasForeignKey<ProfilePicture>(x => x.UserId);
+
+ base.OnModelCreating(builder);
+ }
+ }
+}