public bool DoesFileExists(string filename)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         return(_context.Files.Any(f => f.Filename == filename));
     }
 }
예제 #2
0
        public void Update(Group group)
        {
            using (var _context = new EduhubContext(_connectionString))
            {
                var currentGroupDto = _context.Groups
                                      .Include(g => g.Members)
                                      .Include(g => g.Messages)
                                      .Include(g => g.Invitations)
                                      .Include(g => g.Kicked)
                                      .Include(g => g.Tags)
                                      .Include(g => g.GroupMessages)
                                      .FirstOrDefault(g => g.Id == group.GroupInfo.Id && !g.IsDeleted);

                Ensure.Any.IsNotNull(currentGroupDto, nameof(currentGroupDto),
                                     opt => opt.WithException(new GroupNotFoundException()));

                _context.RemoveRange(currentGroupDto.Tags);
                currentGroupDto.Tags.RemoveAll(t => true);
                _context.RemoveRange(currentGroupDto.Kicked);
                currentGroupDto.Kicked.RemoveAll(t => true);
                _context.RemoveRange(currentGroupDto.Members);
                currentGroupDto.Members.RemoveAll(t => true);

                currentGroupDto.ParseFromGroup(group);

                _context.SaveChanges();
            }
        }
 public bool DoesExist(string tag)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         return(_context.Tags.Any(t => t.Name == tag));
     }
 }
예제 #4
0
        public void Update(User user)
        {
            using (var _context = new EduhubContext(_connectionString))
            {
                var userDto = _context.Users
                              .Include(u => u.Contacts)
                              .Include(u => u.Invitations)
                              .Include(u => u.Reviews)
                              .Include(u => u.Tags)
                              .Include(u => u.Notifies)
                              .FirstOrDefault(u => u.Id == user.Id);

                Ensure.Any.IsNotNull(userDto, nameof(user),
                                     opt => opt.WithException(new UserNotFoundException(user.Id)));

                _context.RemoveRange(userDto.Tags);
                userDto.Tags.RemoveAll(t => true);
                _context.RemoveRange(userDto.Contacts);
                userDto.Contacts.RemoveAll(t => true);
                _context.RemoveRange(userDto.Reviews);
                userDto.Reviews.RemoveAll(t => true);
                _context.RemoveRange(userDto.Notifies);
                userDto.Notifies.RemoveAll(t => true);

                userDto.ParseFromUser(user);
                _context.SaveChanges();
            }
        }
 public void Add(string newTag)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         _context.Tags.Add(new TagDto(newTag));
         _context.SaveChanges();
     }
 }
 public void Update(Sanction sanction)
 {
     using (var context = new EduhubContext(_connectionString))
     {
         var sanctionDto = context.Sanctions.FirstOrDefault(s => s.Id == sanction.Id);
         sanctionDto.ParseFromSanction(sanction);
         context.SaveChanges();
     }
 }
 public void UpdateKey(Key key)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var keyDto = _context.Keys.FirstOrDefault(k => k.Value == key.Value);
         keyDto.UpdateKey(key);
         _context.SaveChanges();
     }
 }
 public void AddFile(UserFile file)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var userFileDto = new UserFileDto(file.Filename, file.ContentType);
         _context.Files.Add(userFileDto);
         _context.SaveChanges();
     }
 }
 public void Update(Tag tag)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var tagDto = _context.Tags.FirstOrDefault(t => t.Name == tag.Name);
         tagDto.Popularity = tag.Popularity;
         _context.SaveChanges();
     }
 }
