79 lines
2.6 KiB
Markdown
79 lines
2.6 KiB
Markdown
# FunZone Accounting Backend
|
|
|
|
A standalone Django REST service that powers the FunZone accounting app
|
|
(`funzone-accounting`). It is **fully decoupled** from the main FunZone backend:
|
|
|
|
- It keeps its own database (SQLite by default) with the chart of accounts,
|
|
journal vouchers, invoices, products, parties, treasury, payroll and settings.
|
|
- It does **not** have its own user table. Instead it authorizes requests
|
|
statelessly by validating the **admin JWT** issued by the FunZone backend,
|
|
using the shared `SECRET_KEY`. Only tokens carrying `is_staff`/`is_superuser`
|
|
claims (i.e. admin logins) are accepted.
|
|
|
|
Operational data (owners, customers, payments, withdrawals) still comes directly
|
|
from the FunZone backend; the frontend talks to both services.
|
|
|
|
## Endpoints
|
|
|
|
Base path: `/api/accounting/`
|
|
|
|
| Resource | Path | Methods |
|
|
| --- | --- | --- |
|
|
| Chart of accounts | `accounts/` | GET, POST, PATCH, PUT, DELETE |
|
|
| Parties | `parties/` | GET, POST, PATCH, PUT, DELETE |
|
|
| Products | `products/` | GET, POST, PATCH, PUT, DELETE |
|
|
| Journal vouchers | `vouchers/` | GET, POST, PATCH, PUT, DELETE |
|
|
| Invoices | `invoices/` | GET, POST, PATCH, PUT, DELETE |
|
|
| Treasury | `treasury/` | GET, POST, PATCH, PUT, DELETE |
|
|
| Employees | `employees/` | GET, POST, PATCH, PUT, DELETE |
|
|
| Payslips | `payslips/` | GET, POST, PATCH, PUT, DELETE |
|
|
| Company settings | `settings/` | GET, PATCH |
|
|
| Reset (wipe + reseed) | `reset/` | POST |
|
|
|
|
All payloads use camelCase keys to match the frontend types.
|
|
|
|
## Setup
|
|
|
|
```bash
|
|
cd funzone-accounting-backend
|
|
python -m venv .venv
|
|
.venv\Scripts\activate # Windows
|
|
pip install -r requirements.txt
|
|
copy .env.example .env # then set SECRET_KEY to match FunZone
|
|
python manage.py migrate
|
|
python manage.py runserver 8010
|
|
```
|
|
|
|
The first `migrate` seeds a clean chart of accounts (zeroed balances) and the
|
|
default company settings/account mapping. No demo business data is created.
|
|
|
|
## Auth
|
|
|
|
The frontend logs in via the FunZone admin endpoint
|
|
(`/api/auth/token/admin/`) and reuses the returned access token for this service.
|
|
Make sure `SECRET_KEY` here is identical to the FunZone backend's.
|
|
|
|
## Docker
|
|
|
|
SQLite (default, zero extra services):
|
|
|
|
```bash
|
|
docker compose up -d --build
|
|
```
|
|
|
|
The API listens on **http://localhost:8010** (`/health`, `/api/accounting/...`).
|
|
|
|
Set `SECRET_KEY` to match the FunZone backend before starting:
|
|
|
|
```bash
|
|
SECRET_KEY=your-shared-secret docker compose up -d --build
|
|
```
|
|
|
|
Optional PostgreSQL instead of SQLite:
|
|
|
|
```bash
|
|
docker compose --profile postgres up -d --build
|
|
```
|
|
|
|
Then set `DATABASE_URL=postgresql://accounting_user:accounting_password@accounting-db:5432/accounting_db` in your environment or `.env` file.
|