show all listings, Bug Fixes
This commit is contained in:
parent
6b61c19bd7
commit
d508415de4
|
|
@ -6,7 +6,7 @@
|
||||||
"email": "robert.jackson@texasbizbrokers.com",
|
"email": "robert.jackson@texasbizbrokers.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "654321"
|
"value": "654321"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -37,7 +37,7 @@
|
||||||
"email": "amanda.taylor@lonestarbizbrokers.com",
|
"email": "amanda.taylor@lonestarbizbrokers.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "987654"
|
"value": "987654"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -66,7 +66,7 @@
|
||||||
"email": "william@biztexas.com",
|
"email": "william@biztexas.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "210987"
|
"value": "210987"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -95,7 +95,7 @@
|
||||||
"email": "elizabeth.martinez@texasbusinesssales.com",
|
"email": "elizabeth.martinez@texasbusinesssales.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "543210"
|
"value": "543210"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -124,7 +124,7 @@
|
||||||
"email": "daniel@bizbrokersdfw.com",
|
"email": "daniel@bizbrokersdfw.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "876543"
|
"value": "876543"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -153,7 +153,7 @@
|
||||||
"email": "olivia@businessbrokerstx.com",
|
"email": "olivia@businessbrokerstx.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "109876"
|
"value": "109876"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -182,7 +182,7 @@
|
||||||
"email": "matthew.lee@texasbizadvisors.com",
|
"email": "matthew.lee@texasbizadvisors.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "432109"
|
"value": "432109"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -211,7 +211,7 @@
|
||||||
"email": "sophia.wright@texasbizconnection.com",
|
"email": "sophia.wright@texasbizconnection.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "765432"
|
"value": "765432"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -240,7 +240,7 @@
|
||||||
"email": "ethan@elpasobizbrokers.com",
|
"email": "ethan@elpasobizbrokers.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "098765"
|
"value": "098765"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -269,7 +269,7 @@
|
||||||
"email": "ava@texomabizsales.com",
|
"email": "ava@texomabizsales.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "432109"
|
"value": "432109"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -298,11 +298,11 @@
|
||||||
"email": "sarah.thompson@businessbrokers.com",
|
"email": "sarah.thompson@businessbrokers.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "California",
|
"name": "CA",
|
||||||
"value": "123456"
|
"value": "123456"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Nevada",
|
"name": "NV",
|
||||||
"value": "789012"
|
"value": "789012"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -331,7 +331,7 @@
|
||||||
"email": "michael@bizbrokers.net",
|
"email": "michael@bizbrokers.net",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Florida",
|
"name": "FL",
|
||||||
"value": "654321"
|
"value": "654321"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -360,11 +360,11 @@
|
||||||
"email": "emily.davis@bizsaleexperts.com",
|
"email": "emily.davis@bizsaleexperts.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "New York",
|
"name": "NY",
|
||||||
"value": "987654"
|
"value": "987654"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "New Jersey",
|
"name": "NJ",
|
||||||
"value": "210987"
|
"value": "210987"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -395,7 +395,7 @@
|
||||||
"email": "david.wilson@bizacquisitions.com",
|
"email": "david.wilson@bizacquisitions.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "543210"
|
"value": "543210"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -424,11 +424,11 @@
|
||||||
"email": "jessica@bizbrokerexperts.com",
|
"email": "jessica@bizbrokerexperts.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Illinois",
|
"name": "IL",
|
||||||
"value": "876543"
|
"value": "876543"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Wisconsin",
|
"name": "WI",
|
||||||
"value": "109876"
|
"value": "109876"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -457,11 +457,11 @@
|
||||||
"email": "liam.patel@sunbeltbizbrokers.com",
|
"email": "liam.patel@sunbeltbizbrokers.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "765432"
|
"value": "765432"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Louisiana",
|
"name": "LA",
|
||||||
"value": "987654"
|
"value": "987654"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -490,7 +490,7 @@
|
||||||
"email": "emma@newmexicobusinessbrokers.com",
|
"email": "emma@newmexicobusinessbrokers.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "New Mexico",
|
"name": "NM",
|
||||||
"value": "543210"
|
"value": "543210"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -519,7 +519,7 @@
|
||||||
"email": "noah@oklahomabizsales.com",
|
"email": "noah@oklahomabizsales.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Oklahoma",
|
"name": "OK",
|
||||||
"value": "876543"
|
"value": "876543"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -548,7 +548,7 @@
|
||||||
"email": "isabella.garcia@arkansasbizconnect.com",
|
"email": "isabella.garcia@arkansasbizconnect.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Arkansas",
|
"name": "AR",
|
||||||
"value": "210987"
|
"value": "210987"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -577,7 +577,7 @@
|
||||||
"email": "mason@msbizbrokers.com",
|
"email": "mason@msbizbrokers.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Mississippi",
|
"name": "MS",
|
||||||
"value": "543210"
|
"value": "543210"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -606,7 +606,7 @@
|
||||||
"email": "evelyn.davis@azbizsales.com",
|
"email": "evelyn.davis@azbizsales.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Arizona",
|
"name": "AZ",
|
||||||
"value": "876543"
|
"value": "876543"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -635,7 +635,7 @@
|
||||||
"email": "harper@bamabizsales.com",
|
"email": "harper@bamabizsales.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Alabama",
|
"name": "AL",
|
||||||
"value": "210987"
|
"value": "210987"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -664,7 +664,7 @@
|
||||||
"email": "abigail.martinez@georgiabizconnect.com",
|
"email": "abigail.martinez@georgiabizconnect.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Georgia",
|
"name": "GA",
|
||||||
"value": "543210"
|
"value": "543210"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -693,7 +693,7 @@
|
||||||
"email": "benjamin.robinson@gulfcoastbizbrokers.com",
|
"email": "benjamin.robinson@gulfcoastbizbrokers.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Louisiana",
|
"name": "LA",
|
||||||
"value": "876543"
|
"value": "876543"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -726,7 +726,7 @@
|
||||||
"email": "charlotte@oklabizsales.com",
|
"email": "charlotte@oklabizsales.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Oklahoma",
|
"name": "OK",
|
||||||
"value": "543210"
|
"value": "543210"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -755,7 +755,7 @@
|
||||||
"email": "elijah.nguyen@lonestarbizsales.com",
|
"email": "elijah.nguyen@lonestarbizsales.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "109876"
|
"value": "109876"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -784,7 +784,7 @@
|
||||||
"email": "avery.brown@nmbizsales.com",
|
"email": "avery.brown@nmbizsales.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "New Mexico",
|
"name": "NM",
|
||||||
"value": "432109"
|
"value": "432109"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -813,7 +813,7 @@
|
||||||
"email": "scarlett@arkanbizsales.com",
|
"email": "scarlett@arkanbizsales.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Arkansas",
|
"name": "AR",
|
||||||
"value": "765432"
|
"value": "765432"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -842,7 +842,7 @@
|
||||||
"email": "levi.kim@magnoliabizconnect.com",
|
"email": "levi.kim@magnoliabizconnect.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Mississippi",
|
"name": "MS",
|
||||||
"value": "098765"
|
"value": "098765"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -871,7 +871,7 @@
|
||||||
"email": "mila.singh@pelicanstatebiz.com",
|
"email": "mila.singh@pelicanstatebiz.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Louisiana",
|
"name": "LA",
|
||||||
"value": "432109"
|
"value": "432109"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -900,7 +900,7 @@
|
||||||
"email": "ezra.garcia@grandcanyonbiz.com",
|
"email": "ezra.garcia@grandcanyonbiz.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Arizona",
|
"name": "AZ",
|
||||||
"value": "765432"
|
"value": "765432"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -929,7 +929,7 @@
|
||||||
"email": "nora@alabamabizconnect.com",
|
"email": "nora@alabamabizconnect.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Alabama",
|
"name": "AL",
|
||||||
"value": "098765"
|
"value": "098765"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -958,7 +958,7 @@
|
||||||
"email": "lucas.patel@peachtreebiz.com",
|
"email": "lucas.patel@peachtreebiz.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Georgia",
|
"name": "GA",
|
||||||
"value": "432109"
|
"value": "432109"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -987,7 +987,7 @@
|
||||||
"email": "penelope@soonestatebiz.com",
|
"email": "penelope@soonestatebiz.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Oklahoma",
|
"name": "OK",
|
||||||
"value": "765432"
|
"value": "765432"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -1016,7 +1016,7 @@
|
||||||
"email": "asher.chavez@desertbizgroup.com",
|
"email": "asher.chavez@desertbizgroup.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "New Mexico",
|
"name": "NM",
|
||||||
"value": "098765"
|
"value": "098765"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -1045,11 +1045,11 @@
|
||||||
"email": "daniel.hernandez@nationalbizsolutions.com",
|
"email": "daniel.hernandez@nationalbizsolutions.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "California",
|
"name": "CA",
|
||||||
"value": "135790"
|
"value": "135790"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Nevada",
|
"name": "NV",
|
||||||
"value": "086429"
|
"value": "086429"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -1078,11 +1078,11 @@
|
||||||
"email": "olivia.patel@bizusasolutions.com",
|
"email": "olivia.patel@bizusasolutions.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Texas",
|
"name": "TX",
|
||||||
"value": "753951"
|
"value": "753951"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Louisiana",
|
"name": "LA",
|
||||||
"value": "159753"
|
"value": "159753"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -1111,11 +1111,11 @@
|
||||||
"email": "liam.garcia@usabizadvisors.com",
|
"email": "liam.garcia@usabizadvisors.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Florida",
|
"name": "FL",
|
||||||
"value": "369147"
|
"value": "369147"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Georgia",
|
"name": "GA",
|
||||||
"value": "258147"
|
"value": "258147"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -1144,11 +1144,11 @@
|
||||||
"email": "sophia.lee@americanbizsolutions.com",
|
"email": "sophia.lee@americanbizsolutions.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "New York",
|
"name": "NY",
|
||||||
"value": "246810"
|
"value": "246810"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "New Jersey",
|
"name": "NJ",
|
||||||
"value": "135790"
|
"value": "135790"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -1177,7 +1177,7 @@
|
||||||
"email": "ava.kim@bizamericaadvisors.com",
|
"email": "ava.kim@bizamericaadvisors.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Illinois",
|
"name": "IL",
|
||||||
"value": "753951"
|
"value": "753951"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -1210,11 +1210,11 @@
|
||||||
"email": "noah.nguyen@nationwidebizadvisors.com",
|
"email": "noah.nguyen@nationwidebizadvisors.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Washington",
|
"name": "WA",
|
||||||
"value": "357159"
|
"value": "357159"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Oregon",
|
"name": "OR",
|
||||||
"value": "086429"
|
"value": "086429"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -1243,11 +1243,11 @@
|
||||||
"email": "emma.patel@americanbusinessadvisors.com",
|
"email": "emma.patel@americanbusinessadvisors.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Arizona",
|
"name": "AZ",
|
||||||
"value": "246810"
|
"value": "246810"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "New Mexico",
|
"name": "NM",
|
||||||
"value": "135790"
|
"value": "135790"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -1276,11 +1276,11 @@
|
||||||
"email": "william.johnson@bizusagroup.com",
|
"email": "william.johnson@bizusagroup.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Colorado",
|
"name": "CO",
|
||||||
"value": "753951"
|
"value": "753951"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Utah",
|
"name": "UT",
|
||||||
"value": "159753"
|
"value": "159753"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -1309,11 +1309,11 @@
|
||||||
"email": "isabella.kim@nationalbusinesssolutions.com",
|
"email": "isabella.kim@nationalbusinesssolutions.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "Michigan",
|
"name": "MI",
|
||||||
"value": "369147"
|
"value": "369147"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Ohio",
|
"name": "OH",
|
||||||
"value": "258147"
|
"value": "258147"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -1342,11 +1342,11 @@
|
||||||
"email": "mia.hernandez@usabusinessgroup.com",
|
"email": "mia.hernandez@usabusinessgroup.com",
|
||||||
"licensedIn": [
|
"licensedIn": [
|
||||||
{
|
{
|
||||||
"name": "North Carolina",
|
"name": "NC",
|
||||||
"value": "753951"
|
"value": "753951"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "South Carolina",
|
"name": "SC",
|
||||||
"value": "159753"
|
"value": "159753"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
ALTER TABLE "commercials" ADD COLUMN "listingsCategory" varchar(255);
|
||||||
|
|
@ -0,0 +1,480 @@
|
||||||
|
{
|
||||||
|
"id": "da786c6a-fd5f-4629-bd5e-3ecd42ab1f2c",
|
||||||
|
"prevId": "ad48c6eb-2d04-442f-9242-b6765553c7c4",
|
||||||
|
"version": "5",
|
||||||
|
"dialect": "pg",
|
||||||
|
"tables": {
|
||||||
|
"businesses": {
|
||||||
|
"name": "businesses",
|
||||||
|
"schema": "",
|
||||||
|
"columns": {
|
||||||
|
"id": {
|
||||||
|
"name": "id",
|
||||||
|
"type": "uuid",
|
||||||
|
"primaryKey": true,
|
||||||
|
"notNull": true,
|
||||||
|
"default": "gen_random_uuid()"
|
||||||
|
},
|
||||||
|
"userId": {
|
||||||
|
"name": "userId",
|
||||||
|
"type": "uuid",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"name": "type",
|
||||||
|
"type": "integer",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"name": "title",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"name": "description",
|
||||||
|
"type": "text",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"city": {
|
||||||
|
"name": "city",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"name": "state",
|
||||||
|
"type": "char(2)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"price": {
|
||||||
|
"name": "price",
|
||||||
|
"type": "double precision",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"favoritesForUser": {
|
||||||
|
"name": "favoritesForUser",
|
||||||
|
"type": "varchar(30)[]",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"draft": {
|
||||||
|
"name": "draft",
|
||||||
|
"type": "boolean",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"listingsCategory": {
|
||||||
|
"name": "listingsCategory",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"realEstateIncluded": {
|
||||||
|
"name": "realEstateIncluded",
|
||||||
|
"type": "boolean",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"leasedLocation": {
|
||||||
|
"name": "leasedLocation",
|
||||||
|
"type": "boolean",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"franchiseResale": {
|
||||||
|
"name": "franchiseResale",
|
||||||
|
"type": "boolean",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"salesRevenue": {
|
||||||
|
"name": "salesRevenue",
|
||||||
|
"type": "double precision",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"cashFlow": {
|
||||||
|
"name": "cashFlow",
|
||||||
|
"type": "double precision",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"supportAndTraining": {
|
||||||
|
"name": "supportAndTraining",
|
||||||
|
"type": "text",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"employees": {
|
||||||
|
"name": "employees",
|
||||||
|
"type": "integer",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"established": {
|
||||||
|
"name": "established",
|
||||||
|
"type": "integer",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"internalListingNumber": {
|
||||||
|
"name": "internalListingNumber",
|
||||||
|
"type": "integer",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"reasonForSale": {
|
||||||
|
"name": "reasonForSale",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"brokerLicencing": {
|
||||||
|
"name": "brokerLicencing",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"internals": {
|
||||||
|
"name": "internals",
|
||||||
|
"type": "text",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"created": {
|
||||||
|
"name": "created",
|
||||||
|
"type": "timestamp",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"updated": {
|
||||||
|
"name": "updated",
|
||||||
|
"type": "timestamp",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"visits": {
|
||||||
|
"name": "visits",
|
||||||
|
"type": "integer",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"lastVisit": {
|
||||||
|
"name": "lastVisit",
|
||||||
|
"type": "timestamp",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"indexes": {},
|
||||||
|
"foreignKeys": {
|
||||||
|
"businesses_userId_users_id_fk": {
|
||||||
|
"name": "businesses_userId_users_id_fk",
|
||||||
|
"tableFrom": "businesses",
|
||||||
|
"tableTo": "users",
|
||||||
|
"columnsFrom": [
|
||||||
|
"userId"
|
||||||
|
],
|
||||||
|
"columnsTo": [
|
||||||
|
"id"
|
||||||
|
],
|
||||||
|
"onDelete": "no action",
|
||||||
|
"onUpdate": "no action"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"compositePrimaryKeys": {},
|
||||||
|
"uniqueConstraints": {}
|
||||||
|
},
|
||||||
|
"commercials": {
|
||||||
|
"name": "commercials",
|
||||||
|
"schema": "",
|
||||||
|
"columns": {
|
||||||
|
"id": {
|
||||||
|
"name": "id",
|
||||||
|
"type": "uuid",
|
||||||
|
"primaryKey": true,
|
||||||
|
"notNull": true,
|
||||||
|
"default": "gen_random_uuid()"
|
||||||
|
},
|
||||||
|
"userId": {
|
||||||
|
"name": "userId",
|
||||||
|
"type": "uuid",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"name": "type",
|
||||||
|
"type": "integer",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"name": "title",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"name": "description",
|
||||||
|
"type": "text",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"city": {
|
||||||
|
"name": "city",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"name": "state",
|
||||||
|
"type": "char(2)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"price": {
|
||||||
|
"name": "price",
|
||||||
|
"type": "double precision",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"favoritesForUser": {
|
||||||
|
"name": "favoritesForUser",
|
||||||
|
"type": "varchar(30)[]",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"listingsCategory": {
|
||||||
|
"name": "listingsCategory",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"hideImage": {
|
||||||
|
"name": "hideImage",
|
||||||
|
"type": "boolean",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"draft": {
|
||||||
|
"name": "draft",
|
||||||
|
"type": "boolean",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"zipCode": {
|
||||||
|
"name": "zipCode",
|
||||||
|
"type": "integer",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"county": {
|
||||||
|
"name": "county",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"name": "email",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"website": {
|
||||||
|
"name": "website",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"phoneNumber": {
|
||||||
|
"name": "phoneNumber",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"imageOrder": {
|
||||||
|
"name": "imageOrder",
|
||||||
|
"type": "varchar(200)[]",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"imagePath": {
|
||||||
|
"name": "imagePath",
|
||||||
|
"type": "varchar(50)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"created": {
|
||||||
|
"name": "created",
|
||||||
|
"type": "timestamp",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"updated": {
|
||||||
|
"name": "updated",
|
||||||
|
"type": "timestamp",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"visits": {
|
||||||
|
"name": "visits",
|
||||||
|
"type": "integer",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"lastVisit": {
|
||||||
|
"name": "lastVisit",
|
||||||
|
"type": "timestamp",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"indexes": {},
|
||||||
|
"foreignKeys": {
|
||||||
|
"commercials_userId_users_id_fk": {
|
||||||
|
"name": "commercials_userId_users_id_fk",
|
||||||
|
"tableFrom": "commercials",
|
||||||
|
"tableTo": "users",
|
||||||
|
"columnsFrom": [
|
||||||
|
"userId"
|
||||||
|
],
|
||||||
|
"columnsTo": [
|
||||||
|
"id"
|
||||||
|
],
|
||||||
|
"onDelete": "no action",
|
||||||
|
"onUpdate": "no action"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"compositePrimaryKeys": {},
|
||||||
|
"uniqueConstraints": {}
|
||||||
|
},
|
||||||
|
"users": {
|
||||||
|
"name": "users",
|
||||||
|
"schema": "",
|
||||||
|
"columns": {
|
||||||
|
"id": {
|
||||||
|
"name": "id",
|
||||||
|
"type": "uuid",
|
||||||
|
"primaryKey": true,
|
||||||
|
"notNull": true,
|
||||||
|
"default": "gen_random_uuid()"
|
||||||
|
},
|
||||||
|
"firstname": {
|
||||||
|
"name": "firstname",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
"lastname": {
|
||||||
|
"name": "lastname",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"name": "email",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
"phoneNumber": {
|
||||||
|
"name": "phoneNumber",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"name": "description",
|
||||||
|
"type": "text",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"companyName": {
|
||||||
|
"name": "companyName",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"companyOverview": {
|
||||||
|
"name": "companyOverview",
|
||||||
|
"type": "text",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"companyWebsite": {
|
||||||
|
"name": "companyWebsite",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"companyLocation": {
|
||||||
|
"name": "companyLocation",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"offeredServices": {
|
||||||
|
"name": "offeredServices",
|
||||||
|
"type": "text",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"areasServed": {
|
||||||
|
"name": "areasServed",
|
||||||
|
"type": "varchar(100)[]",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"hasProfile": {
|
||||||
|
"name": "hasProfile",
|
||||||
|
"type": "boolean",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"hasCompanyLogo": {
|
||||||
|
"name": "hasCompanyLogo",
|
||||||
|
"type": "boolean",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"licensedIn": {
|
||||||
|
"name": "licensedIn",
|
||||||
|
"type": "varchar(50)[]",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
"gender": {
|
||||||
|
"name": "gender",
|
||||||
|
"type": "gender",
|
||||||
|
"primaryKey": false,
|
||||||
|
"notNull": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"indexes": {},
|
||||||
|
"foreignKeys": {},
|
||||||
|
"compositePrimaryKeys": {},
|
||||||
|
"uniqueConstraints": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"enums": {
|
||||||
|
"gender": {
|
||||||
|
"name": "gender",
|
||||||
|
"values": {
|
||||||
|
"male": "male",
|
||||||
|
"female": "female"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"schemas": {},
|
||||||
|
"_meta": {
|
||||||
|
"columns": {},
|
||||||
|
"schemas": {},
|
||||||
|
"tables": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -22,6 +22,13 @@
|
||||||
"when": 1714982539265,
|
"when": 1714982539265,
|
||||||
"tag": "0002_black_zaladane",
|
"tag": "0002_black_zaladane",
|
||||||
"breakpoints": true
|
"breakpoints": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idx": 3,
|
||||||
|
"version": "5",
|
||||||
|
"when": 1715254754561,
|
||||||
|
"tag": "0003_tough_hobgoblin",
|
||||||
|
"breakpoints": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import { integer, serial, text, pgTable, timestamp, jsonb, varchar, char, numeric, boolean, uuid, real, doublePrecision, pgEnum } from 'drizzle-orm/pg-core';
|
import { boolean, char, doublePrecision, integer, pgEnum, pgTable, text, timestamp, uuid, varchar } from 'drizzle-orm/pg-core';
|
||||||
import { InferInsertModel, InferModel, InferModelFromColumns, InferSelectModel, relations, sql } from 'drizzle-orm';
|
|
||||||
|
|
||||||
export const PG_CONNECTION = 'PG_CONNECTION';
|
export const PG_CONNECTION = 'PG_CONNECTION';
|
||||||
export const genderEnum = pgEnum('gender', ['male', 'female']);
|
export const genderEnum = pgEnum('gender', ['male', 'female']);
|
||||||
|
|
@ -62,6 +61,7 @@ export const commercials = pgTable('commercials', {
|
||||||
state: char('state', { length: 2 }),
|
state: char('state', { length: 2 }),
|
||||||
price: doublePrecision('price'),
|
price: doublePrecision('price'),
|
||||||
favoritesForUser: varchar('favoritesForUser', { length: 30 }).array(),
|
favoritesForUser: varchar('favoritesForUser', { length: 30 }).array(),
|
||||||
|
listingsCategory: varchar('listingsCategory', { length: 255 }),
|
||||||
hideImage: boolean('hideImage'),
|
hideImage: boolean('hideImage'),
|
||||||
draft: boolean('draft'),
|
draft: boolean('draft'),
|
||||||
zipCode: integer('zipCode'),
|
zipCode: integer('zipCode'),
|
||||||
|
|
@ -76,4 +76,3 @@ export const commercials = pgTable('commercials', {
|
||||||
visits: integer('visits'),
|
visits: integer('visits'),
|
||||||
lastVisit: timestamp('lastVisit'),
|
lastVisit: timestamp('lastVisit'),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,48 +1,52 @@
|
||||||
import { Body, Controller, Delete, Get, Inject, Param, Post, Put, UploadedFile, UseInterceptors } from '@nestjs/common';
|
import { Body, Controller, Delete, Get, Inject, Param, Post, Put } from '@nestjs/common';
|
||||||
import { ListingsService } from './listings.service.js';
|
|
||||||
import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
|
import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
|
||||||
import { Logger } from 'winston';
|
import { Logger } from 'winston';
|
||||||
import { FileInterceptor } from '@nestjs/platform-express';
|
|
||||||
import { FileService } from '../file/file.service.js';
|
|
||||||
import { ImageProperty, ListingCriteria } from '../models/main.model.js';
|
|
||||||
import { commercials } from '../drizzle/schema.js';
|
import { commercials } from '../drizzle/schema.js';
|
||||||
|
import { FileService } from '../file/file.service.js';
|
||||||
|
import { ListingCriteria } from '../models/main.model.js';
|
||||||
|
import { ListingsService } from './listings.service.js';
|
||||||
|
|
||||||
@Controller('listings/commercialProperty')
|
@Controller('listings/commercialProperty')
|
||||||
export class CommercialPropertyListingsController {
|
export class CommercialPropertyListingsController {
|
||||||
|
constructor(
|
||||||
constructor(private readonly listingsService:ListingsService,private fileService:FileService,@Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger) {
|
private readonly listingsService: ListingsService,
|
||||||
}
|
private fileService: FileService,
|
||||||
|
@Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger,
|
||||||
|
) {}
|
||||||
|
|
||||||
@Get(':id')
|
@Get(':id')
|
||||||
findById(@Param('id') id: string): any {
|
findById(@Param('id') id: string): any {
|
||||||
return this.listingsService.findById(id, commercials);
|
return this.listingsService.findById(id, commercials);
|
||||||
}
|
}
|
||||||
// @Get('user/:userid')
|
@Get('user/:userid')
|
||||||
// findByUserId(@Param('userid') userid:string): any {
|
findByUserId(@Param('userid') userid: string): any {
|
||||||
// return this.listingsService.findByUserId(userid,commercials);
|
return this.listingsService.findByUserId(userid, commercials);
|
||||||
// }
|
}
|
||||||
@Post('search')
|
@Post('search')
|
||||||
async find(@Body() criteria: ListingCriteria): Promise<any> {
|
async find(@Body() criteria: ListingCriteria): Promise<any> {
|
||||||
return await this.listingsService.findListingsByCriteria(criteria, commercials);
|
return await this.listingsService.findListingsByCriteria(criteria, commercials);
|
||||||
}
|
}
|
||||||
|
@Get('states/all')
|
||||||
|
getStates(): any {
|
||||||
|
return this.listingsService.getStates(commercials);
|
||||||
|
}
|
||||||
@Post()
|
@Post()
|
||||||
async create(@Body() listing: any) {
|
async create(@Body() listing: any) {
|
||||||
this.logger.info(`Save Listing`);
|
this.logger.info(`Save Listing`);
|
||||||
return await this.listingsService.createListing(listing,commercials)
|
return await this.listingsService.createListing(listing, commercials);
|
||||||
}
|
}
|
||||||
@Put()
|
@Put()
|
||||||
async update(@Body() listing: any) {
|
async update(@Body() listing: any) {
|
||||||
this.logger.info(`Save Listing`);
|
this.logger.info(`Save Listing`);
|
||||||
return await this.listingsService.updateListing(listing.id,listing,commercials)
|
return await this.listingsService.updateListing(listing.id, listing, commercials);
|
||||||
}
|
}
|
||||||
@Delete(':id')
|
@Delete(':id')
|
||||||
deleteById(@Param('id') id: string) {
|
deleteById(@Param('id') id: string) {
|
||||||
this.listingsService.deleteListing(id,commercials)
|
this.listingsService.deleteListing(id, commercials);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Put('imageOrder/:id')
|
@Put('imageOrder/:id')
|
||||||
async changeImageOrder(@Param('id') id: string, @Body() imageOrder: string[]) {
|
async changeImageOrder(@Param('id') id: string, @Body() imageOrder: string[]) {
|
||||||
this.listingsService.updateImageOrder(id, imageOrder)
|
this.listingsService.updateImageOrder(id, imageOrder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@ export interface BusinessListing {
|
||||||
price?: number;
|
price?: number;
|
||||||
favoritesForUser?: string[];
|
favoritesForUser?: string[];
|
||||||
draft?: boolean;
|
draft?: boolean;
|
||||||
listingsCategory?: string;
|
|
||||||
realEstateIncluded?: boolean;
|
realEstateIncluded?: boolean;
|
||||||
leasedLocation?: boolean;
|
leasedLocation?: boolean;
|
||||||
franchiseResale?: boolean;
|
franchiseResale?: boolean;
|
||||||
|
|
@ -44,6 +43,7 @@ export interface BusinessListing {
|
||||||
updated?: Date;
|
updated?: Date;
|
||||||
visits?: number;
|
visits?: number;
|
||||||
lastVisit?: Date;
|
lastVisit?: Date;
|
||||||
|
listingsCategory?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CommercialPropertyListing {
|
export interface CommercialPropertyListing {
|
||||||
|
|
@ -69,4 +69,5 @@ export interface CommercialPropertyListing {
|
||||||
updated?: Date;
|
updated?: Date;
|
||||||
visits?: number;
|
visits?: number;
|
||||||
lastVisit?: Date;
|
lastVisit?: Date;
|
||||||
|
listingsCategory?: string;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@if(listing && user && (user.id===listing?.userId || isAdmin())){
|
@if(listing && user && (user.id===listing?.userId || isAdmin())){
|
||||||
<button pButton pRipple label="Edit" icon="pi pi-file-edit" class="w-auto" [routerLink]="['/editListing', listing.id]"></button>
|
<button pButton pRipple label="Edit" icon="pi pi-file-edit" class="w-auto" [routerLink]="['/editBusinessListing', listing.id]"></button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 md:col-6">
|
<div class="col-12 md:col-6">
|
||||||
|
|
|
||||||
|
|
@ -61,9 +61,9 @@ export class DetailsBusinessListingComponent {
|
||||||
private sanitizer: DomSanitizer,
|
private sanitizer: DomSanitizer,
|
||||||
private location: Location,
|
private location: Location,
|
||||||
) {
|
) {
|
||||||
|
this.mailinfo = { sender: {}, userId: '', email: '' };
|
||||||
this.userService.getUserObservable().subscribe(user => {
|
this.userService.getUserObservable().subscribe(user => {
|
||||||
this.user = user;
|
this.user = user;
|
||||||
this.mailinfo = { sender: {}, userId: '', email: user.email };
|
|
||||||
});
|
});
|
||||||
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
|
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
|
||||||
}
|
}
|
||||||
|
|
@ -79,6 +79,7 @@ export class DetailsBusinessListingComponent {
|
||||||
return this.userService.hasAdminRole();
|
return this.userService.hasAdminRole();
|
||||||
}
|
}
|
||||||
async mail() {
|
async mail() {
|
||||||
|
this.mailinfo.email = this.user.email;
|
||||||
this.mailinfo.userId = this.listing.userId;
|
this.mailinfo.userId = this.listing.userId;
|
||||||
this.mailinfo.listing = this.listing;
|
this.mailinfo.listing = this.listing;
|
||||||
await this.mailService.mail(this.mailinfo);
|
await this.mailService.mail(this.mailinfo);
|
||||||
|
|
|
||||||
|
|
@ -51,9 +51,10 @@
|
||||||
</ng-template> -->
|
</ng-template> -->
|
||||||
</p-galleria>
|
</p-galleria>
|
||||||
@if(listing && user && (user.id===listing?.userId || isAdmin())){
|
@if(listing && user && (user.id===listing?.userId || isAdmin())){
|
||||||
<button pButton pRipple label="Edit" icon="pi pi-file-edit" class="w-auto" [routerLink]="['/editListing', listing.id]"></button>
|
<button pButton pRipple label="Edit" icon="pi pi-file-edit" class="w-auto" [routerLink]="['/editCommercialPropertyListing', listing.id]"></button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@if (mailinfo){
|
||||||
<div class="col-12 md:col-6">
|
<div class="col-12 md:col-6">
|
||||||
<div class="surface-card p-4 border-round p-fluid">
|
<div class="surface-card p-4 border-round p-fluid">
|
||||||
<div class="font-medium text-xl text-primary text-900 mb-3">Contact The Author of This Listing</div>
|
<div class="font-medium text-xl text-primary text-900 mb-3">Contact The Author of This Listing</div>
|
||||||
|
|
@ -85,6 +86,7 @@
|
||||||
<button pButton pRipple label="Submit" icon="pi pi-file" class="w-auto" (click)="mail()"></button>
|
<button pButton pRipple label="Submit" icon="pi pi-file" class="w-auto" (click)="mail()"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -62,9 +62,9 @@ export class DetailsCommercialPropertyListingComponent {
|
||||||
private sanitizer: DomSanitizer,
|
private sanitizer: DomSanitizer,
|
||||||
private location: Location,
|
private location: Location,
|
||||||
) {
|
) {
|
||||||
|
this.mailinfo = { sender: {}, userId: '', email: '' };
|
||||||
this.userService.getUserObservable().subscribe(user => {
|
this.userService.getUserObservable().subscribe(user => {
|
||||||
this.user = user;
|
this.user = user;
|
||||||
this.mailinfo = { sender: {}, userId: '', email: user.email };
|
|
||||||
});
|
});
|
||||||
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
|
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
|
||||||
}
|
}
|
||||||
|
|
@ -81,6 +81,7 @@ export class DetailsCommercialPropertyListingComponent {
|
||||||
return this.userService.hasAdminRole();
|
return this.userService.hasAdminRole();
|
||||||
}
|
}
|
||||||
async mail() {
|
async mail() {
|
||||||
|
this.mailinfo.email = this.user.email;
|
||||||
this.mailinfo.userId = this.listing.userId;
|
this.mailinfo.userId = this.listing.userId;
|
||||||
this.mailinfo.listing = this.listing;
|
this.mailinfo.listing = this.listing;
|
||||||
await this.mailService.mail(this.mailinfo);
|
await this.mailService.mail(this.mailinfo);
|
||||||
|
|
|
||||||
|
|
@ -92,11 +92,12 @@
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
@if(businessListings?.length>0){
|
||||||
<li class="flex align-items-center py-3 px-2 flex-wrap surface-ground">
|
<li class="flex align-items-center py-3 px-2 flex-wrap surface-ground">
|
||||||
<div class="text-500 w-full md:w-2 font-medium">My Listings For Sale</div>
|
<div class="text-500 w-full md:w-2 font-medium">My Business Listings For Sale</div>
|
||||||
<div class="text-900 w-full md:w-10">
|
<div class="text-900 w-full md:w-10">
|
||||||
<div class="grid mt-0 mr-0">
|
<div class="grid mt-0 mr-0">
|
||||||
@for (listing of userListings; track listing) {
|
@for (listing of businessListings; track listing) {
|
||||||
<div class="col-12 md:col-6 cursor-pointer" [routerLink]="['/details-business-listing', listing.id]">
|
<div class="col-12 md:col-6 cursor-pointer" [routerLink]="['/details-business-listing', listing.id]">
|
||||||
<div class="p-3 border-1 surface-border border-round surface-card">
|
<div class="p-3 border-1 surface-border border-round surface-card">
|
||||||
<div class="text-900 mb-2">
|
<div class="text-900 mb-2">
|
||||||
|
|
@ -112,6 +113,30 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
} @if(commercialPropListings?.length>0){
|
||||||
|
<li class="flex align-items-center py-3 px-2 flex-wrap surface-ground">
|
||||||
|
<div class="text-500 w-full md:w-2 font-medium">My Commercial Property Listings For Sale</div>
|
||||||
|
<div class="text-900 w-full md:w-10">
|
||||||
|
<div class="grid mt-0 mr-0">
|
||||||
|
@for (listing of commercialPropListings; track listing) {
|
||||||
|
<div class="col-12 md:col-6 cursor-pointer" [routerLink]="['/details-commercial-property-listing', listing.id]">
|
||||||
|
<div class="p-3 border-1 surface-border border-round surface-card">
|
||||||
|
<div class="text-900 mb-2 flex align-items-center">
|
||||||
|
@if (listing.imageOrder?.length>0){
|
||||||
|
<img src="property/{{ listing.imagePath }}/{{ listing.imageOrder[0] }}" class="mr-3" style="width: 45px; height: 45px" />
|
||||||
|
} @else {
|
||||||
|
<img src="assets/images/placeholder_properties.jpg" class="mr-3" style="width: 45px; height: 45px" />
|
||||||
|
}
|
||||||
|
<span class="font-medium">{{ selectOptions.getCommercialProperty(listing.type) }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="text-700">{{ listing.title }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import { ActivatedRoute, Router } from '@angular/router';
|
||||||
import { MessageService } from 'primeng/api';
|
import { MessageService } from 'primeng/api';
|
||||||
import { GalleriaModule } from 'primeng/galleria';
|
import { GalleriaModule } from 'primeng/galleria';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { BusinessListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
import { BusinessListing, CommercialPropertyListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { KeyValue, ListingCriteria } from '../../../../../../bizmatch-server/src/models/main.model';
|
import { KeyValue, ListingCriteria } from '../../../../../../bizmatch-server/src/models/main.model';
|
||||||
import { environment } from '../../../../environments/environment';
|
import { environment } from '../../../../environments/environment';
|
||||||
import { ImageService } from '../../../services/image.service';
|
import { ImageService } from '../../../services/image.service';
|
||||||
|
|
@ -28,7 +28,8 @@ export class DetailsUserComponent {
|
||||||
user$: Observable<User>;
|
user$: Observable<User>;
|
||||||
environment = environment;
|
environment = environment;
|
||||||
criteria: ListingCriteria;
|
criteria: ListingCriteria;
|
||||||
userListings: BusinessListing[];
|
businessListings: BusinessListing[];
|
||||||
|
commercialPropListings: CommercialPropertyListing[];
|
||||||
companyOverview: SafeHtml;
|
companyOverview: SafeHtml;
|
||||||
offeredServices: SafeHtml;
|
offeredServices: SafeHtml;
|
||||||
userLicensedIn: KeyValue[];
|
userLicensedIn: KeyValue[];
|
||||||
|
|
@ -49,7 +50,10 @@ export class DetailsUserComponent {
|
||||||
this.userLicensedIn = this.user.licensedIn.map(l => {
|
this.userLicensedIn = this.user.licensedIn.map(l => {
|
||||||
return { name: l.split('|')[0], value: l.split('|')[1] };
|
return { name: l.split('|')[0], value: l.split('|')[1] };
|
||||||
});
|
});
|
||||||
this.userListings = await this.listingsService.getListingByUserId(this.id);
|
const results = await Promise.all([await this.listingsService.getListingByUserId(this.id, 'business'), await this.listingsService.getListingByUserId(this.id, 'commercialProperty')]);
|
||||||
|
// Zuweisen der Ergebnisse zu den Member-Variablen der Klasse
|
||||||
|
this.businessListings = results[0];
|
||||||
|
this.commercialPropListings = results[1];
|
||||||
this.user$ = this.userService.getUserObservable();
|
this.user$ = this.userService.getUserObservable();
|
||||||
this.companyOverview = this.sanitizer.bypassSecurityTrustHtml(this.user.companyOverview);
|
this.companyOverview = this.sanitizer.bypassSecurityTrustHtml(this.user.companyOverview);
|
||||||
this.offeredServices = this.sanitizer.bypassSecurityTrustHtml(this.user.offeredServices);
|
this.offeredServices = this.sanitizer.bypassSecurityTrustHtml(this.user.offeredServices);
|
||||||
|
|
|
||||||
|
|
@ -27,25 +27,25 @@
|
||||||
<div class="w-12 lg:w-6 text-center lg:text-right flex">
|
<div class="w-12 lg:w-6 text-center lg:text-right flex">
|
||||||
<div class="mt-5">
|
<div class="mt-5">
|
||||||
<ul class="flex flex-column align-items-left gap-3 px-2 py-3 list-none surface-border">
|
<ul class="flex flex-column align-items-left gap-3 px-2 py-3 list-none surface-border">
|
||||||
<li><button pButton pRipple icon="pi pi-user" (click)="activeTabAction = 'business'" label="Businesses" [ngClass]="{ 'p-button-text text-700': activeTabAction !== 'business' }"></button></li>
|
<li><button pButton pRipple icon="pi pi-user" (click)="changeTab('business')" label="Businesses" [ngClass]="{ 'p-button-text text-700': activeTabAction !== 'business' }"></button></li>
|
||||||
<li>
|
<li>
|
||||||
<button
|
<button
|
||||||
pButton
|
pButton
|
||||||
pRipple
|
pRipple
|
||||||
icon="pi pi-shield"
|
icon="pi pi-shield"
|
||||||
(click)="activeTabAction = 'commercialProperty'"
|
(click)="changeTab('commercialProperty')"
|
||||||
label="Commercial Property"
|
label="Commercial Property"
|
||||||
[ngClass]="{ 'p-button-text text-700': activeTabAction != 'commercialProperty' }"
|
[ngClass]="{ 'p-button-text text-700': activeTabAction != 'commercialProperty' }"
|
||||||
></button>
|
></button>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<button pButton pRipple icon="pi pi-globe" (click)="activeTabAction = 'broker'" label="Professionals/Brokers Directory" [ngClass]="{ 'p-button-text text-700': activeTabAction != 'broker' }"></button>
|
<button pButton pRipple icon="pi pi-globe" (click)="changeTab('broker')" label="Professionals/Brokers Directory" [ngClass]="{ 'p-button-text text-700': activeTabAction != 'broker' }"></button>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-5">
|
<div [ngClass]="{ 'mt-5': activeTabAction === 'business', 'mt-11': activeTabAction === 'commercialProperty', 'mt-22': activeTabAction === 'broker' }">
|
||||||
<div class="flex flex-column align-items-right gap-3 px-2 py-3 my-3 surface-border">
|
<div class="flex flex-column align-items-right gap-3 px-2 py-3 my-3 surface-border">
|
||||||
<p-dropdown [options]="selectOptions.states" [(ngModel)]="criteria.state" optionLabel="name" optionValue="value" [showClear]="true" placeholder="State" [style]="{ width: '200px' }"></p-dropdown>
|
<p-dropdown [options]="states" [(ngModel)]="criteria.state" optionLabel="name" optionValue="value" [showClear]="true" placeholder="State" [style]="{ width: '200px' }"></p-dropdown>
|
||||||
@if(activeTabAction === 'business'){
|
@if(activeTabAction === 'business'){
|
||||||
<p-dropdown [options]="selectOptions.typesOfBusiness" [(ngModel)]="criteria.type" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Category" [style]="{ width: '200px' }"></p-dropdown>
|
<p-dropdown [options]="selectOptions.typesOfBusiness" [(ngModel)]="criteria.type" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Category" [style]="{ width: '200px' }"></p-dropdown>
|
||||||
} @if(activeTabAction === 'commercialProperty'){
|
} @if(activeTabAction === 'commercialProperty'){
|
||||||
|
|
@ -61,10 +61,8 @@
|
||||||
} @if(activeTabAction === 'business' || activeTabAction === 'commercialProperty'){
|
} @if(activeTabAction === 'business' || activeTabAction === 'commercialProperty'){
|
||||||
<p-dropdown [options]="selectOptions.prices" [(ngModel)]="criteria.minPrice" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Min Price" [style]="{ width: '200px' }"></p-dropdown>
|
<p-dropdown [options]="selectOptions.prices" [(ngModel)]="criteria.minPrice" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Min Price" [style]="{ width: '200px' }"></p-dropdown>
|
||||||
<p-dropdown [options]="selectOptions.prices" [(ngModel)]="criteria.maxPrice" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Max Price" [style]="{ width: '200px' }"></p-dropdown>
|
<p-dropdown [options]="selectOptions.prices" [(ngModel)]="criteria.maxPrice" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Max Price" [style]="{ width: '200px' }"></p-dropdown>
|
||||||
} @else {
|
|
||||||
<div style="height: 46px"> </div>
|
|
||||||
}
|
}
|
||||||
<button pButton pRipple label="Find" class="ml-3 font-bold" [style]="{ width: '170px' }" (click)="search()"></button>
|
<button pButton pRipple label="Find" class="ml-3 font-bold" [style]="{ width: '200px' }" (click)="search()"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -16,3 +16,9 @@
|
||||||
.p-button-white {
|
.p-button-white {
|
||||||
color: aliceblue;
|
color: aliceblue;
|
||||||
}
|
}
|
||||||
|
.mt-11 {
|
||||||
|
margin-top: 5.9rem !important;
|
||||||
|
}
|
||||||
|
.mt-22 {
|
||||||
|
margin-top: 9.7rem !important;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import { StyleClassModule } from 'primeng/styleclass';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { User } from '../../../../../bizmatch-server/src/models/db.model';
|
import { User } from '../../../../../bizmatch-server/src/models/db.model';
|
||||||
import { ListingCriteria } from '../../../../../bizmatch-server/src/models/main.model';
|
import { ListingCriteria } from '../../../../../bizmatch-server/src/models/main.model';
|
||||||
|
import { ListingsService } from '../../services/listings.service';
|
||||||
import { SelectOptionsService } from '../../services/select-options.service';
|
import { SelectOptionsService } from '../../services/select-options.service';
|
||||||
import { UserService } from '../../services/user.service';
|
import { UserService } from '../../services/user.service';
|
||||||
import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from '../../utils/utils';
|
import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from '../../utils/utils';
|
||||||
|
|
@ -22,22 +23,38 @@ import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from
|
||||||
styleUrl: './home.component.scss',
|
styleUrl: './home.component.scss',
|
||||||
})
|
})
|
||||||
export class HomeComponent {
|
export class HomeComponent {
|
||||||
activeTabAction = 'business';
|
activeTabAction: 'business' | 'commercialProperty' | 'broker' = 'business';
|
||||||
type: string;
|
type: string;
|
||||||
maxPrice: string;
|
maxPrice: string;
|
||||||
minPrice: string;
|
minPrice: string;
|
||||||
criteria: ListingCriteria;
|
criteria: ListingCriteria;
|
||||||
user$: Observable<User>;
|
user$: Observable<User>;
|
||||||
public constructor(private router: Router, private activatedRoute: ActivatedRoute, public selectOptions: SelectOptionsService, public userService: UserService) {
|
states = [];
|
||||||
|
public constructor(private router: Router, private activatedRoute: ActivatedRoute, public selectOptions: SelectOptionsService, public userService: UserService, private listingsService: ListingsService) {
|
||||||
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
|
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
|
||||||
resetCriteria(this.criteria);
|
resetCriteria(this.criteria);
|
||||||
}
|
}
|
||||||
ngOnInit() {
|
async ngOnInit() {
|
||||||
this.user$ = this.userService.getUserObservable();
|
this.user$ = this.userService.getUserObservable();
|
||||||
|
if (this.activeTabAction === 'business' || this.activeTabAction === 'commercialProperty') {
|
||||||
|
const statesResult = await this.listingsService.getAllStates(this.activeTabAction);
|
||||||
|
this.states = statesResult.map(s => s.state).map(ls => ({ name: this.selectOptions.getState(ls as string), value: ls }));
|
||||||
|
} else {
|
||||||
|
this.states = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async changeTab(tabname: 'business' | 'commercialProperty' | 'broker') {
|
||||||
|
this.activeTabAction = tabname;
|
||||||
|
if (this.activeTabAction === 'business' || this.activeTabAction === 'commercialProperty') {
|
||||||
|
const statesResult = await this.listingsService.getAllStates(this.activeTabAction);
|
||||||
|
this.states = statesResult.map(s => s.state).map(ls => ({ name: this.selectOptions.getState(ls as string), value: ls }));
|
||||||
|
} else {
|
||||||
|
this.states = this.selectOptions.states;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
search() {
|
search() {
|
||||||
this.router.navigate([`${this.activeTabAction}Listings`]);
|
const data = { keep: true };
|
||||||
|
this.router.navigate([`${this.activeTabAction}Listings`], { state: { data } });
|
||||||
}
|
}
|
||||||
|
|
||||||
login() {
|
login() {
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<p-inputGroup>
|
<p-inputGroup>
|
||||||
<input id="name" type="text" pInputText [(ngModel)]="criteria.name" placeholder="Name" />
|
<input id="name" type="text" pInputText [(ngModel)]="criteria.name" placeholder="Name" />
|
||||||
<button type="button" pButton icon="pi pi-times" class="p-button-danger" (click)="reset()"></button>
|
<button type="button" pButton icon="pi pi-times" class="p-button-secondary" (click)="reset()"></button>
|
||||||
</p-inputGroup>
|
</p-inputGroup>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-1 col-offset-7">
|
<div class="col-1 col-offset-7">
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ import { ImageService } from '../../../services/image.service';
|
||||||
import { ListingsService } from '../../../services/listings.service';
|
import { ListingsService } from '../../../services/listings.service';
|
||||||
import { SelectOptionsService } from '../../../services/select-options.service';
|
import { SelectOptionsService } from '../../../services/select-options.service';
|
||||||
import { UserService } from '../../../services/user.service';
|
import { UserService } from '../../../services/user.service';
|
||||||
import { createGenericObject, getCriteriaStateObject, getSessionStorageHandler } from '../../../utils/utils';
|
import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from '../../../utils/utils';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-broker-listings',
|
selector: 'app-broker-listings',
|
||||||
|
|
@ -54,14 +54,13 @@ export class BrokerListingsComponent {
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private cdRef: ChangeDetectorRef,
|
private cdRef: ChangeDetectorRef,
|
||||||
private imageService: ImageService,
|
private imageService: ImageService,
|
||||||
|
private route: ActivatedRoute,
|
||||||
) {
|
) {
|
||||||
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
|
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
|
||||||
this.criteria.type = undefined;
|
this.criteria.type = undefined;
|
||||||
this.router.getCurrentNavigation();
|
this.route.data.subscribe(async () => {
|
||||||
this.activatedRoute.snapshot;
|
if (!this.router.getCurrentNavigation().extras.state) {
|
||||||
this.activatedRoute.params.subscribe(params => {
|
resetCriteria(this.criteria);
|
||||||
if (this.activatedRoute.snapshot.fragment === '') {
|
|
||||||
this.criteria = onChange(createGenericObject<ListingCriteria>(), getSessionStorageHandler);
|
|
||||||
}
|
}
|
||||||
this.init();
|
this.init();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
@for (listing of listings; track listing.id) {
|
@for (listing of listings; track listing.id) {
|
||||||
<div *ngIf="listing.listingsCategory === 'business'" class="col-12 lg:col-3 p-3">
|
<div class="col-12 lg:col-3 p-3">
|
||||||
<div class="shadow-2 border-round surface-card mb-3 h-full flex-column justify-content-between flex">
|
<div class="shadow-2 border-round surface-card mb-3 h-full flex-column justify-content-between flex">
|
||||||
<div class="p-4 h-full flex flex-column">
|
<div class="p-4 h-full flex flex-column">
|
||||||
<div class="flex align-items-center">
|
<div class="flex align-items-center">
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ import { environment } from '../../../../environments/environment';
|
||||||
import { ImageService } from '../../../services/image.service';
|
import { ImageService } from '../../../services/image.service';
|
||||||
import { ListingsService } from '../../../services/listings.service';
|
import { ListingsService } from '../../../services/listings.service';
|
||||||
import { SelectOptionsService } from '../../../services/select-options.service';
|
import { SelectOptionsService } from '../../../services/select-options.service';
|
||||||
import { createGenericObject, getCriteriaStateObject, getSessionStorageHandler } from '../../../utils/utils';
|
import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from '../../../utils/utils';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-business-listings',
|
selector: 'app-business-listings',
|
||||||
|
|
@ -65,15 +65,14 @@ export class BusinessListingsComponent {
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private cdRef: ChangeDetectorRef,
|
private cdRef: ChangeDetectorRef,
|
||||||
private imageService: ImageService,
|
private imageService: ImageService,
|
||||||
|
private route: ActivatedRoute,
|
||||||
) {
|
) {
|
||||||
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
|
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
|
||||||
this.router.getCurrentNavigation();
|
this.criteria.type = undefined;
|
||||||
this.activatedRoute.snapshot;
|
this.route.data.subscribe(async () => {
|
||||||
this.activatedRoute.params.subscribe(params => {
|
if (!this.router.getCurrentNavigation().extras.state) {
|
||||||
if (this.activatedRoute.snapshot.fragment === '') {
|
resetCriteria(this.criteria);
|
||||||
this.criteria = onChange(createGenericObject<ListingCriteria>(), getSessionStorageHandler);
|
|
||||||
}
|
}
|
||||||
this.category = (<any>params).type;
|
|
||||||
this.init();
|
this.init();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ import { environment } from '../../../../environments/environment';
|
||||||
import { ImageService } from '../../../services/image.service';
|
import { ImageService } from '../../../services/image.service';
|
||||||
import { ListingsService } from '../../../services/listings.service';
|
import { ListingsService } from '../../../services/listings.service';
|
||||||
import { SelectOptionsService } from '../../../services/select-options.service';
|
import { SelectOptionsService } from '../../../services/select-options.service';
|
||||||
import { createGenericObject, getCriteriaStateObject, getSessionStorageHandler } from '../../../utils/utils';
|
import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from '../../../utils/utils';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-commercial-property-listings',
|
selector: 'app-commercial-property-listings',
|
||||||
|
|
@ -50,14 +50,13 @@ export class CommercialPropertyListingsComponent {
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private cdRef: ChangeDetectorRef,
|
private cdRef: ChangeDetectorRef,
|
||||||
private imageService: ImageService,
|
private imageService: ImageService,
|
||||||
|
private route: ActivatedRoute,
|
||||||
) {
|
) {
|
||||||
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
|
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
|
||||||
this.criteria.type = undefined;
|
this.criteria.type = undefined;
|
||||||
this.router.getCurrentNavigation();
|
this.route.data.subscribe(async () => {
|
||||||
this.activatedRoute.snapshot;
|
if (!this.router.getCurrentNavigation().extras.state) {
|
||||||
this.activatedRoute.params.subscribe(params => {
|
resetCriteria(this.criteria);
|
||||||
if (this.activatedRoute.snapshot.fragment === '') {
|
|
||||||
this.criteria = onChange(createGenericObject<ListingCriteria>(), getSessionStorageHandler);
|
|
||||||
}
|
}
|
||||||
this.init();
|
this.init();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
#sky-line {
|
|
||||||
background-image: url(../../../assets/images/bw-sky.jpg);
|
|
||||||
height: 204px;
|
|
||||||
background-position: bottom;
|
|
||||||
background-size: cover;
|
|
||||||
margin-bottom: -1px;
|
|
||||||
}
|
|
||||||
.search{
|
|
||||||
background-color: #343F69;
|
|
||||||
}
|
|
||||||
::ng-deep p-paginator div {
|
|
||||||
background-color: var(--surface-200) !important;
|
|
||||||
// background-color: var(--surface-400) !important;
|
|
||||||
}
|
|
||||||
.rounded-image {
|
|
||||||
border-radius: 6px;
|
|
||||||
// width: 100px;
|
|
||||||
max-width: 100px;
|
|
||||||
height: 45px;
|
|
||||||
border: 1px solid rgba(0,0,0,0.2);
|
|
||||||
padding: 1px 1px;
|
|
||||||
object-fit: contain;
|
|
||||||
}
|
|
||||||
|
|
@ -1,124 +0,0 @@
|
||||||
import { ChangeDetectorRef, Component } from '@angular/core';
|
|
||||||
import { ButtonModule } from 'primeng/button';
|
|
||||||
import { CheckboxModule } from 'primeng/checkbox';
|
|
||||||
import { InputTextModule } from 'primeng/inputtext';
|
|
||||||
import { StyleClassModule } from 'primeng/styleclass';
|
|
||||||
import { SelectOptionsService } from '../../services/select-options.service';
|
|
||||||
import { DropdownModule } from 'primeng/dropdown';
|
|
||||||
import { FormsModule } from '@angular/forms';
|
|
||||||
import { CommonModule } from '@angular/common';
|
|
||||||
import { ToggleButtonModule } from 'primeng/togglebutton';
|
|
||||||
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
|
|
||||||
import { ListingsService } from '../../services/listings.service';
|
|
||||||
import { Observable, lastValueFrom } from 'rxjs';
|
|
||||||
import { PaginatorModule } from 'primeng/paginator';
|
|
||||||
import onChange from 'on-change';
|
|
||||||
import { createGenericObject, getCriteriaStateObject, getSessionStorageHandler } from '../../utils/utils';
|
|
||||||
import { InitEditableRow } from 'primeng/table';
|
|
||||||
import { environment } from '../../../environments/environment';
|
|
||||||
|
|
||||||
import { UserService } from '../../services/user.service';
|
|
||||||
import { ImageService } from '../../services/image.service';
|
|
||||||
import { ListingCriteria, ListingType } from '../../../../../bizmatch-server/src/models/main.model';
|
|
||||||
import { User } from '../../../../../bizmatch-server/src/models/db.model';
|
|
||||||
@Component({
|
|
||||||
selector: 'app-listings',
|
|
||||||
standalone: true,
|
|
||||||
imports: [CommonModule, StyleClassModule, ButtonModule, CheckboxModule, InputTextModule, DropdownModule, FormsModule, StyleClassModule, ToggleButtonModule, RouterModule, PaginatorModule],
|
|
||||||
templateUrl: './listings.component.html',
|
|
||||||
styleUrls: ['./listings.component.scss', '../pages.scss']
|
|
||||||
})
|
|
||||||
export class ListingsComponent {
|
|
||||||
// environment=environment;
|
|
||||||
// listings: Array<ListingType>;
|
|
||||||
// users: Array<User>
|
|
||||||
// filteredListings: Array<ListingType>;
|
|
||||||
// criteria:ListingCriteria;
|
|
||||||
// realEstateChecked: boolean;
|
|
||||||
// maxPrice: string;
|
|
||||||
// minPrice: string;
|
|
||||||
// type:string;
|
|
||||||
// states = [];
|
|
||||||
// statesSet = new Set();
|
|
||||||
// state:string;
|
|
||||||
// first: number = 0;
|
|
||||||
// rows: number = 12;
|
|
||||||
// totalRecords:number = 0;
|
|
||||||
// ts = new Date().getTime()
|
|
||||||
// public category: 'business' | 'commercialProperty' | 'professionals_brokers' | undefined;
|
|
||||||
|
|
||||||
// constructor(public selectOptions: SelectOptionsService,
|
|
||||||
// private listingsService:ListingsService,
|
|
||||||
// private userService:UserService,
|
|
||||||
// private activatedRoute: ActivatedRoute,
|
|
||||||
// private router:Router,
|
|
||||||
// private cdRef:ChangeDetectorRef,
|
|
||||||
// private imageService:ImageService) {
|
|
||||||
// this.criteria = onChange(getCriteriaStateObject(),getSessionStorageHandler);
|
|
||||||
// this.router.getCurrentNavigation()
|
|
||||||
// this.activatedRoute.snapshot
|
|
||||||
// this.activatedRoute.params.subscribe(params => {
|
|
||||||
// if (this.activatedRoute.snapshot.fragment===''){
|
|
||||||
// this.criteria = onChange(createGenericObject<ListingCriteria>(),getSessionStorageHandler)
|
|
||||||
// this.first=0;
|
|
||||||
// }
|
|
||||||
// this.category = (<any>params).type;
|
|
||||||
// this.criteria.listingsCategory=this.category;
|
|
||||||
// this.init()
|
|
||||||
// })
|
|
||||||
|
|
||||||
// }
|
|
||||||
// async ngOnInit(){
|
|
||||||
// }
|
|
||||||
// async init(){
|
|
||||||
// if (this.category==='business' || this.category==='commercialProperty'){
|
|
||||||
// this.users=[]
|
|
||||||
// this.listings=await this.listingsService.getListings(this.criteria);
|
|
||||||
|
|
||||||
// this.setStates();
|
|
||||||
// this.totalRecords=this.listings.length
|
|
||||||
// this.cdRef.markForCheck();
|
|
||||||
// this.cdRef.detectChanges();
|
|
||||||
// } else {
|
|
||||||
// this.listings=[]
|
|
||||||
// this.filteredListings=[];
|
|
||||||
// this.users=await this.userService.search(this.criteria);
|
|
||||||
// const profiles = await this.imageService.getProfileImagesForUsers(this.users.map(u=>u.id));
|
|
||||||
// const logos = await this.imageService.getCompanyLogosForUsers(this.users.map(u=>u.id));
|
|
||||||
// this.users.forEach(u=>{
|
|
||||||
// u.hasProfile=profiles[u.id]
|
|
||||||
// u.hasCompanyLogo=logos[u.id]
|
|
||||||
// })
|
|
||||||
// this.cdRef.markForCheck();
|
|
||||||
// this.cdRef.detectChanges();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
// setStates(){
|
|
||||||
// this.statesSet=new Set();
|
|
||||||
// this.listings.forEach(l=>{
|
|
||||||
// if (l.state){
|
|
||||||
// this.statesSet.add(l.state)
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
// this.states = [...this.statesSet].map((ls) =>({name:this.selectOptions.getState(ls as string),value:ls}))
|
|
||||||
// }
|
|
||||||
// async search() {
|
|
||||||
// this.listings= await this.listingsService.getListings(this.criteria);
|
|
||||||
// this.setStates();
|
|
||||||
// this.totalRecords=this.listings.length
|
|
||||||
// this.filteredListings =[...this.listings].splice(this.first,this.rows);
|
|
||||||
// this.cdRef.markForCheck();
|
|
||||||
// this.cdRef.detectChanges();
|
|
||||||
// }
|
|
||||||
// onPageChange(event: any) {
|
|
||||||
// this.criteria.start=event.first;
|
|
||||||
// this.criteria.length=event.rows;
|
|
||||||
// this.criteria.page=event.page;
|
|
||||||
// this.criteria.pageCount=event.pageCount;
|
|
||||||
// }
|
|
||||||
// imageErrorHandler(listing: ListingType) {
|
|
||||||
// listing.hideImage = true; // Bild ausblenden, wenn es nicht geladen werden kann
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -80,7 +80,9 @@ export class AccountComponent {
|
||||||
printInvoice(invoice: Invoice) {}
|
printInvoice(invoice: Invoice) {}
|
||||||
|
|
||||||
async updateProfile(user: User) {
|
async updateProfile(user: User) {
|
||||||
|
this.user.licensedIn = this.userLicensedIn.map(l => `${l.name}|${l.value}`);
|
||||||
await this.userService.save(this.user);
|
await this.userService.save(this.user);
|
||||||
|
this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Acount changes have been persisted', life: 3000 });
|
||||||
}
|
}
|
||||||
|
|
||||||
onUploadCompanyLogo(event: any) {
|
onUploadCompanyLogo(event: any) {
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@
|
||||||
@for (image of propertyImages; track image) {
|
@for (image of propertyImages; track image) {
|
||||||
<span cdkDropList mixedCdkDropList>
|
<span cdkDropList mixedCdkDropList>
|
||||||
<div cdkDrag mixedCdkDragSizeHelper class="image-wrap">
|
<div cdkDrag mixedCdkDragSizeHelper class="image-wrap">
|
||||||
<img src="property/{{ listing.id }}/{{ image }}" [alt]="image" class="shadow-2" cdkDrag />
|
<img src="property/{{ listing.imagePath }}/{{ image }}" [alt]="image" class="shadow-2" cdkDrag />
|
||||||
<fa-icon [icon]="faTrash" (click)="deleteConfirm(image)"></fa-icon>
|
<fa-icon [icon]="faTrash" (click)="deleteConfirm(image)"></fa-icon>
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td class="wide-column line-height-3">{{ listing.title }}</td>
|
<td class="wide-column line-height-3">{{ listing.title }}</td>
|
||||||
<td>{{ selectOptions.getListingsCategory(listing.listingsCategory) }}</td>
|
<td>{{ selectOptions.getListingsCategory(listing.listingsCategory) }}</td>
|
||||||
<td>{{ selectOptions.getState(listing.city) }}</td>
|
<td>{{ selectOptions.getState(listing.state) }}</td>
|
||||||
<td>
|
<td>
|
||||||
@if(isBusinessListing(listing)){
|
@if(isBusinessListing(listing)){
|
||||||
<button pButton pRipple icon="pi pi-pencil" class="p-button-rounded p-button-success mr-2" [routerLink]="['/editBusinessListing', listing.id]"></button>
|
<button pButton pRipple icon="pi pi-pencil" class="p-button-rounded p-button-success mr-2" [routerLink]="['/editBusinessListing', listing.id]"></button>
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,14 @@ export class MyListingComponent {
|
||||||
const keycloakUser = this.userService.getKeycloakUser();
|
const keycloakUser = this.userService.getKeycloakUser();
|
||||||
const email = keycloakUser.email;
|
const email = keycloakUser.email;
|
||||||
this.user = await this.userService.getByMail(email);
|
this.user = await this.userService.getByMail(email);
|
||||||
this.myListings = await this.listingsService.getListingByUserId(this.user.id);
|
const result = await Promise.all([await this.listingsService.getListingByUserId(this.user.id, 'business'), await this.listingsService.getListingByUserId(this.user.id, 'commercialProperty')]);
|
||||||
|
this.myListings = [...result[0], ...result[1]];
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteListing(listing: ListingType) {
|
async deleteListing(listing: ListingType) {
|
||||||
await this.listingsService.deleteListing(listing.id, getListingType(listing));
|
await this.listingsService.deleteListing(listing.id, getListingType(listing));
|
||||||
this.myListings = await this.listingsService.getListingByUserId(this.user.id);
|
const result = await Promise.all([await this.listingsService.getListingByUserId(this.user.id, 'business'), await this.listingsService.getListingByUserId(this.user.id, 'commercialProperty')]);
|
||||||
|
this.myListings = [...result[0], ...result[1]];
|
||||||
}
|
}
|
||||||
|
|
||||||
confirm(event: Event, listing: ListingType) {
|
confirm(event: Event, listing: ListingType) {
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,8 @@ export class ListingsService {
|
||||||
const result = this.http.get<ListingType>(`${this.apiBaseUrl}/bizmatch/listings/${listingsCategory}/${id}`);
|
const result = this.http.get<ListingType>(`${this.apiBaseUrl}/bizmatch/listings/${listingsCategory}/${id}`);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
getListingByUserId(userid: string): Promise<ListingType[]> {
|
getListingByUserId(userid: string, listingsCategory: 'business' | 'commercialProperty'): Promise<ListingType[]> {
|
||||||
return lastValueFrom(this.http.get<BusinessListing[]>(`${this.apiBaseUrl}/bizmatch/listings/business/user/${userid}`));
|
return lastValueFrom(this.http.get<BusinessListing[]>(`${this.apiBaseUrl}/bizmatch/listings/${listingsCategory}/user/${userid}`));
|
||||||
}
|
}
|
||||||
async save(listing: any, listingsCategory: 'business' | 'professionals_brokers' | 'commercialProperty') {
|
async save(listing: any, listingsCategory: 'business' | 'professionals_brokers' | 'commercialProperty') {
|
||||||
if (listing.id) {
|
if (listing.id) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue