Exemplo n.º 1
0
        //done -> problem
        public Result <bool> CreatePledge(string email, int pledgeOptionId)
        {
            if (!IsvalidEmail(email))
            {
                resultbool.ErrorCode = 1;
                resultbool.ErrorText = "not valid email";
                resultbool.Data      = false;
                return(resultbool);
            }
            var user = context.Set <User>().SingleOrDefault(u => u.Email == email);

            if (user == null)
            {
                resultbool.ErrorCode = 3;
                resultbool.ErrorText = "user doesnt exist";
                resultbool.Data      = false;
                return(resultbool);
            }

            //check if a pledge exists?
            var pledgeoption = context.Set <PledgeOptions>().SingleOrDefault(po => po.PledgeOptionsId == pledgeOptionId);

            if (pledgeoption == null)
            {
                resultbool.ErrorCode = 10;
                resultbool.ErrorText = "no pledge options";
                resultbool.Data      = false;
                return(resultbool);
            }


            if (pledgeoption != null && user != null)
            {
                var newpledge = new Pledges();
                newpledge.PledgeOptionId = pledgeOptionId;
                newpledge.UserId         = user.UserId;
                newpledge.User           = user;
                newpledge.PledgeOptions  = pledgeoption;
                pledgeoption.NumberOfBacker++;
                pledgeoption.NumberOfAvailablePledges--;
                context.Add(newpledge);
            }



            //check if the result has been saved successfully
            if (context.SaveChanges() >= 1)
            {
                resultbool.ErrorCode = 0;
                resultbool.ErrorText = "Successfull";
                resultbool.Data      = true;
                return(resultbool);
            }

            resultbool.ErrorCode = 4;
            resultbool.ErrorText = "couldnt save in db";
            resultbool.Data      = false;
            return(resultbool);
        }
Exemplo n.º 2
0
 public int AddPledges(HtmlDocument Document)
 {
     for (int i = 0; i < countPledges(Document); i++)
     {
         Pledges.Add(new Pledge(getPledgeNode(Document, i), Document));
         if (Account == null)
         {
             Account = new Pledge(getPledgeNode(Document, i), Document).getPledgeAccount(Document);
         }
     }
     return(countPledges(Document));
 }
Exemplo n.º 3
0
        public async Task <int> ClaimReward(ulong userId)
        {
            await claimLockJustInCase.WaitAsync();

            var now = DateTime.UtcNow;

            try
            {
                var data = Pledges?.FirstOrDefault(x => x.User.attributes?.social_connections?.discord?.user_id == userId.ToString());

                if (data == null)
                {
                    return(0);
                }

                var amount = data.Reward.attributes.amount_cents;

                using (var uow = _db.UnitOfWork)
                {
                    var users = uow._context.Set <RewardedUser>();
                    var usr   = users.FirstOrDefault(x => x.PatreonUserId == data.User.id);

                    if (usr == null)
                    {
                        users.Add(new RewardedUser()
                        {
                            UserId                  = userId,
                            PatreonUserId           = data.User.id,
                            LastReward              = now,
                            AmountRewardedThisMonth = amount,
                        });

                        await _currency.AddAsync(userId, "Patreon reward - new", amount, uow).ConfigureAwait(false);

                        await uow.CompleteAsync().ConfigureAwait(false);

                        return(amount);
                    }

                    if (usr.LastReward.Month != now.Month)
                    {
                        usr.LastReward = now;
                        usr.AmountRewardedThisMonth = amount;
                        usr.PatreonUserId           = data.User.id;

                        await _currency.AddAsync(userId, "Patreon reward - recurring", amount, uow).ConfigureAwait(false);

                        await uow.CompleteAsync().ConfigureAwait(false);

                        return(amount);
                    }

                    if (usr.AmountRewardedThisMonth < amount)
                    {
                        var toAward = amount - usr.AmountRewardedThisMonth;

                        usr.LastReward = now;
                        usr.AmountRewardedThisMonth = amount;
                        usr.PatreonUserId           = data.User.id;

                        await _currency.AddAsync(usr.UserId, "Patreon reward - update", toAward, uow).ConfigureAwait(false);

                        await uow.CompleteAsync().ConfigureAwait(false);

                        return(toAward);
                    }
                }
                return(0);
            }
            finally
            {
                claimLockJustInCase.Release();
            }
        }
Exemplo n.º 4
0
        public void ConfigureServices(IServiceCollection services)
        {
            try
            {
                services.AddCors();
                services.AddMvc();

                var sqlDb = new SqlDatabase(new EnvironmentVariable("HomeTaskManagementSqlConnection"));
                services.AddSingleton(new MiniAuth(new EnvironmentVariable("HomeTaskManagementSecret")));
                services.AddSingleton(new AppHealth(TimeSpan.FromMinutes(15), sqlDb));
                var eventStore = new SqlEventStore(sqlDb, "HomeTask.Events");
                var blobStore  = new SqlBlobStore(sqlDb, "HomeTask.Blobs");

                var messages = new Messages();
                var users    = new Users(new UsersTable(sqlDb));
                services.AddSingleton(users);
                var tasks    = new Tasks(new TasksTable(sqlDb));
                var accounts = new Accounts(eventStore);
                services.AddSingleton(accounts);
                var pledges       = new Pledges(eventStore, users, accounts, new PledgeFundingSettings());
                var assignments   = new TaskAssignments(eventStore, tasks, users, new AssignmentSettings());
                var taskInstances = new TaskInstances(new InMemoryTaskInstanceStore(), assignments, messages);
                var treasury      = new Treasury(blobStore, accounts);

                services.AddSingleton(users);

                services.AddSingleton(new AppCommands(new Dictionary <string, IRequest>(StringComparer.InvariantCultureIgnoreCase)
                {
                    { nameof(OpenAccount), new AdminOnly(new JsonRequest <OpenAccount>(x => accounts.Apply(x))) },
                    { nameof(SetOverdraftPolicy), new AdminOnly(new JsonRequest <SetOverdraftPolicy>(x => accounts.Apply(x))) },
                    { nameof(TransactionRequest), new AdminOnly(new JsonRequest <TransactionRequest>(x => accounts.Apply(x))) },

                    { nameof(RegisterUser), new JsonRequest <RegisterUser>(x => users.Apply(x)) },
                    { nameof(UnregisterUser), new JsonRequest <UnregisterUser>(x => users.Apply(x)) },
                    { nameof(AddRoles), new AdminOnly(new JsonRequest <AddRoles>(x => users.Apply(x))) },
                    { nameof(RemoveRoles), new AdminOnly(new JsonRequest <RemoveRoles>(x => users.Apply(x))) },

                    { nameof(AssignTask), new AdminOnly(new JsonRequest <AssignTask>(x => assignments.Apply(x))) },

                    { nameof(CreateTask), new AdminOnly(new JsonRequest <CreateTask>(x => tasks.Apply(x))) },
                    { nameof(DeleteTask), new AdminOnly(new JsonRequest <DeleteTask>(x => tasks.Apply(x))) },

                    { nameof(SetPledge), new AdminOnly(new JsonRequest <SetPledge>(x => pledges.Apply(x))) },
                    { nameof(FundPledges), new ServiceOrAdmin(new JsonRequest <FundPledges>(x => pledges.Apply(x))) },

                    { nameof(MarkTaskComplete), new ApproverOnly(new JsonRequest <MarkTaskComplete>(x => taskInstances.Apply(x))) },
                    { nameof(MarkTaskNotComplete), new JsonRequest <MarkTaskNotComplete>(x => taskInstances.Apply(x)) },
                    { nameof(MarkTaskFunded), new ServiceOrAdmin(new JsonRequest <MarkTaskFunded>(x => taskInstances.Apply(x))) },
                    { nameof(ScheduleWorkItemsThrough), new ServiceOrAdmin(new JsonRequest <ScheduleWorkItemsThrough>(x => taskInstances.Apply(x))) },
                    { nameof(WaiveTask), new AdminOnly(new JsonRequest <WaiveTask>(x => taskInstances.Apply(x))) },

                    { nameof(RecordExpenditure), new JsonRequest <RecordExpenditure>(x => treasury.Apply(x)) }
                }));

                services.AddSingleton(new AppQueries(new Dictionary <string, IRequest>(StringComparer.InvariantCultureIgnoreCase)
                {
                    { "accounts", new ParameterlessRequest(() => accounts.GetAll().Select(x => new AccountBalance {
                            Name = users.Get(x.Id).Name, Balance = x.Balance
                        })) },
                    { nameof(Account), new JsonRequest <GetById>(x => Response.Success(accounts.Get(x.Id))) }
                }));

                new AppRecurringTasks(
                    new FundPledgesDaily(pledges),
                    new MarkNotCompletedTasksDaily(taskInstances),
                    new ScheduleTasksDaily(taskInstances))
                .Start();

                new HandleTaskInstanceCompletionPayments(taskInstances, accounts, messages)
                .Start();

                new FundScheduledTasks(taskInstances, accounts, messages)
                .Start();
            }
            catch (Exception e)
            {
                Console.WriteLine($"Fatal error in Startup: {e.Message}");
                Debug.WriteLine($"Fatal error in Startup: {e.Message}");
                Environment.Exit(-1);
            }
        }
Exemplo n.º 5
0
 public FundPledgesDaily(Pledges pledges)
     : this(Clock.UnixUtcNow.StartOfDay().Plus(TimeSpan.FromDays(1)), pledges)
 {
 }
Exemplo n.º 6
0
 public FundPledgesDaily(UnixUtcTime firstExecution, Pledges pledges)
     : base(firstExecution, TimeSpan.FromDays(1),
            () => pledges.Apply(new FundPledges(Clock.UnixUtcNow.Plus(TimeSpan.FromDays(1)))))
 {
 }