public bool DoesFileExists(string filename) { using (var _context = new EduhubContext(_connectionString)) { return(_context.Files.Any(f => f.Filename == filename)); } }
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)); } }
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(); } }
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); } }
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; } }
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; } }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
// 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()); }); }