diff --git a/TaleEngine/.dockerignore b/TaleEngine/.dockerignore
new file mode 100644
index 0000000..3729ff0
--- /dev/null
+++ b/TaleEngine/.dockerignore
@@ -0,0 +1,25 @@
+**/.classpath
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
+**/.vscode
+**/*.*proj.user
+**/*.dbmdl
+**/*.jfm
+**/azds.yaml
+**/bin
+**/charts
+**/docker-compose*
+**/Dockerfile*
+**/node_modules
+**/npm-debug.log
+**/obj
+**/secrets.dev.yaml
+**/values.dev.yaml
+LICENSE
+README.md
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Application.Testing/TaleEngine.Application.Testing.csproj b/TaleEngine/TaleEngine.Application.Testing/TaleEngine.Application.Testing.csproj
index b7e0290..386612d 100644
--- a/TaleEngine/TaleEngine.Application.Testing/TaleEngine.Application.Testing.csproj
+++ b/TaleEngine/TaleEngine.Application.Testing/TaleEngine.Application.Testing.csproj
@@ -12,7 +12,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/TaleEngine/TaleEngine.Application/Mappers/ActivityMapper.cs b/TaleEngine/TaleEngine.Application/Mappers/ActivityMapper.cs
index 52b0ad2..2c158ea 100644
--- a/TaleEngine/TaleEngine.Application/Mappers/ActivityMapper.cs
+++ b/TaleEngine/TaleEngine.Application/Mappers/ActivityMapper.cs
@@ -1,80 +1,79 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
-using TaleEngine.Application.Contracts.Dtos;
-using TaleEngine.Bussiness.Contracts.Models;
-
-namespace TaleEngine.Application.Mappers
-{
- public static class ActivityMapper
- {
- public static ActivityDto Map(ActivityModel activityModel)
- {
- if (activityModel == null) return null;
-
- return new ActivityDto
- {
- Id = activityModel.Id,
- Title = activityModel.Title,
- Description = activityModel.Description,
- Places = activityModel.Places,
- ActivityEnd = activityModel.EndDateTime.ToString(),
- ActivityStart = activityModel.StartDateTime.ToString(),
- StatusId = activityModel.StatusId,
- TypeId = activityModel.TypeId,
- Image = activityModel.Image,
- TimeSlotId = activityModel.TimeSlotId ?? 0
- };
- }
-
- public static List Map(List activityModels)
- {
- if (activityModels == null || activityModels.Count == 0) return null;
-
- return activityModels.Select(Map).ToList();
- }
-
-
- public static ActivityModel Map(ActivityDto activityDto)
- {
- if (activityDto == null) return null;
-
- return new ActivityModel
- {
- Id = activityDto.Id,
- Title = activityDto.Title,
- Description = activityDto.Description,
- Places = activityDto.Places,
- Image = activityDto.Image,
- TypeId = activityDto.TypeId,
- StatusId = activityDto.StatusId,
- EndDateTime = ParseTime(activityDto.ActivityEnd),
- StartDateTime = ParseTime(activityDto.ActivityStart),
- TimeSlotId = activityDto.TimeSlotId
- };
- }
-
- public static List Map(List activityDtos)
- {
- if (activityDtos == null || activityDtos.Count == 0) return null;
-
- return activityDtos.Select(Map).ToList();
- }
-
- private static DateTime? ParseTime(string date)
- {
- DateTime? result;
-
- try
- {
- result = DateTime.Parse(date);
- }
- catch (Exception e)
- {
- result = null;
- }
-
- return result;
- }
- }
-}
+using TaleEngine.Application.Contracts.Dtos;
+using TaleEngine.Bussiness.Contracts.Models;
+
+namespace TaleEngine.Application.Mappers
+{
+ public static class ActivityMapper
+ {
+ public static ActivityDto Map(ActivityModel activityModel)
+ {
+ if (activityModel == null) return null;
+
+ return new ActivityDto
+ {
+ Id = activityModel.Id,
+ Title = activityModel.Title,
+ Description = activityModel.Description,
+ Places = activityModel.Places,
+ ActivityEnd = activityModel.EndDateTime.ToString(),
+ ActivityStart = activityModel.StartDateTime.ToString(),
+ StatusId = activityModel.StatusId,
+ TypeId = activityModel.TypeId,
+ Image = activityModel.Image,
+ TimeSlotId = activityModel.TimeSlotId ?? 0
+ };
+ }
+
+ public static List Map(List activityModels)
+ {
+ if (activityModels == null || activityModels.Count == 0) return null;
+
+ return activityModels.Select(Map).ToList();
+ }
+
+ public static ActivityModel Map(ActivityDto activityDto)
+ {
+ if (activityDto == null) return null;
+
+ return new ActivityModel
+ {
+ Id = activityDto.Id,
+ Title = activityDto.Title,
+ Description = activityDto.Description,
+ Places = activityDto.Places,
+ Image = activityDto.Image,
+ TypeId = activityDto.TypeId,
+ StatusId = activityDto.StatusId,
+ EndDateTime = ParseTime(activityDto.ActivityEnd),
+ StartDateTime = ParseTime(activityDto.ActivityStart),
+ TimeSlotId = activityDto.TimeSlotId
+ };
+ }
+
+ public static List Map(List activityDtos)
+ {
+ if (activityDtos == null || activityDtos.Count == 0) return null;
+
+ return activityDtos.Select(Map).ToList();
+ }
+
+ private static DateTime? ParseTime(string date)
+ {
+ DateTime? result;
+
+ try
+ {
+ result = DateTime.Parse(date);
+ }
+ catch (Exception)
+ {
+ result = null;
+ }
+
+ return result;
+ }
+ }
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Application/Services/ActivityStatusService.cs b/TaleEngine/TaleEngine.Application/Services/ActivityStatusService.cs
index 7684330..4515a87 100644
--- a/TaleEngine/TaleEngine.Application/Services/ActivityStatusService.cs
+++ b/TaleEngine/TaleEngine.Application/Services/ActivityStatusService.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
using TaleEngine.Application.Mappers;
@@ -12,7 +13,7 @@ public class ActivityStatusService : IActivityStatusService
public ActivityStatusService(IActivityStatusDomainService activityStatusDomainService)
{
- _activityStatusDomainService = activityStatusDomainService;
+ _activityStatusDomainService = activityStatusDomainService ?? throw new ArgumentNullException(nameof(activityStatusDomainService));
}
public List GetActivityStatuses()
@@ -24,4 +25,4 @@ public List GetActivityStatuses()
return result;
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Application/Services/EventService.cs b/TaleEngine/TaleEngine.Application/Services/EventService.cs
index c60b40c..9d5e012 100644
--- a/TaleEngine/TaleEngine.Application/Services/EventService.cs
+++ b/TaleEngine/TaleEngine.Application/Services/EventService.cs
@@ -3,7 +3,6 @@
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
using TaleEngine.Application.Mappers;
-using TaleEngine.Bussiness.Contracts;
using TaleEngine.Bussiness.Contracts.DomainServices;
namespace TaleEngine.Application.Services
diff --git a/TaleEngine/TaleEngine.Business.Testing/Services/ActivityDomainServiceTests.cs b/TaleEngine/TaleEngine.Business.Testing/Services/ActivityDomainServiceTests.cs
index c4796b1..8d9dc99 100644
--- a/TaleEngine/TaleEngine.Business.Testing/Services/ActivityDomainServiceTests.cs
+++ b/TaleEngine/TaleEngine.Business.Testing/Services/ActivityDomainServiceTests.cs
@@ -3,7 +3,6 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using TaleEngine.Bussiness.DomainServices;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
using TaleEngine.Data.Contracts.Repositories;
using TaleEngine.Fakes.Entities;
@@ -14,17 +13,29 @@ namespace TaleEngine.Business.Testing.Services
[ExcludeFromCodeCoverage]
public class ActivityDomainServiceTests
{
- private Mock uowMock;
- private Mock activityRepoMock;
- private Mock activityStatusRepoMock;
- private Mock editionRepoMock;
+ private readonly Mock _activityRepositoryMock;
+ private readonly Mock _activityStatusRepositoryMock;
+ private readonly Mock _editionRepositoryMock;
+ private readonly Mock _activityTypeRepositoryMock;
+ private readonly Mock _timeSlotRepositoryMock;
public ActivityDomainServiceTests()
{
- uowMock = new Mock();
- activityRepoMock = new Mock();
- activityStatusRepoMock = new Mock();
- editionRepoMock = new Mock();
+ _activityRepositoryMock = new Mock();
+ _activityStatusRepositoryMock = new Mock();
+ _activityTypeRepositoryMock = new Mock();
+ _editionRepositoryMock = new Mock();
+ _timeSlotRepositoryMock = new Mock();
+ }
+
+ private ActivityDomainService CreateActivityDomainService()
+ {
+ return new ActivityDomainService(
+ _activityRepositoryMock.Object,
+ _activityStatusRepositoryMock.Object,
+ _activityTypeRepositoryMock.Object,
+ _editionRepositoryMock.Object,
+ _timeSlotRepositoryMock.Object);
}
[Fact]
@@ -36,15 +47,12 @@ public void GetActiveActivities_Success()
List list = ActivityBuilder.BuildActivityList();
var status = ActivityBuilder.BuildActivityStatus();
- activityRepoMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
.Returns(list);
- uowMock.Setup(x => x.ActivityRepository)
- .Returns(activityRepoMock.Object);
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetActiveActivities(editionId);
@@ -63,15 +71,12 @@ public void GetActiveActivities_IdIsZero_ShouldReturnNull()
List list = null;
var status = ActivityBuilder.BuildActivityStatus();
- activityRepoMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
.Returns(list);
- uowMock.Setup(x => x.ActivityRepository)
- .Returns(activityRepoMock.Object);
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetActiveActivities(editionId);
@@ -89,15 +94,12 @@ public void GetActiveActivities_StatusNotExist_ShouldReturnNull()
List list = null;
ActivityStatus status = null;
- activityRepoMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
.Returns(list);
- uowMock.Setup(x => x.ActivityRepository)
- .Returns(activityRepoMock.Object);
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetActiveActivities(editionId);
@@ -106,7 +108,6 @@ public void GetActiveActivities_StatusNotExist_ShouldReturnNull()
result.Should().BeNull();
}
-
[Fact]
public void GetPendingActivities_Success()
{
@@ -116,15 +117,12 @@ public void GetPendingActivities_Success()
List list = ActivityBuilder.BuildActivityList();
var status = ActivityBuilder.BuildActivityStatus();
- activityRepoMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
.Returns(list);
- uowMock.Setup(x => x.ActivityRepository)
- .Returns(activityRepoMock.Object);
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetPendingActivities(editionId);
@@ -143,15 +141,12 @@ public void GetPendingActivities_IdIsZero_ShouldReturnNull()
List list = null;
var status = ActivityBuilder.BuildActivityStatus();
- activityRepoMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
.Returns(list);
- uowMock.Setup(x => x.ActivityRepository)
- .Returns(activityRepoMock.Object);
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetPendingActivities(editionId);
@@ -169,15 +164,12 @@ public void GetPendingActivities_StatusNotExist_ShouldReturnNull()
List list = null;
ActivityStatus status = null;
- activityRepoMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
.Returns(list);
- uowMock.Setup(x => x.ActivityRepository)
- .Returns(activityRepoMock.Object);
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetPendingActivities(editionId);
@@ -200,25 +192,20 @@ public void GetFilteredActiveActivities_Success()
var status = ActivityBuilder.BuildActivityStatus();
var edition = EditionBuilder.BuildEdition();
- activityRepoMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
.Returns(list);
- activityRepoMock.Setup(x => x.GetTotalActivities(It.IsAny(), It.IsAny(),
+ _activityRepositoryMock.Setup(x => x.GetTotalActivities(It.IsAny(), It.IsAny(),
It.IsAny(), It.IsAny()))
.Returns(totalActivities);
- activityRepoMock.Setup(x => x.GetActiveActivitiesFiltered(It.IsAny(), It.IsAny(),
+ _activityRepositoryMock.Setup(x => x.GetActiveActivitiesFiltered(It.IsAny(), It.IsAny(),
It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()))
.Returns(list);
- uowMock.Setup(x => x.ActivityRepository)
- .Returns(activityRepoMock.Object);
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- editionRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _editionRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(edition);
- uowMock.Setup(x => x.EditionRepository)
- .Returns(editionRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetActiveActivitiesFiltered(typeId, edition.Id, title, currentPage);
@@ -240,15 +227,12 @@ public void GetFilteredActiveActivities_EditionNotExist_ShouldReturnNull()
var status = ActivityBuilder.BuildActivityStatus();
Edition edition = null;
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- editionRepoMock.Setup(x => x.GetById(editionId))
+ _editionRepositoryMock.Setup(x => x.GetById(editionId))
.Returns(edition);
- uowMock.Setup(x => x.EditionRepository)
- .Returns(editionRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetActiveActivitiesFiltered(typeId, editionId, title, currentPage);
@@ -270,15 +254,12 @@ public void GetFilteredActiveActivities_StatusNotExist_ShouldReturnNull()
ActivityStatus status = null;
Edition edition = EditionBuilder.BuildEdition();
- activityStatusRepoMock.Setup(x => x.GetById(statusId))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(statusId))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- editionRepoMock.Setup(x => x.GetById(editionId))
+ _editionRepositoryMock.Setup(x => x.GetById(editionId))
.Returns(edition);
- uowMock.Setup(x => x.EditionRepository)
- .Returns(editionRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetActiveActivitiesFiltered(typeId, editionId, title, currentPage);
@@ -295,20 +276,14 @@ public void GetLastThreeActivities_Success()
ActivityStatus status = ActivityBuilder.BuildActivityStatus();
Edition edition = EditionBuilder.BuildEdition();
- activityRepoMock.Setup(x => x.GetLastThreeActivities(It.IsAny(), It.IsAny(),
- It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetLastThreeActivities(It.IsAny(), It.IsAny(), It.IsAny()))
.Returns(list);
- uowMock.Setup(x => x.ActivityRepository)
- .Returns(activityRepoMock.Object);
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- editionRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _editionRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(edition);
- uowMock.Setup(x => x.EditionRepository)
- .Returns(editionRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetLastThreeActivities(edition.Id);
@@ -327,20 +302,14 @@ public void GetLastThreeActivities_EditionNotExist_ShouldReturnNull()
ActivityStatus status = ActivityBuilder.BuildActivityStatus();
Edition edition = null;
- activityRepoMock.Setup(x => x.GetLastThreeActivities(It.IsAny(), It.IsAny(),
- It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetLastThreeActivities(It.IsAny(), It.IsAny(), It.IsAny()))
.Returns(list);
- uowMock.Setup(x => x.ActivityRepository)
- .Returns(activityRepoMock.Object);
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- editionRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _editionRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(edition);
- uowMock.Setup(x => x.EditionRepository)
- .Returns(editionRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetLastThreeActivities(editionId);
@@ -357,20 +326,14 @@ public void GetLastThreeActivities_StatusNotExist_ShouldReturnNull()
ActivityStatus status = null;
Edition edition = EditionBuilder.BuildEdition();
- activityRepoMock.Setup(x => x.GetLastThreeActivities(It.IsAny(), It.IsAny(),
- It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetLastThreeActivities(It.IsAny(), It.IsAny(), It.IsAny()))
.Returns(list);
- uowMock.Setup(x => x.ActivityRepository)
- .Returns(activityRepoMock.Object);
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- editionRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _editionRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(edition);
- uowMock.Setup(x => x.EditionRepository)
- .Returns(editionRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetLastThreeActivities(edition.Id);
@@ -387,20 +350,14 @@ public void GetLastThreeActivities_NoActivities_ShouldReturnNull()
ActivityStatus status = ActivityBuilder.BuildActivityStatus();
Edition edition = EditionBuilder.BuildEdition();
- activityRepoMock.Setup(x => x.GetLastThreeActivities(It.IsAny(), It.IsAny(),
- It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetLastThreeActivities(It.IsAny(), It.IsAny(), It.IsAny()))
.Returns(list);
- uowMock.Setup(x => x.ActivityRepository)
- .Returns(activityRepoMock.Object);
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- editionRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _editionRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(edition);
- uowMock.Setup(x => x.EditionRepository)
- .Returns(editionRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetLastThreeActivities(edition.Id);
@@ -417,22 +374,16 @@ public void GetLastThreeActivities_ActivitiesEmpty_ShouldReturnNull()
ActivityStatus status = ActivityBuilder.BuildActivityStatus();
Edition edition = EditionBuilder.BuildEdition();
- activityRepoMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetActivitiesByStatus(It.IsAny(), It.IsAny()))
.Returns(list);
- activityRepoMock.Setup(x => x.GetLastThreeActivities(It.IsAny(), It.IsAny(),
- It.IsAny()))
+ _activityRepositoryMock.Setup(x => x.GetLastThreeActivities(It.IsAny(), It.IsAny(), It.IsAny()))
.Returns(list);
- uowMock.Setup(x => x.ActivityRepository)
- .Returns(activityRepoMock.Object);
- activityStatusRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _activityStatusRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(status);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- editionRepoMock.Setup(x => x.GetById(It.IsAny()))
+ _editionRepositoryMock.Setup(x => x.GetById(It.IsAny()))
.Returns(edition);
- uowMock.Setup(x => x.EditionRepository)
- .Returns(editionRepoMock.Object);
- var target = new ActivityDomainService(uowMock.Object);
+
+ var target = CreateActivityDomainService();
// Act
var result = target.GetLastThreeActivities(edition.Id);
@@ -440,6 +391,5 @@ public void GetLastThreeActivities_ActivitiesEmpty_ShouldReturnNull()
// Assert
result.Should().BeNull();
}
-
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Business.Testing/Services/ActivityStatusDomainServiceTests.cs b/TaleEngine/TaleEngine.Business.Testing/Services/ActivityStatusDomainServiceTests.cs
index e41ba8e..c5c85e4 100644
--- a/TaleEngine/TaleEngine.Business.Testing/Services/ActivityStatusDomainServiceTests.cs
+++ b/TaleEngine/TaleEngine.Business.Testing/Services/ActivityStatusDomainServiceTests.cs
@@ -3,7 +3,6 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using TaleEngine.Bussiness.DomainServices;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
using TaleEngine.Data.Contracts.Repositories;
using TaleEngine.Fakes.Entities;
@@ -14,13 +13,17 @@ namespace TaleEngine.Business.Testing.Services
[ExcludeFromCodeCoverage]
public class ActivityStatusDomainServiceTests
{
- private Mock uowMock;
- private Mock activityStatusRepoMock;
+ private readonly Mock _activityStatusRepositoryMock;
public ActivityStatusDomainServiceTests()
{
- uowMock = new Mock();
- activityStatusRepoMock = new Mock();
+ _activityStatusRepositoryMock = new Mock();
+ }
+
+ private ActivityStatusDomainService CreateActivityStatusDomainService()
+ {
+ return new ActivityStatusDomainService(
+ _activityStatusRepositoryMock.Object);
}
[Fact]
@@ -29,11 +32,10 @@ public void GetAll_Success()
// Arrange
List list = ActivityBuilder.BuildActivityStatusList();
- activityStatusRepoMock.Setup(x => x.GetAll())
+ _activityStatusRepositoryMock.Setup(x => x.GetAll())
.Returns(list);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- var target = new ActivityStatusDomainService(uowMock.Object);
+
+ var target = CreateActivityStatusDomainService();
// Act
var result = target.GetAllActivityStatuses();
@@ -49,11 +51,10 @@ public void GetAll_RepoIsEmpty_ShouldReturnNull()
// Arrange
List list = null;
- activityStatusRepoMock.Setup(x => x.GetAll())
+ _activityStatusRepositoryMock.Setup(x => x.GetAll())
.Returns(list);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- var target = new ActivityStatusDomainService(uowMock.Object);
+
+ var target = CreateActivityStatusDomainService();
// Act
var result = target.GetAllActivityStatuses();
@@ -68,11 +69,10 @@ public void GetAll_EmptyResult_ShouldReturnNull()
// Arrange
List list = new();
- activityStatusRepoMock.Setup(x => x.GetAll())
+ _activityStatusRepositoryMock.Setup(x => x.GetAll())
.Returns(list);
- uowMock.Setup(x => x.ActivityStatusRepository)
- .Returns(activityStatusRepoMock.Object);
- var target = new ActivityStatusDomainService(uowMock.Object);
+
+ var target = CreateActivityStatusDomainService();
// Act
var result = target.GetAllActivityStatuses();
@@ -81,5 +81,4 @@ public void GetAll_EmptyResult_ShouldReturnNull()
result.Should().BeNull();
}
}
-}
-
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Business.Testing/Services/ActivityTypeDomainServiceTests.cs b/TaleEngine/TaleEngine.Business.Testing/Services/ActivityTypeDomainServiceTests.cs
index 6a84a3a..7561edc 100644
--- a/TaleEngine/TaleEngine.Business.Testing/Services/ActivityTypeDomainServiceTests.cs
+++ b/TaleEngine/TaleEngine.Business.Testing/Services/ActivityTypeDomainServiceTests.cs
@@ -3,7 +3,6 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using TaleEngine.Bussiness.DomainServices;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
using TaleEngine.Data.Contracts.Repositories;
using TaleEngine.Fakes.Entities;
@@ -14,13 +13,17 @@ namespace TaleEngine.Business.Testing.Services
[ExcludeFromCodeCoverage]
public class ActivityTypeDomainServiceTests
{
- private Mock uowMock;
- private Mock activityTypeRepoMock;
+ private readonly Mock _activityTypeRepositoryMock;
public ActivityTypeDomainServiceTests()
{
- uowMock = new Mock();
- activityTypeRepoMock = new Mock();
+ _activityTypeRepositoryMock = new Mock();
+ }
+
+ private ActivityTypeDomainService CreateActivityTypeDomainService()
+ {
+ return new ActivityTypeDomainService(
+ _activityTypeRepositoryMock.Object);
}
[Fact]
@@ -29,11 +32,10 @@ public void GetAll_Success()
// Arrange
List list = ActivityBuilder.BuildActivityTypeList();
- activityTypeRepoMock.Setup(x => x.GetAll())
+ _activityTypeRepositoryMock.Setup(x => x.GetAll())
.Returns(list);
- uowMock.Setup(x => x.ActivityTypeRepository)
- .Returns(activityTypeRepoMock.Object);
- var target = new ActivityTypeDomainService(uowMock.Object);
+
+ var target = CreateActivityTypeDomainService();
// Act
var result = target.GetAllActivityTypes();
@@ -49,11 +51,10 @@ public void GetAll_RepoIsEmpty_ShouldReturnNull()
// Arrange
List list = null;
- activityTypeRepoMock.Setup(x => x.GetAll())
+ _activityTypeRepositoryMock.Setup(x => x.GetAll())
.Returns(list);
- uowMock.Setup(x => x.ActivityTypeRepository)
- .Returns(activityTypeRepoMock.Object);
- var target = new ActivityTypeDomainService(uowMock.Object);
+
+ var target = CreateActivityTypeDomainService();
// Act
var result = target.GetAllActivityTypes();
@@ -68,11 +69,10 @@ public void GetAll_EmptyResult_ShouldReturnNull()
// Arrange
List list = new();
- activityTypeRepoMock.Setup(x => x.GetAll())
+ _activityTypeRepositoryMock.Setup(x => x.GetAll())
.Returns(list);
- uowMock.Setup(x => x.ActivityTypeRepository)
- .Returns(activityTypeRepoMock.Object);
- var target = new ActivityTypeDomainService(uowMock.Object);
+
+ var target = CreateActivityTypeDomainService();
// Act
var result = target.GetAllActivityTypes();
@@ -81,5 +81,4 @@ public void GetAll_EmptyResult_ShouldReturnNull()
result.Should().BeNull();
}
}
-}
-
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Business.Testing/Services/RoleDomainServiceTests.cs b/TaleEngine/TaleEngine.Business.Testing/Services/RoleDomainServiceTests.cs
index e69fc2a..eb450a7 100644
--- a/TaleEngine/TaleEngine.Business.Testing/Services/RoleDomainServiceTests.cs
+++ b/TaleEngine/TaleEngine.Business.Testing/Services/RoleDomainServiceTests.cs
@@ -3,7 +3,6 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using TaleEngine.Bussiness.DomainServices;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
using TaleEngine.Data.Contracts.Repositories;
using TaleEngine.Fakes.Entities;
@@ -14,13 +13,17 @@ namespace TaleEngine.Business.Testing.Services
[ExcludeFromCodeCoverage]
public class RoleDomainServiceTests
{
- private Mock uowMock;
- private Mock roleRepoMock;
+ private readonly Mock _roleRepositoryMock;
public RoleDomainServiceTests()
{
- uowMock = new Mock();
- roleRepoMock = new Mock();
+ _roleRepositoryMock = new Mock();
+ }
+
+ private RoleDomainService CreateRoleDomainService()
+ {
+ return new RoleDomainService(
+ _roleRepositoryMock.Object);
}
[Fact]
@@ -29,11 +32,10 @@ public void GetAll_Success()
// Arrange
List list = RoleBuilder.BuildRoleList();
- roleRepoMock.Setup(x => x.GetAll())
+ _roleRepositoryMock.Setup(x => x.GetAll())
.Returns(list);
- uowMock.Setup(x => x.RoleRepository)
- .Returns(roleRepoMock.Object);
- var target = new RoleDomainService(uowMock.Object);
+
+ var target = CreateRoleDomainService();
// Act
var result = target.GetAllRoles();
@@ -49,11 +51,10 @@ public void GetAll_RepoIsEmpty_ShouldReturnNull()
// Arrange
List list = null;
- roleRepoMock.Setup(x => x.GetAll())
+ _roleRepositoryMock.Setup(x => x.GetAll())
.Returns(list);
- uowMock.Setup(x => x.RoleRepository)
- .Returns(roleRepoMock.Object);
- var target = new RoleDomainService(uowMock.Object);
+
+ var target = CreateRoleDomainService();
// Act
var result = target.GetAllRoles();
@@ -68,11 +69,10 @@ public void GetAll_EmptyResult_ShouldReturnNull()
// Arrange
List list = new();
- roleRepoMock.Setup(x => x.GetAll())
+ _roleRepositoryMock.Setup(x => x.GetAll())
.Returns(list);
- uowMock.Setup(x => x.RoleRepository)
- .Returns(roleRepoMock.Object);
- var target = new RoleDomainService(uowMock.Object);
+
+ var target = CreateRoleDomainService();
// Act
var result = target.GetAllRoles();
@@ -81,5 +81,4 @@ public void GetAll_EmptyResult_ShouldReturnNull()
result.Should().BeNull();
}
}
-}
-
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Business.Testing/Services/TimeSlotDomainServiceTests.cs b/TaleEngine/TaleEngine.Business.Testing/Services/TimeSlotDomainServiceTests.cs
index 828ec0f..2cb864f 100644
--- a/TaleEngine/TaleEngine.Business.Testing/Services/TimeSlotDomainServiceTests.cs
+++ b/TaleEngine/TaleEngine.Business.Testing/Services/TimeSlotDomainServiceTests.cs
@@ -3,7 +3,6 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using TaleEngine.Bussiness.DomainServices;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
using TaleEngine.Data.Contracts.Repositories;
using TaleEngine.Fakes.Entities;
@@ -14,13 +13,17 @@ namespace TaleEngine.Business.Testing.Services
[ExcludeFromCodeCoverage]
public class TimeSlotDomainServiceTests
{
- private Mock uowMock;
- private Mock timeSlotRepoMock;
+ private readonly Mock _timeSlotRepository;
public TimeSlotDomainServiceTests()
{
- uowMock = new Mock();
- timeSlotRepoMock = new Mock();
+ _timeSlotRepository = new Mock();
+ }
+
+ private TimeSlotDomainService CreateTimeSlotDomainService()
+ {
+ return new TimeSlotDomainService(
+ _timeSlotRepository.Object);
}
[Fact]
@@ -29,11 +32,10 @@ public void GetActiveActivities_Success()
// Arrange
List list = TimeSlotBuilder.BuildTimeSlotList();
- timeSlotRepoMock.Setup(x => x.GetAll())
+ _timeSlotRepository.Setup(x => x.GetAll())
.Returns(list);
- uowMock.Setup(x => x.TimeSlotRepository)
- .Returns(timeSlotRepoMock.Object);
- var target = new TimeSlotDomainService(uowMock.Object);
+
+ var target = CreateTimeSlotDomainService();
// Act
var result = target.GetAllTimeSlots();
@@ -49,11 +51,10 @@ public void GetActiveActivities_RepoIsEmpty_ShouldReturnNull()
// Arrange
List list = null;
- timeSlotRepoMock.Setup(x => x.GetAll())
+ _timeSlotRepository.Setup(x => x.GetAll())
.Returns(list);
- uowMock.Setup(x => x.TimeSlotRepository)
- .Returns(timeSlotRepoMock.Object);
- var target = new TimeSlotDomainService(uowMock.Object);
+
+ var target = CreateTimeSlotDomainService();
// Act
var result = target.GetAllTimeSlots();
@@ -68,11 +69,10 @@ public void GetActiveActivities_EmptyResult_ShouldReturnNull()
// Arrange
List list = new();
- timeSlotRepoMock.Setup(x => x.GetAll())
+ _timeSlotRepository.Setup(x => x.GetAll())
.Returns(list);
- uowMock.Setup(x => x.TimeSlotRepository)
- .Returns(timeSlotRepoMock.Object);
- var target = new TimeSlotDomainService(uowMock.Object);
+
+ var target = CreateTimeSlotDomainService();
// Act
var result = target.GetAllTimeSlots();
@@ -81,4 +81,4 @@ public void GetActiveActivities_EmptyResult_ShouldReturnNull()
result.Should().BeNull();
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Business.Testing/TaleEngine.Business.Testing.csproj b/TaleEngine/TaleEngine.Business.Testing/TaleEngine.Business.Testing.csproj
index ed31117..9f93d4c 100644
--- a/TaleEngine/TaleEngine.Business.Testing/TaleEngine.Business.Testing.csproj
+++ b/TaleEngine/TaleEngine.Business.Testing/TaleEngine.Business.Testing.csproj
@@ -12,7 +12,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/TaleEngine/TaleEngine.Bussiness/DomainServices/ActivityDomainService.cs b/TaleEngine/TaleEngine.Bussiness/DomainServices/ActivityDomainService.cs
index 946f06d..c924deb 100644
--- a/TaleEngine/TaleEngine.Bussiness/DomainServices/ActivityDomainService.cs
+++ b/TaleEngine/TaleEngine.Bussiness/DomainServices/ActivityDomainService.cs
@@ -5,7 +5,7 @@
using TaleEngine.Bussiness.Contracts.Models.Results;
using TaleEngine.Bussiness.Enums;
using TaleEngine.Bussiness.Mappers;
-using TaleEngine.Data.Contracts;
+using TaleEngine.Data.Contracts.Repositories;
namespace TaleEngine.Bussiness.DomainServices
{
@@ -13,16 +13,24 @@ public class ActivityDomainService : IActivityDomainService
{
private const int ACTIVITIESINHOME = 3;
- private readonly IUnitOfWork _unitOfWork;
+ private readonly IActivityRepository _activityRepository;
+ private readonly IActivityStatusRepository _activityStatusRepository;
+ private readonly IEditionRepository _editionRepository;
+ private readonly IActivityTypeRepository _activityTypeRepository;
+ private readonly ITimeSlotRepository _timeSlotRepository;
- public ActivityDomainService(IUnitOfWork unitOfWork)
+ public ActivityDomainService(IActivityRepository activityRepository, IActivityStatusRepository activityStatusRepository, IActivityTypeRepository activityTypeRepository, IEditionRepository editionRepository, ITimeSlotRepository timeSlotRepository)
{
- _unitOfWork = unitOfWork;
+ _activityRepository = activityRepository ?? throw new ArgumentNullException(nameof(activityRepository));
+ _activityStatusRepository = activityStatusRepository ?? throw new ArgumentNullException(nameof(activityStatusRepository));
+ _activityTypeRepository = activityTypeRepository ?? throw new ArgumentNullException(nameof(activityTypeRepository));
+ _editionRepository = editionRepository ?? throw new ArgumentNullException(nameof(editionRepository));
+ _timeSlotRepository = timeSlotRepository ?? throw new ArgumentNullException(nameof(timeSlotRepository));
}
public List GetActiveActivities(int editionId)
{
- var activeStatus = _unitOfWork.ActivityStatusRepository
+ var activeStatus = _activityStatusRepository
.GetById((int)ActivityStatusEnum.ACT);
if (activeStatus == null)
@@ -30,7 +38,7 @@ public List GetActiveActivities(int editionId)
return null;
}
- var activities = _unitOfWork.ActivityRepository
+ var activities = _activityRepository
.GetActivitiesByStatus(editionId, activeStatus.Id);
var models = ActivityMapper.Map(activities);
@@ -40,7 +48,7 @@ public List GetActiveActivities(int editionId)
public List GetPendingActivities(int editionId)
{
- var pendingStatus = _unitOfWork.ActivityStatusRepository
+ var pendingStatus = _activityStatusRepository
.GetById((int)ActivityStatusEnum.PEN);
if (pendingStatus == null)
@@ -48,7 +56,7 @@ public List GetPendingActivities(int editionId)
return null;
}
- var activities = _unitOfWork.ActivityRepository
+ var activities = _activityRepository
.GetActivitiesByStatus(editionId, pendingStatus.Id);
var models = ActivityMapper.Map(activities);
@@ -60,8 +68,8 @@ public int DeleteActivity(int activityId)
{
try
{
- _unitOfWork.ActivityRepository.Delete(activityId);
- _unitOfWork.ActivityRepository.Save();
+ _activityRepository.Delete(activityId);
+ _activityRepository.Save();
}
catch (Exception)
{
@@ -80,7 +88,7 @@ public int CreateActivity(int editionId, ActivityModel activityModel)
return 0;
}
- var status = _unitOfWork.ActivityStatusRepository.GetById((int)ActivityStatusEnum.PEN);
+ var status = _activityStatusRepository.GetById((int)ActivityStatusEnum.PEN);
activityModel.StatusId = status.Id;
var activity = ActivityMapper.Map(activityModel);
@@ -91,10 +99,10 @@ public int CreateActivity(int editionId, ActivityModel activityModel)
try
{
- _unitOfWork.ActivityRepository.Insert(activity);
- _unitOfWork.ActivityRepository.Save();
+ _activityRepository.Insert(activity);
+ _activityRepository.Save();
}
- catch (Exception)
+ catch (Exception e)
{
return 0;
}
@@ -108,8 +116,8 @@ public int UpdateActivity(ActivityModel activityModel)
try
{
- _unitOfWork.ActivityRepository.Update(activity);
- _unitOfWork.ActivityRepository.Save();
+ _activityRepository.Update(activity);
+ _activityRepository.Save();
}
catch (Exception)
{
@@ -121,7 +129,7 @@ public int UpdateActivity(ActivityModel activityModel)
private bool ValidateNewActivityData(ActivityModel model, int editionId)
{
- var edition = _unitOfWork.EditionRepository.GetById(editionId);
+ var edition = _editionRepository.GetById(editionId);
if (edition == null)
{
return false;
@@ -132,13 +140,13 @@ private bool ValidateNewActivityData(ActivityModel model, int editionId)
return false;
}
- var type = _unitOfWork.ActivityTypeRepository.GetById(model.TypeId);
+ var type = _activityTypeRepository.GetById(model.TypeId);
if (type == null)
{
return false;
}
- var timeSlot = _unitOfWork.TimeSlotRepository.GetById(model.TimeSlotId.Value);
+ var timeSlot = _timeSlotRepository.GetById(model.TimeSlotId.Value);
if (timeSlot == null)
{
return false;
@@ -149,8 +157,8 @@ private bool ValidateNewActivityData(ActivityModel model, int editionId)
public int ChangeActivityStatus(int activityId, int statusId)
{
- var status = _unitOfWork.ActivityStatusRepository.GetById(statusId);
- var activity = _unitOfWork.ActivityRepository.GetById(activityId);
+ var status = _activityStatusRepository.GetById(statusId);
+ var activity = _activityRepository.GetById(activityId);
if (status == null || activity == null)
{
@@ -161,10 +169,10 @@ public int ChangeActivityStatus(int activityId, int statusId)
try
{
- _unitOfWork.ActivityRepository.Update(activity);
- _unitOfWork.ActivityRepository.Save();
+ _activityRepository.Update(activity);
+ _activityRepository.Save();
}
- catch (Exception)
+ catch (Exception e)
{
return 0;
}
@@ -177,10 +185,10 @@ public ActivityFilteredResultModel GetActiveActivitiesFiltered(int type, int edi
{
int activitiesPerPage = 10;
- var activeStatus = _unitOfWork.ActivityStatusRepository
+ var activeStatus = _activityStatusRepository
.GetById((int)ActivityStatusEnum.ACT);
- var currentEdition = _unitOfWork.EditionRepository
+ var currentEdition = _editionRepository
.GetById(edition);
if (currentEdition == null || activeStatus == null)
@@ -190,13 +198,13 @@ public ActivityFilteredResultModel GetActiveActivitiesFiltered(int type, int edi
int skipByPagination = (currentPage - 1) * activitiesPerPage;
- var activities = _unitOfWork.ActivityRepository
+ var activities = _activityRepository
.GetActiveActivitiesFiltered(activeStatus.Id, type, currentEdition.Id,
title, skipByPagination, activitiesPerPage);
var models = ActivityMapper.Map(activities);
- int totalActivities = _unitOfWork.ActivityRepository
+ int totalActivities = _activityRepository
.GetTotalActivities(activeStatus.Id, type, currentEdition.Id, title);
double actsPerPage = totalActivities / activitiesPerPage;
@@ -214,10 +222,10 @@ public ActivityFilteredResultModel GetActiveActivitiesFiltered(int type, int edi
public List GetLastThreeActivities(int edition)
{
- var activeStatus = _unitOfWork.ActivityStatusRepository
+ var activeStatus = _activityStatusRepository
.GetById((int)ActivityStatusEnum.ACT);
- var currentEdition = _unitOfWork.EditionRepository
+ var currentEdition = _editionRepository
.GetById(edition);
if (currentEdition == null || activeStatus == null)
@@ -225,7 +233,7 @@ public List GetLastThreeActivities(int edition)
return null;
}
- var activities = _unitOfWork.ActivityRepository
+ var activities = _activityRepository
.GetLastThreeActivities(activeStatus.Id, currentEdition.Id, ACTIVITIESINHOME);
if (activities == null || activities.Count == 0)
diff --git a/TaleEngine/TaleEngine.Bussiness/DomainServices/ActivityStatusDomainService.cs b/TaleEngine/TaleEngine.Bussiness/DomainServices/ActivityStatusDomainService.cs
index 81da91c..c681c98 100644
--- a/TaleEngine/TaleEngine.Bussiness/DomainServices/ActivityStatusDomainService.cs
+++ b/TaleEngine/TaleEngine.Bussiness/DomainServices/ActivityStatusDomainService.cs
@@ -1,23 +1,24 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using TaleEngine.Bussiness.Contracts.DomainServices;
using TaleEngine.Bussiness.Contracts.Models;
using TaleEngine.Bussiness.Mappers;
-using TaleEngine.Data.Contracts;
+using TaleEngine.Data.Contracts.Repositories;
namespace TaleEngine.Bussiness.DomainServices
{
public class ActivityStatusDomainService : IActivityStatusDomainService
{
- private readonly IUnitOfWork _unitOfWork;
+ private readonly IActivityStatusRepository _activityStatusRepository;
- public ActivityStatusDomainService(IUnitOfWork unitOfWork)
+ public ActivityStatusDomainService(IActivityStatusRepository activityStatusRepository)
{
- _unitOfWork = unitOfWork;
+ _activityStatusRepository = activityStatusRepository ?? throw new ArgumentNullException(nameof(activityStatusRepository));
}
public List GetAllActivityStatuses()
{
- var allStatuses = _unitOfWork.ActivityStatusRepository.GetAll();
+ var allStatuses = _activityStatusRepository.GetAll();
if (allStatuses == null || allStatuses.Count == 0)
{
@@ -29,4 +30,4 @@ public List GetAllActivityStatuses()
return models;
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Bussiness/DomainServices/ActivityTypeDomainService.cs b/TaleEngine/TaleEngine.Bussiness/DomainServices/ActivityTypeDomainService.cs
index 60261e5..773c69a 100644
--- a/TaleEngine/TaleEngine.Bussiness/DomainServices/ActivityTypeDomainService.cs
+++ b/TaleEngine/TaleEngine.Bussiness/DomainServices/ActivityTypeDomainService.cs
@@ -1,23 +1,24 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using TaleEngine.Bussiness.Contracts.DomainServices;
using TaleEngine.Bussiness.Contracts.Models;
using TaleEngine.Bussiness.Mappers;
-using TaleEngine.Data.Contracts;
+using TaleEngine.Data.Contracts.Repositories;
namespace TaleEngine.Bussiness.DomainServices
{
public class ActivityTypeDomainService : IActivityTypeDomainService
{
- private readonly IUnitOfWork _unitOfWork;
+ private readonly IActivityTypeRepository _activityTypeRepository;
- public ActivityTypeDomainService(IUnitOfWork unitOfWork)
+ public ActivityTypeDomainService(IActivityTypeRepository activityTypeRepository)
{
- _unitOfWork = unitOfWork;
+ _activityTypeRepository = activityTypeRepository ?? throw new ArgumentNullException(nameof(activityTypeRepository));
}
public List GetAllActivityTypes()
{
- var activityTypes = _unitOfWork.ActivityTypeRepository.GetAll();
+ var activityTypes = _activityTypeRepository.GetAll();
if (activityTypes == null || activityTypes.Count == 0)
{
@@ -29,4 +30,4 @@ public List GetAllActivityTypes()
return models;
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Bussiness/DomainServices/EditionDomainService.cs b/TaleEngine/TaleEngine.Bussiness/DomainServices/EditionDomainService.cs
index c68ae2f..9a75ac4 100644
--- a/TaleEngine/TaleEngine.Bussiness/DomainServices/EditionDomainService.cs
+++ b/TaleEngine/TaleEngine.Bussiness/DomainServices/EditionDomainService.cs
@@ -3,22 +3,22 @@
using TaleEngine.Bussiness.Contracts.DomainServices;
using TaleEngine.Bussiness.Contracts.Models;
using TaleEngine.Bussiness.Mappers;
-using TaleEngine.Data.Contracts;
+using TaleEngine.Data.Contracts.Repositories;
namespace TaleEngine.Bussiness.DomainServices
{
public class EditionDomainService : IEditionDomainService
{
- private readonly IUnitOfWork _unitOfWork;
+ private readonly IEditionRepository _editionRepository;
- public EditionDomainService(IUnitOfWork unitOfWork)
+ public EditionDomainService(IEditionRepository editionRepository)
{
- _unitOfWork = unitOfWork;
+ _editionRepository = editionRepository ?? throw new ArgumentNullException(nameof(editionRepository));
}
public EditionDaysModel GetEditionDays(int editionId)
{
- var edition = _unitOfWork.EditionRepository.GetById(editionId);
+ var edition = _editionRepository.GetById(editionId);
if (edition == null)
{
@@ -37,7 +37,7 @@ public EditionDaysModel GetEditionDays(int editionId)
public EditionModel GetLastOrCurrentEdition(int ofEvent)
{
- var edition = _unitOfWork.EditionRepository.GetLastEditionInEvent(ofEvent);
+ var edition = _editionRepository.GetLastEditionInEvent(ofEvent);
if (edition != null)
{
@@ -60,6 +60,5 @@ private List GetAllDaysFromRange(DateTime init, DateTime end)
return days;
}
-
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Bussiness/DomainServices/EventDomainService.cs b/TaleEngine/TaleEngine.Bussiness/DomainServices/EventDomainService.cs
index 3fb30f6..0fb2bb2 100644
--- a/TaleEngine/TaleEngine.Bussiness/DomainServices/EventDomainService.cs
+++ b/TaleEngine/TaleEngine.Bussiness/DomainServices/EventDomainService.cs
@@ -1,24 +1,24 @@
-using System.Collections.Generic;
-using TaleEngine.Bussiness.Contracts;
+using System;
+using System.Collections.Generic;
using TaleEngine.Bussiness.Contracts.DomainServices;
using TaleEngine.Bussiness.Contracts.Models;
using TaleEngine.Bussiness.Mappers;
-using TaleEngine.Data.Contracts;
+using TaleEngine.Data.Contracts.Repositories;
namespace TaleEngine.Bussiness.DomainServices
{
public class EventDomainService : IEventDomainService
{
- private readonly IUnitOfWork _unitOfWork;
+ private readonly IEventRepository _eventRepository;
- public EventDomainService(IUnitOfWork unitOfWork)
+ public EventDomainService(IEventRepository eventRepository)
{
- _unitOfWork = unitOfWork;
+ _eventRepository = eventRepository ?? throw new ArgumentNullException(nameof(eventRepository));
}
public List GetEventsNoFilter()
{
- var events = _unitOfWork.EventRepository.GetAll();
+ var events = _eventRepository.GetAll();
var eventDtos = new List();
@@ -32,7 +32,7 @@ public List GetEventsNoFilter()
public EventModel GetEvent(int eventId)
{
- var ev = _unitOfWork.EventRepository.GetById(eventId);
+ var ev = _eventRepository.GetById(eventId);
var result = EventMapper.Map(ev);
diff --git a/TaleEngine/TaleEngine.Bussiness/DomainServices/RoleDomainService.cs b/TaleEngine/TaleEngine.Bussiness/DomainServices/RoleDomainService.cs
index 126a917..669c61e 100644
--- a/TaleEngine/TaleEngine.Bussiness/DomainServices/RoleDomainService.cs
+++ b/TaleEngine/TaleEngine.Bussiness/DomainServices/RoleDomainService.cs
@@ -3,23 +3,23 @@
using TaleEngine.Bussiness.Contracts.DomainServices;
using TaleEngine.Bussiness.Contracts.Models;
using TaleEngine.Bussiness.Mappers;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
+using TaleEngine.Data.Contracts.Repositories;
namespace TaleEngine.Bussiness.DomainServices
{
public class RoleDomainService : IRoleDomainService
{
- private readonly IUnitOfWork _unitOfWork;
+ private readonly IRoleRepository _roleRepository;
- public RoleDomainService(IUnitOfWork unitOfWork)
+ public RoleDomainService(IRoleRepository roleRepository)
{
- _unitOfWork = unitOfWork ?? throw new ArgumentNullException(nameof(unitOfWork));
+ _roleRepository = roleRepository ?? throw new ArgumentNullException(nameof(roleRepository));
}
public List GetAllRoles()
{
- List roles = _unitOfWork.RoleRepository.GetAll();
+ List roles = _roleRepository.GetAll();
if (roles == null || roles.Count == 0)
{
@@ -30,4 +30,4 @@ public List GetAllRoles()
return roleModels;
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Bussiness/DomainServices/TimeSlotDomainService.cs b/TaleEngine/TaleEngine.Bussiness/DomainServices/TimeSlotDomainService.cs
index 3398969..52ba80d 100644
--- a/TaleEngine/TaleEngine.Bussiness/DomainServices/TimeSlotDomainService.cs
+++ b/TaleEngine/TaleEngine.Bussiness/DomainServices/TimeSlotDomainService.cs
@@ -1,23 +1,24 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using TaleEngine.Bussiness.Contracts.DomainServices;
using TaleEngine.Bussiness.Contracts.Models;
using TaleEngine.Bussiness.Mappers;
-using TaleEngine.Data.Contracts;
-
+using TaleEngine.Data.Contracts.Repositories;
+
namespace TaleEngine.Bussiness.DomainServices
{
public class TimeSlotDomainService : ITimeSlotDomainService
{
- private readonly IUnitOfWork _unitOfWork;
+ private readonly ITimeSlotRepository _timeSlotRepository;
- public TimeSlotDomainService(IUnitOfWork unitOfWork)
- {
- _unitOfWork = unitOfWork;
+ public TimeSlotDomainService(ITimeSlotRepository timeSlotRepository)
+ {
+ _timeSlotRepository = timeSlotRepository ?? throw new ArgumentNullException(nameof(timeSlotRepository));
}
public List GetAllTimeSlots()
{
- var timeslots = _unitOfWork.TimeSlotRepository.GetAll();
+ var timeslots = _timeSlotRepository.GetAll();
if (timeslots == null || timeslots.Count == 0)
{
@@ -29,4 +30,4 @@ public List GetAllTimeSlots()
return timeslotDtos;
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data.Contracts/IDatabaseContext.cs b/TaleEngine/TaleEngine.Data.Contracts/IDatabaseContext.cs
deleted file mode 100644
index eda5c35..0000000
--- a/TaleEngine/TaleEngine.Data.Contracts/IDatabaseContext.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Microsoft.EntityFrameworkCore;
-using TaleEngine.Data.Contracts.Entities;
-
-namespace TaleEngine.Data.Contracts
-{
- public interface IDatabaseContext
- {
- DbSet Events { get; set; }
- DbSet Activities { get; set; }
- DbSet ActivityTypes { get; set; }
- DbSet ActivityStatuses { get; set; }
- DbSet UserStatuses { get; set; }
- DbSet Users { get; set; }
- DbSet Permissions { get; set; }
- DbSet PermissionsValue { get; set; }
- DbSet AssignedPermissions { get; set; }
- DbSet Roles { get; set; }
- DbSet Editions { get; set; }
- DbSet TimeSlot { get; set; }
-
- int SaveChanges();
- }
-}
diff --git a/TaleEngine/TaleEngine.Data.Contracts/IUnitOfWork.cs b/TaleEngine/TaleEngine.Data.Contracts/IUnitOfWork.cs
deleted file mode 100644
index 15ad1ae..0000000
--- a/TaleEngine/TaleEngine.Data.Contracts/IUnitOfWork.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using TaleEngine.Data.Contracts.Repositories;
-
-namespace TaleEngine.Data.Contracts
-{
- public interface IUnitOfWork
- {
- IEventRepository EventRepository { get; }
- IActivityRepository ActivityRepository { get; }
- IActivityStatusRepository ActivityStatusRepository { get; }
- IActivityTypeRepository ActivityTypeRepository { get; }
- IEditionRepository EditionRepository { get; }
- ITimeSlotRepository TimeSlotRepository { get; }
- IRoleRepository RoleRepository { get; }
- }
-}
diff --git a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityRepository.cs b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityRepository.cs
index 7dfe095..48e0842 100644
--- a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityRepository.cs
+++ b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityRepository.cs
@@ -1,14 +1,19 @@
using System.Collections.Generic;
using TaleEngine.Data.Contracts.Entities;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Contracts.Repositories
{
public interface IActivityRepository : IGenericRepository
{
List GetEventActivities(int eventId);
+
List GetActivitiesByStatus(int edition, int status);
+
List GetActiveActivitiesFiltered(int status, int type, int edition, string title, int skip, int activitiesPerPage);
+
List GetLastThreeActivities(int status, int edition, int numberOfActivities);
+
int GetTotalActivities(int status, int type, int edition, string title);
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityStatusRepository.cs b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityStatusRepository.cs
index 63f6e44..54b0b79 100644
--- a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityStatusRepository.cs
+++ b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityStatusRepository.cs
@@ -1,4 +1,5 @@
using TaleEngine.Data.Contracts.Entities;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Contracts.Repositories
{
diff --git a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityTypeRepository.cs b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityTypeRepository.cs
index 2d8521d..4231657 100644
--- a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityTypeRepository.cs
+++ b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityTypeRepository.cs
@@ -1,4 +1,5 @@
using TaleEngine.Data.Contracts.Entities;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Contracts.Repositories
{
diff --git a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IEditionRepository.cs b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IEditionRepository.cs
index c33e406..ac67a76 100644
--- a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IEditionRepository.cs
+++ b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IEditionRepository.cs
@@ -1,4 +1,5 @@
using TaleEngine.Data.Contracts.Entities;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Contracts.Repositories
{
diff --git a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IEventRepository.cs b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IEventRepository.cs
index 3fdabf8..cf66201 100644
--- a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IEventRepository.cs
+++ b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IEventRepository.cs
@@ -1,5 +1,6 @@
using TaleEngine.Data.Contracts.Entities;
-
+using TaleEngine.Data.Contracts.SeedWork;
+
namespace TaleEngine.Data.Contracts.Repositories
{
public interface IEventRepository : IGenericRepository
diff --git a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IRoleRepository.cs b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IRoleRepository.cs
index d736705..33e2fac 100644
--- a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IRoleRepository.cs
+++ b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IRoleRepository.cs
@@ -1,4 +1,5 @@
using TaleEngine.Data.Contracts.Entities;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Contracts.Repositories
{
diff --git a/TaleEngine/TaleEngine.Data.Contracts/Repositories/ITimeSlotRepository.cs b/TaleEngine/TaleEngine.Data.Contracts/Repositories/ITimeSlotRepository.cs
index b2a91d3..bfc15e1 100644
--- a/TaleEngine/TaleEngine.Data.Contracts/Repositories/ITimeSlotRepository.cs
+++ b/TaleEngine/TaleEngine.Data.Contracts/Repositories/ITimeSlotRepository.cs
@@ -1,4 +1,5 @@
using TaleEngine.Data.Contracts.Entities;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Contracts.Repositories
{
diff --git a/TaleEngine/TaleEngine.Data.Contracts/IGenericRepository.cs b/TaleEngine/TaleEngine.Data.Contracts/SeedWork/IGenericRepository.cs
similarity index 76%
rename from TaleEngine/TaleEngine.Data.Contracts/IGenericRepository.cs
rename to TaleEngine/TaleEngine.Data.Contracts/SeedWork/IGenericRepository.cs
index d56b1df..cebac6a 100644
--- a/TaleEngine/TaleEngine.Data.Contracts/IGenericRepository.cs
+++ b/TaleEngine/TaleEngine.Data.Contracts/SeedWork/IGenericRepository.cs
@@ -1,15 +1,21 @@
using System.Collections.Generic;
-namespace TaleEngine.Data.Contracts
+namespace TaleEngine.Data.Contracts.SeedWork
{
public interface IGenericRepository where T : class
{
+ IUnitOfWork UnitOfWork { get; }
+
List GetAll();
+
T GetById(int entityId);
+
void Insert(T entity);
+
void Update(T entity);
+
void Delete(int entityId);
- void Save();
+ void Save();
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data.Contracts/SeedWork/IUnitOfWork.cs b/TaleEngine/TaleEngine.Data.Contracts/SeedWork/IUnitOfWork.cs
new file mode 100644
index 0000000..916255e
--- /dev/null
+++ b/TaleEngine/TaleEngine.Data.Contracts/SeedWork/IUnitOfWork.cs
@@ -0,0 +1,8 @@
+using System;
+
+namespace TaleEngine.Data.Contracts.SeedWork
+{
+ public interface IUnitOfWork : IDisposable
+ {
+ }
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data.Contracts/TaleEngine.Data.Contracts.csproj b/TaleEngine/TaleEngine.Data.Contracts/TaleEngine.Data.Contracts.csproj
index 2974dc2..69fa092 100644
--- a/TaleEngine/TaleEngine.Data.Contracts/TaleEngine.Data.Contracts.csproj
+++ b/TaleEngine/TaleEngine.Data.Contracts/TaleEngine.Data.Contracts.csproj
@@ -13,6 +13,7 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
+
diff --git a/TaleEngine/TaleEngine.Data.Testing/TaleEngine.Data.Testing.csproj b/TaleEngine/TaleEngine.Data.Testing/TaleEngine.Data.Testing.csproj
index d08eb4e..623e007 100644
--- a/TaleEngine/TaleEngine.Data.Testing/TaleEngine.Data.Testing.csproj
+++ b/TaleEngine/TaleEngine.Data.Testing/TaleEngine.Data.Testing.csproj
@@ -6,12 +6,18 @@
false
+
+
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
@@ -23,9 +29,4 @@
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data.Testing/UnitOfWorkMock.cs b/TaleEngine/TaleEngine.Data.Testing/UnitOfWorkMock.cs
deleted file mode 100644
index 7318a8e..0000000
--- a/TaleEngine/TaleEngine.Data.Testing/UnitOfWorkMock.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using Moq;
-using TaleEngine.Data.Contracts;
-
-namespace TaleEngine.Data.Testing
-{
- public class UnitOfWorkMock
- {
- public Mock _unitOfWork;
-
- public UnitOfWorkMock()
- {
- _unitOfWork = new Mock();
- Setup();
- }
-
- private void Setup()
- {
- //var activityRepository = new ActivityRepositoryMock();
- //var editionRepository = new EditionRepositoryMock();
- //var timeSlotRepository = new TimeSlotRepositoryMock();
- //var activityStatusRepository = new ActivityStatusRepositoryMock();
- //var activityTypeRepository = new ActivityTypeRepositoryMock();
-
- //_unitOfWork.Setup(m => m.ActivityRepository)
- // .Returns(activityRepository._activityRepository.Object);
- //_unitOfWork.Setup(m => m.EditionRepository)
- // .Returns(editionRepository._editionRepository.Object);
- //_unitOfWork.Setup(m => m.TimeSlotRepository)
- // .Returns(timeSlotRepository._timeSlotRepository.Object);
- //_unitOfWork.Setup(m => m.ActivityStatusRepository)
- // .Returns(activityStatusRepository._activityStatusRepository.Object);
- //_unitOfWork.Setup(m => m.ActivityTypeRepository)
- // .Returns(activityTypeRepository._activityStatusRepository.Object);
- }
- }
-}
diff --git a/TaleEngine/TaleEngine.Data/Exceptions/TaleEngineDomainException.cs b/TaleEngine/TaleEngine.Data/Exceptions/TaleEngineDomainException.cs
new file mode 100644
index 0000000..f5fe7a4
--- /dev/null
+++ b/TaleEngine/TaleEngine.Data/Exceptions/TaleEngineDomainException.cs
@@ -0,0 +1,21 @@
+using System;
+
+namespace TaleEngine.Data.Exceptions
+{
+ ///
+ /// Exception type for domain exceptions
+ ///
+ public class TaleEngineDomainException : Exception
+ {
+ public TaleEngineDomainException()
+ { }
+
+ public TaleEngineDomainException(string message)
+ : base(message)
+ { }
+
+ public TaleEngineDomainException(string message, Exception innerException)
+ : base(message, innerException)
+ { }
+ }
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data/IMediatorExtensions.cs b/TaleEngine/TaleEngine.Data/IMediatorExtensions.cs
new file mode 100644
index 0000000..eb0ffec
--- /dev/null
+++ b/TaleEngine/TaleEngine.Data/IMediatorExtensions.cs
@@ -0,0 +1,27 @@
+using MediatR;
+using System.Linq;
+using System.Threading.Tasks;
+using TaleEngine.Data.SeedWork;
+
+namespace TaleEngine.Data
+{
+ internal static class IMediatorExtensions
+ {
+ public static async Task DispatchDomainEventsAsync(this IMediator mediator, TaleEngineContext ctx)
+ {
+ var domainEntities = ctx.ChangeTracker
+ .Entries()
+ .Where(x => x.Entity.DomainEvents != null && x.Entity.DomainEvents.Any());
+
+ var domainEvents = domainEntities
+ .SelectMany(x => x.Entity.DomainEvents)
+ .ToList();
+
+ domainEntities.ToList()
+ .ForEach(entity => entity.Entity.ClearDomainEvents());
+
+ foreach (var domainEvent in domainEvents)
+ await mediator.Publish(domainEvent);
+ }
+ }
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data/Migrations/20191009133730_initial.Designer.cs b/TaleEngine/TaleEngine.Data/Migrations/20191009133730_initial.Designer.cs
index 56e81e0..112087b 100644
--- a/TaleEngine/TaleEngine.Data/Migrations/20191009133730_initial.Designer.cs
+++ b/TaleEngine/TaleEngine.Data/Migrations/20191009133730_initial.Designer.cs
@@ -9,7 +9,7 @@
namespace TaleEngine.Data.Migrations
{
- [DbContext(typeof(DatabaseContext))]
+ [DbContext(typeof(TaleEngineContext))]
[Migration("20191009133730_initial")]
partial class initial
{
diff --git a/TaleEngine/TaleEngine.Data/Migrations/20191015120601_DataStructure.Designer.cs b/TaleEngine/TaleEngine.Data/Migrations/20191015120601_DataStructure.Designer.cs
index e50faf4..f802dd0 100644
--- a/TaleEngine/TaleEngine.Data/Migrations/20191015120601_DataStructure.Designer.cs
+++ b/TaleEngine/TaleEngine.Data/Migrations/20191015120601_DataStructure.Designer.cs
@@ -9,7 +9,7 @@
namespace TaleEngine.Data.Migrations
{
- [DbContext(typeof(DatabaseContext))]
+ [DbContext(typeof(TaleEngineContext))]
[Migration("20191015120601_DataStructure")]
partial class DataStructure
{
diff --git a/TaleEngine/TaleEngine.Data/Migrations/20191016120933_ActivityTimeControl.Designer.cs b/TaleEngine/TaleEngine.Data/Migrations/20191016120933_ActivityTimeControl.Designer.cs
index 16a0501..82327a9 100644
--- a/TaleEngine/TaleEngine.Data/Migrations/20191016120933_ActivityTimeControl.Designer.cs
+++ b/TaleEngine/TaleEngine.Data/Migrations/20191016120933_ActivityTimeControl.Designer.cs
@@ -9,7 +9,7 @@
namespace TaleEngine.Data.Migrations
{
- [DbContext(typeof(DatabaseContext))]
+ [DbContext(typeof(TaleEngineContext))]
[Migration("20191016120933_ActivityTimeControl")]
partial class ActivityTimeControl
{
diff --git a/TaleEngine/TaleEngine.Data/Migrations/20191021181350_AddMasterTablesData.Designer.cs b/TaleEngine/TaleEngine.Data/Migrations/20191021181350_AddMasterTablesData.Designer.cs
index cf9a50f..4c8c470 100644
--- a/TaleEngine/TaleEngine.Data/Migrations/20191021181350_AddMasterTablesData.Designer.cs
+++ b/TaleEngine/TaleEngine.Data/Migrations/20191021181350_AddMasterTablesData.Designer.cs
@@ -9,7 +9,7 @@
namespace TaleEngine.Data.Migrations
{
- [DbContext(typeof(DatabaseContext))]
+ [DbContext(typeof(TaleEngineContext))]
[Migration("20191021181350_AddMasterTablesData")]
partial class AddMasterTablesData
{
diff --git a/TaleEngine/TaleEngine.Data/Migrations/20210219182326_ReorganizeEntities.Designer.cs b/TaleEngine/TaleEngine.Data/Migrations/20210219182326_ReorganizeEntities.Designer.cs
index 6e271a2..b0c7d93 100644
--- a/TaleEngine/TaleEngine.Data/Migrations/20210219182326_ReorganizeEntities.Designer.cs
+++ b/TaleEngine/TaleEngine.Data/Migrations/20210219182326_ReorganizeEntities.Designer.cs
@@ -9,7 +9,7 @@
namespace TaleEngine.Data.Migrations
{
- [DbContext(typeof(DatabaseContext))]
+ [DbContext(typeof(TaleEngineContext))]
[Migration("20210219182326_ReorganizeEntities")]
partial class ReorganizeEntities
{
diff --git a/TaleEngine/TaleEngine.Data/Migrations/20210222155903_ChangeUserMngRelationships.Designer.cs b/TaleEngine/TaleEngine.Data/Migrations/20210222155903_ChangeUserMngRelationships.Designer.cs
index d5d2747..6688997 100644
--- a/TaleEngine/TaleEngine.Data/Migrations/20210222155903_ChangeUserMngRelationships.Designer.cs
+++ b/TaleEngine/TaleEngine.Data/Migrations/20210222155903_ChangeUserMngRelationships.Designer.cs
@@ -9,7 +9,7 @@
namespace TaleEngine.Data.Migrations
{
- [DbContext(typeof(DatabaseContext))]
+ [DbContext(typeof(TaleEngineContext))]
[Migration("20210222155903_ChangeUserMngRelationships")]
partial class ChangeUserMngRelationships
{
diff --git a/TaleEngine/TaleEngine.Data/Migrations/20210222162400_ConnectRoleToEvent.Designer.cs b/TaleEngine/TaleEngine.Data/Migrations/20210222162400_ConnectRoleToEvent.Designer.cs
index 0798780..de9970a 100644
--- a/TaleEngine/TaleEngine.Data/Migrations/20210222162400_ConnectRoleToEvent.Designer.cs
+++ b/TaleEngine/TaleEngine.Data/Migrations/20210222162400_ConnectRoleToEvent.Designer.cs
@@ -9,7 +9,7 @@
namespace TaleEngine.Data.Migrations
{
- [DbContext(typeof(DatabaseContext))]
+ [DbContext(typeof(TaleEngineContext))]
[Migration("20210222162400_ConnectRoleToEvent")]
partial class ConnectRoleToEvent
{
diff --git a/TaleEngine/TaleEngine.Data/Migrations/20210317091148_RemoveFieldsBaseEntity.Designer.cs b/TaleEngine/TaleEngine.Data/Migrations/20210317091148_RemoveFieldsBaseEntity.Designer.cs
index 22ba40a..e80265e 100644
--- a/TaleEngine/TaleEngine.Data/Migrations/20210317091148_RemoveFieldsBaseEntity.Designer.cs
+++ b/TaleEngine/TaleEngine.Data/Migrations/20210317091148_RemoveFieldsBaseEntity.Designer.cs
@@ -9,7 +9,7 @@
namespace TaleEngine.Data.Migrations
{
- [DbContext(typeof(DatabaseContext))]
+ [DbContext(typeof(TaleEngineContext))]
[Migration("20210317091148_RemoveFieldsBaseEntity")]
partial class RemoveFieldsBaseEntity
{
diff --git a/TaleEngine/TaleEngine.Data/Migrations/DatabaseContextModelSnapshot.cs b/TaleEngine/TaleEngine.Data/Migrations/TaleEngineContextModelSnapshot.cs
similarity index 97%
rename from TaleEngine/TaleEngine.Data/Migrations/DatabaseContextModelSnapshot.cs
rename to TaleEngine/TaleEngine.Data/Migrations/TaleEngineContextModelSnapshot.cs
index 2ad6dba..b019b1e 100644
--- a/TaleEngine/TaleEngine.Data/Migrations/DatabaseContextModelSnapshot.cs
+++ b/TaleEngine/TaleEngine.Data/Migrations/TaleEngineContextModelSnapshot.cs
@@ -1,892 +1,892 @@
-//
-using System;
-using System.Diagnostics.CodeAnalysis;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using TaleEngine.Data;
-
-namespace TaleEngine.Data.Migrations
-{
- [DbContext(typeof(DatabaseContext))]
- [ExcludeFromCodeCoverage]
- partial class DatabaseContextModelSnapshot : ModelSnapshot
- {
- protected override void BuildModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("Relational:MaxIdentifierLength", 128)
- .HasAnnotation("ProductVersion", "5.0.4")
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- modelBuilder.Entity("ActivityUser", b =>
- {
- b.Property("ActivitiesCreateId")
- .HasColumnType("int");
-
- b.Property("UsersCreateId")
- .HasColumnType("int");
-
- b.HasKey("ActivitiesCreateId", "UsersCreateId");
-
- b.HasIndex("UsersCreateId");
-
- b.ToTable("ActivityCreators");
- });
-
- modelBuilder.Entity("ActivityUser1", b =>
- {
- b.Property("ActivitiesFavId")
- .HasColumnType("int");
-
- b.Property("UsersFavId")
- .HasColumnType("int");
-
- b.HasKey("ActivitiesFavId", "UsersFavId");
-
- b.HasIndex("UsersFavId");
-
- b.ToTable("FavActivities");
- });
-
- modelBuilder.Entity("ActivityUser2", b =>
- {
- b.Property("ActivitiesPlayId")
- .HasColumnType("int");
-
- b.Property("UsersPlayId")
- .HasColumnType("int");
-
- b.HasKey("ActivitiesPlayId", "UsersPlayId");
-
- b.HasIndex("UsersPlayId");
-
- b.ToTable("ActivityEnrollments");
- });
-
- modelBuilder.Entity("RoleUser", b =>
- {
- b.Property("RolesId")
- .HasColumnType("int");
-
- b.Property("UsersId")
- .HasColumnType("int");
-
- b.HasKey("RolesId", "UsersId");
-
- b.HasIndex("UsersId");
-
- b.ToTable("RoleUser");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Activity", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int")
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- b.Property("CreateDateTime")
- .HasColumnType("datetime2");
-
- b.Property("Description")
- .HasColumnType("nvarchar(max)");
-
- b.Property("EditionId")
- .HasColumnType("int");
-
- b.Property("EndDateTime")
- .HasColumnType("datetime2");
-
- b.Property("Image")
- .HasColumnType("nvarchar(max)");
-
- b.Property("ModificationDate")
- .HasColumnType("datetime2");
-
- b.Property("Places")
- .HasColumnType("int");
-
- b.Property("PublicationDate")
- .HasColumnType("datetime2");
-
- b.Property("StartDateTime")
- .HasColumnType("datetime2");
-
- b.Property("StatusId")
- .HasColumnType("int");
-
- b.Property("TimeSlotId")
- .HasColumnType("int");
-
- b.Property("Title")
- .HasColumnType("nvarchar(max)");
-
- b.Property("TypeId")
- .HasColumnType("int");
-
- b.HasKey("Id");
-
- b.HasIndex("EditionId");
-
- b.HasIndex("StatusId");
-
- b.HasIndex("TimeSlotId");
-
- b.HasIndex("TypeId");
-
- b.ToTable("Activity");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.ActivityStatus", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int")
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- b.Property("Abbr")
- .HasColumnType("nvarchar(max)");
-
- b.Property("CreateDateTime")
- .HasColumnType("datetime2");
-
- b.Property("Description")
- .HasColumnType("nvarchar(max)");
-
- b.Property("ModificationDate")
- .HasColumnType("datetime2");
-
- b.Property("Name")
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("Id");
-
- b.ToTable("ActivityStatus");
-
- b.HasData(
- new
- {
- Id = 1,
- Abbr = "PEN",
- Description = "Waiting for approval",
- Name = "Pending"
- },
- new
- {
- Id = 2,
- Abbr = "ACT",
- Description = "Accepted and waiting for participants",
- Name = "Active"
- },
- new
- {
- Id = 3,
- Abbr = "REV",
- Description = "In revision process",
- Name = "Revision"
- },
- new
- {
- Id = 4,
- Abbr = "BAN",
- Description = "Excluded as it doesn't align with the core values",
- Name = "Banned"
- });
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.ActivityType", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int")
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- b.Property("Abbr")
- .HasColumnType("nvarchar(max)");
-
- b.Property("CreateDateTime")
- .HasColumnType("datetime2");
-
- b.Property("Description")
- .HasColumnType("nvarchar(max)");
-
- b.Property("ModificationDate")
- .HasColumnType("datetime2");
-
- b.Property("Name")
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("Id");
-
- b.ToTable("ActivityType");
-
- b.HasData(
- new
- {
- Id = 1,
- Abbr = "TTRPG",
- Description = "Tabletop roleplaying game session",
- Name = "Tabletop role-playing games"
- },
- new
- {
- Id = 2,
- Abbr = "BG",
- Description = "Board games for everyone!",
- Name = "Board games"
- },
- new
- {
- Id = 3,
- Abbr = "TOU",
- Description = "A board or card game competition",
- Name = "Tournament"
- },
- new
- {
- Id = 4,
- Abbr = "DEM",
- Description = "Show your brand new project to the community",
- Name = "Demos"
- },
- new
- {
- Id = 5,
- Abbr = "LARP",
- Description = "Role-play games in live action",
- Name = "Live action role-playing"
- });
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.AssignedPermission", b =>
- {
- b.Property("RoleId")
- .HasColumnType("int");
-
- b.Property("PermissionId")
- .HasColumnType("int");
-
- b.Property("PermissionValueId")
- .HasColumnType("int");
-
- b.Property("CreateDateTime")
- .HasColumnType("datetime2");
-
- b.Property("Id")
- .HasColumnType("int");
-
- b.Property("ModificationDate")
- .HasColumnType("datetime2");
-
- b.HasKey("RoleId", "PermissionId", "PermissionValueId");
-
- b.HasIndex("PermissionId");
-
- b.HasIndex("PermissionValueId");
-
- b.ToTable("AssignedPermissions");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Edition", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int")
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- b.Property("CreateDateTime")
- .HasColumnType("datetime2");
-
- b.Property("DateEnd")
- .HasColumnType("datetime2");
-
- b.Property("DateInit")
- .HasColumnType("datetime2");
-
- b.Property("EventId")
- .HasColumnType("int");
-
- b.Property("ModificationDate")
- .HasColumnType("datetime2");
-
- b.HasKey("Id");
-
- b.HasIndex("EventId");
-
- b.ToTable("Edition");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Event", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int")
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- b.Property("CreateDateTime")
- .HasColumnType("datetime2");
-
- b.Property("ModificationDate")
- .HasColumnType("datetime2");
-
- b.Property("Title")
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("Id");
-
- b.ToTable("Event");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Permission", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int")
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- b.Property("Abbr")
- .HasColumnType("nvarchar(max)");
-
- b.Property("CreateDateTime")
- .HasColumnType("datetime2");
-
- b.Property("Description")
- .HasColumnType("nvarchar(max)");
-
- b.Property("ModificationDate")
- .HasColumnType("datetime2");
-
- b.Property("Name")
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("Id");
-
- b.ToTable("Permission");
-
- b.HasData(
- new
- {
- Id = 1,
- Abbr = "SEE",
- Name = "See activities"
- },
- new
- {
- Id = 2,
- Abbr = "REQJOIN",
- Name = "Request join"
- },
- new
- {
- Id = 3,
- Abbr = "MARKFAV",
- Name = "Mark as favourite"
- },
- new
- {
- Id = 4,
- Abbr = "ABANACT",
- Name = "Abandon activity"
- },
- new
- {
- Id = 5,
- Abbr = "PROPACT",
- Name = "Propose activity"
- },
- new
- {
- Id = 6,
- Abbr = "EDITACT",
- Name = "Edit proposed activity"
- },
- new
- {
- Id = 7,
- Abbr = "DELACT",
- Name = "Delete proposed activity"
- },
- new
- {
- Id = 8,
- Abbr = "SEEPART",
- Name = "See participants"
- },
- new
- {
- Id = 9,
- Abbr = "ACCACTEDIT",
- Name = "Accept activity edit"
- },
- new
- {
- Id = 10,
- Abbr = "ACCACTDEL",
- Name = "Accept activity deletion"
- },
- new
- {
- Id = 11,
- Abbr = "MARKREV",
- Name = "Mark proposal for revision"
- },
- new
- {
- Id = 12,
- Abbr = "CRTU",
- Name = "Create user"
- },
- new
- {
- Id = 13,
- Abbr = "DELU",
- Name = "Delete user"
- },
- new
- {
- Id = 14,
- Abbr = "BANU",
- Name = "Ban user"
- },
- new
- {
- Id = 15,
- Abbr = "ACCACTPROP",
- Name = "Accept activity proposal"
- },
- new
- {
- Id = 16,
- Abbr = "DELACTPROP",
- Name = "Delete activity proposal"
- },
- new
- {
- Id = 17,
- Abbr = "EDITU",
- Name = "Edit user"
- });
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.PermissionValue", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int")
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- b.Property("Abbr")
- .HasColumnType("nvarchar(max)");
-
- b.Property("CreateDateTime")
- .HasColumnType("datetime2");
-
- b.Property("Description")
- .HasColumnType("nvarchar(max)");
-
- b.Property("ModificationDate")
- .HasColumnType("datetime2");
-
- b.Property("Name")
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("Id");
-
- b.ToTable("PermissionValue");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Role", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int")
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- b.Property("Abbr")
- .HasColumnType("nvarchar(max)");
-
- b.Property("CreateDateTime")
- .HasColumnType("datetime2");
-
- b.Property("Description")
- .HasColumnType("nvarchar(max)");
-
- b.Property("EventId")
- .HasColumnType("int");
-
- b.Property("ModificationDate")
- .HasColumnType("datetime2");
-
- b.Property("Name")
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("Id");
-
- b.HasIndex("EventId");
-
- b.ToTable("Role");
-
- b.HasData(
- new
- {
- Id = 1,
- Abbr = "MNG",
- Description = "Manager of the app",
- EventId = 2,
- Name = "Manager"
- },
- new
- {
- Id = 2,
- Abbr = "OPR",
- Description = "Operator in the app",
- EventId = 2,
- Name = "Operator"
- },
- new
- {
- Id = 3,
- Abbr = "CRT",
- Description = "Creator content in the events",
- EventId = 2,
- Name = "Creator"
- },
- new
- {
- Id = 4,
- Abbr = "USR",
- Description = "Player in the application",
- EventId = 2,
- Name = "User"
- });
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.TimeSlot", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int")
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- b.Property("CreateDateTime")
- .HasColumnType("datetime2");
-
- b.Property("ModificationDate")
- .HasColumnType("datetime2");
-
- b.Property("Name")
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("Id");
-
- b.ToTable("TimeSlot");
-
- b.HasData(
- new
- {
- Id = 1,
- Name = "MON"
- },
- new
- {
- Id = 2,
- Name = "EVE"
- },
- new
- {
- Id = 3,
- Name = "NGH"
- });
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.User", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int")
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- b.Property("Blog")
- .HasColumnType("nvarchar(max)");
-
- b.Property("CreateDateTime")
- .HasColumnType("datetime2");
-
- b.Property("Mail")
- .HasColumnType("nvarchar(max)");
-
- b.Property("ModificationDate")
- .HasColumnType("datetime2");
-
- b.Property("Name")
- .HasColumnType("nvarchar(max)");
-
- b.Property("Password")
- .HasColumnType("nvarchar(max)");
-
- b.Property("StatusId")
- .HasColumnType("int");
-
- b.Property("Website")
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("Id");
-
- b.HasIndex("StatusId");
-
- b.ToTable("User");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.UserStatus", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int")
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- b.Property("Abbr")
- .HasColumnType("nvarchar(max)");
-
- b.Property("CreateDateTime")
- .HasColumnType("datetime2");
-
- b.Property("Description")
- .HasColumnType("nvarchar(max)");
-
- b.Property("ModificationDate")
- .HasColumnType("datetime2");
-
- b.Property("Name")
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("Id");
-
- b.ToTable("UserStatus");
-
- b.HasData(
- new
- {
- Id = 1,
- Abbr = "PEN",
- Description = "Pending to confirm",
- Name = "Pending"
- },
- new
- {
- Id = 2,
- Abbr = "ACT",
- Description = "Active user",
- Name = "Active"
- },
- new
- {
- Id = 3,
- Abbr = "REV",
- Description = "In revision process",
- Name = "Revision"
- },
- new
- {
- Id = 4,
- Abbr = "BAN",
- Description = "Banned from event",
- Name = "Banned"
- },
- new
- {
- Id = 5,
- Abbr = "INC",
- Description = "Pending to confirm",
- Name = "Inactive"
- });
- });
-
- modelBuilder.Entity("ActivityUser", b =>
- {
- b.HasOne("TaleEngine.Data.Contracts.Entities.Activity", null)
- .WithMany()
- .HasForeignKey("ActivitiesCreateId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("TaleEngine.Data.Contracts.Entities.User", null)
- .WithMany()
- .HasForeignKey("UsersCreateId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("ActivityUser1", b =>
- {
- b.HasOne("TaleEngine.Data.Contracts.Entities.Activity", null)
- .WithMany()
- .HasForeignKey("ActivitiesFavId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("TaleEngine.Data.Contracts.Entities.User", null)
- .WithMany()
- .HasForeignKey("UsersFavId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("ActivityUser2", b =>
- {
- b.HasOne("TaleEngine.Data.Contracts.Entities.Activity", null)
- .WithMany()
- .HasForeignKey("ActivitiesPlayId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("TaleEngine.Data.Contracts.Entities.User", null)
- .WithMany()
- .HasForeignKey("UsersPlayId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("RoleUser", b =>
- {
- b.HasOne("TaleEngine.Data.Contracts.Entities.Role", null)
- .WithMany()
- .HasForeignKey("RolesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("TaleEngine.Data.Contracts.Entities.User", null)
- .WithMany()
- .HasForeignKey("UsersId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Activity", b =>
- {
- b.HasOne("TaleEngine.Data.Contracts.Entities.Edition", "Edition")
- .WithMany("Activities")
- .HasForeignKey("EditionId")
- .OnDelete(DeleteBehavior.Restrict)
- .IsRequired();
-
- b.HasOne("TaleEngine.Data.Contracts.Entities.ActivityStatus", "Status")
- .WithMany("Activities")
- .HasForeignKey("StatusId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("TaleEngine.Data.Contracts.Entities.TimeSlot", "TimeSlot")
- .WithMany("Activities")
- .HasForeignKey("TimeSlotId");
-
- b.HasOne("TaleEngine.Data.Contracts.Entities.ActivityType", "Type")
- .WithMany("Activities")
- .HasForeignKey("TypeId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Edition");
-
- b.Navigation("Status");
-
- b.Navigation("TimeSlot");
-
- b.Navigation("Type");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.AssignedPermission", b =>
- {
- b.HasOne("TaleEngine.Data.Contracts.Entities.Permission", "Permission")
- .WithMany()
- .HasForeignKey("PermissionId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("TaleEngine.Data.Contracts.Entities.PermissionValue", "PermissionValue")
- .WithMany()
- .HasForeignKey("PermissionValueId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("TaleEngine.Data.Contracts.Entities.Role", "Role")
- .WithMany()
- .HasForeignKey("RoleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Permission");
-
- b.Navigation("PermissionValue");
-
- b.Navigation("Role");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Edition", b =>
- {
- b.HasOne("TaleEngine.Data.Contracts.Entities.Event", "Event")
- .WithMany("Editions")
- .HasForeignKey("EventId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Event");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Role", b =>
- {
- b.HasOne("TaleEngine.Data.Contracts.Entities.Event", "Event")
- .WithMany("Roles")
- .HasForeignKey("EventId");
-
- b.Navigation("Event");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.User", b =>
- {
- b.HasOne("TaleEngine.Data.Contracts.Entities.UserStatus", "Status")
- .WithMany("Users")
- .HasForeignKey("StatusId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Status");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.ActivityStatus", b =>
- {
- b.Navigation("Activities");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.ActivityType", b =>
- {
- b.Navigation("Activities");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Edition", b =>
- {
- b.Navigation("Activities");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Event", b =>
- {
- b.Navigation("Editions");
-
- b.Navigation("Roles");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.TimeSlot", b =>
- {
- b.Navigation("Activities");
- });
-
- modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.UserStatus", b =>
- {
- b.Navigation("Users");
- });
-#pragma warning restore 612, 618
- }
- }
-}
+//
+using System;
+using System.Diagnostics.CodeAnalysis;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using TaleEngine.Data;
+
+namespace TaleEngine.Data.Migrations
+{
+ [DbContext(typeof(TaleEngineContext))]
+ [ExcludeFromCodeCoverage]
+ partial class TaleEngineContextModelSnapshot : ModelSnapshot
+ {
+ protected override void BuildModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("ProductVersion", "5.0.4")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ modelBuilder.Entity("ActivityUser", b =>
+ {
+ b.Property("ActivitiesCreateId")
+ .HasColumnType("int");
+
+ b.Property("UsersCreateId")
+ .HasColumnType("int");
+
+ b.HasKey("ActivitiesCreateId", "UsersCreateId");
+
+ b.HasIndex("UsersCreateId");
+
+ b.ToTable("ActivityCreators");
+ });
+
+ modelBuilder.Entity("ActivityUser1", b =>
+ {
+ b.Property("ActivitiesFavId")
+ .HasColumnType("int");
+
+ b.Property("UsersFavId")
+ .HasColumnType("int");
+
+ b.HasKey("ActivitiesFavId", "UsersFavId");
+
+ b.HasIndex("UsersFavId");
+
+ b.ToTable("FavActivities");
+ });
+
+ modelBuilder.Entity("ActivityUser2", b =>
+ {
+ b.Property("ActivitiesPlayId")
+ .HasColumnType("int");
+
+ b.Property("UsersPlayId")
+ .HasColumnType("int");
+
+ b.HasKey("ActivitiesPlayId", "UsersPlayId");
+
+ b.HasIndex("UsersPlayId");
+
+ b.ToTable("ActivityEnrollments");
+ });
+
+ modelBuilder.Entity("RoleUser", b =>
+ {
+ b.Property("RolesId")
+ .HasColumnType("int");
+
+ b.Property("UsersId")
+ .HasColumnType("int");
+
+ b.HasKey("RolesId", "UsersId");
+
+ b.HasIndex("UsersId");
+
+ b.ToTable("RoleUser");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Activity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("CreateDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("EditionId")
+ .HasColumnType("int");
+
+ b.Property("EndDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Image")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ModificationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Places")
+ .HasColumnType("int");
+
+ b.Property("PublicationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("StartDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("StatusId")
+ .HasColumnType("int");
+
+ b.Property("TimeSlotId")
+ .HasColumnType("int");
+
+ b.Property("Title")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TypeId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EditionId");
+
+ b.HasIndex("StatusId");
+
+ b.HasIndex("TimeSlotId");
+
+ b.HasIndex("TypeId");
+
+ b.ToTable("Activity");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.ActivityStatus", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Abbr")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreateDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ModificationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("ActivityStatus");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Abbr = "PEN",
+ Description = "Waiting for approval",
+ Name = "Pending"
+ },
+ new
+ {
+ Id = 2,
+ Abbr = "ACT",
+ Description = "Accepted and waiting for participants",
+ Name = "Active"
+ },
+ new
+ {
+ Id = 3,
+ Abbr = "REV",
+ Description = "In revision process",
+ Name = "Revision"
+ },
+ new
+ {
+ Id = 4,
+ Abbr = "BAN",
+ Description = "Excluded as it doesn't align with the core values",
+ Name = "Banned"
+ });
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.ActivityType", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Abbr")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreateDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ModificationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("ActivityType");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Abbr = "TTRPG",
+ Description = "Tabletop roleplaying game session",
+ Name = "Tabletop role-playing games"
+ },
+ new
+ {
+ Id = 2,
+ Abbr = "BG",
+ Description = "Board games for everyone!",
+ Name = "Board games"
+ },
+ new
+ {
+ Id = 3,
+ Abbr = "TOU",
+ Description = "A board or card game competition",
+ Name = "Tournament"
+ },
+ new
+ {
+ Id = 4,
+ Abbr = "DEM",
+ Description = "Show your brand new project to the community",
+ Name = "Demos"
+ },
+ new
+ {
+ Id = 5,
+ Abbr = "LARP",
+ Description = "Role-play games in live action",
+ Name = "Live action role-playing"
+ });
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.AssignedPermission", b =>
+ {
+ b.Property("RoleId")
+ .HasColumnType("int");
+
+ b.Property("PermissionId")
+ .HasColumnType("int");
+
+ b.Property("PermissionValueId")
+ .HasColumnType("int");
+
+ b.Property("CreateDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Id")
+ .HasColumnType("int");
+
+ b.Property("ModificationDate")
+ .HasColumnType("datetime2");
+
+ b.HasKey("RoleId", "PermissionId", "PermissionValueId");
+
+ b.HasIndex("PermissionId");
+
+ b.HasIndex("PermissionValueId");
+
+ b.ToTable("AssignedPermissions");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Edition", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("CreateDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("DateEnd")
+ .HasColumnType("datetime2");
+
+ b.Property("DateInit")
+ .HasColumnType("datetime2");
+
+ b.Property("EventId")
+ .HasColumnType("int");
+
+ b.Property("ModificationDate")
+ .HasColumnType("datetime2");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EventId");
+
+ b.ToTable("Edition");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Event", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("CreateDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ModificationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Title")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Event");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Permission", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Abbr")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreateDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ModificationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Permission");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Abbr = "SEE",
+ Name = "See activities"
+ },
+ new
+ {
+ Id = 2,
+ Abbr = "REQJOIN",
+ Name = "Request join"
+ },
+ new
+ {
+ Id = 3,
+ Abbr = "MARKFAV",
+ Name = "Mark as favourite"
+ },
+ new
+ {
+ Id = 4,
+ Abbr = "ABANACT",
+ Name = "Abandon activity"
+ },
+ new
+ {
+ Id = 5,
+ Abbr = "PROPACT",
+ Name = "Propose activity"
+ },
+ new
+ {
+ Id = 6,
+ Abbr = "EDITACT",
+ Name = "Edit proposed activity"
+ },
+ new
+ {
+ Id = 7,
+ Abbr = "DELACT",
+ Name = "Delete proposed activity"
+ },
+ new
+ {
+ Id = 8,
+ Abbr = "SEEPART",
+ Name = "See participants"
+ },
+ new
+ {
+ Id = 9,
+ Abbr = "ACCACTEDIT",
+ Name = "Accept activity edit"
+ },
+ new
+ {
+ Id = 10,
+ Abbr = "ACCACTDEL",
+ Name = "Accept activity deletion"
+ },
+ new
+ {
+ Id = 11,
+ Abbr = "MARKREV",
+ Name = "Mark proposal for revision"
+ },
+ new
+ {
+ Id = 12,
+ Abbr = "CRTU",
+ Name = "Create user"
+ },
+ new
+ {
+ Id = 13,
+ Abbr = "DELU",
+ Name = "Delete user"
+ },
+ new
+ {
+ Id = 14,
+ Abbr = "BANU",
+ Name = "Ban user"
+ },
+ new
+ {
+ Id = 15,
+ Abbr = "ACCACTPROP",
+ Name = "Accept activity proposal"
+ },
+ new
+ {
+ Id = 16,
+ Abbr = "DELACTPROP",
+ Name = "Delete activity proposal"
+ },
+ new
+ {
+ Id = 17,
+ Abbr = "EDITU",
+ Name = "Edit user"
+ });
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.PermissionValue", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Abbr")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreateDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ModificationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("PermissionValue");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Role", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Abbr")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreateDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("EventId")
+ .HasColumnType("int");
+
+ b.Property("ModificationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EventId");
+
+ b.ToTable("Role");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Abbr = "MNG",
+ Description = "Manager of the app",
+ EventId = 2,
+ Name = "Manager"
+ },
+ new
+ {
+ Id = 2,
+ Abbr = "OPR",
+ Description = "Operator in the app",
+ EventId = 2,
+ Name = "Operator"
+ },
+ new
+ {
+ Id = 3,
+ Abbr = "CRT",
+ Description = "Creator content in the events",
+ EventId = 2,
+ Name = "Creator"
+ },
+ new
+ {
+ Id = 4,
+ Abbr = "USR",
+ Description = "Player in the application",
+ EventId = 2,
+ Name = "User"
+ });
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.TimeSlot", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("CreateDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ModificationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("TimeSlot");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Name = "MON"
+ },
+ new
+ {
+ Id = 2,
+ Name = "EVE"
+ },
+ new
+ {
+ Id = 3,
+ Name = "NGH"
+ });
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.User", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Blog")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreateDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Mail")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ModificationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Password")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("StatusId")
+ .HasColumnType("int");
+
+ b.Property("Website")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("StatusId");
+
+ b.ToTable("User");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.UserStatus", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Abbr")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreateDateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ModificationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("UserStatus");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Abbr = "PEN",
+ Description = "Pending to confirm",
+ Name = "Pending"
+ },
+ new
+ {
+ Id = 2,
+ Abbr = "ACT",
+ Description = "Active user",
+ Name = "Active"
+ },
+ new
+ {
+ Id = 3,
+ Abbr = "REV",
+ Description = "In revision process",
+ Name = "Revision"
+ },
+ new
+ {
+ Id = 4,
+ Abbr = "BAN",
+ Description = "Banned from event",
+ Name = "Banned"
+ },
+ new
+ {
+ Id = 5,
+ Abbr = "INC",
+ Description = "Pending to confirm",
+ Name = "Inactive"
+ });
+ });
+
+ modelBuilder.Entity("ActivityUser", b =>
+ {
+ b.HasOne("TaleEngine.Data.Contracts.Entities.Activity", null)
+ .WithMany()
+ .HasForeignKey("ActivitiesCreateId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("TaleEngine.Data.Contracts.Entities.User", null)
+ .WithMany()
+ .HasForeignKey("UsersCreateId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("ActivityUser1", b =>
+ {
+ b.HasOne("TaleEngine.Data.Contracts.Entities.Activity", null)
+ .WithMany()
+ .HasForeignKey("ActivitiesFavId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("TaleEngine.Data.Contracts.Entities.User", null)
+ .WithMany()
+ .HasForeignKey("UsersFavId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("ActivityUser2", b =>
+ {
+ b.HasOne("TaleEngine.Data.Contracts.Entities.Activity", null)
+ .WithMany()
+ .HasForeignKey("ActivitiesPlayId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("TaleEngine.Data.Contracts.Entities.User", null)
+ .WithMany()
+ .HasForeignKey("UsersPlayId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("RoleUser", b =>
+ {
+ b.HasOne("TaleEngine.Data.Contracts.Entities.Role", null)
+ .WithMany()
+ .HasForeignKey("RolesId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("TaleEngine.Data.Contracts.Entities.User", null)
+ .WithMany()
+ .HasForeignKey("UsersId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Activity", b =>
+ {
+ b.HasOne("TaleEngine.Data.Contracts.Entities.Edition", "Edition")
+ .WithMany("Activities")
+ .HasForeignKey("EditionId")
+ .OnDelete(DeleteBehavior.Restrict)
+ .IsRequired();
+
+ b.HasOne("TaleEngine.Data.Contracts.Entities.ActivityStatus", "Status")
+ .WithMany("Activities")
+ .HasForeignKey("StatusId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("TaleEngine.Data.Contracts.Entities.TimeSlot", "TimeSlot")
+ .WithMany("Activities")
+ .HasForeignKey("TimeSlotId");
+
+ b.HasOne("TaleEngine.Data.Contracts.Entities.ActivityType", "Type")
+ .WithMany("Activities")
+ .HasForeignKey("TypeId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Edition");
+
+ b.Navigation("Status");
+
+ b.Navigation("TimeSlot");
+
+ b.Navigation("Type");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.AssignedPermission", b =>
+ {
+ b.HasOne("TaleEngine.Data.Contracts.Entities.Permission", "Permission")
+ .WithMany()
+ .HasForeignKey("PermissionId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("TaleEngine.Data.Contracts.Entities.PermissionValue", "PermissionValue")
+ .WithMany()
+ .HasForeignKey("PermissionValueId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("TaleEngine.Data.Contracts.Entities.Role", "Role")
+ .WithMany()
+ .HasForeignKey("RoleId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Permission");
+
+ b.Navigation("PermissionValue");
+
+ b.Navigation("Role");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Edition", b =>
+ {
+ b.HasOne("TaleEngine.Data.Contracts.Entities.Event", "Event")
+ .WithMany("Editions")
+ .HasForeignKey("EventId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Event");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Role", b =>
+ {
+ b.HasOne("TaleEngine.Data.Contracts.Entities.Event", "Event")
+ .WithMany("Roles")
+ .HasForeignKey("EventId");
+
+ b.Navigation("Event");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.User", b =>
+ {
+ b.HasOne("TaleEngine.Data.Contracts.Entities.UserStatus", "Status")
+ .WithMany("Users")
+ .HasForeignKey("StatusId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Status");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.ActivityStatus", b =>
+ {
+ b.Navigation("Activities");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.ActivityType", b =>
+ {
+ b.Navigation("Activities");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Edition", b =>
+ {
+ b.Navigation("Activities");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.Event", b =>
+ {
+ b.Navigation("Editions");
+
+ b.Navigation("Roles");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.TimeSlot", b =>
+ {
+ b.Navigation("Activities");
+ });
+
+ modelBuilder.Entity("TaleEngine.Data.Contracts.Entities.UserStatus", b =>
+ {
+ b.Navigation("Users");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/TaleEngine/TaleEngine.Data/Repositories/ActivityRepository.cs b/TaleEngine/TaleEngine.Data/Repositories/ActivityRepository.cs
index f3f585f..76022e3 100644
--- a/TaleEngine/TaleEngine.Data/Repositories/ActivityRepository.cs
+++ b/TaleEngine/TaleEngine.Data/Repositories/ActivityRepository.cs
@@ -1,19 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
using TaleEngine.Data.Contracts.Repositories;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Repositories
{
public class ActivityRepository : IActivityRepository
{
- private readonly IDatabaseContext _context;
+ private readonly TaleEngineContext _dbContext;
- public ActivityRepository(IDatabaseContext context)
+ public IUnitOfWork UnitOfWork
{
- _context = context;
+ get
+ {
+ return _dbContext;
+ }
+ }
+
+ public ActivityRepository(TaleEngineContext context)
+ {
+ _dbContext = context ?? throw new ArgumentNullException(nameof(context));
}
public void Delete(int entityId)
@@ -23,40 +31,40 @@ public void Delete(int entityId)
public List GetAll()
{
- return _context.Activities.ToList();
+ return _dbContext.Activities.ToList();
}
public Activity GetById(int entityId)
{
- return _context.Activities
+ return _dbContext.Activities
.FirstOrDefault(a => a.Id == entityId);
}
public void Insert(Activity entity)
{
- _context.Activities.Add(entity);
+ _dbContext.Activities.Add(entity);
}
public void Save()
{
- _context.SaveChanges();
+ _dbContext.SaveChanges();
}
public void Update(Activity entity)
{
- _context.Activities.Update(entity);
+ _dbContext.Activities.Update(entity);
}
public List GetEventActivities(int editionId)
{
- return _context.Activities
+ return _dbContext.Activities
.Where(a => a.EditionId == editionId)
.ToList();
}
public List GetActivitiesByStatus(int edition, int status)
{
- return _context.Activities
+ return _dbContext.Activities
.Where(a => a.EditionId == edition && a.StatusId == status)
.ToList();
}
@@ -85,7 +93,7 @@ public int GetTotalActivities(int status, int type, int edition, string title)
private IQueryable GetActiveActivitiesWithFilter(int status, int type, int edition, string title)
{
- var query = _context.Activities.Select(a => a).Where(a => a.EditionId == edition);
+ var query = _dbContext.Activities.Select(a => a).Where(a => a.EditionId == edition);
if (status != 0)
{
query = query.Where(a => a.StatusId == status);
@@ -102,4 +110,4 @@ private IQueryable GetActiveActivitiesWithFilter(int status, int type,
return query;
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data/Repositories/ActivityStatusRepository.cs b/TaleEngine/TaleEngine.Data/Repositories/ActivityStatusRepository.cs
index 3f3ff05..460f0ff 100644
--- a/TaleEngine/TaleEngine.Data/Repositories/ActivityStatusRepository.cs
+++ b/TaleEngine/TaleEngine.Data/Repositories/ActivityStatusRepository.cs
@@ -1,18 +1,27 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using System.Linq;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
using TaleEngine.Data.Contracts.Repositories;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Repositories
{
public class ActivityStatusRepository : IActivityStatusRepository
{
- private readonly IDatabaseContext _context;
+ private readonly TaleEngineContext _dbContext;
- public ActivityStatusRepository(IDatabaseContext context)
+ public IUnitOfWork UnitOfWork
{
- _context = context;
+ get
+ {
+ return _dbContext;
+ }
+ }
+
+ public ActivityStatusRepository(TaleEngineContext context)
+ {
+ _dbContext = context ?? throw new ArgumentNullException(nameof(context));
}
public void Delete(int entityId)
@@ -22,28 +31,28 @@ public void Delete(int entityId)
public List GetAll()
{
- return _context.ActivityStatuses.ToList();
+ return _dbContext.ActivityStatuses.ToList();
}
public ActivityStatus GetById(int entityId)
{
- return _context.ActivityStatuses
+ return _dbContext.ActivityStatuses
.FirstOrDefault(aS => aS.Id == entityId);
}
public void Insert(ActivityStatus entity)
{
- _context.ActivityStatuses.Add(entity);
+ _dbContext.ActivityStatuses.Add(entity);
}
public void Save()
{
- _context.SaveChanges();
+ _dbContext.SaveChanges();
}
public void Update(ActivityStatus entity)
{
- _context.ActivityStatuses.Update(entity);
+ _dbContext.ActivityStatuses.Update(entity);
}
}
}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data/Repositories/ActivityTypeRepository.cs b/TaleEngine/TaleEngine.Data/Repositories/ActivityTypeRepository.cs
index 2044ed6..0d9b9dd 100644
--- a/TaleEngine/TaleEngine.Data/Repositories/ActivityTypeRepository.cs
+++ b/TaleEngine/TaleEngine.Data/Repositories/ActivityTypeRepository.cs
@@ -1,18 +1,27 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using System.Linq;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
using TaleEngine.Data.Contracts.Repositories;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Repositories
{
public class ActivityTypeRepository : IActivityTypeRepository
{
- private readonly IDatabaseContext _context;
+ private readonly TaleEngineContext _dbContext;
- public ActivityTypeRepository(IDatabaseContext context)
+ public IUnitOfWork UnitOfWork
{
- _context = context;
+ get
+ {
+ return _dbContext;
+ }
+ }
+
+ public ActivityTypeRepository(TaleEngineContext context)
+ {
+ _dbContext = context ?? throw new ArgumentNullException(nameof(context));
}
public void Delete(int entityId)
@@ -22,28 +31,28 @@ public void Delete(int entityId)
public List GetAll()
{
- return _context.ActivityTypes.ToList();
+ return _dbContext.ActivityTypes.ToList();
}
public ActivityType GetById(int entityId)
{
- return _context.ActivityTypes
+ return _dbContext.ActivityTypes
.FirstOrDefault(aT => aT.Id == entityId);
}
public void Insert(ActivityType entity)
{
- _context.ActivityTypes.Add(entity);
+ _dbContext.ActivityTypes.Add(entity);
}
public void Save()
{
- _context.SaveChanges();
+ _dbContext.SaveChanges();
}
public void Update(ActivityType entity)
{
- _context.ActivityTypes.Update(entity);
+ _dbContext.ActivityTypes.Update(entity);
}
}
}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data/Repositories/EditionRepository.cs b/TaleEngine/TaleEngine.Data/Repositories/EditionRepository.cs
index d4d9ff1..2ee5ffc 100644
--- a/TaleEngine/TaleEngine.Data/Repositories/EditionRepository.cs
+++ b/TaleEngine/TaleEngine.Data/Repositories/EditionRepository.cs
@@ -1,19 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
using TaleEngine.Data.Contracts.Repositories;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Repositories
{
public class EditionRepository : IEditionRepository
{
- private readonly IDatabaseContext _context;
+ private readonly TaleEngineContext _dbContext;
- public EditionRepository(IDatabaseContext context)
+ public IUnitOfWork UnitOfWork
{
- _context = context;
+ get
+ {
+ return _dbContext;
+ }
+ }
+
+ public EditionRepository(TaleEngineContext context)
+ {
+ _dbContext = context ?? throw new ArgumentNullException(nameof(context));
}
public void Delete(int entityId)
@@ -23,32 +31,32 @@ public void Delete(int entityId)
public List GetAll()
{
- return _context.Editions.ToList();
+ return _dbContext.Editions.ToList();
}
public Edition GetById(int entityId)
{
- return _context.Editions.FirstOrDefault(ed => ed.Id == entityId);
+ return _dbContext.Editions.FirstOrDefault(ed => ed.Id == entityId);
}
public Edition GetLastEditionInEvent(int ofEvent)
{
- return _context.Editions.FirstOrDefault(ed => ed.EventId == ofEvent);
+ return _dbContext.Editions.FirstOrDefault(ed => ed.EventId == ofEvent);
}
public void Insert(Edition entity)
{
- _context.Editions.Add(entity);
+ _dbContext.Editions.Add(entity);
}
public void Save()
{
- _context.SaveChanges();
+ _dbContext.SaveChanges();
}
public void Update(Edition entity)
{
- _context.Editions.Update(entity);
+ _dbContext.Editions.Update(entity);
}
}
}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data/Repositories/EventRepository.cs b/TaleEngine/TaleEngine.Data/Repositories/EventRepository.cs
index d1904b0..e3069e6 100644
--- a/TaleEngine/TaleEngine.Data/Repositories/EventRepository.cs
+++ b/TaleEngine/TaleEngine.Data/Repositories/EventRepository.cs
@@ -1,18 +1,27 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using System.Linq;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
using TaleEngine.Data.Contracts.Repositories;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Repositories
{
public class EventRepository : IEventRepository
{
- private readonly IDatabaseContext _context;
+ private readonly TaleEngineContext _dbContext;
- public EventRepository(IDatabaseContext context)
+ public IUnitOfWork UnitOfWork
{
- _context = context;
+ get
+ {
+ return _dbContext;
+ }
+ }
+
+ public EventRepository(TaleEngineContext context)
+ {
+ _dbContext = context ?? throw new ArgumentNullException(nameof(context));
}
public void Delete(int entityId)
@@ -22,28 +31,28 @@ public void Delete(int entityId)
public List GetAll()
{
- return _context.Events.ToList();
+ return _dbContext.Events.ToList();
}
public Event GetById(int entityId)
{
- return _context.Events
+ return _dbContext.Events
.FirstOrDefault(ev => ev.Id == entityId);
}
public void Insert(Event entity)
{
- _context.Events.Add(entity);
+ _dbContext.Events.Add(entity);
}
public void Save()
{
- _context.SaveChanges();
+ _dbContext.SaveChanges();
}
public void Update(Event entity)
{
- _context.Events.Update(entity);
+ _dbContext.Events.Update(entity);
}
}
}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data/Repositories/RoleRepository.cs b/TaleEngine/TaleEngine.Data/Repositories/RoleRepository.cs
index e23e87a..c8213f4 100644
--- a/TaleEngine/TaleEngine.Data/Repositories/RoleRepository.cs
+++ b/TaleEngine/TaleEngine.Data/Repositories/RoleRepository.cs
@@ -1,19 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
using TaleEngine.Data.Contracts.Repositories;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Repositories
{
public class RoleRepository : IRoleRepository
{
- private IDatabaseContext _context;
+ private readonly TaleEngineContext _dbContext;
- public RoleRepository(IDatabaseContext context)
+ public IUnitOfWork UnitOfWork
{
- _context = context ?? throw new ArgumentNullException(nameof(context));
+ get
+ {
+ return _dbContext;
+ }
+ }
+
+ public RoleRepository(TaleEngineContext context)
+ {
+ _dbContext = context ?? throw new ArgumentNullException(nameof(context));
}
public void Delete(int entityId)
@@ -23,7 +31,7 @@ public void Delete(int entityId)
public List GetAll()
{
- return _context.Roles.ToList();
+ return _dbContext.Roles.ToList();
}
public Role GetById(int entityId)
@@ -33,17 +41,17 @@ public Role GetById(int entityId)
public void Insert(Role entity)
{
- _context.Roles.Add(entity);
+ _dbContext.Roles.Add(entity);
}
public void Save()
{
- _context.SaveChanges();
+ _dbContext.SaveChanges();
}
public void Update(Role entity)
{
- _context.Roles.Update(entity);
+ _dbContext.Roles.Update(entity);
}
}
}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data/Repositories/TimeSlotRepository.cs b/TaleEngine/TaleEngine.Data/Repositories/TimeSlotRepository.cs
index 2b7277a..1231530 100644
--- a/TaleEngine/TaleEngine.Data/Repositories/TimeSlotRepository.cs
+++ b/TaleEngine/TaleEngine.Data/Repositories/TimeSlotRepository.cs
@@ -1,19 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using TaleEngine.Data.Contracts;
using TaleEngine.Data.Contracts.Entities;
using TaleEngine.Data.Contracts.Repositories;
+using TaleEngine.Data.Contracts.SeedWork;
namespace TaleEngine.Data.Repositories
{
public class TimeSlotRepository : ITimeSlotRepository
{
- private readonly IDatabaseContext _context;
+ private readonly TaleEngineContext _dbContext;
- public TimeSlotRepository(IDatabaseContext context)
+ public IUnitOfWork UnitOfWork
{
- _context = context;
+ get
+ {
+ return _dbContext;
+ }
+ }
+
+ public TimeSlotRepository(TaleEngineContext context)
+ {
+ _dbContext = context ?? throw new ArgumentNullException(nameof(context));
}
public void Delete(int entityId)
@@ -23,28 +31,28 @@ public void Delete(int entityId)
public List GetAll()
{
- return _context.TimeSlot.ToList();
+ return _dbContext.TimeSlot.ToList();
}
public TimeSlot GetById(int entityId)
{
- return _context.TimeSlot
+ return _dbContext.TimeSlot
.FirstOrDefault(a => a.Id == entityId);
}
public void Insert(TimeSlot entity)
{
- _context.TimeSlot.Add(entity);
+ _dbContext.TimeSlot.Add(entity);
}
public void Save()
{
- _context.SaveChanges();
+ _dbContext.SaveChanges();
}
public void Update(TimeSlot entity)
{
- _context.TimeSlot.Update(entity);
+ _dbContext.TimeSlot.Update(entity);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data/SeedWork/Entity.cs b/TaleEngine/TaleEngine.Data/SeedWork/Entity.cs
new file mode 100644
index 0000000..6c5ab25
--- /dev/null
+++ b/TaleEngine/TaleEngine.Data/SeedWork/Entity.cs
@@ -0,0 +1,92 @@
+using MediatR;
+using System.Collections.Generic;
+
+namespace TaleEngine.Data.SeedWork
+{
+ public abstract class Entity
+ {
+ private int? _requestedHashCode;
+ private int _Id;
+
+ public virtual int Id
+ {
+ get
+ {
+ return _Id;
+ }
+ protected set
+ {
+ _Id = value;
+ }
+ }
+
+ private List _domainEvents;
+ public IReadOnlyCollection DomainEvents => _domainEvents?.AsReadOnly();
+
+ public void AddDomainEvent(INotification eventItem)
+ {
+ _domainEvents = _domainEvents ?? new List();
+ _domainEvents.Add(eventItem);
+ }
+
+ public void RemoveDomainEvent(INotification eventItem)
+ {
+ _domainEvents?.Remove(eventItem);
+ }
+
+ public void ClearDomainEvents()
+ {
+ _domainEvents?.Clear();
+ }
+
+ public bool IsTransient()
+ {
+ return Id == default;
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj == null || !(obj is Entity))
+ return false;
+
+ if (ReferenceEquals(this, obj))
+ return true;
+
+ if (GetType() != obj.GetType())
+ return false;
+
+ Entity item = (Entity)obj;
+
+ if (item.IsTransient() || IsTransient())
+ return false;
+ else
+ return item.Id == Id;
+ }
+
+ public override int GetHashCode()
+ {
+ if (!IsTransient())
+ {
+ if (!_requestedHashCode.HasValue)
+ _requestedHashCode = Id.GetHashCode() ^ 31; // XOR for random distribution (http://blogs.msdn.com/b/ericlippert/archive/2011/02/28/guidelines-and-rules-for-gethashcode.aspx)
+
+ return _requestedHashCode.Value;
+ }
+ else
+ return base.GetHashCode();
+ }
+
+ public static bool operator ==(Entity left, Entity right)
+ {
+ if (Equals(left, null))
+ return Equals(right, null) ? true : false;
+ else
+ return left.Equals(right);
+ }
+
+ public static bool operator !=(Entity left, Entity right)
+ {
+ return !(left == right);
+ }
+ }
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data/TaleEngine.Data.csproj b/TaleEngine/TaleEngine.Data/TaleEngine.Data.csproj
index d167531..24d3ff7 100644
--- a/TaleEngine/TaleEngine.Data/TaleEngine.Data.csproj
+++ b/TaleEngine/TaleEngine.Data/TaleEngine.Data.csproj
@@ -26,9 +26,10 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/TaleEngine/TaleEngine.Data/DatabaseContext.cs b/TaleEngine/TaleEngine.Data/TaleEngineContext.cs
similarity index 61%
rename from TaleEngine/TaleEngine.Data/DatabaseContext.cs
rename to TaleEngine/TaleEngine.Data/TaleEngineContext.cs
index 6b94d95..bd63665 100644
--- a/TaleEngine/TaleEngine.Data/DatabaseContext.cs
+++ b/TaleEngine/TaleEngine.Data/TaleEngineContext.cs
@@ -1,16 +1,37 @@
-using Microsoft.EntityFrameworkCore;
+using MediatR;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.Configuration;
using System;
+using System.Data;
using System.Linq;
-using TaleEngine.Data.Contracts;
+using System.Threading;
+using System.Threading.Tasks;
using TaleEngine.Data.Contracts.Entities;
+using TaleEngine.Data.Contracts.SeedWork;
using TaleEngine.Data.Data;
namespace TaleEngine.Data
{
- public class DatabaseContext : DbContext, IDatabaseContext
+ public class TaleEngineContext : DbContext, IUnitOfWork
{
- public DatabaseContext(DbContextOptions options) : base(options) { }
+ private readonly IMediator _mediator;
+ private IDbContextTransaction _currentTransaction;
+
+ public TaleEngineContext(DbContextOptions options) : base(options)
+ {
+ }
+
+ public TaleEngineContext(DbContextOptions options, IMediator mediator) : base(options)
+ {
+ _mediator = mediator ?? throw new ArgumentNullException(nameof(mediator));
+
+ System.Diagnostics.Debug.WriteLine("TaleEngineContext::ctor ->" + this.GetHashCode());
+ }
+
+ public IDbContextTransaction GetCurrentTransaction() => _currentTransaction;
+
+ public bool HasActiveTransaction => _currentTransaction != null;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
@@ -20,7 +41,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json")
.Build();
- optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection")).EnableSensitiveDataLogging();
+ optionsBuilder.UseSqlServer(configuration["ConnectionString"]).EnableSensitiveDataLogging();
}
}
@@ -38,6 +59,73 @@ public override int SaveChanges()
return base.SaveChanges();
}
+ public async Task SaveEntitiesAsync(CancellationToken cancellationToken = default(CancellationToken))
+ {
+ // Dispatch Domain Events collection.
+ // Choices:
+ // A) Right BEFORE committing data (EF SaveChanges) into the DB will make a single transaction including
+ // side effects from the domain event handlers which are using the same DbContext with "InstancePerLifetimeScope" or "scoped" lifetime
+ // B) Right AFTER committing data (EF SaveChanges) into the DB will make multiple transactions.
+ // You will need to handle eventual consistency and compensatory actions in case of failures in any of the Handlers.
+ await _mediator.DispatchDomainEventsAsync(this);
+
+ // After executing this line all the changes (from the Command Handler and Domain Event Handlers)
+ // performed through the DbContext will be committed
+ var result = await base.SaveChangesAsync(cancellationToken);
+
+ return true;
+ }
+
+ public async Task BeginTransactionAsync()
+ {
+ if (_currentTransaction != null) return null;
+
+ _currentTransaction = await Database.BeginTransactionAsync(IsolationLevel.ReadCommitted);
+
+ return _currentTransaction;
+ }
+
+ public async Task CommitTransactionAsync(IDbContextTransaction transaction)
+ {
+ if (transaction == null) throw new ArgumentNullException(nameof(transaction));
+ if (transaction != _currentTransaction) throw new InvalidOperationException($"Transaction {transaction.TransactionId} is not current");
+
+ try
+ {
+ await SaveChangesAsync();
+ transaction.Commit();
+ }
+ catch
+ {
+ RollbackTransaction();
+ throw;
+ }
+ finally
+ {
+ if (_currentTransaction != null)
+ {
+ _currentTransaction.Dispose();
+ _currentTransaction = null;
+ }
+ }
+ }
+
+ public void RollbackTransaction()
+ {
+ try
+ {
+ _currentTransaction?.Rollback();
+ }
+ finally
+ {
+ if (_currentTransaction != null)
+ {
+ _currentTransaction.Dispose();
+ _currentTransaction = null;
+ }
+ }
+ }
+
public DbSet Events { get; set; }
public DbSet Activities { get; set; }
public DbSet ActivityTypes { get; set; }
@@ -159,4 +247,4 @@ protected override void OnModelCreating(ModelBuilder builder)
.HasData(InitialTimeSlotData.GetTimeSlotData().ToArray());
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Data/UnitOfWork.cs b/TaleEngine/TaleEngine.Data/UnitOfWork.cs
deleted file mode 100644
index b8e00e8..0000000
--- a/TaleEngine/TaleEngine.Data/UnitOfWork.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-using TaleEngine.Data.Contracts;
-using TaleEngine.Data.Contracts.Repositories;
-using TaleEngine.Data.Repositories;
-
-namespace TaleEngine.Data
-{
- public class UnitOfWork : IUnitOfWork
- {
- private readonly IDatabaseContext _context;
-
- public UnitOfWork(IDatabaseContext databaseContext)
- {
- _context = databaseContext ?? throw new ArgumentNullException(nameof(databaseContext));
-
- EventRepository = new EventRepository(_context);
- EditionRepository = new EditionRepository(_context);
- ActivityRepository = new ActivityRepository(_context);
- ActivityStatusRepository = new ActivityStatusRepository(_context);
- ActivityTypeRepository = new ActivityTypeRepository(_context);
- TimeSlotRepository = new TimeSlotRepository(_context);
- RoleRepository = new RoleRepository(_context);
- }
-
- public IEventRepository EventRepository { get; }
- public IActivityRepository ActivityRepository { get; set; }
- public IActivityStatusRepository ActivityStatusRepository { get; set; }
- public IActivityTypeRepository ActivityTypeRepository { get; set; }
- public IEditionRepository EditionRepository { get; set; }
- public ITimeSlotRepository TimeSlotRepository { get; set; }
- public IRoleRepository RoleRepository { get; set; }
- }
-}
diff --git a/TaleEngine/TaleEngine.IntegrationTests/Base/ActivityScenarioBase.cs b/TaleEngine/TaleEngine.IntegrationTests/Base/ActivityScenarioBase.cs
index 4dd9c4e..9120cf1 100644
--- a/TaleEngine/TaleEngine.IntegrationTests/Base/ActivityScenarioBase.cs
+++ b/TaleEngine/TaleEngine.IntegrationTests/Base/ActivityScenarioBase.cs
@@ -2,6 +2,7 @@
using Microsoft.AspNetCore.TestHost;
using System.Diagnostics.CodeAnalysis;
using Microsoft.Extensions.Configuration;
+using TaleEngine.API;
namespace TaleEngine.IntegrationTests.Base
{
diff --git a/TaleEngine/TaleEngine.IntegrationTests/Base/TaleEngineContextInMemoryDatabase.cs b/TaleEngine/TaleEngine.IntegrationTests/Base/TaleEngineContextInMemoryDatabase.cs
index bf52fea..d770b34 100644
--- a/TaleEngine/TaleEngine.IntegrationTests/Base/TaleEngineContextInMemoryDatabase.cs
+++ b/TaleEngine/TaleEngine.IntegrationTests/Base/TaleEngineContextInMemoryDatabase.cs
@@ -6,18 +6,18 @@
namespace TaleEngine.IntegrationTests
{
[ExcludeFromCodeCoverage]
- public class DatabaseContextInMemoryDatabase
+ public class TaleEngineContextInMemoryDatabase
{
- protected DatabaseContext _dbContext;
+ protected TaleEngineContext _dbContext;
- public DatabaseContextInMemoryDatabase()
+ public TaleEngineContextInMemoryDatabase()
{
var options = CreateNewContextOptions();
- _dbContext = new DatabaseContext(options);
+ _dbContext = new TaleEngineContext(options);
}
- protected static DbContextOptions CreateNewContextOptions()
+ protected static DbContextOptions CreateNewContextOptions()
{
// Create a fresh service provider, and therefore a fresh
// InMemory database instance.
@@ -27,7 +27,7 @@ protected static DbContextOptions CreateNewContextOptions()
// Create a new options instance telling the context to use an
// InMemory database and the new service provider.
- var builder = new DbContextOptionsBuilder();
+ var builder = new DbContextOptionsBuilder();
builder.UseInMemoryDatabase("TaleEngine")
.UseInternalServiceProvider(serviceProvider);
diff --git a/TaleEngine/TaleEngine.IntegrationTests/Repositories/ActivityRepositoryTests.cs b/TaleEngine/TaleEngine.IntegrationTests/Repositories/ActivityRepositoryTests.cs
index ece0cb8..3a944bb 100644
--- a/TaleEngine/TaleEngine.IntegrationTests/Repositories/ActivityRepositoryTests.cs
+++ b/TaleEngine/TaleEngine.IntegrationTests/Repositories/ActivityRepositoryTests.cs
@@ -9,7 +9,7 @@
namespace TaleEngine.IntegrationTests.Repositories
{
[ExcludeFromCodeCoverage]
- public class ActivityRepositoryTests : DatabaseContextInMemoryDatabase
+ public class ActivityRepositoryTests : TaleEngineContextInMemoryDatabase
{
private ActivityRepository CreateActivityRepository()
{
diff --git a/TaleEngine/TaleEngine.IntegrationTests/Repositories/ActivityStatusRepositoryTests.cs b/TaleEngine/TaleEngine.IntegrationTests/Repositories/ActivityStatusRepositoryTests.cs
index 0b1d52a..e1e3b41 100644
--- a/TaleEngine/TaleEngine.IntegrationTests/Repositories/ActivityStatusRepositoryTests.cs
+++ b/TaleEngine/TaleEngine.IntegrationTests/Repositories/ActivityStatusRepositoryTests.cs
@@ -9,7 +9,7 @@
namespace TaleEngine.IntegrationTests.Repositories
{
[ExcludeFromCodeCoverage]
- public class ActivityStatusRepositoryTests : DatabaseContextInMemoryDatabase
+ public class ActivityStatusRepositoryTests : TaleEngineContextInMemoryDatabase
{
private ActivityStatusRepository CreateActivityStatusRepository()
{
diff --git a/TaleEngine/TaleEngine.IntegrationTests/Repositories/ActivityTypeRepositoryTests.cs b/TaleEngine/TaleEngine.IntegrationTests/Repositories/ActivityTypeRepositoryTests.cs
index 50f4a15..7ea1e1e 100644
--- a/TaleEngine/TaleEngine.IntegrationTests/Repositories/ActivityTypeRepositoryTests.cs
+++ b/TaleEngine/TaleEngine.IntegrationTests/Repositories/ActivityTypeRepositoryTests.cs
@@ -9,7 +9,7 @@
namespace TaleEngine.IntegrationTests.Repositories
{
[ExcludeFromCodeCoverage]
- public class ActivityTypeRepositoryTests : DatabaseContextInMemoryDatabase
+ public class ActivityTypeRepositoryTests : TaleEngineContextInMemoryDatabase
{
private ActivityTypeRepository CreateActivityTypeRepository()
{
diff --git a/TaleEngine/TaleEngine.IntegrationTests/Repositories/EditionRepositoryTests.cs b/TaleEngine/TaleEngine.IntegrationTests/Repositories/EditionRepositoryTests.cs
index 59f04ba..d30e4a9 100644
--- a/TaleEngine/TaleEngine.IntegrationTests/Repositories/EditionRepositoryTests.cs
+++ b/TaleEngine/TaleEngine.IntegrationTests/Repositories/EditionRepositoryTests.cs
@@ -7,7 +7,7 @@
namespace TaleEngine.IntegrationTests.Repositories
{
[ExcludeFromCodeCoverage]
- public class EditionRepositoryTests : DatabaseContextInMemoryDatabase
+ public class EditionRepositoryTests : TaleEngineContextInMemoryDatabase
{
private EditionRepository CreateEditionRepository()
{
diff --git a/TaleEngine/TaleEngine.IntegrationTests/Repositories/EventRepositoryTests.cs b/TaleEngine/TaleEngine.IntegrationTests/Repositories/EventRepositoryTests.cs
index e4542a9..8db001e 100644
--- a/TaleEngine/TaleEngine.IntegrationTests/Repositories/EventRepositoryTests.cs
+++ b/TaleEngine/TaleEngine.IntegrationTests/Repositories/EventRepositoryTests.cs
@@ -7,7 +7,7 @@
namespace TaleEngine.IntegrationTests.Repositories
{
[ExcludeFromCodeCoverage]
- public class EventRepositoryTests : DatabaseContextInMemoryDatabase
+ public class EventRepositoryTests : TaleEngineContextInMemoryDatabase
{
private EventRepository CreateEventRepository()
{
diff --git a/TaleEngine/TaleEngine.IntegrationTests/Repositories/RoleRepositoryTests.cs b/TaleEngine/TaleEngine.IntegrationTests/Repositories/RoleRepositoryTests.cs
index f84f4c7..4f0b836 100644
--- a/TaleEngine/TaleEngine.IntegrationTests/Repositories/RoleRepositoryTests.cs
+++ b/TaleEngine/TaleEngine.IntegrationTests/Repositories/RoleRepositoryTests.cs
@@ -7,7 +7,7 @@
namespace TaleEngine.IntegrationTests.Repositories
{
[ExcludeFromCodeCoverage]
- public class RoleRepositoryTests : DatabaseContextInMemoryDatabase
+ public class RoleRepositoryTests : TaleEngineContextInMemoryDatabase
{
private RoleRepository CreateRoleRepository()
{
diff --git a/TaleEngine/TaleEngine.IntegrationTests/Repositories/TimeSlotRepositoryTests.cs b/TaleEngine/TaleEngine.IntegrationTests/Repositories/TimeSlotRepositoryTests.cs
index c9bc902..e816892 100644
--- a/TaleEngine/TaleEngine.IntegrationTests/Repositories/TimeSlotRepositoryTests.cs
+++ b/TaleEngine/TaleEngine.IntegrationTests/Repositories/TimeSlotRepositoryTests.cs
@@ -7,7 +7,7 @@
namespace TaleEngine.IntegrationTests.Repositories
{
[ExcludeFromCodeCoverage]
- public class TimeSlotRepositoryTests : DatabaseContextInMemoryDatabase
+ public class TimeSlotRepositoryTests : TaleEngineContextInMemoryDatabase
{
private TimeSlotRepository CreateTimeSlotRepository()
{
diff --git a/TaleEngine/TaleEngine.IntegrationTests/TaleEngine.IntegrationTests.csproj b/TaleEngine/TaleEngine.IntegrationTests/TaleEngine.IntegrationTests.csproj
index c12d35f..b8563cf 100644
--- a/TaleEngine/TaleEngine.IntegrationTests/TaleEngine.IntegrationTests.csproj
+++ b/TaleEngine/TaleEngine.IntegrationTests/TaleEngine.IntegrationTests.csproj
@@ -23,7 +23,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/TaleEngine/TaleEngine.IntegrationTests/appsettings.json b/TaleEngine/TaleEngine.IntegrationTests/appsettings.json
index 1a9363b..cc9de54 100644
--- a/TaleEngine/TaleEngine.IntegrationTests/appsettings.json
+++ b/TaleEngine/TaleEngine.IntegrationTests/appsettings.json
@@ -1,11 +1,14 @@
{
- "Logging": {
- "LogLevel": {
- "Default": "Warning"
+ "ConnectionString": "Server=tcp:127.0.0.1,5433;Database=TaleEngine;User Id=sa;Password=Pass@word;",
+ "Serilog": {
+ "SeqServerUrl": null,
+ "MinimumLevel": {
+ "Default": "Information",
+ "Override": {
+ "Microsoft": "Warning",
+ "Microsoft.eShopOnContainers": "Information",
+ "System": "Warning"
+ }
}
- },
- "AllowedHosts": "*",
- "ConnectionStrings": {
- "DefaultConnection": "Server=localhost;Database=TaleEngine;Trusted_Connection=True;"
}
}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityControllerTests.cs
index 63beeb7..74d9be7 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityControllerTests.cs
@@ -4,11 +4,11 @@
using Moq;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V1;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Dtos.Requests;
using TaleEngine.Application.Contracts.Dtos.Results;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V1;
using TaleEngine.Fakes.Dtos;
using Xunit;
@@ -399,4 +399,4 @@ public void GetActivitiesFiltered_NullResult_Success()
serviceMock.Verify(x => x.GetActiveActivitiesFiltered(request), Times.Once);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityStatusControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityStatusControllerTests.cs
index f8f1848..ddf7e18 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityStatusControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityStatusControllerTests.cs
@@ -4,9 +4,9 @@
using Moq;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V1;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V1;
using Xunit;
namespace TaleEngine.Testing.Controllers.V1
@@ -93,4 +93,4 @@ public void GetActivityStatuses_NullResult_Success()
serviceMock.Verify(x => x.GetActivityStatuses(), Times.Once);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityTypesControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityTypesControllerTests.cs
index 2d2d908..adea3ba 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityTypesControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityTypesControllerTests.cs
@@ -4,9 +4,9 @@
using Moq;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V1;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V1;
using Xunit;
namespace TaleEngine.Testing.Controllers.V1
@@ -93,4 +93,4 @@ public void GetActivityTypes_NullResult_Success()
serviceMock.Verify(x => x.GetActivityTypes(), Times.Once);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V1/EditionControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V1/EditionControllerTests.cs
index e454dd7..6424ea0 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V1/EditionControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V1/EditionControllerTests.cs
@@ -5,9 +5,9 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V1;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V1;
using Xunit;
namespace TaleEngine.Testing.Controllers.V1
@@ -68,4 +68,4 @@ public void GetEditionDays_NullResult_Success()
serviceMock.Verify(x => x.GetEditionDays(editionId), Times.Once);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V1/EventControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V1/EventControllerTests.cs
index 4cd5e4e..de698dc 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V1/EventControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V1/EventControllerTests.cs
@@ -4,9 +4,9 @@
using Moq;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V1;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V1;
using Xunit;
namespace TaleEngine.Testing.Controllers.V1
@@ -96,4 +96,4 @@ public void GetCurrentOrLastEdition_Success()
serviceMock.Verify(x => x.GetCurrentOrLastEdition(eventId), Times.Once);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V1/TimeSlotControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V1/TimeSlotControllerTests.cs
index 208fd6d..f9d2041 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V1/TimeSlotControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V1/TimeSlotControllerTests.cs
@@ -4,9 +4,9 @@
using Moq;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V1;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V1;
using Xunit;
namespace TaleEngine.Testing.Controllers.V1
@@ -93,4 +93,4 @@ public void GetAllTimeSlots_NullResult_Success()
serviceMock.Verify(x => x.GetTimeSlots(), Times.Once);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V2/ActivityControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V2/ActivityControllerTests.cs
index 572595a..8418014 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V2/ActivityControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V2/ActivityControllerTests.cs
@@ -4,11 +4,11 @@
using Moq;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V2;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Dtos.Requests;
using TaleEngine.Application.Contracts.Dtos.Results;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V2;
using TaleEngine.Fakes.Dtos;
using Xunit;
@@ -399,4 +399,4 @@ public void GetActivitiesFiltered_NullResult_Success()
serviceMock.Verify(x => x.GetActiveActivitiesFiltered(request), Times.Once);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V2/ActivityStatusControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V2/ActivityStatusControllerTests.cs
index a75c979..221df43 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V2/ActivityStatusControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V2/ActivityStatusControllerTests.cs
@@ -4,9 +4,9 @@
using Moq;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V2;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V2;
using Xunit;
namespace TaleEngine.Testing.Controllers.V2
@@ -93,4 +93,4 @@ public void GetActivityStatuses_NullResult_Success()
serviceMock.Verify(x => x.GetActivityStatuses(), Times.Once);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V2/ActivityTypesControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V2/ActivityTypesControllerTests.cs
index 088f1bd..5f60e6d 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V2/ActivityTypesControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V2/ActivityTypesControllerTests.cs
@@ -4,9 +4,9 @@
using Moq;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V2;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V2;
using Xunit;
namespace TaleEngine.Testing.Controllers.V2
@@ -93,4 +93,4 @@ public void GetActivityTypes_NullResult_Success()
serviceMock.Verify(x => x.GetActivityTypes(), Times.Once);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V2/EditionControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V2/EditionControllerTests.cs
index 7151add..1b3f565 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V2/EditionControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V2/EditionControllerTests.cs
@@ -5,9 +5,9 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V2;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V2;
using Xunit;
namespace TaleEngine.Testing.Controllers.V2
@@ -68,4 +68,4 @@ public void GetEditionDays_NullResult_Success()
serviceMock.Verify(x => x.GetEditionDays(editionId), Times.Once);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V2/EventControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V2/EventControllerTests.cs
index f459eb9..9332061 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V2/EventControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V2/EventControllerTests.cs
@@ -4,9 +4,9 @@
using Moq;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V2;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V2;
using Xunit;
namespace TaleEngine.Testing.Controllers.V2
@@ -96,4 +96,4 @@ public void GetCurrentOrLastEdition_Success()
serviceMock.Verify(x => x.GetCurrentOrLastEdition(eventId), Times.Once);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V2/RolesControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V2/RolesControllerTests.cs
index a570d49..2c42245 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V2/RolesControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V2/RolesControllerTests.cs
@@ -4,9 +4,9 @@
using Moq;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V2;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V2;
using Xunit;
namespace TaleEngine.Testing.Controllers.V2
@@ -106,4 +106,4 @@ public void GetRole_Success()
resultAsObjResult.StatusCode.Should().Be(StatusCodes.Status200OK);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V2/TimeSlotControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V2/TimeSlotControllerTests.cs
index 168bf9c..fba282b 100644
--- a/TaleEngine/TaleEngine.Testing/Controllers/V2/TimeSlotControllerTests.cs
+++ b/TaleEngine/TaleEngine.Testing/Controllers/V2/TimeSlotControllerTests.cs
@@ -4,9 +4,9 @@
using Moq;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using TaleEngine.API.Controllers.V2;
using TaleEngine.Application.Contracts.Dtos;
using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Controllers.V2;
using Xunit;
namespace TaleEngine.Testing.Controllers.V2
@@ -93,4 +93,4 @@ public void GetAllTimeSlots_NullResult_Success()
serviceMock.Verify(x => x.GetTimeSlots(), Times.Once);
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine.Testing/TaleEngine.Testing.csproj b/TaleEngine/TaleEngine.Testing/TaleEngine.Testing.csproj
index 21c65fe..01e8b27 100644
--- a/TaleEngine/TaleEngine.Testing/TaleEngine.Testing.csproj
+++ b/TaleEngine/TaleEngine.Testing/TaleEngine.Testing.csproj
@@ -16,7 +16,7 @@
-
+
all
diff --git a/TaleEngine/TaleEngine.sln b/TaleEngine/TaleEngine.sln
index ea230c6..83bc760 100644
--- a/TaleEngine/TaleEngine.sln
+++ b/TaleEngine/TaleEngine.sln
@@ -32,6 +32,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TaleEngine.Business.Testing
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TaleEngine.IntegrationTests", "TaleEngine.IntegrationTests\TaleEngine.IntegrationTests.csproj", "{42B926BC-2935-4CF4-B043-A2162B8E069B}"
EndProject
+Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{BC6C3ED2-9FFB-4909-B051-AE5AEB497195}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -90,6 +92,10 @@ Global
{42B926BC-2935-4CF4-B043-A2162B8E069B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{42B926BC-2935-4CF4-B043-A2162B8E069B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{42B926BC-2935-4CF4-B043-A2162B8E069B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BC6C3ED2-9FFB-4909-B051-AE5AEB497195}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BC6C3ED2-9FFB-4909-B051-AE5AEB497195}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BC6C3ED2-9FFB-4909-B051-AE5AEB497195}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BC6C3ED2-9FFB-4909-B051-AE5AEB497195}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/TaleEngine/TaleEngine/Controllers/V1/ActivityController.cs b/TaleEngine/TaleEngine/Controllers/V1/ActivityController.cs
index 2d76b92..03e35c4 100644
--- a/TaleEngine/TaleEngine/Controllers/V1/ActivityController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V1/ActivityController.cs
@@ -4,7 +4,7 @@
using TaleEngine.Application.Contracts.Dtos.Requests;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V1
+namespace TaleEngine.API.Controllers.V1
{
[ApiController]
[Route("api/v1/[controller]")]
diff --git a/TaleEngine/TaleEngine/Controllers/V1/ActivityStatusController.cs b/TaleEngine/TaleEngine/Controllers/V1/ActivityStatusController.cs
index 6753c3d..661ab49 100644
--- a/TaleEngine/TaleEngine/Controllers/V1/ActivityStatusController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V1/ActivityStatusController.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V1
+namespace TaleEngine.API.Controllers.V1
{
[ApiController]
[Route("api/v1/[controller]")]
diff --git a/TaleEngine/TaleEngine/Controllers/V1/ActivityTypeController.cs b/TaleEngine/TaleEngine/Controllers/V1/ActivityTypeController.cs
index 3bfd763..94685c0 100644
--- a/TaleEngine/TaleEngine/Controllers/V1/ActivityTypeController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V1/ActivityTypeController.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V1
+namespace TaleEngine.API.Controllers.V1
{
[ApiController]
[Route("api/v1/[controller]")]
diff --git a/TaleEngine/TaleEngine/Controllers/V1/EditionController.cs b/TaleEngine/TaleEngine/Controllers/V1/EditionController.cs
index e891618..67ddd38 100644
--- a/TaleEngine/TaleEngine/Controllers/V1/EditionController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V1/EditionController.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V1
+namespace TaleEngine.API.Controllers.V1
{
[ApiController]
[Route("api/v1/[controller]")]
diff --git a/TaleEngine/TaleEngine/Controllers/V1/EventController.cs b/TaleEngine/TaleEngine/Controllers/V1/EventController.cs
index dc8c18f..ba30eff 100644
--- a/TaleEngine/TaleEngine/Controllers/V1/EventController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V1/EventController.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V1
+namespace TaleEngine.API.Controllers.V1
{
[ApiController]
[Route("api/v1/[controller]")]
diff --git a/TaleEngine/TaleEngine/Controllers/V1/RolesController.cs b/TaleEngine/TaleEngine/Controllers/V1/RolesController.cs
index 9f5b89d..4a862a9 100644
--- a/TaleEngine/TaleEngine/Controllers/V1/RolesController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V1/RolesController.cs
@@ -3,7 +3,7 @@
using System;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V1
+namespace TaleEngine.API.Controllers.V1
{
///
/// Roles management
diff --git a/TaleEngine/TaleEngine/Controllers/V1/TimeSlotController.cs b/TaleEngine/TaleEngine/Controllers/V1/TimeSlotController.cs
index 0f5d508..c49f807 100644
--- a/TaleEngine/TaleEngine/Controllers/V1/TimeSlotController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V1/TimeSlotController.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V1
+namespace TaleEngine.API.Controllers.V1
{
[ApiController]
[Route("api/v1/[controller]")]
diff --git a/TaleEngine/TaleEngine/Controllers/V2/ActivityController.cs b/TaleEngine/TaleEngine/Controllers/V2/ActivityController.cs
index 6b174ec..7c4b9ed 100644
--- a/TaleEngine/TaleEngine/Controllers/V2/ActivityController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V2/ActivityController.cs
@@ -4,7 +4,7 @@
using TaleEngine.Application.Contracts.Dtos.Requests;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V2
+namespace TaleEngine.API.Controllers.V2
{
[ApiController]
[Route("api/v2/[controller]")]
diff --git a/TaleEngine/TaleEngine/Controllers/V2/ActivityStatusController.cs b/TaleEngine/TaleEngine/Controllers/V2/ActivityStatusController.cs
index 180d59f..2305b55 100644
--- a/TaleEngine/TaleEngine/Controllers/V2/ActivityStatusController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V2/ActivityStatusController.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V2
+namespace TaleEngine.API.Controllers.V2
{
[ApiController]
[Route("api/v2/[controller]")]
diff --git a/TaleEngine/TaleEngine/Controllers/V2/ActivityTypeController.cs b/TaleEngine/TaleEngine/Controllers/V2/ActivityTypeController.cs
index a6b1504..6427397 100644
--- a/TaleEngine/TaleEngine/Controllers/V2/ActivityTypeController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V2/ActivityTypeController.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V2
+namespace TaleEngine.API.Controllers.V2
{
[ApiController]
[Route("api/v2/[controller]")]
diff --git a/TaleEngine/TaleEngine/Controllers/V2/EditionController.cs b/TaleEngine/TaleEngine/Controllers/V2/EditionController.cs
index 79855bc..779414b 100644
--- a/TaleEngine/TaleEngine/Controllers/V2/EditionController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V2/EditionController.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V2
+namespace TaleEngine.API.Controllers.V2
{
[ApiController]
[Route("api/v2/[controller]")]
diff --git a/TaleEngine/TaleEngine/Controllers/V2/EventController.cs b/TaleEngine/TaleEngine/Controllers/V2/EventController.cs
index 6f7ae64..66841cc 100644
--- a/TaleEngine/TaleEngine/Controllers/V2/EventController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V2/EventController.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V2
+namespace TaleEngine.API.Controllers.V2
{
[ApiController]
[Route("api/v2/[controller]")]
diff --git a/TaleEngine/TaleEngine/Controllers/V2/RolesController.cs b/TaleEngine/TaleEngine/Controllers/V2/RolesController.cs
index 033b438..4c06577 100644
--- a/TaleEngine/TaleEngine/Controllers/V2/RolesController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V2/RolesController.cs
@@ -3,7 +3,7 @@
using System;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V2
+namespace TaleEngine.API.Controllers.V2
{
///
/// Roles management
diff --git a/TaleEngine/TaleEngine/Controllers/V2/TimeSlotController.cs b/TaleEngine/TaleEngine/Controllers/V2/TimeSlotController.cs
index d9d9b93..65c5a2a 100644
--- a/TaleEngine/TaleEngine/Controllers/V2/TimeSlotController.cs
+++ b/TaleEngine/TaleEngine/Controllers/V2/TimeSlotController.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using TaleEngine.Application.Contracts.Services;
-namespace TaleEngine.Controllers.V2
+namespace TaleEngine.API.Controllers.V2
{
[ApiController]
[Route("api/v2/[controller]")]
diff --git a/TaleEngine/TaleEngine/Dockerfile b/TaleEngine/TaleEngine/Dockerfile
new file mode 100644
index 0000000..5ed53e6
--- /dev/null
+++ b/TaleEngine/TaleEngine/Dockerfile
@@ -0,0 +1,40 @@
+#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
+
+FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
+WORKDIR /app
+EXPOSE 80
+
+FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
+WORKDIR /src
+
+# It's important to keep lines from here down to "COPY . ." identical in all Dockerfiles
+# to take advantage of Docker's build cache, to speed up local container builds
+COPY "TaleEngine.sln" "TaleEngine.sln"
+
+COPY ["TaleEngine/TaleEngine.csproj", "TaleEngine/"]
+COPY ["TaleEngine.Data.Contracts/TaleEngine.Data.Contracts.csproj", "TaleEngine.Data.Contracts/"]
+COPY ["TaleEngine.Bussiness/TaleEngine.Bussiness.csproj", "TaleEngine.Bussiness/"]
+COPY ["TaleEngine.Bussiness.Contracts/TaleEngine.Bussiness.Contracts.csproj", "TaleEngine.Bussiness.Contracts/"]
+COPY ["TaleEngine.Application.Contracts/TaleEngine.Application.Contracts.csproj", "TaleEngine.Application.Contracts/"]
+COPY ["TaleEngine.Application/TaleEngine.Application.csproj", "TaleEngine.Application/"]
+COPY ["TaleEngine.Data/TaleEngine.Data.csproj", "TaleEngine.Data/"]
+
+COPY "docker-compose.dcproj" "docker-compose.dcproj"
+
+COPY "NuGet.config" "NuGet.config"
+
+RUN dotnet restore "TaleEngine.sln"
+
+COPY . .
+WORKDIR "/src/TaleEngine"
+RUN dotnet publish --no-restore -c Release -o /app
+
+FROM build as unittest
+WORKDIR "/src/TaleEngine/TaleEngine.Testing"
+
+FROM build AS publish
+
+FROM base AS final
+WORKDIR /app
+COPY --from=publish /app .
+ENTRYPOINT ["dotnet", "TaleEngine.dll"]
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine/Extensions/IServiceCollectionExtensions.cs b/TaleEngine/TaleEngine/Extensions/IServiceCollectionExtensions.cs
new file mode 100644
index 0000000..3a6996f
--- /dev/null
+++ b/TaleEngine/TaleEngine/Extensions/IServiceCollectionExtensions.cs
@@ -0,0 +1,104 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Diagnostics.HealthChecks;
+using Microsoft.OpenApi.Models;
+using System;
+using System.Reflection;
+using TaleEngine.Data;
+
+namespace TaleEngine.API.Extensions
+{
+ public static class IServiceCollectionExtensions
+ {
+ public static IServiceCollection AddHealthChecks(this IServiceCollection services, IConfiguration configuration)
+ {
+ var hcBuilder = services.AddHealthChecks();
+
+ hcBuilder.AddCheck("self", () => HealthCheckResult.Healthy());
+
+ hcBuilder
+ .AddSqlServer(
+ configuration["ConnectionString"],
+ name: "TaleEngineDB-check",
+ tags: new string[] { "TaleEngine" });
+
+ return services;
+ }
+
+ public static IServiceCollection AddCustomDbContext(this IServiceCollection services, IConfiguration configuration)
+ {
+ services.AddDbContext(options =>
+ {
+ options.UseSqlServer(configuration["ConnectionString"],
+ sqlServerOptionsAction: sqlOptions =>
+ {
+ sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name);
+ sqlOptions.EnableRetryOnFailure(maxRetryCount: 15, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null);
+ });
+ },
+ ServiceLifetime.Scoped //Showing explicitly that the DbContext is shared across the HTTP request scope (graph of objects started in the HTTP request)
+ );
+
+ return services;
+ }
+
+ public static IServiceCollection AddCustomSwagger(this IServiceCollection services, IConfiguration configuration)
+ {
+ services.AddSwaggerGen(config =>
+ {
+ config.SwaggerDoc("v1", new OpenApiInfo
+ {
+ Title = "TaleEngine API v1",
+ Version = "v1",
+ Contact = new OpenApiContact
+ {
+ Name = "Elena G",
+ Email = "elena.guzbla@gmail.com",
+ Url = new Uri("https://beelzenef.github.io")
+ }
+ });
+ config.SwaggerDoc("v2", new OpenApiInfo
+ {
+ Title = "TaleEngine API v2",
+ Version = "v2",
+ Contact = new OpenApiContact
+ {
+ Name = "Elena G",
+ Email = "elena.guzbla@gmail.com",
+ Url = new Uri("https://beelzenef.github.io")
+ }
+ });
+ });
+
+ return services;
+ }
+
+ public static IServiceCollection AddCustomConfiguration(this IServiceCollection services, IConfiguration configuration)
+ {
+ services.AddOptions();
+ services.Configure(configuration);
+ services.Configure(options =>
+ {
+ options.InvalidModelStateResponseFactory = context =>
+ {
+ var problemDetails = new ValidationProblemDetails(context.ModelState)
+ {
+ Instance = context.HttpContext.Request.Path,
+ Status = StatusCodes.Status400BadRequest,
+ Detail = "Please refer to the errors property for additional details."
+ };
+
+ return new BadRequestObjectResult(problemDetails)
+ {
+ ContentTypes = { "application/problem+json", "application/problem+xml" }
+ };
+ };
+ });
+
+ return services;
+ }
+ }
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine/Extensions/IWebHostExtensions.cs b/TaleEngine/TaleEngine/Extensions/IWebHostExtensions.cs
new file mode 100644
index 0000000..d7c4aa1
--- /dev/null
+++ b/TaleEngine/TaleEngine/Extensions/IWebHostExtensions.cs
@@ -0,0 +1,80 @@
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Data.SqlClient;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Polly;
+using System;
+
+namespace TaleEngine.API.Extensions
+{
+ public static class IWebHostExtensions
+ {
+ public static bool IsInKubernetes(this IWebHost webHost)
+ {
+ var cfg = webHost.Services.GetService();
+ var orchestratorType = cfg.GetValue("OrchestratorType");
+ return orchestratorType?.ToUpper() == "K8S";
+ }
+
+ public static IWebHost MigrateDbContext(this IWebHost webHost, Action seeder) where TContext : DbContext
+ {
+ var underK8s = webHost.IsInKubernetes();
+
+ using (var scope = webHost.Services.CreateScope())
+ {
+ var services = scope.ServiceProvider;
+ var logger = services.GetRequiredService>();
+ var context = services.GetService();
+
+ try
+ {
+ logger.LogInformation("Migrating database associated with context {DbContextName}", typeof(TContext).Name);
+
+ if (underK8s)
+ {
+ InvokeSeeder(seeder, context, services);
+ }
+ else
+ {
+ var retries = 10;
+ var retry = Policy.Handle()
+ .WaitAndRetry(
+ retryCount: retries,
+ sleepDurationProvider: retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)),
+ onRetry: (exception, timeSpan, retry, ctx) =>
+ {
+ logger.LogWarning(exception, "[{prefix}] Exception {ExceptionType} with message {Message} detected on attempt {retry} of {retries}", nameof(TContext), exception.GetType().Name, exception.Message, retry, retries);
+ });
+
+ //if the sql server container is not created on run docker compose this
+ //migration can't fail for network related exception. The retry options for DbContext only
+ //apply to transient exceptions
+ // Note that this is NOT applied when running some orchestrators (let the orchestrator to recreate the failing service)
+ retry.Execute(() => InvokeSeeder(seeder, context, services));
+ }
+
+ logger.LogInformation("Migrated database associated with context {DbContextName}", typeof(TContext).Name);
+ }
+ catch (Exception ex)
+ {
+ logger.LogError(ex, "An error occurred while migrating the database used on context {DbContextName}", typeof(TContext).Name);
+ if (underK8s)
+ {
+ throw; // Rethrow under k8s because we rely on k8s to re-run the pod
+ }
+ }
+ }
+
+ return webHost;
+ }
+
+ private static void InvokeSeeder(Action seeder, TContext context, IServiceProvider services)
+ where TContext : DbContext
+ {
+ context.Database.Migrate();
+ seeder(context, services);
+ }
+ }
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine/Helpers/GroupingByNamespaceConvention.cs b/TaleEngine/TaleEngine/Helpers/GroupingByNamespaceConvention.cs
index 7b4c5cc..482147b 100644
--- a/TaleEngine/TaleEngine/Helpers/GroupingByNamespaceConvention.cs
+++ b/TaleEngine/TaleEngine/Helpers/GroupingByNamespaceConvention.cs
@@ -2,7 +2,7 @@
using System.Diagnostics.CodeAnalysis;
using System.Linq;
-namespace TaleEngine.Helpers
+namespace TaleEngine.API.Helpers
{
[ExcludeFromCodeCoverage]
public class GroupingByNamespaceConvention : IControllerModelConvention
diff --git a/TaleEngine/TaleEngine/Infrastructure/AutofacModules/ApplicationModule.cs b/TaleEngine/TaleEngine/Infrastructure/AutofacModules/ApplicationModule.cs
new file mode 100644
index 0000000..67c3ef0
--- /dev/null
+++ b/TaleEngine/TaleEngine/Infrastructure/AutofacModules/ApplicationModule.cs
@@ -0,0 +1,114 @@
+using Autofac;
+using TaleEngine.Application.Contracts.Services;
+using TaleEngine.Application.Services;
+using TaleEngine.Bussiness.Contracts.DomainServices;
+using TaleEngine.Bussiness.DomainServices;
+using TaleEngine.Data.Contracts.Repositories;
+using TaleEngine.Data.Repositories;
+
+namespace TaleEngine.API.Infrastructure.AutofacModules
+{
+ public class ApplicationModule
+ : Module
+ {
+ protected override void Load(ContainerBuilder builder)
+ {
+ RegisterServices(builder);
+ RegisterDomainServices(builder);
+ RegisterRepositories(builder);
+ }
+
+ private static void RegisterServices(ContainerBuilder builder)
+ {
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+ }
+
+ private void RegisterDomainServices(ContainerBuilder builder)
+ {
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+ }
+
+ private static void RegisterRepositories(ContainerBuilder builder)
+ {
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+
+ builder.RegisterType()
+ .As()
+ .InstancePerLifetimeScope();
+ }
+ }
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine/Infrastructure/TaleEngineContextSeed.cs b/TaleEngine/TaleEngine/Infrastructure/TaleEngineContextSeed.cs
new file mode 100644
index 0000000..aaa0dba
--- /dev/null
+++ b/TaleEngine/TaleEngine/Infrastructure/TaleEngineContextSeed.cs
@@ -0,0 +1,46 @@
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Data.SqlClient;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Polly;
+using Polly.Retry;
+using System;
+using System.Threading.Tasks;
+using TaleEngine.Data;
+
+namespace TaleEngine.API.Infrastructure
+{
+ public class TaleEngineContextSeed
+ {
+ public async Task SeedAsync(TaleEngineContext context, IWebHostEnvironment env, IOptions settings, ILogger logger)
+ {
+ var policy = CreatePolicy(logger, nameof(TaleEngineContextSeed));
+
+ await policy.ExecuteAsync(async () =>
+ {
+ var contentRootPath = env.ContentRootPath;
+
+ using (context)
+ {
+ context.Database.Migrate();
+
+ await context.SaveChangesAsync();
+ }
+ });
+ }
+
+ private AsyncRetryPolicy CreatePolicy(ILogger logger, string prefix, int retries = 3)
+ {
+ return Policy.Handle().
+ WaitAndRetryAsync(
+ retryCount: retries,
+ sleepDurationProvider: retry => TimeSpan.FromSeconds(5),
+ onRetry: (exception, timeSpan, retry, ctx) =>
+ {
+ logger.LogWarning(exception, "[{prefix}] Exception {ExceptionType} with message {Message} detected on attempt {retry} of {retries}", prefix, exception.GetType().Name, exception.Message, retry, retries);
+ }
+ );
+ }
+ }
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine/Pages/Error.cshtml.cs b/TaleEngine/TaleEngine/Pages/Error.cshtml.cs
index 8619eb2..afe2807 100644
--- a/TaleEngine/TaleEngine/Pages/Error.cshtml.cs
+++ b/TaleEngine/TaleEngine/Pages/Error.cshtml.cs
@@ -3,7 +3,7 @@
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
-namespace TaleEngine.Pages
+namespace TaleEngine.API.Pages
{
[ExcludeFromCodeCoverage]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
diff --git a/TaleEngine/TaleEngine/Pages/_ViewImports.cshtml b/TaleEngine/TaleEngine/Pages/_ViewImports.cshtml
index 0721ac5..3ab430e 100644
--- a/TaleEngine/TaleEngine/Pages/_ViewImports.cshtml
+++ b/TaleEngine/TaleEngine/Pages/_ViewImports.cshtml
@@ -1,3 +1,3 @@
@using TaleEngine
-@namespace TaleEngine.Pages
+@namespace TaleEngine.API.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
diff --git a/TaleEngine/TaleEngine/Program.cs b/TaleEngine/TaleEngine/Program.cs
index f2c3ad9..2803d73 100644
--- a/TaleEngine/TaleEngine/Program.cs
+++ b/TaleEngine/TaleEngine/Program.cs
@@ -1,20 +1,92 @@
+using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
-using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Serilog;
+using System;
+using System.IO;
+using TaleEngine.API.Extensions;
+using TaleEngine.API.Infrastructure;
+using TaleEngine.Data;
-namespace TaleEngine
+namespace TaleEngine.API
{
public class Program
{
- public static void Main(string[] args)
+ public static readonly string Namespace = typeof(Program).Namespace;
+ public static readonly string AppName = Namespace.Substring(Namespace.LastIndexOf('.', Namespace.LastIndexOf('.') - 1) + 1);
+
+ public static int Main(string[] args)
+ {
+ var configuration = GetConfiguration();
+
+ Log.Logger = CreateSerilogLogger(configuration);
+
+ try
+ {
+ Log.Information("Configuring web host ({ApplicationContext})...", Program.AppName);
+ var host = BuildWebHost(configuration, args);
+
+ Log.Information("Applying migrations ({ApplicationContext})...", Program.AppName);
+ host.MigrateDbContext((context, services) =>
+ {
+ var env = services.GetService();
+ var settings = services.GetService>();
+ var logger = services.GetService>();
+
+ new TaleEngineContextSeed()
+ .SeedAsync(context, env, settings, logger)
+ .Wait();
+ });
+
+ Log.Information("Starting web host ({ApplicationContext})...", Program.AppName);
+ host.Run();
+
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ Log.Fatal(ex, "Program terminated unexpectedly ({ApplicationContext})!", Program.AppName);
+ return 1;
+ }
+ finally
+ {
+ Log.CloseAndFlush();
+ }
+ }
+
+ private static IWebHost BuildWebHost(IConfiguration configuration, string[] args) =>
+ WebHost.CreateDefaultBuilder(args)
+ .CaptureStartupErrors(false)
+ .ConfigureAppConfiguration(x => x.AddConfiguration(configuration))
+ .UseStartup()
+ .UseContentRoot(Directory.GetCurrentDirectory())
+ .UseSerilog()
+ .Build();
+
+ private static Serilog.ILogger CreateSerilogLogger(IConfiguration configuration)
{
- CreateHostBuilder(args).Build().Run();
+ var seqServerUrl = configuration["Serilog:SeqServerUrl"];
+ return new LoggerConfiguration()
+ .MinimumLevel.Verbose()
+ .Enrich.WithProperty("ApplicationContext", Program.AppName)
+ .Enrich.FromLogContext()
+ .WriteTo.Console()
+ .WriteTo.Seq(string.IsNullOrWhiteSpace(seqServerUrl) ? "http://seq" : seqServerUrl)
+ .ReadFrom.Configuration(configuration)
+ .CreateLogger();
}
- public static IHostBuilder CreateHostBuilder(string[] args) =>
- Host.CreateDefaultBuilder(args)
- .ConfigureWebHostDefaults(webBuilder =>
- {
- webBuilder.UseStartup();
- });
+ private static IConfiguration GetConfiguration()
+ {
+ var builder = new ConfigurationBuilder()
+ .SetBasePath(Directory.GetCurrentDirectory())
+ .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
+ .AddEnvironmentVariables();
+
+ return builder.Build();
+ }
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine/Startup.cs b/TaleEngine/TaleEngine/Startup.cs
index 31880d4..97c6708 100644
--- a/TaleEngine/TaleEngine/Startup.cs
+++ b/TaleEngine/TaleEngine/Startup.cs
@@ -1,22 +1,19 @@
+using Autofac;
+using Autofac.Extensions.DependencyInjection;
+using HealthChecks.UI.Client;
using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Diagnostics.HealthChecks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
-using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
-using Microsoft.OpenApi.Models;
using System;
-using TaleEngine.Application.Contracts.Services;
-using TaleEngine.Application.Services;
-using TaleEngine.Bussiness.Contracts;
-using TaleEngine.Bussiness.Contracts.DomainServices;
-using TaleEngine.Bussiness.DomainServices;
-using TaleEngine.Data;
-using TaleEngine.Data.Contracts;
-using TaleEngine.Helpers;
+using TaleEngine.API.Extensions;
+using TaleEngine.API.Helpers;
+using TaleEngine.API.Infrastructure.AutofacModules;
-namespace TaleEngine
+namespace TaleEngine.API
{
public class Startup
{
@@ -27,7 +24,7 @@ public Startup(IConfiguration configuration)
public IConfiguration Configuration { get; }
- public void ConfigureServices(IServiceCollection services)
+ public virtual IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddCors(c =>
{
@@ -45,63 +42,29 @@ public void ConfigureServices(IServiceCollection services)
config.UseApiBehavior = false;
});
- services.AddSwaggerGen(config =>
- {
- config.SwaggerDoc("v1", new OpenApiInfo
- {
- Title = "TaleEngine API v1",
- Version = "v1",
- Contact = new OpenApiContact
- {
- Name = "Elena G",
- Email = "elena.guzbla@gmail.com",
- Url = new Uri("https://beelzenef.github.io")
- }
- });
- config.SwaggerDoc("v2", new OpenApiInfo
- {
- Title = "TaleEngine API v2",
- Version = "v2",
- Contact = new OpenApiContact
- {
- Name = "Elena G",
- Email = "elena.guzbla@gmail.com",
- Url = new Uri("https://beelzenef.github.io")
- }
- });
- });
-
- services.AddDbContext(item =>
- item.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
- services.AddDbContext();
- services.AddTransient();
-
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
+ services.AddHealthChecks(Configuration)
+ .AddCustomDbContext(Configuration)
+ .AddCustomSwagger(Configuration)
+ .AddCustomConfiguration(Configuration);
services.AddControllers(options =>
{
options.Conventions.Add(new GroupingByNamespaceConvention());
});
+
+ //configure autofac
+
+ var container = new ContainerBuilder();
+ container.Populate(services);
+
+ container.RegisterModule(new ApplicationModule());
+
+ return new AutofacServiceProvider(container.Build());
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
- app.UseRouting();
-
app.UseSwagger(options => options.RouteTemplate = "swagger/{documentName}/swagger.json");
app.UseSwaggerUI(options =>
{
@@ -109,9 +72,6 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
options.SwaggerEndpoint($"/swagger/v1/swagger.json", $"v1");
options.SwaggerEndpoint($"/swagger/v2/swagger.json", $"v2");
});
- app.UseEndpoints(endpoints => endpoints.MapControllers());
-
- app.Build();
if (env.IsDevelopment())
{
@@ -123,11 +83,24 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
app.UseHsts();
}
+ app.UseRouting();
app.UseCors("AllowAll");
app.UseHttpsRedirection();
- app.UseRouting();
- app.UseEndpoints(endpoints => endpoints.MapControllers());
+ app.UseEndpoints(endpoints =>
+ {
+ endpoints.MapControllers();
+
+ endpoints.MapHealthChecks("/hc", new HealthCheckOptions()
+ {
+ Predicate = _ => true,
+ ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
+ });
+ endpoints.MapHealthChecks("/liveness", new HealthCheckOptions
+ {
+ Predicate = r => r.Name.Contains("self")
+ });
+ });
}
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine/TaleEngine.csproj b/TaleEngine/TaleEngine/TaleEngine.csproj
index 9897862..f5ee663 100644
--- a/TaleEngine/TaleEngine/TaleEngine.csproj
+++ b/TaleEngine/TaleEngine/TaleEngine.csproj
@@ -1,52 +1,61 @@
-
- net5.0
- false
+
+ net5.0
+ $(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
+ false
+ true
+ preview
+
-
- false
-
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine/TaleEngineSettings.cs b/TaleEngine/TaleEngine/TaleEngineSettings.cs
new file mode 100644
index 0000000..ec70601
--- /dev/null
+++ b/TaleEngine/TaleEngine/TaleEngineSettings.cs
@@ -0,0 +1,7 @@
+namespace TaleEngine.API
+{
+ public class TaleEngineSettings
+ {
+ public string ConnectionString { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/TaleEngine/TaleEngine/appsettings.json b/TaleEngine/TaleEngine/appsettings.json
index a0c09a1..d0a9469 100644
--- a/TaleEngine/TaleEngine/appsettings.json
+++ b/TaleEngine/TaleEngine/appsettings.json
@@ -1,11 +1,14 @@
{
- "Logging": {
- "LogLevel": {
- "Default": "Warning"
+ "ConnectionString": "Server=tcp:127.0.0.1,5433;Database=TaleEngine;User Id=sa;Password=Pass@word;",
+ "Serilog": {
+ "SeqServerUrl": null,
+ "MinimumLevel": {
+ "Default": "Information",
+ "Override": {
+ "Microsoft": "Warning",
+ "Microsoft.eShopOnContainers": "Information",
+ "System": "Warning"
+ }
}
- },
- "AllowedHosts": "*",
- "ConnectionStrings": {
- "DefaultConnection": "Server=localhost;Database=TaleEngine;Trusted_Connection=True;"
}
-}
+}
\ No newline at end of file
diff --git a/TaleEngine/docker-compose.dcproj b/TaleEngine/docker-compose.dcproj
new file mode 100644
index 0000000..dc31940
--- /dev/null
+++ b/TaleEngine/docker-compose.dcproj
@@ -0,0 +1,18 @@
+
+
+
+ 2.1
+ Linux
+ bc6c3ed2-9ffb-4909-b051-ae5aeb497195
+ LaunchBrowser
+ http://host.docker.internal:5100
+ taleengine
+
+
+
+ docker-compose.yml
+
+
+
+
+
\ No newline at end of file
diff --git a/TaleEngine/docker-compose.override.yml b/TaleEngine/docker-compose.override.yml
new file mode 100644
index 0000000..5b52544
--- /dev/null
+++ b/TaleEngine/docker-compose.override.yml
@@ -0,0 +1,31 @@
+version: '3.4'
+
+services:
+
+ seq:
+ environment:
+ - ACCEPT_EULA=Y
+ ports:
+ - "5340:80"
+
+ sqldata:
+ environment:
+ - SA_PASSWORD=Pass@word
+ - ACCEPT_EULA=Y
+ ports:
+ - "5433:1433"
+ volumes:
+ - taleengine-sqldata:/var/opt/mssql
+
+ taleengine-api:
+ environment:
+ - ASPNETCORE_ENVIRONMENT=Development
+ - ASPNETCORE_URLS=http://0.0.0.0:80
+ - ConnectionString=${ESHOP_AZURE_ORDERING_DB:-Server=sqldata;Database=TaleEngine;User Id=sa;Password=Pass@word}
+ ports:
+ - "5102:80"
+ - "9102:81"
+
+volumes:
+ taleengine-sqldata:
+ external: false
\ No newline at end of file
diff --git a/TaleEngine/docker-compose.yml b/TaleEngine/docker-compose.yml
new file mode 100644
index 0000000..4d77537
--- /dev/null
+++ b/TaleEngine/docker-compose.yml
@@ -0,0 +1,17 @@
+version: '3.4'
+
+services:
+
+ seq:
+ image: datalust/seq:latest
+
+ sqldata:
+ image: mcr.microsoft.com/mssql/server:2019-latest
+
+ taleengine-api:
+ image: ${REGISTRY:-taleengine}/taleengine.api:${PLATFORM:-linux}-${TAG:-latest}
+ build:
+ context: .
+ dockerfile: TaleEngine/Dockerfile
+ depends_on:
+ - sqldata