{"openapi":"3.0.3","info":{"title":"GharHisab API","version":"1.0.0","description":"Authentication, administration, and Turso LibSQL-backed transaction API."},"servers":[{"url":"https://admin.gharhisab.online","description":"Production"},{"url":"http://localhost:5000","description":"Local development"}],"tags":[{"name":"Health"},{"name":"Authentication"},{"name":"Admin"},{"name":"Transactions"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"User":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"role":{"type":"string","enum":["Admin","HomeUser","OfficeUser","FactoryUser"]},"isActive":{"type":"boolean"},"tokenExpiry":{"type":"string","format":"date-time","nullable":true},"lastLogin":{"type":"string","format":"date-time","nullable":true}}},"Transaction":{"type":"object","properties":{"transactionId":{"type":"string"},"userId":{"type":"string"},"description":{"type":"string"},"amount":{"type":"number"},"type":{"type":"string","enum":["income","expense","loan"]},"category":{"type":"string"},"paymentMode":{"type":"string"},"paymentMethod":{"type":"string"},"loanType":{"type":"string","enum":["len","den"]},"counterparty":{"type":"string"},"counterpartyUserId":{"type":"string"},"dueDate":{"type":"string"},"interest":{"type":"number"},"status":{"type":"string"},"tags":{"type":"string"},"date":{"type":"string","format":"date-time"},"isDeleted":{"type":"boolean"},"deletedAt":{"type":"string","format":"date-time","nullable":true}}},"Error":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/health":{"get":{"tags":["Health"],"summary":"Check API health","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}}},"/api/auth/register":{"post":{"tags":["Authentication"],"summary":"Register a HomeUser","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","email","password"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"password":{"type":"string","format":"password"}}}}}},"responses":{"201":{"description":"Registered"},"400":{"description":"Invalid request"}}}},"/api/auth/login":{"post":{"tags":["Authentication"],"summary":"Log in a user","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","format":"password"}}}}}},"responses":{"200":{"description":"Logged in"},"401":{"description":"Invalid credentials"}}}},"/api/auth/me":{"get":{"tags":["Authentication"],"summary":"Get current user","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}}},"/api/auth/logout":{"post":{"tags":["Authentication"],"summary":"Log out current user","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}}},"/api/admin/admin-login":{"post":{"tags":["Admin"],"summary":"Log in the configured administrator","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","format":"password"}}}}}},"responses":{"200":{"description":"Admin logged in"},"401":{"description":"Invalid credentials"}}}},"/api/admin/users":{"get":{"tags":["Admin"],"summary":"List non-admin users","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}},"post":{"tags":["Admin"],"summary":"Create a user","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","email","password"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"password":{"type":"string","format":"password"},"role":{"type":"string","enum":["Admin","HomeUser","OfficeUser","FactoryUser"]}}}}}}}},"/api/admin/users/{userId}":{"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"get":{"tags":["Admin"],"summary":"Get a user","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}},"patch":{"tags":["Admin"],"summary":"Update a user","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"password":{"type":"string","format":"password"},"role":{"type":"string","enum":["Admin","HomeUser","OfficeUser","FactoryUser"]}}}}}}},"delete":{"tags":["Admin"],"summary":"Delete a user","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}}},"/api/admin/users/{userId}/toggle-status":{"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"patch":{"tags":["Admin"],"summary":"Enable or disable a user","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}}},"/api/admin/users/{userId}/logout":{"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"post":{"tags":["Admin"],"summary":"Invalidate all user sessions","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}}},"/api/admin/users/{userId}/set-expiry":{"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"patch":{"tags":["Admin"],"summary":"Set session expiry","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["expiryDays"],"properties":{"expiryDays":{"type":"number","minimum":1}}}}}}}},"/api/admin/users/{userId}/role":{"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"patch":{"tags":["Admin"],"summary":"Change user role","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["role"],"properties":{"role":{"type":"string","enum":["Admin","HomeUser","OfficeUser","FactoryUser"]}}}}}}}},"/api/admin/stats":{"get":{"tags":["Admin"],"summary":"Get user statistics","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}}},"/api/transactions/{userId}":{"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"get":{"tags":["Transactions"],"summary":"List active transactions","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}},"post":{"tags":["Transactions"],"summary":"Create a transaction","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Transaction"}],"required":["type","amount","date"]}}}}}},"/api/transactions/{userId}/month/{year}/{month}":{"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}},{"name":"year","in":"path","required":true,"schema":{"type":"integer"}},{"name":"month","in":"path","required":true,"schema":{"type":"integer","minimum":1,"maximum":12}}],"get":{"tags":["Transactions"],"summary":"List transactions for a month","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}},"delete":{"tags":["Transactions"],"summary":"Soft-delete all transactions for a month","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}}},"/api/transactions/{userId}/summary":{"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"get":{"tags":["Transactions"],"summary":"Get transaction summary","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}}},"/api/transactions/{userId}/{transactionId}":{"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}},{"name":"transactionId","in":"path","required":true,"schema":{"type":"string"}}],"put":{"tags":["Transactions"],"summary":"Update a transaction","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transaction"}}}}},"delete":{"tags":["Transactions"],"summary":"Soft-delete a transaction","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}}}}}}