feat: add ci
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using mws.backend.dotnet.application.Common;
|
||||
using mws.backend.dotnet.application.Common.Repositories;
|
||||
using mws.backend.dotnet.application.Projects;
|
||||
using mws.backend.dotnet.domain.Projects;
|
||||
|
||||
namespace mws.backend.dotnet.infrastructure.Persistence.Repositories;
|
||||
@@ -14,11 +15,36 @@ public class ProjectRepository(AppDbContext db) : RepositoryBase<Project>(db), I
|
||||
Set.Include(p => p.CreatedByUser).Include(p => p.UpdatedByUser)
|
||||
.FirstOrDefaultAsync(p => p.Id == projectId && p.Members.Any(m => m.UserId == userId), ct);
|
||||
|
||||
public Task<PagedResult<Project>> GetForUserAsync(Guid userId, int page, int pageSize, CancellationToken ct = default) =>
|
||||
Set.Include(p => p.CreatedByUser).Include(p => p.UpdatedByUser)
|
||||
.Where(p => p.Members.Any(m => m.UserId == userId))
|
||||
.OrderByDescending(p => p.UpdatedAt)
|
||||
.ToPagedResultAsync(page, pageSize, ct);
|
||||
public Task<PagedResult<Project>> GetForUserAsync(ProjectListFilter filter, int page, int pageSize, CancellationToken ct = default)
|
||||
{
|
||||
var query = Set.Include(p => p.CreatedByUser).Include(p => p.UpdatedByUser)
|
||||
.Where(p => p.Members.Any(m => m.UserId == filter.UserId));
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.Term))
|
||||
{
|
||||
var lower = filter.Term.Trim().ToLower();
|
||||
query = query.Where(p => p.Name.ToLower().Contains(lower));
|
||||
}
|
||||
|
||||
if (filter.Status is { } status)
|
||||
{
|
||||
query = query.Where(p => p.Status == status);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.CreatedBy))
|
||||
{
|
||||
var lower = filter.CreatedBy.Trim().ToLower();
|
||||
query = query.Where(p => p.CreatedByUser != null && p.CreatedByUser.DisplayName.ToLower().Contains(lower));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.UpdatedBy))
|
||||
{
|
||||
var lower = filter.UpdatedBy.Trim().ToLower();
|
||||
query = query.Where(p => p.UpdatedByUser != null && p.UpdatedByUser.DisplayName.ToLower().Contains(lower));
|
||||
}
|
||||
|
||||
return query.OrderByDescending(p => p.UpdatedAt).ToPagedResultAsync(page, pageSize, ct);
|
||||
}
|
||||
|
||||
public Task<List<Project>> SearchForUserAsync(Guid userId, string? term, CancellationToken ct = default)
|
||||
{
|
||||
@@ -51,13 +77,28 @@ public class ProjectRepository(AppDbContext db) : RepositoryBase<Project>(db), I
|
||||
public Task<ProjectMember?> GetMemberWithUserAsync(Guid projectId, Guid userId, CancellationToken ct = default) =>
|
||||
Db.ProjectMembers.Include(m => m.User).FirstOrDefaultAsync(m => m.ProjectId == projectId && m.UserId == userId, ct);
|
||||
|
||||
public Task<PagedResult<ProjectMember>> GetMembersWithUserAsync(Guid projectId, int page, int pageSize, CancellationToken ct = default) =>
|
||||
Db.ProjectMembers
|
||||
public Task<PagedResult<ProjectMember>> GetMembersWithUserAsync(Guid projectId, MemberListFilter filter, int page, int pageSize, CancellationToken ct = default)
|
||||
{
|
||||
var query = Db.ProjectMembers
|
||||
.Where(m => m.ProjectId == projectId)
|
||||
.Include(m => m.User)
|
||||
.OrderByDescending(m => m.Role)
|
||||
.AsQueryable();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.Term))
|
||||
{
|
||||
var lower = filter.Term.Trim().ToLower();
|
||||
query = query.Where(m => m.User.Username.ToLower().Contains(lower) || m.User.DisplayName.ToLower().Contains(lower));
|
||||
}
|
||||
|
||||
if (filter.Role is { } role)
|
||||
{
|
||||
query = query.Where(m => m.Role == role);
|
||||
}
|
||||
|
||||
return query.OrderByDescending(m => m.Role)
|
||||
.ThenBy(m => m.User.DisplayName)
|
||||
.ToPagedResultAsync(page, pageSize, ct);
|
||||
}
|
||||
|
||||
public Task<int> CountOwnersAsync(Guid projectId, CancellationToken ct = default) =>
|
||||
Db.ProjectMembers.CountAsync(m => m.ProjectId == projectId && m.Role == MemberRole.Owner, ct);
|
||||
|
||||
Reference in New Issue
Block a user