public UserNoteResponseData AddCollaborator(int userID, int noteID, CollaboratorsRequest collaborators)
        {
            try
            {
                var notesinfo = _context.UserNotes.
                                Where(userNote => userNote.UserId == userID && userNote.NotesId == noteID && userNote.NotesId == noteID).FirstOrDefault();

                foreach (CollaboratorRequest collaborator in collaborators.Collaborators)
                {
                    var collaboratorsData = _context.Collaborators.
                                            Where(userCollab => userCollab.UserID == collaborator.UserID && userCollab.NoteID == noteID).
                                            FirstOrDefault();
                    if (userID == collaborator.UserID || collaboratorsData != null)
                    {
                        return(null);
                    }
                    else
                    {
                        CollaboratorInfo userNotes = new CollaboratorInfo()
                        {
                            UserID       = collaborator.UserID,
                            NoteID       = noteID,
                            CreatedDate  = DateTime.Now,
                            ModifiedDate = DateTime.Now,
                        };
                        _context.Collaborators.Add(userNotes);
                        _context.SaveChanges();
                    }
                }

                List <LabelResponseData> labelsData = _context.NotesLabels.
                                                      Where(note => note.NotesId == notesinfo.NotesId).
                                                      Join(_context.Labels,
                                                           noteLabel => noteLabel.LabelId,
                                                           label => label.LabelID,
                                                           (noteLabel, label) => new LabelResponseData
                {
                    LabelID   = noteLabel.LabelId,
                    LabelName = label.LabelName,
                }).
                                                      ToList();
                List <CollaboratorResponseData> collabsData = _context.Collaborators.
                                                              Where(noted => noted.NoteID == noteID).
                                                              Join(_context.Users,
                                                                   noteCollab => noteCollab.UserID,
                                                                   collab => collab.ID,
                                                                   (noteCollab, collab) => new CollaboratorResponseData
                {
                    UserID = noteCollab.UserID,
                    Email  = collab.Email
                }).
                                                              ToList();

                UserNoteResponseData noteResponseData = new UserNoteResponseData()
                {
                    NoteId        = notesinfo.NotesId,
                    Title         = notesinfo.Title,
                    Description   = notesinfo.Description,
                    Color         = notesinfo.Color,
                    Image         = notesinfo.Image,
                    Pin           = notesinfo.Pin,
                    Archived      = notesinfo.Archived,
                    Trash         = notesinfo.Trash,
                    Reminder      = notesinfo.Reminder,
                    Labels        = labelsData,
                    Collaborators = collabsData
                };
                return(noteResponseData);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        public UserNoteResponseData CreateNote(int userID, UserNoteRequest userNoteData)
        {
            try
            {
                UserNotesInfo userNote = new UserNotesInfo()
                {
                    UserId       = userID,
                    Title        = userNoteData.Title,
                    Description  = userNoteData.Description,
                    Color        = userNoteData.Color,
                    Image        = userNoteData.Image,
                    Pin          = userNoteData.Pin,
                    Archived     = userNoteData.Archived,
                    Trash        = userNoteData.Trash,
                    Reminder     = userNoteData.Reminder,
                    CreatedDate  = DateTime.Now,
                    ModifiedDate = DateTime.Now
                };
                _context.UserNotes.Add(userNote);
                _context.SaveChanges();

                if (userNoteData.Label != null && userNoteData.Label.Count != 0)
                {
                    List <NotesLabelRequest> labelRequests = userNoteData.Label;
                    foreach (NotesLabelRequest labelRequest in labelRequests)
                    {
                        LabelInfo labelInfo = _context.Labels.
                                              Where(label => label.UserID == userID && label.LabelID == labelRequest.LabelId).
                                              FirstOrDefault <LabelInfo>();

                        if (labelRequest.LabelId > 0 && labelInfo != null)
                        {
                            var data = new NotesLabel
                            {
                                LabelId      = labelRequest.LabelId,
                                NotesId      = userNote.NotesId,
                                CreatedDate  = DateTime.Now,
                                ModifiedDate = DateTime.Now
                            };
                            _context.NotesLabels.Add(data);
                            _context.SaveChanges();
                        }
                    }
                }
                if (userNoteData.Collaborators != null && userNoteData.Collaborators.Count != 0)
                {
                    List <CollaboratorRequest> collaboratorss = userNoteData.Collaborators;
                    foreach (CollaboratorRequest collaborator in collaboratorss)
                    {
                        if (collaborator.UserID != 0)
                        {
                            CollaboratorInfo userNotes = new CollaboratorInfo()
                            {
                                UserID       = collaborator.UserID,
                                NoteID       = userNote.NotesId,
                                CreatedDate  = DateTime.Now,
                                ModifiedDate = DateTime.Now,
                            };
                            _context.Collaborators.Add(userNotes);
                            _context.SaveChanges();
                        }
                    }
                }

                List <LabelResponseData> labelsData = _context.NotesLabels.
                                                      Where(note => note.NotesId == userNote.NotesId).
                                                      Join(_context.Labels,
                                                           labbelledNote => labbelledNote.LabelId,
                                                           label => label.LabelID,
                                                           (labbelledNote, label) => new LabelResponseData
                {
                    LabelID   = labbelledNote.LabelId,
                    LabelName = label.LabelName,
                }).
                                                      ToList();
                List <CollaboratorResponseData> collabsData = _context.Collaborators.
                                                              Where(noted => noted.NoteID == userNote.NotesId).
                                                              Join(_context.Users,
                                                                   noteLabel => noteLabel.UserID,
                                                                   label => label.ID,
                                                                   (noteLabel, label) => new CollaboratorResponseData
                {
                    UserID = noteLabel.UserID,
                    Email  = label.Email
                }).
                                                              ToList();
                var noteResponseData = new UserNoteResponseData()
                {
                    NoteId        = userNote.NotesId,
                    Title         = userNote.Title,
                    Description   = userNote.Description,
                    Color         = userNote.Color,
                    Image         = userNote.Image,
                    Pin           = userNote.Pin,
                    Archived      = userNote.Archived,
                    Reminder      = userNote.Reminder,
                    Trash         = userNote.Trash,
                    Labels        = labelsData,
                    Collaborators = collabsData
                };

                return(noteResponseData);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }