UNPKG

dawn-interfaces

Version:

Dawn application interfaces

133 lines (115 loc) 3.25 kB
//location //every month //residential and rent //closed vs active import { ISRListing } from "../srets"; import {first,last} from 'underscore'; export enum EAreaType{ city = "city", neighborhood = "neighborhood" } export interface IMapLocation{ id:string; updatedAt?:Date; locationName:string; centerLocationLat:number; centerLocationLng:number coordinateBoundaries:number[][]; smallerCoordinates:number[][]; usState:string; } export interface IMetricSplitsNumeric{ entityCount:number; average:number; median:number; p10:number; p25:number; p75:number; p90:number; min:number; max:number; } export interface IMetricSplitsString{ median:string; p10:string; p25:string; p75:string; p90:string; min:string; max:string; } export interface IMetricSplits{ values:IMetricSplitsNumeric; mlsListingIdPointers:IMetricSplitsString; } export interface IMetric{ id: string; locationId: string; dateId:number; updatedAt: Date; totalClosedHomes:number; totalActiveHomes:number; totalNewlyActiveHomes:number; totalSalesVolume:number; totalPotentialSalesVolume:number; homesDaysOnMarket?:IMetricSplits | null; listingPrice?:IMetricSplits | null; closingPrice?:IMetricSplits | null; totalHomesSoldOverListingPrice:number; closePriceAsPercentOfListPrice?:IMetricSplits | null; squareFt?:IMetricSplits | null; pricePerSquareFt?: IMetricSplits | null; medianYearBuilt?: number | null; newlyActiveListingDrilldown: string[]; activeListingDrilldown: string[]; closedListingDrilldown: string[]; } export interface IGeneratedMetrics{ [locationId:string]:IMetric[]; } export interface ILocationListingsObject {[locationId:string]: ISRListing[]} export enum EHomeStatus{ closed = "Closed", pending = "Pending", activeUnderContract = "ActiveUnderContract", active = "Active", } export enum EHomeType{ residential = "RES", rental = "RNT", land = "LND", multifamily = "MLF", commercial = "CRE", } export interface IMapListing { mlsListingId:string; closePrice?:number | null; closeDate?:Date | null; listPrice?:number | null; longitude?:number | null; latitude?:number | null; retsJson:ISRListing; updatedAt:Date; locationId:string; homeType?: EHomeType | null; homeStatus?: EHomeStatus | null; agentId?:string | null; agencyId?:string | null; } export const mlsListingIdBreakPointCharacter = "|"; export const getMlsListingId = (mlsId:string,listingId:string) =>{ return `${mlsId}${mlsListingIdBreakPointCharacter}${listingId}`; } export const getMlsListingIdFromListing = (listing:ISRListing) =>{ let mlsName = listing?.mls?.originatingSystemName || ''; if(mlsName.toUpperCase().includes("NAPLES")){ mlsName = 'swfla'; } return `${mlsName.toUpperCase()}${mlsListingIdBreakPointCharacter}${listing.listingId}`; } export const stripMlsListingId = (mlsListingId:string) =>{ const split = mlsListingId.split(mlsListingIdBreakPointCharacter); const mlsId = first(split); const listingId = last(split); return {mlsId,listingId}; }