Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
63a85f0
add approved projects from review
Prometheo May 27, 2025
15ba094
remove payout address from grantpicks
Prometheo May 28, 2025
a9c6922
add approved application to projects
Prometheo May 28, 2025
02a3383
use project owner account instance
Prometheo May 28, 2025
82c81c5
add minimum_deposit
Prometheo Jun 2, 2025
44e0e38
change stellar testnet address
Prometheo Jun 18, 2025
20f871e
starting ledger
Prometheo Jun 18, 2025
1a96c3f
change contract:
Prometheo Jul 3, 2025
dfa7c76
change contract address
Prometheo Jul 3, 2025
7bd3ab3
change contract id
Prometheo Jul 8, 2025
a3978d8
upgrade stellar sdk
Prometheo Jul 21, 2025
7ccd5eb
update stellar address
Prometheo Jul 24, 2025
94bf1e8
index campaigns
Prometheo Jul 29, 2025
8b2a160
Merge pull request #171 from PotLock/campaign-indexing
Prometheo Jul 29, 2025
d688f0f
Merge pull request #172 from PotLock/testnet
Prometheo Jul 29, 2025
c7fa558
add script to backfil
Prometheo Jul 31, 2025
bc3ccf5
Merge pull request #173 from PotLock/backfil-script
Prometheo Jul 31, 2025
c5b9d24
Merge pull request #174 from PotLock/testnet
Prometheo Jul 31, 2025
09d4594
feat: implement filters
Prometheo Aug 5, 2025
700a538
Merge pull request #175 from PotLock/testnet
Prometheo Aug 5, 2025
482f8c7
update campaign totals
Prometheo Aug 5, 2025
768e453
campaign id tla
Prometheo Aug 5, 2025
087d462
Merge pull request #176 from PotLock/testnet
Prometheo Aug 5, 2025
6a4907e
add status field
Prometheo Aug 13, 2025
6aaae06
Merge pull request #177 from PotLock/testnet
Prometheo Aug 13, 2025
13a9b9f
stellar update
Prometheo Aug 18, 2025
74c0e35
pick address from env
Prometheo Aug 27, 2025
24a5dfd
Merge pull request #178 from PotLock/testnet
Prometheo Aug 27, 2025
fe97729
change stellar mainnet rpc
Prometheo Aug 27, 2025
bf4c280
Merge pull request #179 from PotLock/testnet
Prometheo Aug 27, 2025
79cc8d8
add asyncio wait for to tackle task execution hanging
Prometheo Aug 31, 2025
ebb7f6a
Merge pull request #180 from PotLock/testnet
Prometheo Aug 31, 2025
3c8bb8a
lax timeout
Prometheo Sep 4, 2025
b24c327
Merge pull request #182 from PotLock/testnet
Prometheo Sep 4, 2025
69a6b37
allow app to dev:
Prometheo Sep 8, 2025
378ea96
Merge pull request #183 from PotLock/testnet
Prometheo Sep 8, 2025
41fdf96
change applications project to actual grantpicks project
Prometheo Sep 16, 2025
e651c61
create application for approved projects by owner
Prometheo Sep 16, 2025
2e193ab
index lists on stellar
Prometheo Sep 23, 2025
5061ac0
add chain to serializer
Prometheo Sep 24, 2025
504efcc
fetch list detail by chain and id
Prometheo Sep 24, 2025
a4ded25
make chain query param for list deets
Prometheo Sep 24, 2025
4a9a375
filter by chain name
Prometheo Sep 24, 2025
b78a6d0
fix susbcription:
Prometheo Sep 26, 2025
707b33f
make video url optional
Prometheo Oct 10, 2025
27cc912
list registration
Prometheo Oct 11, 2025
f2684cf
filter with chain name
Prometheo Oct 11, 2025
18e01d2
fix list update on stellar
Prometheo Oct 13, 2025
7f60e0f
extend cors
Prometheo Oct 14, 2025
5a20bba
extend cors
Prometheo Oct 14, 2025
3f2ba37
fix get or create
Prometheo Oct 22, 2025
8bcab7a
add onchain id to list reg
Prometheo Oct 22, 2025
9f9f2da
replace public address
Prometheo Oct 24, 2025
98e8df1
add list reg update
Prometheo Oct 26, 2025
bc6a349
add model constraint
Prometheo Oct 26, 2025
23a1b02
addd logging
Prometheo Oct 26, 2025
114a7cc
addd logging
Prometheo Oct 26, 2025
0feae39
fix list reg updte
Prometheo Oct 26, 2025
c10ed44
Merge pull request #184 from PotLock/testnet
Prometheo Oct 27, 2025
2fd8090
fix: remove caching
Prometheo Nov 3, 2025
6295826
fix campaign delete
Prometheo Nov 25, 2025
19cbea7
Merge pull request #185 from PotLock/testnet
Prometheo Nov 25, 2025
4ef2ded
Added campaigns sycn API's
aunali8812 Jan 28, 2026
52d67fd
Resolved PR comments
aunali8812 Feb 2, 2026
ae3cf22
Merge pull request #186 from PotLock/feature/sync-campaigns
aunali8812 Feb 3, 2026
be9cedd
Merge pull request #187 from PotLock/testnet
aunali8812 Feb 5, 2026
065f6e8
Merge remote-tracking branch 'origin/dev' into feature/sync-accounts-…
aunali8812 Feb 6, 2026
9bf1618
Added accounts and list sync endpoints
aunali8812 Feb 8, 2026
b9c452a
Merge pull request #188 from PotLock/feature/sync-accounts-lists
aunali8812 Feb 8, 2026
db66701
Fix bug in get lists api
aunali8812 Feb 8, 2026
c2d8990
Add diret donation sync for lists donations
aunali8812 Feb 9, 2026
74921a0
Fixed net amount calculation in direct donation sync
aunali8812 Feb 9, 2026
f80a556
Merge pull request #189 from PotLock/testnet
aunali8812 Feb 9, 2026
9cde009
minor change to trigger deployment
aunali8812 Feb 9, 2026
ada58a8
Added pots sync endpoints
aunali8812 Feb 11, 2026
cf1f05f
Merge pull request #191 from PotLock/feature/sync-pots
aunali8812 Feb 11, 2026
aeeb3e9
Merge pull request #192 from PotLock/feature/sync-pots
aunali8812 Feb 16, 2026
9fac5e0
Added campaign deletion,refund and unescrow sync endpoints
aunali8812 Feb 18, 2026
cd4b50e
Merge pull request #194 from PotLock/feature/campaign-sync-complete
aunali8812 Feb 18, 2026
bca26f1
Merge pull request #195 from PotLock/testnet
aunali8812 Feb 19, 2026
88004f3
Added pots sync endpoints
aunali8812 Feb 11, 2026
2a71801
Added list deletion and upvote/remove upvote sync endpoints
aunali8812 Feb 20, 2026
13e4e01
Merge pull request #197 from PotLock/feature/lists-sync-complete
aunali8812 Feb 22, 2026
7ce5c69
Implemented all grantpicks sync endpoints
aunali8812 Mar 8, 2026
02d36ea
Merge pull request #201 from PotLock/feature/grantpicks-round-applica…
aunali8812 Mar 8, 2026
629360c
Added grantpicks list sync endpoints
aunali8812 Mar 8, 2026
e78e93f
Merge pull request #202 from PotLock/feature/grantpicks-round-applica…
aunali8812 Mar 8, 2026
6d9bcae
Seperated grantpicks endpoints for clarity
aunali8812 Mar 8, 2026
dbe0f0f
Merge pull request #203 from PotLock/feature/grantpicks-sync
aunali8812 Mar 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ media/
# Celery beat schedule file
celerybeat-schedule
dump.rdb
celerybeat-schedule.db

