commit codes befor new features and bugs
parent
97cb9ae82b
commit
3034cb6d65
|
@ -6,8 +6,8 @@
|
|||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||
<DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
|
||||
<AssemblyVersion>1.0.0.1</AssemblyVersion>
|
||||
<FileVersion>1.0.0.1</FileVersion>
|
||||
<AssemblyVersion>1.0.1.2</AssemblyVersion>
|
||||
<FileVersion>1.0.1.2</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -112,8 +112,28 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Services\" />
|
||||
<Folder Include="wwwroot\" />
|
||||
<Folder Include="wwwroot\assets\vendor\bootstrap\css\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="wwwroot\assets\vendor\aos\aos.js" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\css\bootstrap.css.map" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\css\bootstrap.min.css.map" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\js\bootstrap.bundle.js" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\js\bootstrap.bundle.js.map" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\js\bootstrap.bundle.min.js" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\js\bootstrap.bundle.min.js.map" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\js\bootstrap.esm.js" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\js\bootstrap.esm.js.map" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\js\bootstrap.esm.min.js" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\js\bootstrap.esm.min.js.map" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\js\bootstrap.js" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\js\bootstrap.js.map" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\js\bootstrap.min.js" />
|
||||
<None Include="wwwroot\assets\vendor\bootstrap\js\bootstrap.min.js.map" />
|
||||
<None Include="wwwroot\assets\vendor\boxicons\fonts\boxicons.svg" />
|
||||
<None Include="wwwroot\assets\vendor\boxicons\fonts\boxicons.woff2" />
|
||||
<None Include="wwwroot\assets\vendor\glightbox\js\glightbox.js" />
|
||||
<None Include="wwwroot\assets\vendor\glightbox\js\glightbox.min.js" />
|
||||
<None Include="wwwroot\assets\vendor\waypoints\noframework.waypoints.js" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Brizco.Infrastructure\Brizco.Infrastructure.csproj" />
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
using Brizco.Core.MartenServices.Abstracts;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Brizco.Api.Controllers;
|
||||
|
||||
public class BrewController : ICarterModule
|
||||
{
|
||||
public void AddRoutes(IEndpointRouteBuilder app)
|
||||
{
|
||||
var group = app.NewVersionedApi("Brews")
|
||||
.MapGroup("api/brew")
|
||||
.RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser());
|
||||
|
||||
group.MapGet("{brewName}/latest", GetLatestBrewAsync)
|
||||
.WithDisplayName("Get Latest Brew")
|
||||
.WithDescription("Get latest brew that has been set for day , you have pass recipe name in route")
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
group.MapGet("{brewName}", GetBrewAsync)
|
||||
.WithDisplayName("Get Brew")
|
||||
.WithDescription("Get brew that has been set for days , you have pass recipe name in route")
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
group.MapPost("{brewName}", AddBrewAsync)
|
||||
.WithDisplayName("Add Brew")
|
||||
.WithDescription("Add latest brew that has been set for day , you have pass recipe model")
|
||||
.HasApiVersion(1.0);
|
||||
}
|
||||
|
||||
private async Task<IResult> GetLatestBrewAsync([FromRoute] string brewName, [FromServices] IBrewService brewService, CancellationToken cancellationToken)
|
||||
=> TypedResults.Ok(await brewService.GetLastBrewAsync(brewName, cancellationToken));
|
||||
|
||||
private async Task<IResult> GetBrewAsync([FromRoute] string brewName, [FromServices] IBrewService brewService, CancellationToken cancellationToken)
|
||||
=> TypedResults.Ok(await brewService.GetBrewAsync(brewName, cancellationToken));
|
||||
|
||||
private async Task<IResult> AddBrewAsync([FromRoute] string brewName, [FromBody] JsonDocument recipeObj, [FromServices] IBrewService brewService, CancellationToken cancellationToken)
|
||||
{
|
||||
await brewService.AddBrewAsync(brewName, recipeObj, cancellationToken);
|
||||
return TypedResults.Ok();
|
||||
}
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
using Brizco.Core.MartenServices.Abstracts;
|
||||
using Marten;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Brizco.Api.Controllers;
|
||||
|
||||
public class RecipeController : ICarterModule
|
||||
{
|
||||
public void AddRoutes(IEndpointRouteBuilder app)
|
||||
{
|
||||
var group = app.NewVersionedApi("Brews")
|
||||
.MapGroup("api/brew");
|
||||
|
||||
group.MapGet("{recipeName}/latest", GetLatestBrewAsync)
|
||||
.WithDisplayName("Get Latest Brew")
|
||||
.WithDescription("Get latest brew that has been set for day , you have pass recipe name in route")
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
group.MapPost("{recipeName}", AddBrewAsync)
|
||||
.WithDisplayName("Add Brew")
|
||||
.WithDescription("Add latest brew that has been set for day , you have pass recipe model")
|
||||
.HasApiVersion(1.0);
|
||||
}
|
||||
|
||||
private async Task<IResult> GetLatestBrewAsync([FromRoute] string recipeName,
|
||||
[FromServices] IBrewService brewService, CancellationToken cancellationToken)
|
||||
=> TypedResults.Ok(await brewService.GetLastBrewAsync(recipeName, cancellationToken));
|
||||
|
||||
private async Task<IResult> AddBrewAsync([FromRoute] string recipeName,
|
||||
[FromBody] JsonDocument recipeObj, [FromServices] IBrewService brewService,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
await brewService.AddBrewAsync(recipeName, recipeObj, cancellationToken);
|
||||
return TypedResults.Ok();
|
||||
}
|
||||
}
|
|
@ -91,7 +91,7 @@ var app = builder.Build();
|
|||
|
||||
app.UseCors("CorsPolicy");
|
||||
|
||||
app.UseSwagger();
|
||||
app.UseCustomSwagger(siteSetting.BaseUrl);
|
||||
app.MapScalarUi();
|
||||
|
||||
app.UseAuthorization();
|
||||
|
|
|
@ -16,5 +16,6 @@ public class CurrentUserService : ICurrentUserService
|
|||
public string? UserName => _httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.Name);
|
||||
public string? ComplexId => _httpContextAccessor.HttpContext?.User?.FindFirstValue("ComplexId");
|
||||
public string? RoleId => _httpContextAccessor.HttpContext?.User?.FindFirstValue("RoleId");
|
||||
public string? FullName => _httpContextAccessor.HttpContext?.User?.FindFirstValue("FullName");
|
||||
public List<string>? Permissions => _httpContextAccessor.HttpContext?.User?.FindAll("Permission")?.Select(c=>c.Value)?.ToList();
|
||||
}
|
|
@ -131,7 +131,11 @@ public class ExceptionHandlerMiddleware
|
|||
Formatting = Formatting.Indented
|
||||
});
|
||||
|
||||
context.Response.StatusCode = (int)httpStatusCode;
|
||||
|
||||
if (httpStatusCode == HttpStatusCode.InternalServerError)
|
||||
context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
|
||||
else
|
||||
context.Response.StatusCode = (int)httpStatusCode;
|
||||
context.Response.ContentType = "application/json";
|
||||
await context.Response.WriteAsync(json);
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ public static class ScalarUiConfiguration
|
|||
<!-- Optional: You can set a full configuration object like this: -->
|
||||
<script>
|
||||
var configuration = {
|
||||
theme: 'purple',
|
||||
theme: 'bluePlanet',
|
||||
}
|
||||
|
||||
document.getElementById('api-reference').dataset.configuration =
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<div class="sidebar">
|
||||
<a class="active" href="#home">Home</a>
|
||||
<a href="#news">News</a>
|
||||
<a href="#contact">Contact</a>
|
||||
<a href="#about">About</a>
|
||||
</div>
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,8 @@
|
|||
namespace Brizco.Common.Models.Claims;
|
||||
public static class ApplicationPermission
|
||||
{
|
||||
public const string ManageCoffeeBrew = nameof(ManageCoffeeBrew);
|
||||
|
||||
public const string ViewRecipes = nameof(ViewRecipes);
|
||||
public const string ManageRecipes = nameof(ManageRecipes);
|
||||
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
public interface IPageService : IScopedDependency
|
||||
{
|
||||
Task<AppDashboardPageDto> GetAppDashboardAsync(CancellationToken cancellationToken);
|
||||
Task<List<AppShiftingPageDayDto>> GetShiftingPageAsync(Guid routineId,CancellationToken cancellationToken);
|
||||
Task<AppDashboardPageDto> GetAppDashboardAsync(CancellationToken cancellationToken = default);
|
||||
Task<List<AppShiftingPageDayDto>> GetShiftingPageAsync(Guid routineId,CancellationToken cancellationToken = default);
|
||||
}
|
|
@ -158,6 +158,7 @@ public class JwtService : IJwtService
|
|||
if (baseUser.Email != null)
|
||||
claims.Add(new Claim(ClaimTypes.Email, baseUser.Email));
|
||||
claims.Add(new Claim(ClaimTypes.Gender, baseUser.Gender == 0 ? "Female" : "Mail"));
|
||||
claims.Add(new Claim("FullName", baseUser.FirstName + " " + baseUser.LastName));
|
||||
return claims;
|
||||
|
||||
}
|
||||
|
@ -177,6 +178,7 @@ public class JwtService : IJwtService
|
|||
claims.AddRange(roleClaims);
|
||||
claims.Add(new Claim("JwtID", jwtId));
|
||||
claims.Add(new Claim(ClaimTypes.Gender, baseUser.Gender == 0 ? "Female" : "Mail"));
|
||||
claims.Add(new Claim("FullName",baseUser.FirstName+ " " +baseUser.LastName));
|
||||
return claims;
|
||||
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
using Brizco.Domain.Entities.Routine;
|
||||
using Brizco.Domain.Entities.Shift;
|
||||
using Task = Brizco.Domain.Entities.Task.Task;
|
||||
using System.Linq;
|
||||
|
||||
namespace Brizco.Core.CoreServices;
|
||||
|
||||
|
@ -23,7 +24,7 @@ public class PageService : IPageService
|
|||
_roleManager = roleManager;
|
||||
_mediator = mediator;
|
||||
}
|
||||
public async Task<AppDashboardPageDto> GetAppDashboardAsync(CancellationToken cancellationToken)
|
||||
public async Task<AppDashboardPageDto> GetAppDashboardAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (_currentUserService.UserId == null)
|
||||
throw new AppException("User id is null ");
|
||||
|
@ -32,7 +33,7 @@ public class PageService : IPageService
|
|||
if (!Guid.TryParse(_currentUserService.ComplexId, out Guid complexId))
|
||||
throw new AppException("Complex id is wrong");
|
||||
|
||||
var todayTasks = await _repositoryWrapper.SetRepository<Activity>()
|
||||
var todayActivities = await _repositoryWrapper.SetRepository<Activity>()
|
||||
.TableNoTracking
|
||||
.Where(a => a.ComplexId == complexId && a.SetFor.Date == DateTime.Today.Date)
|
||||
.ToListAsync(cancellationToken);
|
||||
|
@ -42,22 +43,31 @@ public class PageService : IPageService
|
|||
.Select(ShiftPlanMapper.ProjectToSDto)
|
||||
.ToListAsync(cancellationToken);
|
||||
|
||||
foreach (var shiftPlan in todayShiftPlans)
|
||||
{
|
||||
shiftPlan.DoneActivitiesCount = todayActivities.Count(a=>a.ShiftPlanId == shiftPlan.Id && a.IsDone);
|
||||
shiftPlan.UndoneActivitiesCount = todayActivities.Count(a=>a.ShiftPlanId == shiftPlan.Id && !a.IsDone);
|
||||
shiftPlan.TotalActivitiesCount = todayActivities.Count(a=>a.ShiftPlanId == shiftPlan.Id );
|
||||
}
|
||||
|
||||
var names = new List<string>();
|
||||
names.AddRange(todayShiftPlans.SelectMany(sp => sp.Users).Select(s => s.UserFullName).ToList());
|
||||
var page = new AppDashboardPageDto
|
||||
{
|
||||
DoneActivitiesToday = todayTasks.Count(t => t.IsDone),
|
||||
TotalActivitiesToday = todayTasks.Count,
|
||||
UnDoneActivitiesToday = todayTasks.Count(t => t.IsDone!),
|
||||
DoneActivitiesToday = todayActivities.Count(t => t.IsDone),
|
||||
TotalActivitiesToday = todayActivities.Count,
|
||||
UnDoneActivitiesToday = todayActivities.Count(t => t.IsDone!),
|
||||
TotalShiftToday = todayShiftPlans.Count,
|
||||
TodayStaffNames = names,
|
||||
TotalStaffToday = todayShiftPlans.SelectMany(sp => sp.Users).GroupBy(u=>u.UserId).Count()
|
||||
TotalStaffToday = todayShiftPlans.SelectMany(sp => sp.Users).GroupBy(u=>u.UserId).Count(),
|
||||
ShiftPlans = todayShiftPlans
|
||||
};
|
||||
|
||||
var currentShift = todayShiftPlans.FirstOrDefault(s => s.EndAt >= DateTime.Now.TimeOfDay && s.StartAt <= DateTime.Now.TimeOfDay);
|
||||
if (currentShift != null)
|
||||
{
|
||||
page.CurrentShift = currentShift.ShiftTitle;
|
||||
page.CurrentShiftId = currentShift.Id;
|
||||
page.CurrentPosition = currentShift.Users.FirstOrDefault(f => f.UserId == userId)?.PositionName ?? string.Empty;
|
||||
}
|
||||
|
||||
|
@ -173,7 +183,7 @@ public class PageService : IPageService
|
|||
return page;
|
||||
}
|
||||
|
||||
public async Task<List<AppShiftingPageDayDto>> GetShiftingPageAsync(Guid routineId,CancellationToken cancellationToken)
|
||||
public async Task<List<AppShiftingPageDayDto>> GetShiftingPageAsync(Guid routineId,CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (_currentUserService.ComplexId == null)
|
||||
throw new AppException("ComplexId is null", ApiResultStatusCode.NotFound);
|
||||
|
|
|
@ -15,7 +15,7 @@ public class BrewService : IBrewService
|
|||
}
|
||||
public async Task<object> GetLastBrewAsync(string recipeName, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType($"Brizco.Domain.MartenEntities.Recipes.{recipeName}");
|
||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType($"Brizco.Domain.MartenEntities.Brews.{recipeName}");
|
||||
if (type == null)
|
||||
throw new AppException("Recipe not found", ApiResultStatusCode.NotFound);
|
||||
if (_currentUserService.ComplexId == null)
|
||||
|
@ -39,7 +39,7 @@ public class BrewService : IBrewService
|
|||
|
||||
public async Task<BaseRecipeLDto> GetBrewAsync(string recipeName, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType($"Brizco.Domain.MartenEntities.Recipes.{recipeName}");
|
||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType($"Brizco.Domain.MartenEntities.Brews.{recipeName}");
|
||||
if (type == null)
|
||||
throw new AppException("Recipe not found", ApiResultStatusCode.NotFound);
|
||||
if (_currentUserService.ComplexId == null)
|
||||
|
@ -81,7 +81,7 @@ public class BrewService : IBrewService
|
|||
|
||||
public async Task AddBrewAsync(string recipeName, JsonDocument recipeObj, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType($"Brizco.Domain.MartenEntities.Recipes.{recipeName}");
|
||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType($"Brizco.Domain.MartenEntities.Brews.{recipeName}");
|
||||
if (type == null)
|
||||
throw new AppException("Recipe not found", ApiResultStatusCode.NotFound);
|
||||
|
||||
|
@ -90,6 +90,9 @@ public class BrewService : IBrewService
|
|||
if (!Guid.TryParse(_currentUserService.ComplexId, out Guid complexId))
|
||||
throw new BaseApiException(ApiResultStatusCode.BadRequest, "Complex id is wrong");
|
||||
|
||||
if (_currentUserService.FullName == null)
|
||||
throw new BaseApiException(ApiResultStatusCode.BadRequest, "Full name is null");
|
||||
|
||||
var baseRecipe = await _martenRepositoryWrapper.SetRepository<BaseBrew>()
|
||||
.GetEntityAsync(s => s.ComplexId == complexId && s.Name == recipeName, cancellationToken);
|
||||
|
||||
|
@ -97,16 +100,28 @@ public class BrewService : IBrewService
|
|||
{
|
||||
baseRecipe = new BaseBrew()
|
||||
{
|
||||
CurrentBrewJson = JsonConvert.SerializeObject(recipeObj.Deserialize(type)),
|
||||
Name = recipeName,
|
||||
DotnetType = type.FullName ?? $"Brizco.Domain.MartenEntities.Recipes.{recipeName}",
|
||||
DotnetType = type.FullName ?? $"Brizco.Domain.MartenEntities.Brews.{recipeName}",
|
||||
ComplexId = complexId
|
||||
};
|
||||
var current = recipeObj.Deserialize(type, new JsonSerializerOptions(JsonSerializerDefaults.Web));
|
||||
if (current is IBaseBrew brew)
|
||||
{
|
||||
brew.LogAt = DateTime.Now;
|
||||
brew.LogBy = _currentUserService.FullName;
|
||||
baseRecipe.CurrentBrewJson = JsonConvert.SerializeObject(current);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
baseRecipe.PastBrewsJson.Add(baseRecipe.CurrentBrewJson);
|
||||
baseRecipe.CurrentBrewJson = JsonConvert.SerializeObject(recipeObj.Deserialize(type));
|
||||
var current = recipeObj.Deserialize(type,new JsonSerializerOptions(JsonSerializerDefaults.Web));
|
||||
if (current is IBaseBrew brew)
|
||||
{
|
||||
brew.LogAt = DateTime.Now;
|
||||
brew.LogBy = _currentUserService.FullName;
|
||||
baseRecipe.PastBrewsJson.Insert(0,baseRecipe.CurrentBrewJson);
|
||||
baseRecipe.CurrentBrewJson = JsonConvert.SerializeObject(current);
|
||||
}
|
||||
}
|
||||
|
||||
await _martenRepositoryWrapper.SetRepository<BaseBrew>()
|
||||
|
|
|
@ -10,6 +10,8 @@ public class AppDashboardPageDto
|
|||
public List<string> TodayStaffNames { get; set; } = new();
|
||||
public string CurrentPosition { get; set; } = string.Empty;
|
||||
public string CurrentShift { get; set; } = string.Empty;
|
||||
public Guid CurrentShiftId { get; set; }
|
||||
public List<ShiftPlanSDto> ShiftPlans { get; set; } = new();
|
||||
|
||||
|
||||
public string CurrentSignUpStep { get; set; } = string.Empty;
|
||||
|
|
|
@ -6,4 +6,10 @@ public class BaseBrew : MartenEntity
|
|||
public string CurrentBrewJson { get; set; } = string.Empty;
|
||||
public string DotnetType { get; set; } = string.Empty;
|
||||
public List<string> PastBrewsJson { get; set; } = new();
|
||||
}
|
||||
|
||||
public interface IBaseBrew
|
||||
{
|
||||
DateTime LogAt { get; set; }
|
||||
string LogBy { get; set; }
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
namespace Brizco.Domain.MartenEntities.Brews;
|
||||
|
||||
public class CoffeeBrew
|
||||
public class CoffeeBrew : IBaseBrew
|
||||
{
|
||||
public DateTime LogAt { get; set; }
|
||||
public string LogBy { get; set; } = string.Empty;
|
||||
|
|
|
@ -7,5 +7,6 @@ public interface ICurrentUserService : IScopedDependency
|
|||
string? ComplexId { get; }
|
||||
string? UserName { get; }
|
||||
string? RoleId { get; }
|
||||
string? FullName { get; }
|
||||
List<string>? Permissions { get; }
|
||||
}
|
Loading…
Reference in New Issue