예제 #10
0
 public void Delete(User user)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var userDto = new UserDto();
         userDto.ParseFromUser(user);
         _context.Users.Remove(userDto);
         _context.SaveChanges();
     }
 }
 public IEnumerable <Sanction> GetAllActive()
 {
     using (var context = new EduhubContext(_connectionString))
     {
         var sanctionDto = context.Sanctions.Where(s => s.IsActive).ToList();
         var result      = new List <Sanction>();
         sanctionDto.ForEach(dto => result.Add(SanctionExtensions.ParseFromSanctionDto(dto)));
         return(result);
     }
 }
 public Tag Get(string tag)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var tagDto = _context.Tags.FirstOrDefault(t => t.Name == tag);
         Ensure.Any.IsNotNull(tagDto, nameof(tagDto),
                              opt => opt.WithException(new TagNotFoundException(tag)));
         return(TagExtensions.ParseFromTagDto(tagDto));
     }
 }
 public UserFile GetFile(string filename)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var userFileDto = _context.Files.FirstOrDefault(f => f.Filename == filename);
         Ensure.Any.IsNotNull(userFileDto, nameof(userFileDto),
                              opt => opt.WithException(new FileDoesNotExistException()));
         return(UserFileExtensions.ParseFromUserFileDto(userFileDto));
     }
 }
 public void AddKey(Key key)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var keyDto = KeyDtoExtensions.ParseFromKey(key);
         _context.Keys.Add(keyDto);
         _context.SaveChanges();
         key.Value = keyDto.Value;
     }
 }
 public Key GetKey(int keyId)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var keyDto = _context.Keys.FirstOrDefault(k => k.Value == keyId);
         Ensure.Any.IsNotNull(keyDto, nameof(keyDto),
                              opt => opt.WithException(new KeyNotFoundException(keyId)));
         var key = KeyExtensions.ParseFromKeyDto(keyDto);
         return(key);
     }
 }
예제 #16
0
 public void Add(Group group)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var groupDto = new GroupDto();
         groupDto.ParseFromGroup(group);
         _context.Groups.Add(groupDto);
         _context.SaveChanges();
         group.GroupInfo.Id = groupDto.Id;
     }
 }
예제 #17
0
 public void Add(User user)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var userDto = new UserDto();
         userDto.ParseFromUser(user);
         _context.Users.Add(userDto);
         _context.SaveChanges();
         user.Id = userDto.Id;
     }
 }
 public void Add(Sanction sanction)
 {
     using (var context = new EduhubContext(_connectionString))
     {
         var sanctionDto = new SanctionDto();
         sanctionDto.ParseFromSanction(sanction);
         context.Sanctions.Add(sanctionDto);
         context.SaveChanges();
         sanction.Id = sanctionDto.Id;
     }
 }
예제 #19
0
 public void Delete(Group group)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var currentGroupDto = _context.Groups.FirstOrDefault(g => g.Id == group.GroupInfo.Id);
         Ensure.Any.IsNotNull(currentGroupDto, nameof(currentGroupDto),
                              opt => opt.WithException(new GroupNotFoundException()));
         currentGroupDto.IsDeleted = true;
         _context.SaveChanges();
     }
 }
 public Sanction Get(int id)
 {
     using (var context = new EduhubContext(_connectionString))
     {
         var sanctionDto = context.Sanctions
                           .FirstOrDefault(s => s.Id == id);
         Ensure.Any.IsNotNull(sanctionDto, nameof(sanctionDto),
                              opt => opt.WithException(new SanctionNotFoundException(id)));
         var result = SanctionExtensions.ParseFromSanctionDto(sanctionDto);
         return(result);
     }
 }
        public IEnumerable <string> Find(string tag)
        {
            using (var _context = new EduhubContext(_connectionString))
            {
                var foundTags = _context.Tags.ToList().FindAll(t => t.Name.Contains(tag));
                foundTags.Sort((tag1, tag2) => { return(tag2.Popularity.CompareTo(tag1.Popularity)); });

                var result = new List <string>();
                foundTags.ForEach(t => result.Add(t.Name));

                return(result);
            }
        }
예제 #22
0
 public IEnumerable <User> GetAll()
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var allUsers = new List <User>();
         var dtoList  = _context.Users
                        .Include(u => u.Contacts)
                        .Include(u => u.Invitations)
                        .Include(u => u.Tags)
                        .Include(u => u.Reviews)
                        .Include(u => u.Notifies)
                        .ToList();
         dtoList.ForEach(d => allUsers.Add(UserExtensions.ParseFromUserDto(d)));
         return(allUsers);
     }
 }
예제 #23
0
 public User GetUserById(int userId)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var userDto = _context.Users
                       .Include(u => u.Contacts)
                       .Include(u => u.Invitations)
                       .Include(u => u.Tags)
                       .Include(u => u.Reviews)
                       .Include(u => u.Notifies)
                       .FirstOrDefault(u => u.Id == userId);
         Ensure.Any.IsNotNull(userDto, nameof(userId),
                              opt => opt.WithException(new UserNotFoundException(userId)));
         var user = UserExtensions.ParseFromUserDto(userDto);
         return(user);
     }
 }
예제 #24
0
 public Group GetGroupById(int id)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var currentGroupDto = _context.Groups
                               .Include(g => g.Invitations)
                               .Include(g => g.Messages)
                               .Include(g => g.Members)
                               .Include(g => g.GroupMessages)
                               .Include(g => g.Kicked)
                               .Include(g => g.Tags)
                               .FirstOrDefault(g => g.Id == id && !g.IsDeleted);
         Ensure.Any.IsNotNull(currentGroupDto, nameof(currentGroupDto),
                              opt => opt.WithException(new GroupNotFoundException()));
         var result = GroupExtensions.ParseFromGroupDto(currentGroupDto);
         return(result);
     }
 }
예제 #25
0
 public IEnumerable <Group> GetAll()
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var groups = _context.Groups.AsNoTracking()
                      .Include(g => g.Invitations)
                      .Include(g => g.Members)
                      .Include(g => g.Messages)
                      .Include(g => g.Tags)
                      .Include(g => g.GroupMessages)
                      .Include(g => g.Kicked)
                      .Where(g => !g.IsDeleted)
                      .ToList();
         var allGroups = new List <Group>();
         groups.ForEach(g => allGroups.Add(GroupExtensions.ParseFromGroupDto(g)));
         return(allGroups);
     }
 }
예제 #26
0
 public IEnumerable <Group> GetGroupsByMemberId(int memberId)
 {
     using (var _context = new EduhubContext(_connectionString))
     {
         var foundValues = _context.Groups
                           .Include(g => g.Invitations)
                           .Include(g => g.Members)
                           .Include(g => g.Kicked)
                           .Include(g => g.Messages)
                           .Include(g => g.GroupMessages)
                           .Include(g => g.Tags)
                           .Where(g => g.Members.Any(m => m.Id == memberId) && !g.IsDeleted)
                           .ToList();
         var result = new List <Group>();
         foundValues.ForEach(groupDto => result.Add(GroupExtensions.ParseFromGroupDto(groupDto)));
         return(result);
     }
 }
예제 #27
0
        public User GetUserByCredentials(Credentials credentials)
        {
            using (var _context = new EduhubContext(_connectionString))
            {
                var userDto = _context.Users
                              .Include(u => u.Contacts)
                              .Include(u => u.Invitations)
                              .Include(u => u.Tags)
                              .Include(u => u.Reviews)
                              .Include(u => u.Notifies)
                              .FirstOrDefault(u => u.Email == credentials.Email &&
                                              u.PasswordHash == credentials.PasswordHash);
                Ensure.Any.IsNotNull(userDto, nameof(credentials),
                                     opt => opt.WithException(new UserNotFoundException()));

                var user = UserExtensions.ParseFromUserDto(userDto);
                _context.SaveChanges();
                return(user);
            }
        }