# Flask stuff:
instance/
Expand Down Expand Up @@ -135,3 +136,5 @@ dmypy.json
# static

/static/

.DS_Store
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -207,3 +207,5 @@ Returns:
- `total_donations_count`
- `total_donors_count`
- `total_recipients_count`

..
193 changes: 123 additions & 70 deletions api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,39 @@
PotPayoutChallengesSyncAPI,
)
from base.api import StatsAPI, ReclaimProofRequestView
from campaigns.api import (
AllCampaignDonationsAPI,
CampaignContractConfigAPI,
CampaignDetailAPI,
CampaignDonationsAPI,
CampaignsAPI,
)
from campaigns.sync import (
CampaignSyncAPI,
CampaignDonationSyncAPI,
CampaignDeleteSyncAPI,
CampaignRefundSyncAPI,
CampaignUnescrowSyncAPI,
)
from donations.api import DonationContractConfigAPI
from donations.sync import DirectDonationSyncAPI
from grantpicks.api import AccountProjectListAPI, ProjectListAPI, ProjectRoundVotesAPI, ProjectStatsAPI, RoundApplicationsAPI, RoundDetailAPI, RoundsListAPI
from grantpicks.sync import (
ProjectSyncAPI,
ProjectsListSyncAPI,
RoundSyncAPI,
RoundsListSyncAPI,
RoundApplicationsSyncAPI,
ApplicationReviewSyncAPI,
ApprovedProjectsSyncAPI,
RoundDepositsSyncAPI,
RoundVotesSyncAPI,
RoundPayoutsSyncAPI,
StellarListSyncAPI,
StellarListRegistrationsSyncAPI,
StellarSingleRegistrationSyncAPI,
StellarListDeleteSyncAPI,
)
from lists.api import (
ListDetailAPI,
ListRandomRegistrationAPI,
Expand Down Expand Up @@ -117,6 +147,60 @@
DonationContractConfigAPI.as_view(),
name="donate_contract_config_api",
),
# direct donation sync
path(
"v1/donations/sync",
DirectDonationSyncAPI.as_view(),
name="direct_donation_sync_api",
),
# campaigns
path("v1/campaigns", CampaignsAPI.as_view(), name="campaigns_api"),
path(
"v1/campaigns/<int:campaign_id>",
CampaignDetailAPI.as_view(),
name="campaigns_api_by_id",
),
path(
"v1/campaigns/<int:campaign_id>/donations",
CampaignDonationsAPI.as_view(),
name="campaigns_donations_api",
),
path(
"v1/campaign_donations",
AllCampaignDonationsAPI.as_view(),
name="all_campaign_donations_api",
),
path(
"v1/campaign_contract_config",
CampaignContractConfigAPI.as_view(),
name="campaign_contract_config_api",
),
# campaign sync endpoints
path(
"v1/campaigns/<int:campaign_id>/sync",
CampaignSyncAPI.as_view(),
name="campaign_sync_api",
),
path(
"v1/campaigns/<int:campaign_id>/donations/sync",
CampaignDonationSyncAPI.as_view(),
name="campaign_donation_sync_api",
),
path(
"v1/campaigns/<int:campaign_id>/delete/sync",
CampaignDeleteSyncAPI.as_view(),
name="campaign_delete_sync_api",
),
path(
"v1/campaigns/<int:campaign_id>/refunds/sync",
CampaignRefundSyncAPI.as_view(),
name="campaign_refund_sync_api",
),
path(
"v1/campaigns/<int:campaign_id>/unescrow/sync",
CampaignUnescrowSyncAPI.as_view(),
name="campaign_unescrow_sync_api",
),
# donors
path("v1/donors", DonorsAPI.as_view(), name="donors_api"),
# lists
Expand Down Expand Up @@ -172,7 +256,6 @@
),
path("v1/<str:account_id>/projects", AccountProjectListAPI.as_view(), name="user_projects_api"),
path("v1/<str:account_id>/project-stats", ProjectStatsAPI.as_view(), name="projects_stat__api"),

path(
"v1/mpdao/voters",
MpdaoVotersListAPI.as_view(),
Expand All @@ -183,73 +266,43 @@
MpdaoVoterDetailAPI.as_view(),
name="mpdao_voter_detail",
),
# sync endpoints (for on-demand data fetching from blockchain)
path(
"v1/lists/<int:list_id>/sync",
ListSyncAPI.as_view(),
name="list_sync_api",
),
path(
"v1/lists/<int:list_id>/registrations/sync",
ListRegistrationsSyncAPI.as_view(),
name="list_registrations_sync_api",
),
path(
"v1/lists/<int:list_id>/registrations/<str:registrant_id>/sync",
SingleRegistrationSyncAPI.as_view(),
name="single_registration_sync_api",
),
# direct donation sync
path(
"v1/donations/sync",
DirectDonationSyncAPI.as_view(),
name="direct_donation_sync_api",
),
path(
"v1/lists/<int:list_id>/delete/sync",
ListDeleteSyncAPI.as_view(),
name="list_delete_sync_api",
),
path(
"v1/lists/<int:list_id>/upvote/sync",
ListUpvoteSyncAPI.as_view(),
name="list_upvote_sync_api",
),
path(
"v1/lists/<int:list_id>/remove-upvote/sync",
ListRemoveUpvoteSyncAPI.as_view(),
name="list_remove_upvote_sync_api",
),
# pot sync endpoints
path(
"v1/pots/<str:pot_id>/sync",
PotSyncAPI.as_view(),
name="pot_sync_api",
),
path(
"v1/pots/<str:pot_id>/donations/sync",
PotDonationsSyncAPI.as_view(),
name="pot_donations_sync_api",
),
path(
"v1/pots/<str:pot_id>/applications/sync",
PotApplicationsSyncAPI.as_view(),
name="pot_applications_sync_api",
),
path(
"v1/pots/<str:pot_id>/payouts/sync",
PotPayoutsSyncAPI.as_view(),
name="pot_payouts_sync_api",
),
path(
"v1/pots/<str:pot_id>/challenges/sync",
PotPayoutChallengesSyncAPI.as_view(),
name="pot_challenges_sync_api",
),
# account sync
path(
"v1/accounts/<str:account_id>/sync",
AccountSyncAPI.as_view(),
name="account_sync_api",
),
# =========================================================================
# GRANTPICKS sync endpoints (Stellar chain — grantpicks frontend)
# All prefixed with v1/grantpicks/ to avoid conflicts with Potlock/NEAR
# =========================================================================
# Projects
path("v1/grantpicks/projects/<int:project_id>/sync", ProjectSyncAPI.as_view(), name="grantpicks_project_sync_api"),
path("v1/grantpicks/projects/sync", ProjectsListSyncAPI.as_view(), name="grantpicks_projects_list_sync_api"),
# Rounds
path("v1/grantpicks/rounds/<int:round_id>/sync", RoundSyncAPI.as_view(), name="grantpicks_round_sync_api"),
path("v1/grantpicks/rounds/sync", RoundsListSyncAPI.as_view(), name="grantpicks_rounds_list_sync_api"),
path("v1/grantpicks/rounds/<int:round_id>/applications/sync", RoundApplicationsSyncAPI.as_view(), name="grantpicks_round_applications_sync_api"),
path("v1/grantpicks/rounds/<int:round_id>/applications/review/sync", ApplicationReviewSyncAPI.as_view(), name="grantpicks_application_review_sync_api"),
path("v1/grantpicks/rounds/<int:round_id>/approved-projects/sync", ApprovedProjectsSyncAPI.as_view(), name="grantpicks_approved_projects_sync_api"),
path("v1/grantpicks/rounds/<int:round_id>/deposits/sync", RoundDepositsSyncAPI.as_view(), name="grantpicks_round_deposits_sync_api"),
path("v1/grantpicks/rounds/<int:round_id>/votes/sync", RoundVotesSyncAPI.as_view(), name="grantpicks_round_votes_sync_api"),
path("v1/grantpicks/rounds/<int:round_id>/payouts/sync", RoundPayoutsSyncAPI.as_view(), name="grantpicks_round_payouts_sync_api"),
# Lists
path("v1/grantpicks/lists/<int:list_id>/sync", StellarListSyncAPI.as_view(), name="grantpicks_list_sync_api"),
path("v1/grantpicks/lists/<int:list_id>/registrations/sync", StellarListRegistrationsSyncAPI.as_view(), name="grantpicks_list_registrations_sync_api"),
path("v1/grantpicks/lists/<int:list_id>/registrations/<str:registrant_id>/sync", StellarSingleRegistrationSyncAPI.as_view(), name="grantpicks_single_registration_sync_api"),
path("v1/grantpicks/lists/<int:list_id>/delete/sync", StellarListDeleteSyncAPI.as_view(), name="grantpicks_list_delete_sync_api"),
# =========================================================================
# POTLOCK sync endpoints (NEAR chain — potlock frontend)
# =========================================================================
# Lists
path("v1/lists/<int:list_id>/sync", ListSyncAPI.as_view(), name="list_sync_api"),
path("v1/lists/<int:list_id>/registrations/sync", ListRegistrationsSyncAPI.as_view(), name="list_registrations_sync_api"),
path("v1/lists/<int:list_id>/registrations/<str:registrant_id>/sync", SingleRegistrationSyncAPI.as_view(), name="single_registration_sync_api"),
path("v1/lists/<int:list_id>/delete/sync", ListDeleteSyncAPI.as_view(), name="list_delete_sync_api"),
path("v1/lists/<int:list_id>/upvote/sync", ListUpvoteSyncAPI.as_view(), name="list_upvote_sync_api"),
path("v1/lists/<int:list_id>/remove-upvote/sync", ListRemoveUpvoteSyncAPI.as_view(), name="list_remove_upvote_sync_api"),
# Pots
path("v1/pots/<str:pot_id>/sync", PotSyncAPI.as_view(), name="pot_sync_api"),
path("v1/pots/<str:pot_id>/donations/sync", PotDonationsSyncAPI.as_view(), name="pot_donations_sync_api"),
path("v1/pots/<str:pot_id>/applications/sync", PotApplicationsSyncAPI.as_view(), name="pot_applications_sync_api"),
path("v1/pots/<str:pot_id>/payouts/sync", PotPayoutsSyncAPI.as_view(), name="pot_payouts_sync_api"),
path("v1/pots/<str:pot_id>/challenges/sync", PotPayoutChallengesSyncAPI.as_view(), name="pot_challenges_sync_api"),
# Accounts
path("v1/accounts/<str:account_id>/sync", AccountSyncAPI.as_view(), name="account_sync_api"),
]
30 changes: 15 additions & 15 deletions base/celery.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,21 @@
app.autodiscover_tasks()

