diff --git a/SessionCompanion/SessionCompanion.Database/ApplicationDbContext.cs b/SessionCompanion/SessionCompanion.Database/ApplicationDbContext.cs index a081725..a02a092 100644 --- a/SessionCompanion/SessionCompanion.Database/ApplicationDbContext.cs +++ b/SessionCompanion/SessionCompanion.Database/ApplicationDbContext.cs @@ -14,10 +14,16 @@ namespace SessionCompanion.Database public virtual DbSet Backgrounds { get; set; } public virtual DbSet Biographies { get; set; } public virtual DbSet Characters { get; set; } + public virtual DbSet Charismas { get; set; } public virtual DbSet Classes { get; set; } + public virtual DbSet Constitutions { get; set; } + public virtual DbSet Dexterities { get; set; } + public virtual DbSet Intelligences { get; set; } public virtual DbSet Races { get; set; } public virtual DbSet Statistics { get; set; } + public virtual DbSet Strengths { get; set; } public virtual DbSet Users { get; set; } + public virtual DbSet Wisdoms { get; set; } public ApplicationDbContext(DbContextOptions options) : base(options) { } diff --git a/SessionCompanion/SessionCompanion.Database/Repositories/AlignmentRepository.cs b/SessionCompanion/SessionCompanion.Database/Repositories/AlignmentRepository.cs new file mode 100644 index 0000000..76d78d4 --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Repositories/AlignmentRepository.cs @@ -0,0 +1,14 @@ +using SessionCompanion.Database.Repositories.Base; +using SessionCompanion.Database.Tables; +using System; +using System.Collections.Generic; +using System.Text; + +namespace SessionCompanion.Database.Repositories +{ + public class AlignmentRepository : Repository, IRepository + { + public AlignmentRepository(ApplicationDbContext _dbContext) : base(_dbContext) + { } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Repositories/BackgroundRepository.cs b/SessionCompanion/SessionCompanion.Database/Repositories/BackgroundRepository.cs new file mode 100644 index 0000000..bbafd17 --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Repositories/BackgroundRepository.cs @@ -0,0 +1,14 @@ +using SessionCompanion.Database.Repositories.Base; +using SessionCompanion.Database.Tables; +using System; +using System.Collections.Generic; +using System.Text; + +namespace SessionCompanion.Database.Repositories +{ + public class BackgroundRepository : Repository, IRepository + { + public BackgroundRepository(ApplicationDbContext _dbContext) : base(_dbContext) + { } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Repositories/Base/IRepository.cs b/SessionCompanion/SessionCompanion.Database/Repositories/Base/IRepository.cs new file mode 100644 index 0000000..a07b5f9 --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Repositories/Base/IRepository.cs @@ -0,0 +1,24 @@ +using SessionCompanion.Database.Tables; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; + +namespace SessionCompanion.Database.Repositories.Base +{ + public interface IRepository where T : BaseEntity + { + IQueryable Get(); + IQueryable Get(Expression> expression); + Task Get(int id); + Task Create(T entity); + Task Update(T entity); + void Delete(T entity); + Task Any(Expression> expression); + Task Any(int id); + void Dispose(); + Task Save(); + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Repositories/Base/Repository.cs b/SessionCompanion/SessionCompanion.Database/Repositories/Base/Repository.cs new file mode 100644 index 0000000..8fc3536 --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Repositories/Base/Repository.cs @@ -0,0 +1,72 @@ +using Microsoft.EntityFrameworkCore; +using SessionCompanion.Database.Tables; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; + +namespace SessionCompanion.Database.Repositories.Base +{ + public class Repository : IRepository where T : BaseEntity + { + protected ApplicationDbContext RepositoryContext { get; set; } + + public Repository(ApplicationDbContext repositoryContext) + { + this.RepositoryContext = repositoryContext; + } + + public IQueryable Get() + { + return this.RepositoryContext.Set(); + } + + public IQueryable Get(Expression> expression) + { + return this.RepositoryContext.Set().Where(expression); + } + + public Task Any(Expression> expression) + { + return RepositoryContext.Set().AnyAsync(expression); + } + + public Task Any(int id) + { + return RepositoryContext.Set().AnyAsync(n => n.Id == id); + } + + + public async Task Get(int id) + { + return await RepositoryContext.Set().FindAsync(id); + } + + public virtual Task Create(T entity) + { + return Task.FromResult(RepositoryContext.Set().AddAsync(entity)); + } + + public virtual Task Update(T entity) + { + return Task.FromResult(RepositoryContext.Set().Update(entity)); + } + + public virtual void Delete(T entity) + { + this.RepositoryContext.Set().Remove(entity); + } + + public virtual async Task Save() + { + await RepositoryContext.SaveChangesAsync(); + } + + public void Dispose() + { + RepositoryContext.Dispose(); + } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Repositories/BiographyRepository.cs b/SessionCompanion/SessionCompanion.Database/Repositories/BiographyRepository.cs new file mode 100644 index 0000000..2a773f8 --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Repositories/BiographyRepository.cs @@ -0,0 +1,14 @@ +using SessionCompanion.Database.Repositories.Base; +using SessionCompanion.Database.Tables; +using System; +using System.Collections.Generic; +using System.Text; + +namespace SessionCompanion.Database.Repositories +{ + public class BiographyRepository : Repository, IRepository + { + public BiographyRepository(ApplicationDbContext _dbContext) : base(_dbContext) + { } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Repositories/CharacterRepository.cs b/SessionCompanion/SessionCompanion.Database/Repositories/CharacterRepository.cs new file mode 100644 index 0000000..7432e5d --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Repositories/CharacterRepository.cs @@ -0,0 +1,14 @@ +using SessionCompanion.Database.Repositories.Base; +using SessionCompanion.Database.Tables; +using System; +using System.Collections.Generic; +using System.Text; + +namespace SessionCompanion.Database.Repositories +{ + public class CharacterRepository : Repository, IRepository + { + public CharacterRepository(ApplicationDbContext _dbContext) : base(_dbContext) + { } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Repositories/ClassRepository.cs b/SessionCompanion/SessionCompanion.Database/Repositories/ClassRepository.cs new file mode 100644 index 0000000..b1b0954 --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Repositories/ClassRepository.cs @@ -0,0 +1,14 @@ +using SessionCompanion.Database.Repositories.Base; +using SessionCompanion.Database.Tables; +using System; +using System.Collections.Generic; +using System.Text; + +namespace SessionCompanion.Database.Repositories +{ + public class ClassRepository : Repository, IRepository + { + public ClassRepository(ApplicationDbContext _dbContext) : base(_dbContext) + { } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Repositories/RaceRepository.cs b/SessionCompanion/SessionCompanion.Database/Repositories/RaceRepository.cs new file mode 100644 index 0000000..2f9b13d --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Repositories/RaceRepository.cs @@ -0,0 +1,14 @@ +using SessionCompanion.Database.Repositories.Base; +using SessionCompanion.Database.Tables; +using System; +using System.Collections.Generic; +using System.Text; + +namespace SessionCompanion.Database.Repositories +{ + public class RaceRepository : Repository, IRepository + { + public RaceRepository(ApplicationDbContext _dbContext) : base(_dbContext) + { } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Repositories/StatisticsRepository.cs b/SessionCompanion/SessionCompanion.Database/Repositories/StatisticsRepository.cs new file mode 100644 index 0000000..6c30a4d --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Repositories/StatisticsRepository.cs @@ -0,0 +1,14 @@ +using SessionCompanion.Database.Repositories.Base; +using SessionCompanion.Database.Tables; +using System; +using System.Collections.Generic; +using System.Text; + +namespace SessionCompanion.Database.Repositories +{ + public class StatisticsRepository : Repository, IRepository + { + public StatisticsRepository(ApplicationDbContext _dbContext) : base(_dbContext) + { } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Repositories/UserRepository.cs b/SessionCompanion/SessionCompanion.Database/Repositories/UserRepository.cs new file mode 100644 index 0000000..18feac0 --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Repositories/UserRepository.cs @@ -0,0 +1,14 @@ +using SessionCompanion.Database.Repositories.Base; +using SessionCompanion.Database.Tables; +using System; +using System.Collections.Generic; +using System.Text; + +namespace SessionCompanion.Database.Repositories +{ + public class UserRepository : Repository, IRepository + { + public UserRepository(ApplicationDbContext _dbContext) : base(_dbContext) + { } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Tables/Character.cs b/SessionCompanion/SessionCompanion.Database/Tables/Character.cs index 0c2cff7..95ceed4 100644 --- a/SessionCompanion/SessionCompanion.Database/Tables/Character.cs +++ b/SessionCompanion/SessionCompanion.Database/Tables/Character.cs @@ -13,5 +13,11 @@ namespace SessionCompanion.Database.Tables public virtual User User { get; set; } public virtual Biography Biography { get; set; } public virtual Statistics Statistics { get; set; } + public virtual Charisma Charisma { get; set; } + public virtual Constitution Constitution { get; set; } + public virtual Dexterity Dexterity { get; set; } + public virtual Intelligence Intelligence { get; set; } + public virtual Strength Strength { get; set; } + public virtual Wisdom Wisdom { get; set; } } } diff --git a/SessionCompanion/SessionCompanion.Database/Tables/Charisma.cs b/SessionCompanion/SessionCompanion.Database/Tables/Charisma.cs new file mode 100644 index 0000000..142505e --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Tables/Charisma.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace SessionCompanion.Database.Tables +{ + public class Charisma : BaseEntity + { + [ForeignKey(nameof(Character))] + public int CharacterId { get; set; } + public virtual Character Character { get; set; } + + public int Value { get; set; } + public int Modification { get; set; } + public int SavingThrows { get; set; } + public bool CanSaveThrows { get; set; } + public int Deception { get; set; } + public bool CanDeception { get; set; } + public int Intimidation { get; set; } + public bool CanIntimidation { get; set; } + public int Performance { get; set; } + public bool CanPerformance { get; set; } + public int Persuasion { get; set; } + public bool CanPersuasion { get; set; } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Tables/Constitution.cs b/SessionCompanion/SessionCompanion.Database/Tables/Constitution.cs new file mode 100644 index 0000000..b204712 --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Tables/Constitution.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace SessionCompanion.Database.Tables +{ + public class Constitution : BaseEntity + { + [ForeignKey(nameof(Character))] + public int CharacterId { get; set; } + public virtual Character Character { get; set; } + + public int Value { get; set; } + public int Modification { get; set; } + public int SavingThrows { get; set; } + public bool CanSaveThrows { get; set; } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Tables/Dexterity.cs b/SessionCompanion/SessionCompanion.Database/Tables/Dexterity.cs new file mode 100644 index 0000000..7be93cc --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Tables/Dexterity.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace SessionCompanion.Database.Tables +{ + public class Dexterity : BaseEntity + { + [ForeignKey(nameof(Character))] + public int CharacterId { get; set; } + public virtual Character Character { get; set; } + + public int Value { get; set; } + public int Modification { get; set; } + public int SavingThrows { get; set; } + public bool CanSaveThrows { get; set; } + public int Acrobatics { get; set; } + public bool CanAcrobatics { get; set; } + public int SleightOfHand { get; set; } + public bool CanSleightOfHand { get; set; } + public int Stealth { get; set; } + public bool CanStealth { get; set; } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Tables/Intelligence.cs b/SessionCompanion/SessionCompanion.Database/Tables/Intelligence.cs new file mode 100644 index 0000000..6a1297b --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Tables/Intelligence.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace SessionCompanion.Database.Tables +{ + public class Intelligence : BaseEntity + { + [ForeignKey(nameof(Character))] + public int CharacterId { get; set; } + public virtual Character Character { get; set; } + + public int Value { get; set; } + public int Modification { get; set; } + public int SavingThrows { get; set; } + public bool CanSaveThrows { get; set; } + public int Arcana { get; set; } + public bool CanArcana { get; set; } + public int History { get; set; } + public bool CanHistory { get; set; } + public int Investigation { get; set; } + public bool CanInvestigation { get; set; } + public int Nature { get; set; } + public bool CanNature { get; set; } + public int Religion { get; set; } + public bool CanReligion { get; set; } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Tables/Strength.cs b/SessionCompanion/SessionCompanion.Database/Tables/Strength.cs new file mode 100644 index 0000000..c7cd316 --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Tables/Strength.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace SessionCompanion.Database.Tables +{ + public class Strength : BaseEntity + { + [ForeignKey(nameof(Character))] + public int CharacterId { get; set; } + public virtual Character Character { get; set; } + + public int Value { get; set; } + public int Modification { get; set; } + public int SavingThrows { get; set; } + public bool CanSaveThrows { get; set; } + public int Athletics { get; set; } + public bool CanAthletics { get; set; } + } +} diff --git a/SessionCompanion/SessionCompanion.Database/Tables/Wisdom.cs b/SessionCompanion/SessionCompanion.Database/Tables/Wisdom.cs new file mode 100644 index 0000000..f5b9cc6 --- /dev/null +++ b/SessionCompanion/SessionCompanion.Database/Tables/Wisdom.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace SessionCompanion.Database.Tables +{ + public class Wisdom : BaseEntity + { + [ForeignKey(nameof(Character))] + public int CharacterId { get; set; } + public virtual Character Character { get; set; } + + public int Value { get; set; } + public int Modification { get; set; } + public int SavingThrows { get; set; } + public bool CanSaveThrows { get; set; } + public int AnimalHandling { get; set; } + public bool CanAnimalHandling { get; set; } + public int Insight { get; set; } + public bool CanInsight { get; set; } + public int Medicine { get; set; } + public bool CanMedicine { get; set; } + public int Perception { get; set; } + public bool CanPerception { get; set; } + public int Survival { get; set; } + public bool CanSurvival { get; set; } + } +} diff --git a/SessionCompanion/SessionCompanion/Configurations/RepositoryConfiguration.cs b/SessionCompanion/SessionCompanion/Configurations/RepositoryConfiguration.cs new file mode 100644 index 0000000..8db8860 --- /dev/null +++ b/SessionCompanion/SessionCompanion/Configurations/RepositoryConfiguration.cs @@ -0,0 +1,28 @@ +using Microsoft.Extensions.DependencyInjection; +using SessionCompanion.Database.Repositories; +using SessionCompanion.Database.Repositories.Base; +using SessionCompanion.Database.Tables; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace SessionCompanion.Configurations +{ + public static class RepositoryConfiguration + { + public static IServiceCollection AddRepositories(this IServiceCollection services) + { + services.AddScoped, AlignmentRepository>(); + services.AddScoped, BackgroundRepository>(); + services.AddScoped, BiographyRepository>(); + services.AddScoped, CharacterRepository>(); + services.AddScoped, ClassRepository>(); + services.AddScoped, RaceRepository>(); + services.AddScoped, StatisticsRepository>(); + services.AddScoped, UserRepository>(); + + return services; + } + } +} diff --git a/SessionCompanion/SessionCompanion/Startup.cs b/SessionCompanion/SessionCompanion/Startup.cs index 4ff668f..ac583c8 100644 --- a/SessionCompanion/SessionCompanion/Startup.cs +++ b/SessionCompanion/SessionCompanion/Startup.cs @@ -6,6 +6,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using SessionCompanion.Configurations; using SessionCompanion.Database; namespace SessionCompanion @@ -27,6 +28,8 @@ namespace SessionCompanion services.AddDbContext(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); + services.AddRepositories(); + // In production, the Angular files will be served from this directory services.AddSpaStaticFiles(configuration => {