import { Router } from 'express'; import { nostrAuth, getProfile, updateLightningAddress, getUserTickets, getUserWins } from '../controllers/user'; import { verifyToken } from '../middleware/auth'; const router = Router(); /** * @swagger * /auth/nostr: * post: * summary: Authenticate with Nostr * tags: [User] * requestBody: * required: true * content: * application/json: * schema: * type: object * required: * - nostr_pubkey * - signed_message * - nonce * properties: * nostr_pubkey: * type: string * description: Nostr public key (hex or npub) * signed_message: * type: string * description: Signature of the nonce * nonce: * type: string * description: Random nonce for signature verification * responses: * 200: * description: Authentication successful * content: * application/json: * schema: * type: object * properties: * version: * type: string * data: * type: object * properties: * token: * type: string * description: JWT token * user: * type: object * 400: * description: Invalid public key or signature */ router.post('/auth/nostr', nostrAuth); /** * @swagger * /me: * get: * summary: Get user profile * tags: [User] * security: * - bearerAuth: [] * responses: * 200: * description: User profile and statistics * 401: * description: Unauthorized */ router.get('/me', verifyToken, getProfile); /** * @swagger * /me/lightning-address: * patch: * summary: Update user's Lightning Address * tags: [User] * security: * - bearerAuth: [] * requestBody: * required: true * content: * application/json: * schema: * type: object * required: * - lightning_address * properties: * lightning_address: * type: string * example: "user@getalby.com" * responses: * 200: * description: Lightning Address updated * 400: * description: Invalid Lightning Address * 401: * description: Unauthorized */ router.patch('/me/lightning-address', verifyToken, updateLightningAddress); /** * @swagger * /me/tickets: * get: * summary: Get user's ticket purchases * tags: [User] * security: * - bearerAuth: [] * parameters: * - in: query * name: limit * schema: * type: integer * default: 50 * - in: query * name: offset * schema: * type: integer * default: 0 * responses: * 200: * description: User's ticket purchase history * 401: * description: Unauthorized */ router.get('/me/tickets', verifyToken, getUserTickets); /** * @swagger * /me/wins: * get: * summary: Get user's wins and payouts * tags: [User] * security: * - bearerAuth: [] * responses: * 200: * description: User's wins * 401: * description: Unauthorized */ router.get('/me/wins', verifyToken, getUserWins); export default router;