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

Method CreateBoardAsync

backend/Services/BoardService.cs:322–370  ·  view source on GitHub ↗
(CreateBoardDto dto, int userId)

Source from the content-addressed store, hash-verified

320 }
321
322 public async Task<BoardSummaryDto> CreateBoardAsync(CreateBoardDto dto, int userId)
323 {
324 // Check if user is workspace owner or admin
325 var workspaceMember = await _db.WorkspaceMembers
326 .FirstOrDefaultAsync(wm => wm.WorkspaceId == dto.WorkspaceId && wm.UserId == userId && wm.Status == "Accepted");
327
328 var workspace = await _db.Workspaces.FindAsync(dto.WorkspaceId);
329
330 bool isAuthorized = (workspace != null && workspace.OwnerId == userId) ||
331 (workspaceMember != null && workspaceMember.Role == "Admin");
332
333 if (!isAuthorized)
334 throw new UnauthorizedAccessException("Only workspace owners or admins can create new boards.");
335
336 var board = new Board
337 {
338 Name = dto.Name,
339 OwnerId = userId,
340 WorkspaceId = dto.WorkspaceId,
341 ThemeColor = dto.ThemeColor ?? "blue"
342 };
343
344 _db.Boards.Add(board);
345 await _db.SaveChangesAsync();
346
347 if (!dto.SkipDefaultColumns)
348 {
349 // Create 3 default columns
350 var defaultColumns = new List<Column>
351 {
352 new() { Name = "To Do", Order = 0, BoardId = board.Id },
353 new() { Name = "In Progress", Order = 1, BoardId = board.Id },
354 new() { Name = "Done", Order = 2, BoardId = board.Id }
355 };
356
357 _db.Columns.AddRange(defaultColumns);
358 await _db.SaveChangesAsync();
359 }
360
361 return new BoardSummaryDto
362 {
363 Id = board.Id,
364 Name = board.Name,
365 CreatedAt = board.CreatedAt,
366 Role = "Owner",
367 ThemeColor = board.ThemeColor,
368 WorkspaceId = board.WorkspaceId
369 };
370 }
371
372 public async Task<List<BoardMemberDto>> GetBoardMembersAsync(int boardId, int userId)
373 {

Callers 1

CreateBoardMethod · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected