//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); }
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)); }
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(); } }
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); } }
public FundPledgesDaily(Pledges pledges) : this(Clock.UnixUtcNow.StartOfDay().Plus(TimeSpan.FromDays(1)), pledges) { }
public FundPledgesDaily(UnixUtcTime firstExecution, Pledges pledges) : base(firstExecution, TimeSpan.FromDays(1), () => pledges.Apply(new FundPledges(Clock.UnixUtcNow.Plus(TimeSpan.FromDays(1))))) { }