anonpenguin23 655bd92178 Squashed 'website/' content from commit d19b985
git-subtree-dir: website
git-subtree-split: d19b98589ec5d235560a210b26195b653a65a808
2026-03-26 18:14:59 +02:00

80 lines
2.3 KiB
Go

package handler
import (
"database/sql"
"net/http"
"github.com/debros/orama-website/invest-api/auth"
"github.com/debros/orama-website/invest-api/db"
)
func MeHandler(database *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
wallet, chain, ok := auth.WalletFromContext(r.Context())
if !ok {
jsonError(w, http.StatusUnauthorized, "wallet not found in context")
return
}
resp := db.MeResponse{
Wallet: wallet,
Chain: chain,
Licenses: []db.LicenseInfo{},
PurchaseHistory: []db.PurchaseRecord{},
}
// Token totals
database.QueryRow(
"SELECT COALESCE(SUM(tokens_allocated), 0), COALESCE(SUM(amount_paid), 0) FROM token_purchases WHERE wallet = ?",
wallet,
).Scan(&resp.TokensPurchased, &resp.TokenSpent)
// Licenses
rows, _ := database.Query(
"SELECT license_number, claimed_via_nft, created_at FROM license_purchases WHERE wallet = ? ORDER BY created_at",
wallet,
)
if rows != nil {
defer rows.Close()
for rows.Next() {
var l db.LicenseInfo
var claimed int
rows.Scan(&l.LicenseNumber, &claimed, &l.PurchasedAt)
l.ClaimedViaNFT = claimed == 1
resp.Licenses = append(resp.Licenses, l)
}
}
// Whitelist
var count int
database.QueryRow("SELECT COUNT(*) FROM whitelist WHERE wallet = ?", wallet).Scan(&count)
resp.OnWhitelist = count > 0
// ANCHAT claim status
var claimCount int
database.QueryRow("SELECT COUNT(*) FROM anchat_claims WHERE wallet = ?", wallet).Scan(&claimCount)
resp.AnchatClaimed = claimCount > 0
if resp.AnchatClaimed {
database.QueryRow("SELECT orama_amount FROM anchat_claims WHERE wallet = ?", wallet).Scan(&resp.AnchatOrama)
}
// Purchase history (combined)
histRows, _ := database.Query(`
SELECT 'token' as type, amount_paid, pay_currency, tx_hash, created_at FROM token_purchases WHERE wallet = ?
UNION ALL
SELECT 'license' as type, amount_paid, pay_currency, tx_hash, created_at FROM license_purchases WHERE wallet = ?
ORDER BY created_at DESC
`, wallet, wallet)
if histRows != nil {
defer histRows.Close()
for histRows.Next() {
var p db.PurchaseRecord
histRows.Scan(&p.Type, &p.Amount, &p.Currency, &p.TxHash, &p.CreatedAt)
resp.PurchaseHistory = append(resp.PurchaseHistory, p)
}
}
jsonResponse(w, http.StatusOK, resp)
}
}