public void Edit(UpdateTicketModel model)
        {
            DATA.TicketType ticketType = (DATA.TicketType)Enum.Parse(typeof(DATA.TicketType), model.Type);
            if (!Enum.IsDefined(typeof(DATA.TicketType), ticketType))
            {
                throw new ServiceException("Invalid Ticket Type.");
            }

            DATA.TicketState ticketState = (DATA.TicketState)Enum.Parse(typeof(DATA.TicketState), model.State);
            if (!Enum.IsDefined(typeof(DATA.TicketState), ticketState))
            {
                throw new ServiceException("Invalid Ticket State.");
            }

            if (string.IsNullOrEmpty(model.Title) || model.Title.Length < 5 || string.IsNullOrWhiteSpace(model.Title))
            {
                throw new ServiceException("The Ticket title should have no less than 5 characters.");
            }

            if (string.IsNullOrEmpty(model.Description) || model.Description.Length < 5)
            {
                throw new ServiceException("The description should have no less than 5 characters.");
            }

            DATA.Ticket ticket = _context.Tickets.First(t => t.Id == model.Id);

            ticket.Description = model.Description;
            ticket.Title       = model.Title;
            ticket.Type        = ticketType;
            ticket.State       = ticketState;

            _context.SaveChanges();
        }
        public int Create(CreateTicketModel model)
        {
            DATA.TicketType ticketType = (DATA.TicketType)Enum.Parse(typeof(DATA.TicketType), model.TicketType);
            if (!Enum.IsDefined(typeof(DATA.TicketType), ticketType))
            {
                throw new ServiceException("Invalid Ticket Type.");
            }

            DATA.TicketState ticketState = (DATA.TicketState)Enum.Parse(typeof(DATA.TicketState), model.TicketState);
            if (!Enum.IsDefined(typeof(DATA.TicketState), ticketState))
            {
                throw new ServiceException("Invalid Ticket State.");
            }

            if (string.IsNullOrEmpty(model.TicketTitle) || model.TicketTitle.Length < 5 || string.IsNullOrWhiteSpace(model.TicketTitle))
            {
                throw new ServiceException("The Ticket title should have no less than 5 characters.");
            }

            if (string.IsNullOrEmpty(model.TicketDescription) || model.TicketDescription.Length < 5)
            {
                throw new ServiceException("The description should have no less than 5 characters.");
            }

            if (_context.Tickets.Any(a => a.ProjectId == model.ProjectId && a.Title == model.TicketTitle))
            {
                throw new ServiceException($"This project already has ticket with title '{model.TicketTitle}'.");
            }

            DATA.Ticket ticket = new DATA.Ticket()
            {
                ProjectId      = model.ProjectId,
                Description    = model.TicketDescription,
                SubmissionDate = DateTime.Now,
                Title          = model.TicketTitle,
                Type           = ticketType,
                State          = ticketState,
                SubmitterId    = model.SubmitterId,
            };

            _context.Tickets.Add(ticket);

            if (!string.IsNullOrEmpty(model.FileName))
            {
                DATA.File file = new DATA.File
                {
                    Name     = model.FileName,
                    Content  = model.FileContent,
                    TicketId = ticket.Id,
                };

                _context.Files.Add(file);
            }


            _context.SaveChanges();

            return(ticket.Id);
        }
        public void Delete(int ticketId)
        {
            DATA.Ticket ticket = _context.Tickets.First(t => t.Id == ticketId);
            IEnumerable <DATA.Message> messages = _context.Messages.Where(m => m.TicketId == ticket.Id);

            _context.Messages.RemoveRange(messages);
            _context.Tickets.Remove(ticket);
            _context.SaveChanges();
        }
 public static Ticket CreateTicket(DATA.Ticket ticket)
 {
     return(new Ticket
     {
         Id = ticket.Id,
         ProjectId = ticket.ProjectId,
         SubmitterId = ticket.SubmitterId,
         Title = ticket.Title,
         State = ticket.State.ToString(),
         Type = ticket.Type.ToString(),
         Description = ticket.Description,
         SubmissionDate = ticket.SubmissionDate,
     });
 }
        public void ChangeState(UpdateTicketModel model)
        {
            DATA.Ticket ticket = _context.Tickets.First(t => t.Id == model.Id);

            if (ticket == null)
            {
                throw new ServiceException("Ticket not found.");
            }

            if (!string.IsNullOrEmpty(model.State))
            {
                DATA.TicketState state = (DATA.TicketState)Enum.Parse(typeof(DATA.TicketState), model.Type);
                ticket.State = state;
            }

            _context.SaveChanges();
        }
        public Ticket GetByProjectIdAndTicketTitle(int projectId, string ticketTitle)
        {
            DATA.Ticket ticket = _context.Tickets.First(t => t.ProjectId == projectId && t.Title == ticketTitle);

            return(CreateTicket(ticket));
        }
        public Ticket GetByProjectId(int projectId)
        {
            DATA.Ticket ticket = _context.Tickets.First(t => t.ProjectId == projectId);

            return(CreateTicket(ticket));
        }
        public Ticket GetByTitle(string ticketTitle)
        {
            DATA.Ticket ticket = _context.Tickets.First(t => t.Title == ticketTitle);

            return(CreateTicket(ticket));
        }
        public Ticket GetByTicketId(int ticketId)
        {
            DATA.Ticket ticket = _context.Tickets.First(t => t.Id == ticketId);

            return(CreateTicket(ticket));
        }