Skip to content

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

BizFirstAI

BizFirstRealEstate

📖 Full Documentation  ·  🌐 bizfirstai.com  ·  📚 docs.bizfirstai.com  ·  👥 Join the Community

An industry-vertical data platform for property listings, built by BizFirst.Ai — portable across CRM providers, designed to pair with Odoo (or a similar CRM/ERP) rather than duplicate it.

RealEstate is not a community node wrapping a third-party API. It's a full BizFirst product owning its own domain model, REST API, and database schema, so the listing data itself "stays portable across CRM providers" — the CRM/contact layer stays with Odoo (or another registered provider), reachable via the Odoo community node.

Entity reference

Entity What it is Key operations
Property The core listing — RESO-aligned address/geo/price/beds-baths/lifecycle-date fields CRUD, classification/location/lifecycle search, external-CRM link, agent assignment
Agent Lightweight local listing-agent directory — not a CRM contact record CRUD, by-mls-id/name/office, match-or-create
PropertyMedia Photos, floor plans, virtual tours, documents — content-addressed, bytes live in BizFirst's CID object store CRUD, attach, set-primary, reorder
PropertyFeature Typed amenity flags (Boolean/Text/Number) per property set / set-many (upsert), remove
ExternalProvider Lookup of CRM/systems a property can link to — seeded with Odoo CRUD, ordered listing
PropertyType / PropertyCategory / ListingType / ListingStatus / MediaType / FeatureType Classification/code-list lookups CRUD

Real Estate + Odoo

Every Property can optionally link to a record in an external CRM via ExternalProviderID + ExternalRecordID. RealEstate_ExternalProviders ships pre-seeded with Odoo ("Self-hosted Odoo Community CRM") as row 1 — the schema's own design notes name Odoo, Twenty, and EspoCRM as the kind of systems this table is meant to hold. RealEstate never queries a CRM directly, and the Odoo community node never knows about RealEstate_* tables — whatever syncs a property to a CRM record (an import job, a Flow Studio workflow built on the Odoo node, a manual link) is the only thing that needs to know about both sides. RealEstate is the real-estate-industry data layer; Odoo is an agent it can plug into for CRM. See the Connecting to Odoo & CRM guide for the full design.

Project layout

src/
├── api/RealEstate/
│   ├── BizFirst.Ai.RealEstate.Domain/         # Entities, repository/service interfaces, WebRequests DTOs
│   ├── BizFirst.Ai.RealEstate.Service/        # Business logic (validation, cascades, upserts)
│   ├── BizFirst.Ai.RealEstate.Infrastructure/ # EF Core DbContext + repositories
│   ├── BizFirst.Ai.RealEstate.Api.Base/       # Abstract base controllers (route/auth attributes)
│   ├── BizFirst.Ai.RealEstate.Api/            # Concrete controllers, Program.cs, JWT auth, Swagger
│   └── BizFirst.Ai.RealEstate.Tests/          # Controller/repository/service tests
└── db/
    ├── tables/    # RealEstate_*.sql — schema
    └── data/      # RealEstate_*.data.sql — seed data (lookups + the Odoo ExternalProvider row)

Configuration

{
  "ConnectionStrings": {
    "RealEstateDatabase": "..."
  }
}

Falls back to DefaultConnection when RealEstateDatabase is absent.

Registration

builder.Services.AddRealEstateInfrastructure(builder.Configuration); // DbContext + all repositories
builder.Services.AddRealEstateServices();                             // all services

Every route lives under api/v1/realestate/{resource}, JWT-bearer authenticated with realestate:read / realestate:write / realestate:full claim-based policies.

Roadmap

  • ✅ Full schema, seed data, and layered API (Domain/Service/Infrastructure/Api.Base/Api) for all 11 resources, with tests.
  • ⏳ No frontend/UI yet — API + DB only.
  • ⏳ No automated MLS/feed import pipeline — the API supports creating/updating listings (including the raw-feed agent fields), but pulling and mapping an external feed is not part of this repo.
  • ⏳ No status-driven lifecycle-date stamping — RealEstate_ListingStatuses has no stable Code column, so OnMarketDate/CloseDate stay caller-driven.
  • ⏳ Odoo sync is a one-directional pointer today (ExternalProviderID/ExternalRecordID) — keeping a linked Odoo record and a Property in sync is expected to live in a Flow Studio workflow, not in this repo.
  • ⏳ Only Odoo is seeded as an ExternalProvider; Twenty and EspoCRM are named as future targets in the schema's design notes but have no integration yet.

Documentation

About BizFirst.Ai

BizFirstRealEstate is part of the BizFirst.Ai ecosystem — an AI-native workflow and integration platform. Explore the full developer portal at docs.bizfirstai.com, or join the conversation at community.bizfirstai.com.

License

Maintained by the BizFirst.Ai team.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages