38 .catch(console.error);
39
40// API routes
41
42// Auth routes
43app.post("/api/auth/login", async (c) => {
44 const body = await c.req.json();
45 const { email, password } = body;
58});
59
60app.post("/api/auth/register", async (c) => {
61 const body = await c.req.json();
62 const { name, email, password } = body;
75});
76
77app.get("/api/auth/me", authenticate, async (c) => {
78 const user = c.get("user");
79 return c.json({ success: true, data: user });
81
82// Property routes
83app.get("/api/properties", async (c) => {
84 const page = parseInt(c.req.query("page") || "1");
85 const limit = parseInt(c.req.query("limit") || "10");
109});
110
111app.get("/api/properties/featured", async (c) => {
112 const limit = parseInt(c.req.query("limit") || "6");
113
121});
122
123app.get("/api/properties/:id", async (c) => {
124 const id = parseInt(c.req.param("id"));
125
137});
138
139app.post("/api/properties", authenticate, agentOrAdmin, async (c) => {
140 const user = c.get("user");
141 const body = await c.req.json();
155});
156
157app.put("/api/properties/:id", authenticate, agentOrAdmin, async (c) => {
158 const id = parseInt(c.req.param("id"));
159 const user = c.get("user");
180});
181
182app.delete("/api/properties/:id", authenticate, agentOrAdmin, async (c) => {
183 const id = parseInt(c.req.param("id"));
184 const user = c.get("user");
205
206// User routes
207app.get("/api/users", authenticate, adminOnly, async (c) => {
208 try {
209 const users = await userController.getAllUsers();
215});
216
217app.get("/api/users/agents", async (c) => {
218 try {
219 const agents = await userController.getAgents();
225});
226
227app.get("/api/users/:id", authenticate, async (c) => {
228 const id = parseInt(c.req.param("id"));
229 const user = c.get("user");
247});
248
249app.put("/api/users/:id", authenticate, async (c) => {
250 const id = parseInt(c.req.param("id"));
251 const user = c.get("user");
272});
273
274app.post("/api/users/:id/change-password", authenticate, async (c) => {
275 const id = parseInt(c.req.param("id"));
276 const user = c.get("user");
313});
314
315app.delete("/api/users/:id", authenticate, adminOnly, async (c) => {
316 const id = parseInt(c.req.param("id"));
317
335
336// Inquiry routes
337app.post("/api/inquiries", async (c) => {
338 const body = await c.req.json();
339 const { propertyId, name, email, message, phone } = body;
379});
380
381app.get("/api/inquiries", authenticate, agentOrAdmin, async (c) => {
382 const user = c.get("user");
383 const page = parseInt(c.req.query("page") || "1");
395});
396
397app.get("/api/inquiries/my", authenticate, async (c) => {
398 const user = c.get("user");
399
407});
408
409app.get("/api/inquiries/:id", authenticate, agentOrAdmin, async (c) => {
410 const id = parseInt(c.req.param("id"));
411
423});
424
425app.put("/api/inquiries/:id/status", authenticate, agentOrAdmin, async (c) => {
426 const id = parseInt(c.req.param("id"));
427 const user = c.get("user");
453});
454
455app.delete("/api/inquiries/:id", authenticate, agentOrAdmin, async (c) => {
456 const id = parseInt(c.req.param("id"));
457 const user = c.get("user");
478
479// Favorite routes
480app.post("/api/favorites/:propertyId", authenticate, async (c) => {
481 const propertyId = parseInt(c.req.param("propertyId"));
482 const user = c.get("user");
500});
501
502app.delete("/api/favorites/:propertyId", authenticate, async (c) => {
503 const propertyId = parseInt(c.req.param("propertyId"));
504 const user = c.get("user");
522});
523
524app.get("/api/favorites", authenticate, async (c) => {
525 const user = c.get("user");
526
534});
535
536app.get("/api/favorites/check/:propertyId", authenticate, async (c) => {
537 const propertyId = parseInt(c.req.param("propertyId"));
538 const user = c.get("user");
552
553// Dashboard routes
554app.get("/api/dashboard", authenticate, agentOrAdmin, async (c) => {
555 const user = c.get("user");
556