Label Methods Implementation
(int taskId, int labelId, int userId)
| 852 | |
| 853 | // Label Methods Implementation |
| 854 | public async Task<bool> AddLabelToTaskAsync(int taskId, int labelId, int userId) |
| 855 | { |
| 856 | if (!await VerifyTaskAccessAsync(taskId, userId)) |
| 857 | throw new UnauthorizedAccessException("User does not have access to this task."); |
| 858 | |
| 859 | var existing = await _db.TaskLabels.AnyAsync(tl => tl.TaskCardId == taskId && tl.LabelId == labelId); |
| 860 | if (existing) return true; |
| 861 | |
| 862 | _db.TaskLabels.Add(new TaskLabel { TaskCardId = taskId, LabelId = labelId }); |
| 863 | await _db.SaveChangesAsync(); |
| 864 | |
| 865 | var label = await _db.Labels.FindAsync(labelId); |
| 866 | await LogActivity(taskId, userId, "Label Added", $"Added label: {label?.Name ?? "Unknown"}"); |
| 867 | |
| 868 | return true; |
| 869 | } |
| 870 | |
| 871 | public async Task<bool> RemoveLabelFromTaskAsync(int taskId, int labelId, int userId) |
| 872 | { |