254 lines
7.1 KiB
Markdown
254 lines
7.1 KiB
Markdown
# DataConnect – Inconsistencies between the Base44 frontend and the backend (Firebase Data Connect + PostgreSQL)
|
||
**Author:** José Salazar
|
||
**Date:** Dec 2025
|
||
|
||
---
|
||
|
||
## 📌 Purpose of this document
|
||
|
||
Document all findings during the integration of the new backend
|
||
(**Firebase Data Connect + PostgreSQL**) with the frontend generated by **Base44 AI**.
|
||
|
||
This document summarizes:
|
||
|
||
- Issues found
|
||
- camelCase vs snake_case inconsistencies
|
||
- Enum inconsistencies (uppercase/lowercase and dashes)
|
||
- Differences between what DataConnect returns vs what the frontend expects
|
||
- Recommended fixes
|
||
- Suggestions for Base44 AI to update its model
|
||
- Impact on queries, mutations, and the generated SDK
|
||
|
||
---
|
||
|
||
## 1️⃣ Enums – Different formats between Front and Backend
|
||
|
||
### Observation
|
||
|
||
In the frontend, enum values are in mixed formats, for example:
|
||
|
||
- UPPERCASE: SKILLED
|
||
- camelCase: fullTime
|
||
|
||
In the backend (DataConnect schema), enums are defined only in UPPERCASE, for example:
|
||
|
||
- FULL_TIME
|
||
- CROSS_TRAINED
|
||
- NOT_REQUIRED
|
||
- PENDING
|
||
|
||
DataConnect only accepts these exact values.
|
||
|
||
### Problem
|
||
|
||
When the frontend sends:
|
||
|
||
- "crossTrained" instead of CROSS_TRAINED
|
||
- "fluent" instead of FLUENT
|
||
|
||
### Impact
|
||
|
||
- Mutations can fail or return enum validation errors.
|
||
- Filters using enums return no results.
|
||
- Behavior changes depending on how Base44 AI generated the object.
|
||
|
||
### Recommendation
|
||
|
||
- Define a single standard: **ALL enums must be UPPERCASE** on the frontend and backend.
|
||
- Before sending to the backend, normalize enum values to uppercase.
|
||
|
||
### Suggestion for Base44 AI
|
||
|
||
- Adjust models so they always generate enums in UPPERCASE.
|
||
|
||
---
|
||
|
||
## 2️⃣ Enums with dashes (“-”) – Not valid in GraphQL
|
||
|
||
### Observation
|
||
|
||
In the legacy frontend, some enum values contain dashes, for example:
|
||
|
||
- CUSTOMER-SERVICE
|
||
- CROSS-TRAINED
|
||
- PART-TIME
|
||
|
||
But in GraphQL enums only allow letters, numbers, and underscores.
|
||
The backend had to define them as:
|
||
|
||
- CUSTOMER_SERVICE
|
||
- CROSS_TRAINED
|
||
- PART_TIME
|
||
|
||
### Problem
|
||
|
||
When the frontend sends "CUSTOMER-SERVICE" or "CROSS-TRAINED":
|
||
|
||
- The backend expects CUSTOMER_SERVICE or CROSS_TRAINED.
|
||
- There is no match between the frontend value and the DataConnect enum.
|
||
|
||
### Impact
|
||
|
||
- Enum filters return nothing.
|
||
- Mutations fail when trying to save invalid enum values.
|
||
- Compatibility between the Base44 model and the DataConnect schema breaks.
|
||
|
||
### Recommendation
|
||
|
||
- Standardize all enums to UPPERCASE SNAKE_CASE (e.g., CUSTOMER_SERVICE).
|
||
- Never use dashes “-” in enum values.
|
||
|
||
### Suggestion for Base44 AI
|
||
|
||
- Update models so enum values are always generated as
|
||
UPPERCASE_WITH_UNDERSCORE (e.g., CUSTOMER_SERVICE), without dashes.
|
||
|
||
---
|
||
|
||
## 3️⃣ Field names – Front in snake_case vs DataConnect in camelCase
|
||
|
||
### Observation
|
||
|
||
The original Base44 frontend uses snake_case field names, for example:
|
||
|
||
- contact_number
|
||
- vendor_id
|
||
- background_check_status
|
||
- hub_location
|
||
|
||
In DataConnect the schema is camelCase, and although you can map to the actual PostgreSQL column using @col, the GraphQL type remains camelCase, for example:
|
||
|
||
- contactNumber (mapped to "contact_number" in Postgres)
|
||
- vendorId (mapped to "vendor_id")
|
||
- backgroundCheckStatus (mapped to "background_check_status")
|
||
- hubLocation (mapped to "hub_location")
|
||
|
||
Meaning:
|
||
|
||
- In the database (PostgreSQL) names remain snake_case.
|
||
- In DataConnect and the SDK they are exposed as camelCase.
|
||
|
||
### Problem
|
||
|
||
The frontend still expects/reads fields like contact_number, but the SDK returns contactNumber.
|
||
A similar issue happens when the frontend sends payloads in snake_case:
|
||
|
||
- The GraphQL schema does not recognize contact_number.
|
||
- It only accepts contactNumber.
|
||
|
||
### Impact
|
||
|
||
- UI fails to show data because it reads keys that don’t exist (snake_case).
|
||
- Mutations fail or ignore fields due to mismatched names.
|
||
- Filters with snake_case are invalid in GraphQL.
|
||
|
||
### Recommendation
|
||
|
||
- Agree that **all communication with DataConnect (frontend + SDK) uses camelCase**.
|
||
- Keep snake_case only at PostgreSQL level using @col, for example:
|
||
|
||
employeeName: String @col(name: "employee_name")
|
||
|
||
Thus:
|
||
|
||
- Frontend / SDK / GraphQL → camelCase (employeeName)
|
||
- PostgreSQL → snake_case (employee_name)
|
||
|
||
### Suggestion for Base44 AI
|
||
|
||
- Adjust generated frontend code so it uses camelCase when consuming the new backend.
|
||
- If Supabase or another backend is still used, document all mappings clearly.
|
||
|
||
---
|
||
|
||
## 4️⃣ Fields used by the frontend but not listed in API Spec v3
|
||
|
||
### Observation
|
||
|
||
During integration we found that Base44 frontend uses fields not defined in the official document:
|
||
|
||
Reference file:
|
||
docs/03-backend-api-specification-v3.md
|
||
|
||
Examples in the Staff entity:
|
||
|
||
The frontend sends and displays fields like:
|
||
|
||
- notes
|
||
- rate
|
||
|
||
But these fields were not defined in the original v3 specification for Staff.
|
||
|
||
### Problem
|
||
|
||
- The frontend assumes these fields exist because the old database had them.
|
||
- The DataConnect schema does not include them.
|
||
- Sending these values in mutations causes validation errors.
|
||
|
||
### Impact
|
||
|
||
- Inconsistency between what the UI shows/edits and what is actually persisted.
|
||
- Risk of losing data the user believes is being saved.
|
||
- Hard to maintain a 1:1 mapping between the previous Base44 model and the new backend.
|
||
|
||
### Recommendation
|
||
|
||
- Validate which fields should truly exist for each entity (e.g., Staff).
|
||
- Align these three items:
|
||
1. API Spec v3
|
||
2. DataConnect Schema
|
||
3. Base44 Frontend
|
||
|
||
- If a field is no longer needed, remove it from the frontend.
|
||
- If important, add it formally to the API Spec and to the DataConnect schema.
|
||
|
||
---
|
||
|
||
## 5️⃣ DataConnect vs Front – Observed behavior
|
||
|
||
1. DataConnect:
|
||
- Always exposes fields in camelCase.
|
||
- Enforces enum restrictions exactly as defined (UPPERCASE, no dashes).
|
||
- Allows mapping to Postgres column names using @col, but GraphQL names remain camelCase.
|
||
|
||
2. Base44 Frontend:
|
||
- Uses snake_case in many areas.
|
||
- Uses enums in mixed formats (uppercase, camelCase, with dashes).
|
||
- Contains extra fields not included in API Spec v3.
|
||
|
||
---
|
||
|
||
## 6️⃣ Suggested fixes (personal criteria)
|
||
|
||
1. Enums
|
||
- Standardize to UPPERCASE_SNAKE_CASE for all enum values.
|
||
- Apply a normalization layer in the frontend to convert any format into the official one before hitting the backend.
|
||
|
||
2. Field names
|
||
- Migrate the frontend to camelCase for any interaction with DataConnect.
|
||
- Keep snake_case only at the database layer using @col.
|
||
|
||
3. Extra fields
|
||
- Review all fields the frontend sends and compare with API Spec v3.
|
||
- Remove or add fields depending on what becomes the “source of truth” (Spec v3).
|
||
|
||
4. Documentation
|
||
- Keep this file updated as the Base44 → DataConnect migration reference.
|
||
- Add valid payload examples for each entity (Staff, Vendor, Invoice, etc.).
|
||
|
||
---
|
||
|
||
## 7️⃣ Summary
|
||
|
||
- Always generate:
|
||
- Enums: UPPERCASE_SNAKE_CASE (e.g., FULL_TIME, CUSTOMER_SERVICE).
|
||
- Fields: camelCase (e.g., contactNumber, hubLocation, backgroundCheckStatus).
|
||
|
||
- Avoid:
|
||
- Dashes “-” in enum values.
|
||
- Spaces in enum values.
|
||
|
||
---
|
||
|
||
This document captures the current findings and serves as a guide to fully align the Base44 frontend with the backend based on Firebase Data Connect + PostgreSQL.
|