nexusbert commited on
Commit
9f9a4dd
·
1 Parent(s): 4db7d21

push wardrobe

Browse files
Files changed (3) hide show
  1. src/index.ts +4 -1
  2. src/routes/wardrobe.ts +75 -0
  3. stylegptUI +1 -1
src/index.ts CHANGED
@@ -8,6 +8,7 @@ import { AppDataSource } from "./utils/dataSource";
8
  import authRoute from "./routes/auth";
9
  import uploadRoute from "./routes/upload";
10
  import suggestRoute from "./routes/suggest";
 
11
  import profileRoute from "./routes/profile";
12
 
13
  dotenv.config();
@@ -38,7 +39,8 @@ app.get("/", (req, res) => {
38
  auth: "/api/auth",
39
  profile: "/api/profile",
40
  upload: "/api/upload",
41
- suggest: "/api/suggest"
 
42
  }
43
  },
44
  technologies: [
@@ -211,6 +213,7 @@ app.use("/api/auth", authRoute);
211
  app.use("/api/profile", profileRoute);
212
  app.use("/api/upload", uploadRoute);
213
  app.use("/api/suggest", suggestRoute);
 
214
 
215
  const PORT = process.env.PORT || 7860;
216
 
 
8
  import authRoute from "./routes/auth";
9
  import uploadRoute from "./routes/upload";
10
  import suggestRoute from "./routes/suggest";
11
+ import wardrobeRoute from "./routes/wardrobe";
12
  import profileRoute from "./routes/profile";
13
 
14
  dotenv.config();
 
39
  auth: "/api/auth",
40
  profile: "/api/profile",
41
  upload: "/api/upload",
42
+ suggest: "/api/suggest",
43
+ wardrobe: "/api/wardrobe"
44
  }
45
  },
46
  technologies: [
 
213
  app.use("/api/profile", profileRoute);
214
  app.use("/api/upload", uploadRoute);
215
  app.use("/api/suggest", suggestRoute);
216
+ app.use("/api/wardrobe", wardrobeRoute);
217
 
218
  const PORT = process.env.PORT || 7860;
219
 
src/routes/wardrobe.ts ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import express from "express";
2
+ import { AppDataSource } from "../utils/dataSource";
3
+ import { WardrobeItem } from "../entity/WardrobeItem";
4
+ import { authenticateToken, AuthRequest } from "../middleware/auth";
5
+
6
+ const router = express.Router();
7
+
8
+ /**
9
+ * @openapi
10
+ * /api/wardrobe:
11
+ * get:
12
+ * summary: List wardrobe items for the authenticated user
13
+ * tags: [Upload]
14
+ * security:
15
+ * - bearerAuth: []
16
+ * parameters:
17
+ * - in: query
18
+ * name: style
19
+ * schema:
20
+ * type: string
21
+ * enum: [formal, casual, streetwear, sportswear]
22
+ * description: Optional filter by style
23
+ * - in: query
24
+ * name: q
25
+ * schema:
26
+ * type: string
27
+ * description: Optional search term that matches category
28
+ * responses:
29
+ * 200:
30
+ * description: Wardrobe items fetched
31
+ * content:
32
+ * application/json:
33
+ * schema:
34
+ * type: object
35
+ * properties:
36
+ * success:
37
+ * type: boolean
38
+ * items:
39
+ * type: array
40
+ * items:
41
+ * $ref: "#/components/schemas/WardrobeItem"
42
+ * 401:
43
+ * description: Unauthorized
44
+ * 500:
45
+ * description: Server error
46
+ */
47
+ router.get("/", authenticateToken, async (req: AuthRequest, res) => {
48
+ try {
49
+ const userId = req.userId!;
50
+ const { style, q } = req.query as { style?: string; q?: string };
51
+
52
+ const repo = AppDataSource.getRepository(WardrobeItem);
53
+ const qb = repo
54
+ .createQueryBuilder("wardrobe_item")
55
+ .where("wardrobe_item.userId = :userId", { userId })
56
+ .orderBy("wardrobe_item.createdAt", "DESC");
57
+
58
+ if (style) {
59
+ qb.andWhere("wardrobe_item.style = :style", { style });
60
+ }
61
+ if (q) {
62
+ qb.andWhere("LOWER(wardrobe_item.category) LIKE :q", { q: `%${q.toLowerCase()}%` });
63
+ }
64
+
65
+ const items = await qb.getMany();
66
+ res.json({ success: true, items });
67
+ } catch (error: any) {
68
+ console.error("Wardrobe list error:", error);
69
+ res.status(500).json({ success: false, error: error.message || "Failed to fetch wardrobe" });
70
+ }
71
+ });
72
+
73
+ export default router;
74
+
75
+
stylegptUI CHANGED
@@ -1 +1 @@
1
- Subproject commit 2c2829b11d2df45586826648a426a326d0543978
 
1
+ Subproject commit cf8194c3d8c836c4a674be05d2fa2f00e3cce595