// CRUD methods.
        public async Task <OperationDetails> CreateAsync(SubscriptionForModeratorDTO item, string userId)
        {
            try
            {
                // Get all subscriptions of the current user.
                IEnumerable <SubscriptionForModerator> subscriptions = Database.SubscriptionForModerator.Find(obj => obj.UserProfileId == item.UserProfileId);
                // Get an active subscription.
                SubscriptionForModerator activeSubscription = (from sub in subscriptions
                                                               where sub.StartDate < DateTime.Now &&
                                                               (DateTime.Now - sub.StartDate < TimeSpan.FromDays(sub.SubscriptionPeriod) &&
                                                                sub.IsApproved)
                                                               select sub).FirstOrDefault();
                // Create a new subscription.
                SubscriptionForModerator subscription = new SubscriptionForModerator
                {
                    UserProfileId      = item.UserProfileId,
                    CourseCount        = item.CourseCount,
                    SubscriptionPeriod = item.SubscriptionPeriod,
                    StartDate          = DateTime.Now,
                    IsTrial            = item.IsTrial,
                    IsApproved         = item.IsApproved
                };
                if (activeSubscription != null)
                {
                    if (!activeSubscription.IsTrial)
                    {
                        subscription.StartDate = DateTime.Now + TimeSpan.FromDays(activeSubscription.SubscriptionPeriod - (DateTime.Now - activeSubscription.StartDate).Days);
                    }
                }
                Database.SubscriptionForModerator.Create(subscription);
                // Add a moderator role.
                if (!BLLRepository.IsModerator(Database, item.UserProfileId))
                {
                    await Database.UserManager.AddToRoleAsync(item.UserProfileId, "moderator");
                }
                await Database.SaveAsync();

                return(new OperationDetails(true, "Subscription adding completed successfully.", "SubscriptionForModerator"));
            }
            catch (Exception ex)
            {
                return(new OperationDetails(false, ex.Message, "SubscriptionForModerator"));
            }
        }
Exemplo n.º 2
0
        public async Task <OperationDetails> CreateAsync(CourseAssignmentDTO item, string userId)
        {
            try
            {
                // I. Checks.
                // Checking for: does the current user has a role - "admin"?
                bool   isAdmin = BLLRepository.IsAdmin(Database, userId);
                Course course  = await Database.Course.GetAsync(item.CourseId);

                if (course.UserProfileId != userId && !isAdmin)
                {
                    return(new OperationDetails(false, "You can't create this course assignment. This course has been created by other user.", "Course Assignment"));
                }
                if (item.Email == null)
                {
                    return(new OperationDetails(false, "You haven't selected any Email!", "Course assignment"));
                }
                // Checking for:  is there this user in the DB?
                var user = await Database.UserManager.FindByEmailAsync(item.Email);

                if (user == null)
                {
                    return(new OperationDetails(false, "User with this Email is absent in DB!", "Course assignment"));
                }
                // Assign the found value to property - UserProfileId.
                item.UserProfileId = user.Id;
                // Checking for:  has a user already been assigned on this course?
                IEnumerable <CourseAssignment> courseAssignments = Database.CourseAssignment.Find(
                    obj =>
                    obj.UserProfileId == item.UserProfileId &&
                    obj.CourseId == item.CourseId);
                if (courseAssignments.Count() > 0)
                {
                    return(new OperationDetails(false, "This user has already been assigned on this course!", "Course assignment"));
                }

                // II. Create a new course assignment.
                CourseAssignment courseAssignment = new CourseAssignment
                {
                    UserProfileId  = item.UserProfileId,
                    CourseId       = item.CourseId,
                    IsApproved     = item.IsApproved,
                    AssignmentDate = DateTime.Now
                };

                // Add a moderator role.
                if (!BLLRepository.IsModerator(Database, item.UserProfileId))
                {
                    await Database.UserManager.AddToRoleAsync(item.UserProfileId, "moderator");
                }

                Database.CourseAssignment.Create(courseAssignment);
                await Database.SaveAsync();

                return(new OperationDetails(true, "Course adding completed successfully.", "Course Assignment"));
            }
            catch (Exception ex)
            {
                return(new OperationDetails(false, ex.Message, "Course Assignment"));
            }
        }