app.conf.beat_schedule = {
"update_account_statistics_every_5_minutes": {
"task": "indexer_app.tasks.update_account_statistics",
"schedule": crontab(minute="*/5"), # Executes every 5 minutes
"options": {"queue": "beat_tasks"},
},
"fetch_usd_prices_every_5_minutes": {
"task": "indexer_app.tasks.fetch_usd_prices",
"schedule": crontab(minute="*/5"), # Executes every 5 minutes
"options": {"queue": "beat_tasks"},
},
"update_pot_statistics_every_5_minutes": {
"task": "indexer_app.tasks.update_pot_statistics",
"schedule": crontab(minute="*/5"), # Executes every 5 minutes
"options": {"queue": "beat_tasks"},
},
# "update_account_statistics_every_5_minutes": {
# "task": "indexer_app.tasks.update_account_statistics",
# "schedule": crontab(minute="*/5"), # Executes every 5 minutes
# "options": {"queue": "beat_tasks"},
# },
# "fetch_usd_prices_every_5_minutes": {
# "task": "indexer_app.tasks.fetch_usd_prices",
# "schedule": crontab(minute="*/5"), # Executes every 5 minutes
# "options": {"queue": "beat_tasks"},
# },
# "update_pot_statistics_every_5_minutes": {
# "task": "indexer_app.tasks.update_pot_statistics",
# "schedule": crontab(minute="*/5"), # Executes every 5 minutes
# "options": {"queue": "beat_tasks"},
# },
"fetch_stellar_events_every_minute": {
"task": "indexer_app.tasks.stellar_event_indexer",
"schedule": crontab(minute="*/1"), # Executes every 1 minutes
Expand Down
Loading
Loading