Συνεισφορά στο Bubllio CRM
Το mental model του repository και ένα επαναλήψιμο workflow για κάθε αλλαγή, μικρή ή μεγάλη.
Τι περιέχει αυτή η αποθήκη
Το Bubllio CRM είναι ένα Django REST API και ένα επίσημο React client σε ένα μονόρεπο:
repository
├── src/ Django backend and domain logic
├── frontend/ React/TypeScript client
├── docs/ architecture, API, development, and walkthrough docs
├── skills/ focused implementation checklists
├── .github/workflows/ repository CI
├── pyproject.toml Python dependency intent
└── uv.lock exact Python dependency resolutionΤο backend είναι η πηγή της αλήθειας για την authentication, τη δέσμευση, τις άδειες, την επικύρωση, και την επιχειρηματική συμπεριφορά. Το frontend είναι ένας αντικαταστάσιμος πελάτης: θα πρέπει να κάνει το API εύκολο στη χρήση, αλλά δεν πρέπει ποτέ να γίνει ένα δεύτερο μέρος όπου η έγκριση ή οι κανόνες tenant isolation εφαρμόζονται.
Πριν από την αλλαγή του κώδικα
- Διαβάστε αυτόν τον οδηγό και Διάρθρωση έργου.
- Διαβάστε τη σελίδα αρχιτεκτονικής για τον τομέα που θα αλλάξετε:
- Δεδομένα CRM: Κτήμα CRM
- Authentication και ρόλοι: Επικύρωση και Ρόλοι
- automations: Αυτοματισμοί
- Ηλ. διεύθυνση: Ηλ. διεύθυνση αποστολής
- Ελέγξτε αν υπάρχει εστιασμένη ροή εργασίας στο
skills/. - Αναζήτηση της υπάρχουσας συμπεριφοράς πριν από την εισαγωγή μιας παράλληλης αφαίρεσης.
Τα αρχιτεκτονικά έγγραφα περιγράφουν την εφαρμοσμένη συμπεριφορά εκτός αν επισημάνουν ρητά ένα τμήμα όπως έχει προγραμματιστεί. Το Automation Roadmap δεν είναι σκόπιμα μια λίστα των διαθέσιμων APIs.
Τοπική εγκατάσταση
Από τη ρίζα αποθετηρίου:
uv sync
uv run python src/manage.py migrate
uv run python src/manage.py createsuperuserΕκκίνηση του backend στο τερματικό ένα:
uv run python src/manage.py runserver 127.0.0.1:8000Εκκίνηση του frontend στο τερματικό δύο:
cd frontend
npm ci
npm run devΆνοιγμα http://127.0.0.1:5173. Vite proxies /api/ σε Django, έτσι browser αιτήματα παραμένουν ίδια-προέλευση κατά την τοπική ανάπτυξη. Οι πλήρεις σημειώσεις ρύθμισης και αντιμετώπισης προβλημάτων βρίσκονται στο Getting Started.
Επιλογή όπου ανήκει ο κώδικας
Χρησιμοποιήστε αυτόν τον πίνακα αποφάσεων πριν προσθέσετε μια συνάρτηση:
| Ερώτηση | Βάλτο μέσα. |
|---|---|
| Είναι μια βάση δεδομένων αμετάβλητη; | models.py ή περιορισμός βάσης δεδομένων |
| Επικυρώνει την αίτηση JSON; | serializers.py |
| Συντονίζει τις μεθόδους HTTP/κωδικούς κατάστασης; | views.py |
| Είναι επαναχρησιμοποιήσιμη επιχειρηματική συμπεριφορά σε views/σημεία; | μια υπηρεσία τομέα, για παράδειγμα services.py |
| Είναι μια χαρτογράφηση URL για την προβολή; | urls.py της εφαρμογής |
| Είναι tenant permission/capability; | access/permissions.py και βοηθοί επίλυσης της |
| Είναι αίτημα τομέα React; | ιδιοκτήτης frontend/src/features/<feature>/api.ts |
| Είναι οπτική σύνθεση ή πλοήγηση; | frontend/src/pages/, components/, ή routes/ |
| Είναι μια μετάβαση token/Member συνόδου; | frontend/src/features/auth/ |
| Είναι εξήγηση της τρέχουσας συμπεριφοράς; | η αντίστοιχη σελίδα docs/ |
Μην μετακινήσετε τους κανόνες της επιχείρησης στο React επειδή ένα κουμπί πρέπει να είναι κρυμμένο. Ένα κρυφό κουμπί είναι μια βελτίωση χρηστικότητας; ο έλεγχος άδειας Django είναι το όριο ασφαλείας.
Κανονική αλλαγή backend
Για έναν νέο πόρο REST, χρησιμοποιήστε αυτή τη σειρά:
model → migration → admin registration → serializer and validation
→ permission/query scoping → view → app URL → tests
→ documentation and examplesΧρήση UUID για δημόσιους αναγνωριστικούς κωδικούς. Για τα δεδομένα που ανήκουν στον οργανισμό, επιλύστε τον οργανισμό από τον πιστοποιημένο χρήστη και URL, στη συνέχεια περάστε ότι επιλύθηκε οργάνωση σε ερωτήματα και αποθηκεύει. Ποτέ μην εμπιστεύεστε ένα εισερχόμενο πεδίο organization από τον πελάτη.
Κατά την αλλαγή ενός μοντέλου:
uv run python src/manage.py makemigrations
uv run python src/manage.py migrate
uv run python src/manage.py makemigrations --check --dry-runΠοτέ μην επεξεργαστείτε μια ήδη εφαρμοσμένη migration. Δημιουργήστε μια νέα migration.
Κανονική αλλαγή frontend
Το frontend έχει τρία διακριτά είδη κατάστασης:
- **Το Server state ** ανήκει στο TanStack Query. Παραδείγματα: οργανώσεις, εταιρείες, επαφές, κανόνες automation, και τρέχει ιστορία.
- **Η κατάσταση επιβεβαίωσης ** ανήκει στο κατάστημα Zustand. Πρόσβαση και ανανέωση Τα σημεία είναι μόνο μνήμης· μια σελίδα επαναφόρτωση σκόπιμα απαιτεί και πάλι σύνδεση.
- ** Τοπική κατάσταση UI ** ανήκει κοντά στο συστατικό. Παραδείγματα: ανοιχτός διάλογος κατάσταση, κείμενο αναζήτησης και επιλεγμένες τιμές φόρμας.
Χρησιμοποιήστε το περιτύλιγμα Axios στο frontend/src/services/api.ts μέσω της υπηρεσίας και του hook της λειτουργίας ιδιοκτησίας. Συμπεριλάβετε την ταυτότητα οργάνωσης σε κάθε οργανισμό URL και το query key. Μετά από μια επιτυχημένη μετάλλαξη, ακυρώστε το επηρεασμένο πλήκτρο TanStack Query.
Δοκιμή και επαλήθευση
Εκτέλεση της μικρότερης σχετικής δοκιμής κατά την επανάληψη, στη συνέχεια, εκτελέστε τους πλήρεις ελέγχους πριν ανοίξετε μια αίτηση έλξης:
# Backend
uv run python src/manage.py check
uv run python src/manage.py makemigrations --check --dry-run
uv run python src/manage.py test bubllio_crm organizations access onboarding companies contacts automations
# Frontend
cd frontend
npm run lint
npm test
npm run build
npm run test:e2eΟι δοκιμές browser κοροϊδεύουν την κίνηση API και δεν γράφουν στην τοπική βάση δεδομένων CRM. Οι δοκιμές backend χρησιμοποιούν μια απομονωμένη βάση δεδομένων δοκιμών. Εκτέλεση migrate ξεχωριστά όταν θέλετε να χρησιμοποιήσετε τη βάση δεδομένων SQLite ανάπτυξης.
Λίστα ελέγχου αίτησης έλξης
Πριν ζητήσετε επανεξέταση, επιβεβαιώστε:
- Η αλλαγή έχει μια εστιασμένη δοκιμή ή ένα τεκμηριωμένο λόγο μια δοκιμή δεν είναι χρήσιμη.
- Διατηρούνται όρια για δημιουργία, λίστα, ενημέρωση και διαγραφή.
- Νέο μοντέλο αλλαγές έχουν μια νέα migration.
- Οι κωδικοί κατάστασης API και τα σχήματα σφαλμάτων ακολουθούν REST API Patterns.
- Ο κωδικός Frontend χρησιμοποιεί τις υπάρχουσες αφαιρέσεις Axios, Zustand, και TanStack.
- Η τεκμηρίωση λέει αν η συμπεριφορά υλοποιείται ή προγραμματίζεται.
- README, Postman παραδείγματα, και walkthroughs δεν περιγράφουν outdated behavior.
- Δεν αρχεία βάσεων δεδομένων,
.envαρχεία, tokens, κωδικούς πρόσβασης, την έξοδο κατασκευής, ή Περιλαμβάνονται κατάλογοι εξάρτησης. -
git diff --checkκαι οι πλήρεις εντολές επαλήθευσης περνούν.
Κοινά λάθη
“Προσέθεσα ένα πεδίο αλλά το API δεν το δείχνει”
Το μοντέλο και το serializer είναι ξεχωριστά. Προσθέστε το πεδίο στη σαφή λίστα serializer του fields και προσθέστε την επικύρωση αν είναι εγγράψιμο.
“Ο χρήστης μπορεί να δει το αντικείμενο άλλου οργανισμού”
Ελέγξτε τόσο τον αναλυτή οργάνωσης όσο και το queryset. Ένα UUID σε ένα URL δεν είναι authorization από μόνη της. Ο πιστοποιημένος χρήστης πρέπει να έχει ένα μέλος, και η επιλυμένη οργάνωση πρέπει να χρησιμοποιείται σε κάθε ερώτημα.
“Το frontend εξακολουθεί να εμφανίζει παλιά δεδομένα μετά τη δημιουργία μιας εγγραφής”
Ακυρώστε το αντίστοιχο πλήκτρο TanStack Query μετά την επιτυχία της μετάλλαξης. Να μην αναπαράγονται χειροκίνητα δεδομένα εξυπηρετητή σε Zustand ή σε κατάσταση συστατικού.
“Η σύνδεση λειτουργεί σε δοκιμές αλλά όχι μετά την αναζωογόνηση του browser”
Αυτό αναμένεται για τον τρέχοντα εκκινητή: τα σημεία είναι σκόπιμα μόνο μνήμης. Εάν χρειάζεται επιμονή, να τεκμηριώσετε πρώτα την απόφαση ασφάλειας· μην τοποθετείτε διακριτικά σημεία στην τοπική αποθήκη.
“Άλλαξα τον automation roadmap και η λειτουργία φάνηκε να λειτουργεί”
Τα διαγράμματα χάρτη πορείας είναι επεξηγηματικά. Ένα χαρακτηριστικό υποστηρίζεται μόνο όταν υπάρχει μια υλοποιημένη διαδρομή backend, δοκιμές, και τρέχουσα τεκμηρίωση που το περιγράφει.
