Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
27 changes: 25 additions & 2 deletions api/v1_challenges_undisbursed.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,28 @@
package api

import (
"fmt"
"strings"
"time"

"api.audius.co/trashid"
"github.com/gofiber/fiber/v2"
"github.com/jackc/pgx/v5"
)

// openRewards are challenge IDs available to unverified users
var openRewards = []string{
"dvl", // daily volume rewards
"t", // tastemaker
"tp", // trending playlists
"tt", // trending
"tut", // trending underground
"b", // audio match buy (from verified user)
"rd", // referred (by verified user)
"w", // remix contest winner (from verified user)
"cs", // cosign (from verified user)
}

type GetUndisbursedChallengesQueryParams struct {
ChallengeID string `query:"challenge_id"`
CompletedBlocknumber int `query:"completed_blocknumber"`
Expand All @@ -26,7 +41,13 @@ func (app *ApiServer) v1ChallengesUndisbursed(c *fiber.Ctx) error {
return err
}

sql := `
openRewardsPlaceholders := make([]string, len(openRewards))
for i, reward := range openRewards {
openRewardsPlaceholders[i] = fmt.Sprintf("'%s'", reward)
}
openRewardsInClause := strings.Join(openRewardsPlaceholders, ", ")

sql := fmt.Sprintf(`
-- Get Undisbursed Challenges
SELECT user_challenges.challenge_id,
user_challenges.user_id,
Expand All @@ -52,14 +73,16 @@ func (app *ApiServer) v1ChallengesUndisbursed(c *fiber.Ctx) error {
AND (@user_id = 0 OR user_challenges.user_id = @user_id)
AND (@completed_blocknumber = 0 OR user_challenges.completed_blocknumber > @completed_blocknumber)
AND (@challenge_id = '' OR user_challenges.challenge_id = @challenge_id)
-- Filter by verification status: unverified users only see openRewards, verified users see all
AND (users.is_verified = true OR user_challenges.challenge_id IN (%s))
ORDER BY
user_challenges.user_id ASC,
user_challenges.challenge_id ASC,
user_challenges.completed_blocknumber ASC
LIMIT COALESCE(@limit, 100)
OFFSET @offset
;
`
`, openRewardsInClause)

rows, err := app.pool.Query(c.Context(), sql, pgx.NamedArgs{
"user_id": userId,
Expand Down
6 changes: 6 additions & 0 deletions api/v1_challenges_undisbursed_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package api

import (
"context"
"testing"

"github.com/stretchr/testify/assert"
Expand All @@ -9,6 +10,11 @@ import (
func TestGetUndisbursedChallenges(t *testing.T) {
app := testAppWithFixtures(t)

// Set all users as verified so they can see all challenges
ctx := context.Background()
_, err := app.pool.Exec(ctx, `UPDATE users SET is_verified = true WHERE is_current = true`)
assert.NoError(t, err)

// Test basic functionality with no parameters
status, body := testGet(t, app, "/v1/challenges/undisbursed")
assert.Equal(t, 200, status)
Expand Down