MCPcopy Create free account
hub / github.com/GmpABR/NexusFlow / BoardService

Class BoardService

backend/Services/BoardService.cs:8–887  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6namespace Backend.Services;
7
8public class BoardService : IBoardService
9{
10 private readonly AppDbContext _db;
11
12 public BoardService(AppDbContext db)
13 {
14 _db = db;
15 }
16
17 public async Task<List<BoardSummaryDto>> GetBoardsAsync(int userId)
18 {
19 var boards = await _db.Boards
20 .AsNoTracking()
21 .Where(b => b.OwnerId == userId
22 || b.Members.Any(m => m.UserId == userId && m.Status == "Accepted")
23 || (b.Workspace.Members.Any(wm => wm.UserId == userId && wm.Status == "Accepted")))
24 .Select(b => new BoardSummaryDto
25 {
26 Id = b.Id,
27 Name = b.Name,
28 CreatedAt = b.CreatedAt,
29 Role = b.OwnerId == userId ? "Owner" : "Member",
30 ThemeColor = b.ThemeColor,
31 WorkspaceId = b.WorkspaceId,
32 WorkspaceName = b.Workspace.Name,
33 IsClosed = b.IsClosed,
34 OpenTasksCount = b.Columns.SelectMany(c => c.TaskCards)
35 .Count(t => !t.Column.Name.ToLower().Contains("done") && !t.Column.Name.ToLower().Contains("complete")),
36 Members = b.Members
37 .Where(m => m.Status == "Accepted")
38 .Select(m => new BoardMemberDto
39 {
40 Id = m.Id,
41 UserId = m.UserId,
42 Username = m.User.Username,
43 AvatarUrl = m.User.AvatarUrl,
44 Role = m.Role
45 }).ToList()
46 })
47 .ToListAsync();
48
49 // Populate members and override roles based on workspace permissions
50 foreach (var board in boards)
51 {
52 var b = await _db.Boards
53 .AsNoTracking()
54 .Include(x => x.Owner)
55 .Include(x => x.Workspace)
56 .ThenInclude(w => w.Members)
57 .FirstOrDefaultAsync(x => x.Id == board.Id);
58
59 if (b == null) continue;
60
61 // Determine if requester is workspace admin
62 bool isWsAdmin = b.Workspace.OwnerId == userId ||
63 b.Workspace.Members.Any(wm => wm.UserId == userId && wm.Role == "Admin" && wm.Status == "Accepted");
64
65 if (isWsAdmin)

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected