Exemplo n.º 1
0
        public IActionResult CreateEvent(EventModel model)
        {
            //Oda bilgilerini her zaman getiriyoruz... Dropdownda yeniden doldurmak için.
            var roomlist = _roomService.GetRooms();
            List <SelectListItem> roomList = (from k in roomlist
                                              select new SelectListItem
            {
                Text = k.Name,
                Value = k.Id.ToString()
            }).ToList();


            //Başlangıç ve bitiş tarihlerini default olarak atadım.
            model.StartDate = DateTime.Now;
            model.EndDate   = DateTime.Now.AddHours(1);

            //Toplantı sahibi oluşturucusu olarak default olarak bir test mail adresi atadım.
            model.CreatedBy = "*****@*****.**";


            //davet ettiğim kullanıcıları burada sabit girdiğimi düşünün.
            model.Partipicants = "[email protected];[email protected];[email protected]";

            var participantinvitedEmailList = model.Partipicants.Split(";");

            //girilen her mail adresine ait katılımcı Toplantı-Katılımcı ara tablosuna yazılacak mail gönderilecek davetli listesi.
            List <Participant> invitedList = new List <Participant>();

            //Burada tüm domain kullanıcılarının listesini aldım. Uygulama büyük olsaydı almazdım.
            var domainUserList = _eventService.GetParticipantList();

            //Davet edilecek kullanıcıları db'den belirlemiş olduk...
            participantinvitedEmailList.ToList().ForEach(emailitem =>
            {
                var participantuser = domainUserList.Where(i => i.Email == emailitem).FirstOrDefault();
                invitedList.Add(participantuser);
            });


            model.RoomList = roomList;
            Event eventItem = new Event();

            eventItem.StartDate   = model.StartDate;
            eventItem.EndDate     = model.EndDate;
            eventItem.Name        = model.Name;
            eventItem.EventRoomId = model.EventRoomId;


            //1- Toplantı(Event) Bilgisini Kaydettim.
            _eventService.InsertEvent(eventItem);

            //2- Toplantı ve Katlımcı Ara tablosuna Davet edilecek veya edilen katılımcıların listesini yazıyoruz.
            invitedList.ForEach(item =>
            {
                Event_Partipicant ep = new Event_Partipicant();
                ep.EventId           = eventItem.Id; //Yukarıda oluşturduğum
                ep.PartipicantId     = item.Id;      // KatılımcıId;

                //Toplantıyı oluşturan kişinin katılım durumu(status) 0 set edilir.
                if (model.CreatedBy == item.Email)
                {
                    ep.IsOwner = true;
                    ep.Status  = true; //Toplantıyı düzenlediği için doğal olarak toplanyıa katılacak onun için status-true
                }
                else
                {
                    ep.IsOwner = false;
                    ep.Status  = false; //Henüz kullanıcılara davet maili gitmedi. Varsayılan katılım durumu false olarak işaretliyoruz.
                }

                _eventService.InsertEvent_Partipicant(ep);
            });

            var        ownerParticipant = invitedList.Where(ow => ow.Email == model.CreatedBy).FirstOrDefault();
            EmailModel emailModel       = new EmailModel();

            //Şirket kullanıcılarına email daveti gönder...
            invitedList.ForEach(item =>
            {
                EmailModel mailModel = new EmailModel();
                mailModel.Body       = $"<h2>Merhaba {item.Name + " " + item.SurName}, {ownerParticipant.Name + " " + ownerParticipant.SurName} size bir toplantı daveti gönderdi.</h2>  Katılıyor musunuz? <br> <a href=''>Katılıyorum.</a><br>" +
                                       "<a href='{callbackUrl}'>Katılmıyorum.</a>";

                mailModel.To      = item.Email;
                mailModel.Subject = eventItem.Name; // Toplantı adı veya konusu
                mailModel.From    = ownerParticipant.Email;
                mailModel.Name    = ownerParticipant.Name + " " + ownerParticipant.SurName;

                //Her kullanıcı için publisher'a burada bir davet olduğunu bildiriyorum. Bir list olarakta verilebilir.
                _rabbitMQService.SendEmailToRabbitMQ(mailModel);
            });

            return(View(model));
        }