Merge pull request #3 from alexpolo1/claude/create-branch-Hy5jt
docs: Update README with current architecture and tech stack
This commit is contained in:
@@ -2,220 +2,261 @@
|
||||
|
||||
En AI-drevet tilbudsberegner for tømrerfaget, der hjælper med at generere detaljerede og professionelle tilbud baseret på projektbeskrivelser.
|
||||
|
||||
## 🚀 Funktioner
|
||||
## Funktioner
|
||||
|
||||
- **AI-genererede tilbud**: Bruger OpenAI GPT-4 til at generere detaljerede tilbud
|
||||
- **Interaktiv feedback**: Mulighed for at justere tilbud baseret på feedback
|
||||
- **Prisdatabase**: Indbygget database med erfaringspriser for tømrerarbejde
|
||||
- **Responsivt design**: Fungerer på desktop og mobil
|
||||
- **Audit trail**: Gemmer alle tilbud og feedback for analyse
|
||||
- **Smart Pakker**: 15 forudkonfigurerede tømrerpakker til tagarbejde med auto-beregning
|
||||
- **7 Tagtyper**: Sadeltag, Valmtag, Københavnertag, Fladtag, Pulttag, Tag med Kviste, Mansardtag
|
||||
- **Ordrestyring Integration**: GraphQL integration til kunder, sager, tilbud og kalender
|
||||
- **Materialeimport**: Bygma prisbog og Stark katalog import
|
||||
- **PDF Generering**: Professionelle tilbuds-PDF'er via Puppeteer
|
||||
- **Real-time Updates**: Socket.IO til live samarbejde
|
||||
- **Struktureret Logging**: JSON logs med correlation IDs
|
||||
|
||||
## 🛠 Teknologi Stack
|
||||
## Teknologi Stack
|
||||
|
||||
- **Frontend**: React med Material-UI
|
||||
- **Backend**: Node.js med Express
|
||||
- **Database**: PostgreSQL
|
||||
- **AI**: OpenAI GPT-4 API
|
||||
- **Containerization**: Docker
|
||||
| Lag | Teknologi |
|
||||
|-----|-----------|
|
||||
| **Frontend** | React 18, Material-UI 5, Socket.IO Client |
|
||||
| **Backend** | Node.js/Express (unified server) |
|
||||
| **Database** | MariaDB/MySQL |
|
||||
| **AI** | OpenAI GPT-4 API ($9/måned budget) |
|
||||
| **Process Manager** | PM2 |
|
||||
| **Test** | Playwright, Jest, Selenium |
|
||||
|
||||
## 📋 Forudsætninger
|
||||
## Forudsætninger
|
||||
|
||||
- Node.js 18+
|
||||
- Docker og Docker Compose
|
||||
- MariaDB/MySQL database
|
||||
- OpenAI API nøgle
|
||||
|
||||
## 🏃♂️ Quick Start
|
||||
## Quick Start
|
||||
|
||||
### 1. Klon projektet
|
||||
\`\`\`bash
|
||||
cd /home/alex/git/tilbudgivern
|
||||
\`\`\`
|
||||
|
||||
### 2. Installer afhængigheder
|
||||
\`\`\`bash
|
||||
# Root projekt
|
||||
### 1. Installer afhængigheder
|
||||
```bash
|
||||
npm install
|
||||
cd backend && npm install
|
||||
cd ../frontend && npm install
|
||||
```
|
||||
|
||||
# Backend
|
||||
cd backend
|
||||
npm install
|
||||
### 2. Konfigurer environment
|
||||
Opret `backend/.env`:
|
||||
```env
|
||||
# Database
|
||||
DB_HOST=127.0.0.1
|
||||
DB_USER=tilbuduser
|
||||
DB_PASSWORD=din-password
|
||||
DB_NAME=tilbudgivern
|
||||
DB_PORT=3306
|
||||
|
||||
# Frontend
|
||||
cd ../frontend
|
||||
npm install
|
||||
cd ..
|
||||
\`\`\`
|
||||
# AI
|
||||
OPENAI_API_KEY=sk-din-openai-api-noegle
|
||||
|
||||
### 3. Start database
|
||||
\`\`\`bash
|
||||
docker-compose up -d
|
||||
\`\`\`
|
||||
# Server
|
||||
PORT=4032
|
||||
|
||||
### 4. Konfigurer environment
|
||||
Rediger \`backend/.env\` og tilføj din OpenAI API nøgle:
|
||||
\`\`\`
|
||||
OPENAI_API_KEY=sk-your-actual-openai-api-key-here
|
||||
\`\`\`
|
||||
# Valgfri
|
||||
ORDRESTYRING_API_TOKEN=din-ordrestyring-token
|
||||
```
|
||||
|
||||
### 5. Start applikationen
|
||||
\`\`\`bash
|
||||
### 3. Start applikationen
|
||||
|
||||
**Development:**
|
||||
```bash
|
||||
npm run dev
|
||||
\`\`\`
|
||||
|
||||
Dette starter både backend (port 3000) og frontend (React development).
|
||||
|
||||
## ⚡ Deployment Scripts
|
||||
|
||||
For hurtig udvikling er der lavet praktiske deployment scripts i roden:
|
||||
|
||||
### Fuld Test & Deploy (`./test-build-deploy.sh`)
|
||||
Kører komplet test, build og deployment med fejlhåndtering:
|
||||
```bash
|
||||
./test-build-deploy.sh
|
||||
```
|
||||
|
||||
Scriptet gør følgende:
|
||||
- ✅ Tester backend syntax og database forbindelse
|
||||
- 🏗️ Bygger frontend med fejltjek
|
||||
- 🔄 Genstarter PM2 server
|
||||
- 📊 Viser status og eventuelle fejl
|
||||
|
||||
### Quick Deploy (`./quick-deploy.sh`)
|
||||
Hurtig version til små ændringer:
|
||||
**Production:**
|
||||
```bash
|
||||
./quick-deploy.sh
|
||||
npm run build # Byg frontend
|
||||
pm2 start ecosystem.config.js
|
||||
```
|
||||
|
||||
**Tip:** Brug altid disse scripts efter kode-ændringer - de sikrer at alt fungerer korrekt!
|
||||
Applikationen kører på **http://localhost:4032**
|
||||
|
||||
## 🧪 Test Applikationen
|
||||
## Kommandoer
|
||||
|
||||
### Uden OpenAI API nøgle (lokal test):
|
||||
1. Åbn browser på http://localhost:3000
|
||||
2. Udfyld projektbeskrivelse, f.eks.: "Lægning af 25 m² klikgulv i stue og gang"
|
||||
3. Vælg projekttype og areal
|
||||
4. Klik "Generer tilbud"
|
||||
5. Du vil få en fejl om OpenAI API nøgle - dette er forventet
|
||||
|
||||
### Med gyldig OpenAI API nøgle:
|
||||
1. Tilføj din rigtige OpenAI API nøgle i `backend/.env`:
|
||||
```
|
||||
OPENAI_API_KEY=sk-din-rigtige-api-noegle-her
|
||||
```
|
||||
2. Genstart serveren med `npm run dev`
|
||||
3. Test tilbudsgenerering med rigtige AI-svar
|
||||
4. Test feedback funktionen ved at justere tilbuddet
|
||||
|
||||
### Test backend API direkte:
|
||||
### Development
|
||||
```bash
|
||||
# Health check
|
||||
curl http://localhost:3001/health
|
||||
|
||||
# Se prisdata for gulv
|
||||
curl http://localhost:3001/api/quotes/prices/gulv
|
||||
|
||||
# Kør automatiske tests
|
||||
cd backend && npm test
|
||||
npm run dev # Start med hot reload
|
||||
npm run build # Byg frontend til produktion
|
||||
```
|
||||
|
||||
## ✅ Status
|
||||
### Production
|
||||
```bash
|
||||
pm2 restart tilbudgivern-unified # Genstart server
|
||||
pm2 logs tilbudgivern-unified # Se logs
|
||||
pm2 status # Check status
|
||||
```
|
||||
|
||||
Applikationen er **fuldt funktionel** og klar til brug:
|
||||
### Test
|
||||
```bash
|
||||
npm run test:pw # Playwright E2E tests (produktion)
|
||||
npm run test:pw:local # Playwright tests (lokal)
|
||||
npm run test:pw:headed # Playwright med synlig browser
|
||||
cd backend && npm test # Backend unit tests (Jest)
|
||||
npm run test:selenium # Selenium UI tests
|
||||
```
|
||||
|
||||
- ✅ Backend server kører på port 3001
|
||||
- ✅ Frontend React app kører på port 3000
|
||||
- ✅ PostgreSQL database er forbundet og initialiseret
|
||||
- ✅ Prisdatabase er populeret med tømrer-erfaringspriser
|
||||
- ✅ API endpoints virker korrekt
|
||||
- ✅ Frontend kommunikerer med backend
|
||||
- ✅ Rate limiting og sikkerhed implementeret
|
||||
- ✅ Error handling og logging funktionerer
|
||||
- ✅ Database audit trail gemmer alle tilbud og feedback
|
||||
- 🔑 **Kræver kun gyldig OpenAI API nøgle for AI-funktionalitet**
|
||||
## Arkitektur
|
||||
|
||||
### Test Gennemført:
|
||||
- Database initialisering ✅
|
||||
- API endpoints ✅
|
||||
- Frontend-backend kommunikation ✅
|
||||
- Formularer og validering ✅
|
||||
- Error handling ✅
|
||||
- Logging ✅
|
||||
- Rate limiting ✅
|
||||
### Unified Server Pattern
|
||||
Applikationen bruger en unified server (`backend/unified-server.js`) der:
|
||||
- Serverer React frontend fra `frontend/build/`
|
||||
- Leverer alle API endpoints på port 4032
|
||||
- Håndterer WebSocket via Socket.IO
|
||||
|
||||
## 📁 Projektstruktur
|
||||
### Backend Services (40+)
|
||||
```
|
||||
backend/src/services/
|
||||
├── openaiService.js # GPT-4 tilbudsgenerering
|
||||
├── smartPackageManagementService.js # Smart pakke håndtering
|
||||
├── ordrestyringSyncService.js # Ordrestyring integration
|
||||
├── roofGeometryService.js # Tagberegninger
|
||||
├── pdfGenerationService.js # PDF generering
|
||||
├── bygmaPrisbogImportService.js # Bygma import
|
||||
├── starkImportService.js # Stark import
|
||||
└── ...
|
||||
```
|
||||
|
||||
\`\`\`
|
||||
### Frontend Components
|
||||
```
|
||||
frontend/src/components/
|
||||
├── ProjectFlow.js # Projekt wizard
|
||||
├── EnhancedGeometry.js # Tag geometri med SVG
|
||||
├── SmartPackagesEnhanced.js # Smart pakke konfiguration
|
||||
├── FinalReview.js # Tilbuds review
|
||||
├── MaterialsManager.js # Materiale valg
|
||||
└── ...
|
||||
```
|
||||
|
||||
## Projektstruktur
|
||||
|
||||
```
|
||||
tilbudgivern/
|
||||
├── backend/ # Node.js backend
|
||||
├── backend/
|
||||
│ ├── unified-server.js # Hoved server (~12,700 LOC)
|
||||
│ ├── src/
|
||||
│ │ ├── routes/ # API routes
|
||||
│ │ ├── services/ # Business logic
|
||||
│ │ ├── middleware/ # Express middleware
|
||||
│ │ └── utils/ # Utilities
|
||||
│ └── package.json
|
||||
├── frontend/ # React frontend
|
||||
│ │ ├── services/ # 40+ services
|
||||
│ │ ├── routes/ # API routes
|
||||
│ │ ├── middleware/ # Express middleware
|
||||
│ │ └── graphql/ # Ordrestyring queries
|
||||
│ └── migrations/ # Database migrations
|
||||
├── frontend/
|
||||
│ ├── src/
|
||||
│ │ ├── App.js # Main app component
|
||||
│ │ └── index.css # Styling
|
||||
│ └── package.json
|
||||
├── infra/ # Infrastructure kode (fremtidig Azure deployment)
|
||||
├── docker-compose.yml # Database setup
|
||||
└── package.json # Root projekt
|
||||
\`\`\`
|
||||
│ │ ├── components/ # 57+ React komponenter
|
||||
│ │ ├── contexts/ # Auth context
|
||||
│ │ └── services/ # Frontend services
|
||||
│ └── build/ # Produktion build
|
||||
├── database/ # Schema og seeds
|
||||
├── tests/ # Playwright & Selenium tests
|
||||
├── docs/ # Dokumentation
|
||||
└── ecosystem.config.js # PM2 konfiguration
|
||||
```
|
||||
|
||||
## 🔧 API Endpoints
|
||||
## API Endpoints
|
||||
|
||||
- \`POST /api/quotes/generate\` - Generer nyt tilbud
|
||||
- \`POST /api/quotes/feedback\` - Submit feedback og få justeret tilbud
|
||||
- \`GET /api/quotes/:id\` - Hent specifikt tilbud
|
||||
- \`GET /api/quotes/prices/:category\` - Hent prisdata
|
||||
- \`GET /health\` - Health check
|
||||
### Tilbud
|
||||
```
|
||||
POST /api/quotes/generate # Generer tilbud
|
||||
POST /api/quotes/generate-ai # AI-drevet generering
|
||||
GET /api/quotes/completed # Liste fuldførte tilbud
|
||||
POST /api/quotes/:id/accept # Accepter tilbud
|
||||
DELETE /api/quotes/:id # Slet tilbud
|
||||
```
|
||||
|
||||
## 🗄 Database Schema
|
||||
### Smart Pakker
|
||||
```
|
||||
GET /api/smart-packages/ # Liste alle pakker
|
||||
POST /api/smart-packages/ # Opret pakke
|
||||
GET /api/smart-packages/:id # Hent specifik pakke
|
||||
PUT /api/smart-packages/:id # Opdater pakke
|
||||
```
|
||||
|
||||
### Prices Table
|
||||
Indeholder erfaringspriser for forskellige typer tømrerarbejde.
|
||||
### Projekter
|
||||
```
|
||||
POST /api/projects # Opret projekt
|
||||
GET /api/projects # Liste projekter
|
||||
GET /api/projects/:id # Hent projekt
|
||||
PUT /api/projects/:id # Opdater projekt
|
||||
```
|
||||
|
||||
### Quotes Table
|
||||
Gemmer alle genererede tilbud med metadata.
|
||||
### Materialer & Priser
|
||||
```
|
||||
GET /api/materials # Liste materialer
|
||||
GET /api/materials/search # Søg materialer
|
||||
POST /api/pricing/bygma-prisbog # Import Bygma prisbog
|
||||
GET /api/pricing/bygma-prices # Hent Bygma priser
|
||||
```
|
||||
|
||||
### Quote Feedback Table
|
||||
Gemmer feedback og justerede tilbud.
|
||||
### Analytics
|
||||
```
|
||||
GET /api/analytics/kpis # Key performance indicators
|
||||
GET /api/dashboard/noegletal # Nøgletal dashboard
|
||||
GET /api/dashboard/economics # Økonomisk overblik
|
||||
```
|
||||
|
||||
## 🔒 Sikkerhed
|
||||
## Database
|
||||
|
||||
### Primære Tabeller
|
||||
| Tabel | Beskrivelse |
|
||||
|-------|-------------|
|
||||
| `project_quotes` | Genererede tilbud |
|
||||
| `customer_projects` | Projekt metadata |
|
||||
| `roof_geometry` | Tag dimensioner og typer |
|
||||
| `material_packages` | Smart pakke definitioner |
|
||||
| `smart_package_tasks` | Opgaver i pakker |
|
||||
| `project_materials` | Materiale valg |
|
||||
| `project_labor` | Arbejdstimer |
|
||||
| `system_logs` | Struktureret logging |
|
||||
|
||||
## Eksterne Integrationer
|
||||
|
||||
### Ordrestyring API
|
||||
- GraphQL endpoint til ordre/kundestyring
|
||||
- Synkronisering af kunder, sager og tilbud
|
||||
- Kalender integration
|
||||
|
||||
### OpenAI API
|
||||
- GPT-4 til intelligent tilbudsgenerering
|
||||
- Token tracking og budget overvågning
|
||||
- $9/måned budget (~160K tokens)
|
||||
|
||||
### Bygma & Stark
|
||||
- Materiale prisbog import
|
||||
- Katalog synkronisering
|
||||
|
||||
## Tagtyper (7 understøttede)
|
||||
|
||||
1. **Sadeltag** - Standard sadeltag (default)
|
||||
2. **Valmtag** - Fire-sidet tag
|
||||
3. **Københavnertag** - Fladt tag med hældning
|
||||
4. **Fladtag** - Helt fladt tag
|
||||
5. **Pulttag** - Ensidigt skrå tag
|
||||
6. **Tag med Kviste** - Tag med kviste
|
||||
7. **Mansardtag** - Mansard stil
|
||||
|
||||
## Sikkerhed
|
||||
|
||||
- Rate limiting på API endpoints
|
||||
- Input validering med Joi
|
||||
- Helmet.js sikkerhedsheaders
|
||||
- JWT authentication
|
||||
- Parameteriserede SQL queries
|
||||
- CORS konfiguration
|
||||
- Environment variabel protection
|
||||
|
||||
## 🚀 Deployment til Azure
|
||||
## Dokumentation
|
||||
|
||||
Infrastructure koden til Azure deployment findes i \`infra/\` mappen og vil blive udviklet i næste fase.
|
||||
Se `/docs/` mappen for detaljeret dokumentation:
|
||||
- [API Dokumentation](docs/api/)
|
||||
- [Feature Guides](docs/features/)
|
||||
- [Deployment Guide](docs/deployment/)
|
||||
- [Logging System](docs/LOGGING_SYSTEM.md)
|
||||
|
||||
Planlagte Azure services:
|
||||
- Azure App Service (frontend + backend)
|
||||
- Azure Database for PostgreSQL
|
||||
- Azure OpenAI Service
|
||||
- Azure Application Insights
|
||||
|
||||
## 🤝 Bidrag
|
||||
|
||||
1. Fork projektet
|
||||
2. Opret feature branch
|
||||
3. Commit ændringer
|
||||
4. Push til branch
|
||||
5. Opret Pull Request
|
||||
|
||||
## 📄 Licens
|
||||
|
||||
MIT License - se LICENSE fil for detaljer.
|
||||
|
||||
## 📞 Support
|
||||
## Support
|
||||
|
||||
Ved spørgsmål eller problemer, opret et issue i projektets GitHub repository.
|
||||
|
||||
## Active Focus & Copilot Memory
|
||||
- Se [COPILOT_MEMORY.md](COPILOT_MEMORY.md) for en kort, opdateret oversigt over hvad vi arbejder på lige nu.
|
||||
- I Copilot Chat: start med “@workspace brug COPILOT_MEMORY.md som kontekst” og henvis til den i dine spørgsmål for mere relevante svar.
|
||||
## Licens
|
||||
|
||||
MIT License - se LICENSE fil for detaljer.
|
||||
|
||||
+119
-192
@@ -1,217 +1,144 @@
|
||||
# Tilbudgivern - AI-baseret Tilbudsberegner
|
||||
# Tilbudgivern Dokumentation
|
||||
|
||||
En AI-drevet tilbudsberegner for tømrerfaget, der hjælper med at generere detaljerede og professionelle tilbud baseret på projektbeskrivelser.
|
||||
Velkommen til Tilbudgivern dokumentationen. Her finder du detaljerede guides til alle aspekter af systemet.
|
||||
|
||||
## 🚀 Funktioner
|
||||
## Oversigt
|
||||
|
||||
- **AI-genererede tilbud**: Bruger OpenAI GPT-4 til at generere detaljerede tilbud
|
||||
- **Interaktiv feedback**: Mulighed for at justere tilbud baseret på feedback
|
||||
- **Prisdatabase**: Indbygget database med erfaringspriser for tømrerarbejde
|
||||
- **Responsivt design**: Fungerer på desktop og mobil
|
||||
- **Audit trail**: Gemmer alle tilbud og feedback for analyse
|
||||
Tilbudgivern er en AI-drevet tilbudsberegner for tømrerfaget med:
|
||||
- 40+ backend services
|
||||
- 57+ frontend komponenter
|
||||
- 15 Smart Pakker til tagarbejde
|
||||
- 7 understøttede tagtyper
|
||||
- Ordrestyring GraphQL integration
|
||||
|
||||
## 🛠 Teknologi Stack
|
||||
## Dokumentationsstruktur
|
||||
|
||||
- **Frontend**: React med Material-UI
|
||||
- **Backend**: Node.js med Express
|
||||
- **Database**: PostgreSQL
|
||||
- **AI**: OpenAI GPT-4 API
|
||||
- **Containerization**: Docker
|
||||
### API Dokumentation (`/api/`)
|
||||
| Dokument | Beskrivelse |
|
||||
|----------|-------------|
|
||||
| [ORDRESTYRING_API_INVENTORY](api/ORDRESTYRING_API_INVENTORY.md) | Komplet Ordrestyring API reference |
|
||||
| [ORDRESTYRING_API_STATUS_OVERSIGT](api/ORDRESTYRING_API_STATUS_OVERSIGT.md) | Status på API integrationer |
|
||||
| [CUSTOMER_SEARCH_INTEGRATION](api/CUSTOMER_SEARCH_INTEGRATION.md) | Kundesøgning integration |
|
||||
| [CASE_ANALYTICS_SYSTEM_DOCUMENTATION](api/CASE_ANALYTICS_SYSTEM_DOCUMENTATION.md) | Sags-analytics system |
|
||||
| [BYGMA_AUTOMATION_README](api/BYGMA_AUTOMATION_README.md) | Bygma automatisering |
|
||||
|
||||
## 📋 Forudsætninger
|
||||
### Feature Dokumentation (`/features/`)
|
||||
| Dokument | Beskrivelse |
|
||||
|----------|-------------|
|
||||
| [SMART_PACKAGES_COMPLETE_CATALOG](features/SMART_PACKAGES_COMPLETE_CATALOG.md) | Komplet Smart Pakke katalog |
|
||||
| [TOMRER_SMART_PACKAGES_GUIDE](features/TOMRER_SMART_PACKAGES_GUIDE.md) | Tømrer smart pakke guide |
|
||||
| [BYGMA_IMPORT_FEATURE](features/BYGMA_IMPORT_FEATURE.md) | Bygma import funktionalitet |
|
||||
| [ORDRESTYRING_GRAPHQL_INTEGRATION](features/ORDRESTYRING_GRAPHQL_INTEGRATION.md) | GraphQL integration |
|
||||
| [INTELLIGENT_TASKS_FEATURE](features/INTELLIGENT_TASKS_FEATURE.md) | Intelligente opgaver |
|
||||
| [MARKUP_SLIDER_SYSTEM](features/MARKUP_SLIDER_SYSTEM.md) | Avance slider system |
|
||||
| [FEATURE_ROADMAP](features/FEATURE_ROADMAP.md) | Feature roadmap |
|
||||
|
||||
- Node.js 18+
|
||||
- Docker og Docker Compose
|
||||
- OpenAI API nøgle
|
||||
### Deployment (`/deployment/`)
|
||||
| Dokument | Beskrivelse |
|
||||
|----------|-------------|
|
||||
| [DEPLOYMENT](deployment/DEPLOYMENT.md) | Deployment guide |
|
||||
| [PM2_GUIDE](deployment/PM2_GUIDE.md) | PM2 process manager |
|
||||
| [DEPLOYMENT-PIPELINE](deployment/DEPLOYMENT-PIPELINE.md) | CI/CD pipeline |
|
||||
| [DNS_MIGRATION_GUIDE](deployment/DNS_MIGRATION_GUIDE.md) | DNS migration |
|
||||
|
||||
## 🏃♂️ Quick Start
|
||||
### Guides (`/guides/`)
|
||||
| Dokument | Beskrivelse |
|
||||
|----------|-------------|
|
||||
| [KOMPLET_ORDRESTYRING_SYSTEM_OVERSIGT](guides/KOMPLET_ORDRESTYRING_SYSTEM_OVERSIGT.md) | Komplet Ordrestyring oversigt |
|
||||
| [KOMPLET_TILBUDSBEREGNING_LØSNING](guides/KOMPLET_TILBUDSBEREGNING_LØSNING.md) | Tilbudsberegning løsning |
|
||||
| [AI_TILBUDS_PROMPT_GUIDE](guides/AI_TILBUDS_PROMPT_GUIDE.md) | AI prompt guide |
|
||||
| [TAG_OPGAVE_DATABASE](guides/TAG_OPGAVE_DATABASE.md) | Tag opgave database |
|
||||
| [TOMMER_QUICK_REFERENCE](guides/TOMMER_QUICK_REFERENCE.md) | Tømrer quick reference |
|
||||
|
||||
### 1. Klon projektet
|
||||
\`\`\`bash
|
||||
cd /home/alex/git/tilbudgivern
|
||||
\`\`\`
|
||||
### System Dokumentation (root)
|
||||
| Dokument | Beskrivelse |
|
||||
|----------|-------------|
|
||||
| [LOGGING_SYSTEM](LOGGING_SYSTEM.md) | Struktureret logging system |
|
||||
| [PORT_MANAGEMENT](PORT_MANAGEMENT.md) | Port håndtering |
|
||||
| [DATABASE_BACKUP_SETUP](DATABASE_BACKUP_SETUP.md) | Database backup |
|
||||
| [ROOF_TYPES_IMPLEMENTATION](ROOF_TYPES_IMPLEMENTATION.md) | 7 tagtype implementationer |
|
||||
| [OPENAI_COSTS_API](OPENAI_COSTS_API.md) | OpenAI omkostnings-API |
|
||||
|
||||
### 2. Installer afhængigheder
|
||||
\`\`\`bash
|
||||
# Root projekt
|
||||
npm install
|
||||
### Test Dokumentation
|
||||
| Dokument | Beskrivelse |
|
||||
|----------|-------------|
|
||||
| [UI_TESTING_SETUP](UI_TESTING_SETUP.md) | UI test opsætning |
|
||||
| [SVG_TESTING_GUIDE](SVG_TESTING_GUIDE.md) | SVG test guide |
|
||||
|
||||
# Backend
|
||||
cd backend
|
||||
npm install
|
||||
## Quick Links
|
||||
|
||||
# Frontend
|
||||
cd ../frontend
|
||||
npm install
|
||||
cd ..
|
||||
\`\`\`
|
||||
### Primære Systemer
|
||||
- **Unified Server**: `backend/unified-server.js` (port 4032)
|
||||
- **Smart Pakker**: 15 forudkonfigurerede tømrerpakker
|
||||
- **Ordrestyring**: GraphQL integration til ordre/kundestyring
|
||||
- **OpenAI**: GPT-4 tilbudsgenerering ($9/måned budget)
|
||||
|
||||
### 3. Start database
|
||||
\`\`\`bash
|
||||
docker-compose up -d
|
||||
\`\`\`
|
||||
### Teknologi Stack
|
||||
| Komponent | Teknologi |
|
||||
|-----------|-----------|
|
||||
| Frontend | React 18, Material-UI 5 |
|
||||
| Backend | Node.js/Express |
|
||||
| Database | MariaDB/MySQL |
|
||||
| Real-time | Socket.IO |
|
||||
| PDF | Puppeteer |
|
||||
| Test | Playwright, Jest, Selenium |
|
||||
|
||||
### 4. Konfigurer environment
|
||||
Rediger \`backend/.env\` og tilføj din OpenAI API nøgle:
|
||||
\`\`\`
|
||||
OPENAI_API_KEY=sk-your-actual-openai-api-key-here
|
||||
\`\`\`
|
||||
|
||||
### 5. Start applikationen
|
||||
\`\`\`bash
|
||||
### Vigtige Kommandoer
|
||||
```bash
|
||||
# Development
|
||||
npm run dev
|
||||
\`\`\`
|
||||
|
||||
Dette starter både backend (port 3000) og frontend (React development).
|
||||
# Production
|
||||
pm2 restart tilbudgivern-unified
|
||||
pm2 logs tilbudgivern-unified
|
||||
|
||||
## ⚡ Deployment Scripts
|
||||
|
||||
For hurtig udvikling er der lavet praktiske deployment scripts i roden:
|
||||
|
||||
### Fuld Test & Deploy (`./test-build-deploy.sh`)
|
||||
Kører komplet test, build og deployment med fejlhåndtering:
|
||||
```bash
|
||||
./test-build-deploy.sh
|
||||
# Test
|
||||
npm run test:pw # Playwright E2E
|
||||
npm run test:pw:local # Lokal test
|
||||
cd backend && npm test # Unit tests
|
||||
```
|
||||
|
||||
Scriptet gør følgende:
|
||||
- ✅ Tester backend syntax og database forbindelse
|
||||
- 🏗️ Bygger frontend med fejltjek
|
||||
- 🔄 Genstarter PM2 server
|
||||
- 📊 Viser status og eventuelle fejl
|
||||
## Arkitektur Oversigt
|
||||
|
||||
### Quick Deploy (`./quick-deploy.sh`)
|
||||
Hurtig version til små ændringer:
|
||||
```bash
|
||||
./quick-deploy.sh
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ Frontend (React 18) │
|
||||
│ Material-UI + Socket.IO Client │
|
||||
└─────────────────────────┬───────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ Unified Server (Port 4032) │
|
||||
│ backend/unified-server.js │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ Routes │ Services (40+) │ Middleware │
|
||||
│ ──────── │ ─────────────── │ ────────── │
|
||||
│ /api/* │ openaiService │ auth │
|
||||
│ │ smartPackage... │ correlationId │
|
||||
│ │ ordrestyring... │ errorHandler │
|
||||
│ │ pdfGeneration │ requestLogger │
|
||||
└─────────────────────────┬───────────────────────────────┘
|
||||
│
|
||||
┌───────────────┼───────────────┐
|
||||
▼ ▼ ▼
|
||||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||
│ MariaDB │ │ OpenAI │ │ Ordrestyring│
|
||||
│ Database │ │ GPT-4 API │ │ GraphQL API │
|
||||
└─────────────┘ └─────────────┘ └─────────────┘
|
||||
```
|
||||
|
||||
**Tip:** Brug altid disse scripts efter kode-ændringer - de sikrer at alt fungerer korrekt!
|
||||
## Database Tabeller
|
||||
|
||||
## 🧪 Test Applikationen
|
||||
| Kategori | Tabeller |
|
||||
|----------|----------|
|
||||
| Tilbud | `project_quotes`, `quotes`, `quote_feedback` |
|
||||
| Projekter | `customer_projects`, `projects` |
|
||||
| Materialer | `materials`, `material_prices`, `project_materials` |
|
||||
| Arbejde | `labor_tasks`, `labor_prices`, `project_labor` |
|
||||
| Pakker | `material_packages`, `smart_package_tasks`, `smart_package_materials` |
|
||||
| Geometri | `roof_geometry` |
|
||||
| System | `system_logs`, `request_logs`, `system_settings` |
|
||||
|
||||
### Uden OpenAI API nøgle (lokal test):
|
||||
1. Åbn browser på http://localhost:3000
|
||||
2. Udfyld projektbeskrivelse, f.eks.: "Lægning af 25 m² klikgulv i stue og gang"
|
||||
3. Vælg projekttype og areal
|
||||
4. Klik "Generer tilbud"
|
||||
5. Du vil få en fejl om OpenAI API nøgle - dette er forventet
|
||||
## Kontakt
|
||||
|
||||
### Med gyldig OpenAI API nøgle:
|
||||
1. Tilføj din rigtige OpenAI API nøgle i `backend/.env`:
|
||||
```
|
||||
OPENAI_API_KEY=sk-din-rigtige-api-noegle-her
|
||||
```
|
||||
2. Genstart serveren med `npm run dev`
|
||||
3. Test tilbudsgenerering med rigtige AI-svar
|
||||
4. Test feedback funktionen ved at justere tilbuddet
|
||||
|
||||
### Test backend API direkte:
|
||||
```bash
|
||||
# Health check
|
||||
curl http://localhost:3001/health
|
||||
|
||||
# Se prisdata for gulv
|
||||
curl http://localhost:3001/api/quotes/prices/gulv
|
||||
|
||||
# Kør automatiske tests
|
||||
cd backend && npm test
|
||||
```
|
||||
|
||||
## ✅ Status
|
||||
|
||||
Applikationen er **fuldt funktionel** og klar til brug:
|
||||
|
||||
- ✅ Backend server kører på port 3001
|
||||
- ✅ Frontend React app kører på port 3000
|
||||
- ✅ PostgreSQL database er forbundet og initialiseret
|
||||
- ✅ Prisdatabase er populeret med tømrer-erfaringspriser
|
||||
- ✅ API endpoints virker korrekt
|
||||
- ✅ Frontend kommunikerer med backend
|
||||
- ✅ Rate limiting og sikkerhed implementeret
|
||||
- ✅ Error handling og logging funktionerer
|
||||
- ✅ Database audit trail gemmer alle tilbud og feedback
|
||||
- 🔑 **Kræver kun gyldig OpenAI API nøgle for AI-funktionalitet**
|
||||
|
||||
### Test Gennemført:
|
||||
- Database initialisering ✅
|
||||
- API endpoints ✅
|
||||
- Frontend-backend kommunikation ✅
|
||||
- Formularer og validering ✅
|
||||
- Error handling ✅
|
||||
- Logging ✅
|
||||
- Rate limiting ✅
|
||||
|
||||
## 📁 Projektstruktur
|
||||
|
||||
\`\`\`
|
||||
tilbudgivern/
|
||||
├── backend/ # Node.js backend
|
||||
│ ├── src/
|
||||
│ │ ├── routes/ # API routes
|
||||
│ │ ├── services/ # Business logic
|
||||
│ │ ├── middleware/ # Express middleware
|
||||
│ │ └── utils/ # Utilities
|
||||
│ └── package.json
|
||||
├── frontend/ # React frontend
|
||||
│ ├── src/
|
||||
│ │ ├── App.js # Main app component
|
||||
│ │ └── index.css # Styling
|
||||
│ └── package.json
|
||||
├── infra/ # Infrastructure kode (fremtidig Azure deployment)
|
||||
├── docker-compose.yml # Database setup
|
||||
└── package.json # Root projekt
|
||||
\`\`\`
|
||||
|
||||
## 🔧 API Endpoints
|
||||
|
||||
- \`POST /api/quotes/generate\` - Generer nyt tilbud
|
||||
- \`POST /api/quotes/feedback\` - Submit feedback og få justeret tilbud
|
||||
- \`GET /api/quotes/:id\` - Hent specifikt tilbud
|
||||
- \`GET /api/quotes/prices/:category\` - Hent prisdata
|
||||
- \`GET /health\` - Health check
|
||||
|
||||
## 🗄 Database Schema
|
||||
|
||||
### Prices Table
|
||||
Indeholder erfaringspriser for forskellige typer tømrerarbejde.
|
||||
|
||||
### Quotes Table
|
||||
Gemmer alle genererede tilbud med metadata.
|
||||
|
||||
### Quote Feedback Table
|
||||
Gemmer feedback og justerede tilbud.
|
||||
|
||||
## 🔒 Sikkerhed
|
||||
|
||||
- Rate limiting på API endpoints
|
||||
- Input validering med Joi
|
||||
- Helmet.js sikkerhedsheaders
|
||||
- CORS konfiguration
|
||||
- Environment variabel protection
|
||||
|
||||
## 🚀 Deployment til Azure
|
||||
|
||||
Infrastructure koden til Azure deployment findes i \`infra/\` mappen og vil blive udviklet i næste fase.
|
||||
|
||||
Planlagte Azure services:
|
||||
- Azure App Service (frontend + backend)
|
||||
- Azure Database for PostgreSQL
|
||||
- Azure OpenAI Service
|
||||
- Azure Application Insights
|
||||
|
||||
## 🤝 Bidrag
|
||||
|
||||
1. Fork projektet
|
||||
2. Opret feature branch
|
||||
3. Commit ændringer
|
||||
4. Push til branch
|
||||
5. Opret Pull Request
|
||||
|
||||
## 📄 Licens
|
||||
|
||||
MIT License - se LICENSE fil for detaljer.
|
||||
|
||||
## 📞 Support
|
||||
|
||||
Ved spørgsmål eller problemer, opret et issue i projektets GitHub repository.
|
||||
Ved spørgsmål, opret et issue i GitHub repository.
|
||||
|
||||
Reference in New Issue
Block a user