예제 #28
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            StartLoggly();

            services.AddWebSocketManager();

            IFileRepository     fileRepository;
            IGroupRepository    groupRepository;
            IKeysRepository     keysRepository;
            ITagRepository      tagRepository;
            IUserRepository     userRepository;
            ISanctionRepository sanctionRepository;
            IEventRepository    eventRepository;

            if (bool.Parse(Configuration.GetValue <string>("UseDB")))
            {
                var dbContext = Configuration.GetValue <string>("MysqlConnectionString");
                using (var context = new EduhubContext(dbContext))
                {
                    if (bool.Parse(Configuration.GetValue <string>("DeleteDB")))
                    {
                        context.Database.EnsureDeleted();
                    }
                    if (context.Database.EnsureCreated())
                    {
                        var dbName = dbContext.Split("database=")[1].Split(";")[0];
                        context.Database.ExecuteSqlCommand(
                            "ALTER DATABASE " + dbName + " CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;");
                        var modelNames = context.Model.GetEntityTypes();
                        foreach (var modelname in modelNames)
                        {
                            var mapping   = context.Model.FindEntityType(modelname.Name).Relational();
                            var tableName = mapping.TableName;
                            context.Database.ExecuteSqlCommand(
                                "alter table " + tableName.ToLower()
                                + " convert to character set utf8mb4 collate utf8mb4_bin;");
                        }
                    }

                    context.Database.Migrate();
                }

                fileRepository     = new InMysqlFileRepository(dbContext);
                groupRepository    = new InMysqlGroupRepository(dbContext);
                keysRepository     = new InMysqlKeyRepository(dbContext);
                tagRepository      = new InMysqlTagRepository(dbContext);
                userRepository     = new InMysqlUserRepository(dbContext);
                sanctionRepository = new InMysqlSanctionRepository(dbContext);
                eventRepository    = new InMemoryEventRepository();
            }
            else
            {
                fileRepository     = new InMemoryFileRepository();
                groupRepository    = new InMemoryGroupRepository();
                keysRepository     = new InMemoryKeysRepository();
                tagRepository      = new InMemoryTagRepository();
                sanctionRepository = new InMemorySanctionRepository();
                userRepository     = new InMemoryUserRepository();
                eventRepository    = new InMemoryEventRepository();
            }

            var emailSettings = new EmailSettings(Configuration.GetValue <string>("EmailLogin"),
                                                  Configuration.GetValue <string>("Email"),
                                                  Configuration.GetValue <string>("EmailPassword"),
                                                  Configuration.GetValue <string>("SmtpAddress"),
                                                  Configuration.GetValue <string>("ConfirmAddress"),
                                                  int.Parse(Configuration.GetValue <string>("SmtpPort")));


            var defaultAvatarFilename    = Configuration.GetValue <string>("DefaultAvatarFilename");
            var defaultAvatarContentType = Configuration.GetValue <string>("DefaultAvatarContentType");
            var userSettings             = new UserSettings(defaultAvatarFilename);

            if (!fileRepository.DoesFileExists(defaultAvatarFilename))
            {
                fileRepository.AddFile(new UserFile(defaultAvatarFilename, defaultAvatarContentType));
            }

            var tagFacade   = new TagFacade(tagRepository);
            var emailSender = new EmailSender(emailSettings);
            var notificationsDistributor = new NotificationsDistributor(groupRepository, userRepository, emailSender);

            var groupSettings = new GroupSettings(Configuration.GetValue <int>("MinGroupSize"),
                                                  Configuration.GetValue <int>("MaxGroupSize"),
                                                  Configuration.GetValue <double>("MinGroupValue"),
                                                  Configuration.GetValue <double>("MaxGroupValue"));

            var eventBusSettings = new EventBusSettings(Configuration.GetValue <string>("RabbitMqServerHostName"),
                                                        Configuration.GetValue <string>("RabbitMqServerVirtualHost"),
                                                        Configuration.GetValue <string>("RabbitMqAdminUserName"),
                                                        Configuration.GetValue <string>("RabbitMqAdminPassword"));
            var eventBus = new EventBus(eventBusSettings);

            eventBus.StartListening();

            var adminsEventConsumer     = new AdminsEventConsumer(notificationsDistributor, eventRepository);
            var courseEventConsumer     = new CourseEventConsumer(notificationsDistributor, eventRepository);
            var curriculumEventConsumer = new CurriculumEventConsumer(notificationsDistributor, eventRepository);
            var groupEventsConsumer     = new GroupEventsConsumer(notificationsDistributor, eventRepository);
            var invitationConsumer      = new InvitationConsumer(notificationsDistributor, eventRepository);
            var memberActionsConsumer   = new MemberActionsConsumer(notificationsDistributor, eventRepository);

            eventBus.RegisterConsumer(new TagPopularityConsumer(tagFacade));
            eventBus.RegisterConsumer <ReportMessageEvent>(adminsEventConsumer);
            eventBus.RegisterConsumer <SanctionsAppliedEvent>(adminsEventConsumer);
            eventBus.RegisterConsumer <SanctionCancelledEvent>(adminsEventConsumer);
            eventBus.RegisterConsumer <TeacherFoundEvent>(courseEventConsumer);
            eventBus.RegisterConsumer <CourseFinishedEvent>(courseEventConsumer);
            eventBus.RegisterConsumer <ReviewReceivedEvent>(courseEventConsumer);
            eventBus.RegisterConsumer <CurriculumAcceptedEvent>(curriculumEventConsumer);
            eventBus.RegisterConsumer <CurriculumDeclinedEvent>(curriculumEventConsumer);
            eventBus.RegisterConsumer <CurriculumSuggestedEvent>(curriculumEventConsumer);
            eventBus.RegisterConsumer <NewCreatorEvent>(groupEventsConsumer);
            eventBus.RegisterConsumer <GroupIsFormedEvent>(groupEventsConsumer);
            eventBus.RegisterConsumer <InvitationAcceptedEvent>(invitationConsumer);
            eventBus.RegisterConsumer <InvitationDeclinedEvent>(invitationConsumer);
            eventBus.RegisterConsumer <InvitationReceivedEvent>(invitationConsumer);
            eventBus.RegisterConsumer <NewMemberEvent>(memberActionsConsumer);
            eventBus.RegisterConsumer <MemberLeftEvent>(memberActionsConsumer);

            var publisher = eventBus.GetEventPublisher();

            var userFacade      = new UserFacade(userRepository, groupRepository, eventRepository, publisher);
            var groupEditFacade = new GroupEditFacade(groupRepository, groupSettings, publisher);
            var userEditFacade  = new UserEditFacade(userRepository, fileRepository, sanctionRepository);
            var groupFacade     = new GroupFacade(groupRepository, userRepository, sanctionRepository, groupSettings,
                                                  publisher);
            var fileFacade        = new FileFacade(fileRepository);
            var chatFacade        = new ChatFacade(groupRepository, userRepository);
            var sanctionsFacade   = new SanctionFacade(sanctionRepository, userRepository, publisher);
            var userAccountFacade = new AccountFacade(keysRepository, userRepository, emailSender, userSettings);
            var reportFacade      = new ReportFacade(userRepository, eventRepository, publisher);

            services.AddSingleton <IUserFacade>(userFacade);
            services.AddSingleton <IGroupFacade>(groupFacade);
            services.AddSingleton <IFileFacade>(fileFacade);
            services.AddSingleton <IChatFacade>(chatFacade);
            services.AddSingleton <IGroupEditFacade>(groupEditFacade);
            services.AddSingleton <IUserEditFacade>(userEditFacade);
            services.AddSingleton <ITagFacade>(tagFacade);
            services.AddSingleton <ISanctionFacade>(sanctionsFacade);
            services.AddSingleton <IAccountFacade>(userAccountFacade);
            services.AddSingleton <IReportFacade>(reportFacade);
            services.AddSingleton(Env);

            userAccountFacade.CheckAdminExistence(Configuration.GetValue <string>("AdminEmail"));

            services.AddSwaggerGen(current =>
            {
                current.SwaggerDoc("v1", new Info
                {
                    Title   = "EduHub API",
                    Version = "v1"
                });
                current.AddSecurityDefinition("Bearer", new ApiKeyScheme
                {
                    Description =
                        "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name = "Authorization",
                    In   = "header",
                    Type = "apiKey"
                });
                current.OperationFilter <ExamplesOperationFilter>();
                current.DescribeAllEnumsAsStrings();
                var a = string.Format(@"{0}\EduHub.xml", AppDomain.CurrentDomain.BaseDirectory);
                current.IncludeXmlComments(string.Format(@"{0}/EduHub.xml", AppDomain.CurrentDomain.BaseDirectory));
            });
            ConfigureSecurity(services);
            if (Configuration.GetValue <bool>("Authorization"))
            {
                services.AddMvc(o =>
                {
                    o.Filters.Add(new ExceptionFilter());
                    o.Filters.Add(new ActionFilter());
                });
            }
            else
            {
                services.AddMvc(o =>
                {
                    o.Filters.Add(new AllowAnonymousFilter());
                    o.Filters.Add(new ExceptionFilter());
                    o.Filters.Add(new ActionFilter());
                });
            }
            services.AddCors(options =>
            {
                options.AddPolicy("AllowAnyOrigin",
                                  builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
            });
        }