agentic-dev 0.2.9 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/README.md +23 -8
  2. package/bin/agentic-dev.mjs +692 -55
  3. package/lib/scaffold.mjs +109 -6
  4. package/package.json +1 -1
  5. package/client/admin/.dockerignore +0 -3
  6. package/client/admin/.env.example +0 -1
  7. package/client/admin/Dockerfile +0 -16
  8. package/client/admin/Dockerfile.dev +0 -18
  9. package/client/admin/README.md +0 -20
  10. package/client/admin/index.html +0 -12
  11. package/client/admin/package.json +0 -41
  12. package/client/admin/postcss.config.js +0 -6
  13. package/client/admin/scripts/ui-parity-admin-adapter.mjs +0 -65
  14. package/client/admin/src/api/alerts.ts +0 -33
  15. package/client/admin/src/api/client.ts +0 -71
  16. package/client/admin/src/api/orders.ts +0 -33
  17. package/client/admin/src/api/support.ts +0 -11
  18. package/client/admin/src/app/App.tsx +0 -23
  19. package/client/admin/src/auth/AuthProvider.tsx +0 -122
  20. package/client/admin/src/auth/ProtectedRoute.tsx +0 -22
  21. package/client/admin/src/auth/auth-client.ts +0 -38
  22. package/client/admin/src/auth/types.ts +0 -18
  23. package/client/admin/src/components/AdminNotificationsDrawer.tsx +0 -162
  24. package/client/admin/src/components/AdminShell.tsx +0 -76
  25. package/client/admin/src/components/ui/button.tsx +0 -34
  26. package/client/admin/src/components/ui/input.tsx +0 -21
  27. package/client/admin/src/lib/cn.ts +0 -6
  28. package/client/admin/src/lib/specRouteCatalog.json +0 -30
  29. package/client/admin/src/lib/specScreens.json +0 -22
  30. package/client/admin/src/main.tsx +0 -17
  31. package/client/admin/src/pages/AdminDashboardPage.tsx +0 -171
  32. package/client/admin/src/pages/AdminLoginPage.tsx +0 -75
  33. package/client/admin/src/pages/AdminQueuePage.tsx +0 -107
  34. package/client/admin/src/pages/AdminSupportPage.tsx +0 -61
  35. package/client/admin/src/styles/globals.css +0 -17
  36. package/client/admin/src/theme-vars.ts +0 -18
  37. package/client/admin/src/theme.ts +0 -25
  38. package/client/admin/src/vite-env.d.ts +0 -1
  39. package/client/admin/tailwind.config.js +0 -8
  40. package/client/admin/tsconfig.json +0 -25
  41. package/client/admin/vite.config.ts +0 -12
  42. package/client/landing/.dockerignore +0 -3
  43. package/client/landing/.env.example +0 -1
  44. package/client/landing/Dockerfile +0 -16
  45. package/client/landing/Dockerfile.dev +0 -18
  46. package/client/landing/README.md +0 -18
  47. package/client/landing/index.html +0 -12
  48. package/client/landing/package.json +0 -41
  49. package/client/landing/postcss.config.js +0 -6
  50. package/client/landing/scripts/ui-parity-landing-adapter.mjs +0 -65
  51. package/client/landing/src/App.tsx +0 -21
  52. package/client/landing/src/api/catalog.ts +0 -30
  53. package/client/landing/src/api/client.ts +0 -30
  54. package/client/landing/src/auth/AuthProvider.tsx +0 -122
  55. package/client/landing/src/auth/ProtectedRoute.tsx +0 -22
  56. package/client/landing/src/auth/auth-client.ts +0 -38
  57. package/client/landing/src/auth/types.ts +0 -18
  58. package/client/landing/src/components/LandingShell.tsx +0 -34
  59. package/client/landing/src/lib/specRouteCatalog.json +0 -23
  60. package/client/landing/src/lib/specScreens.json +0 -17
  61. package/client/landing/src/main.tsx +0 -17
  62. package/client/landing/src/pages/LandingHomePage.tsx +0 -215
  63. package/client/landing/src/pages/LandingLoginPage.tsx +0 -90
  64. package/client/landing/src/pages/LandingWorkspacePage.tsx +0 -126
  65. package/client/landing/src/styles/globals.css +0 -17
  66. package/client/landing/src/theme-vars.ts +0 -16
  67. package/client/landing/src/theme.ts +0 -21
  68. package/client/landing/src/vite-env.d.ts +0 -1
  69. package/client/landing/tailwind.config.js +0 -8
  70. package/client/landing/tsconfig.json +0 -25
  71. package/client/landing/vite.config.ts +0 -12
  72. package/client/mobile/.dockerignore +0 -2
  73. package/client/mobile/.env.example +0 -1
  74. package/client/mobile/Dockerfile +0 -16
  75. package/client/mobile/Dockerfile.dev +0 -18
  76. package/client/mobile/README.md +0 -19
  77. package/client/mobile/index.html +0 -12
  78. package/client/mobile/package.json +0 -42
  79. package/client/mobile/postcss.config.js +0 -6
  80. package/client/mobile/scripts/ui-parity-mobile-adapter.mjs +0 -67
  81. package/client/mobile/src/App.tsx +0 -1
  82. package/client/mobile/src/api/client.ts +0 -62
  83. package/client/mobile/src/api/fulfillment.ts +0 -55
  84. package/client/mobile/src/api/shipping.ts +0 -56
  85. package/client/mobile/src/app/App.tsx +0 -23
  86. package/client/mobile/src/auth/AuthProvider.tsx +0 -122
  87. package/client/mobile/src/auth/ProtectedRoute.tsx +0 -27
  88. package/client/mobile/src/auth/auth-client.ts +0 -38
  89. package/client/mobile/src/auth/types.ts +0 -18
  90. package/client/mobile/src/components/InShell.tsx +0 -74
  91. package/client/mobile/src/components/ui/button.tsx +0 -35
  92. package/client/mobile/src/components/ui/card.tsx +0 -15
  93. package/client/mobile/src/components/ui/input.tsx +0 -21
  94. package/client/mobile/src/lib/cn.ts +0 -6
  95. package/client/mobile/src/lib/specRouteCatalog.json +0 -26
  96. package/client/mobile/src/lib/specScreens.json +0 -22
  97. package/client/mobile/src/lib/useSpeechRecognitionInput.ts +0 -271
  98. package/client/mobile/src/main.tsx +0 -17
  99. package/client/mobile/src/pages/DashboardPage.tsx +0 -172
  100. package/client/mobile/src/pages/FulfillmentPage.tsx +0 -138
  101. package/client/mobile/src/pages/LoginPage.tsx +0 -74
  102. package/client/mobile/src/pages/ShippingPage.tsx +0 -338
  103. package/client/mobile/src/styles/globals.css +0 -23
  104. package/client/mobile/src/theme-vars.ts +0 -16
  105. package/client/mobile/src/theme.ts +0 -21
  106. package/client/mobile/src/vite-env.d.ts +0 -1
  107. package/client/mobile/tailwind.config.js +0 -8
  108. package/client/mobile/tsconfig.json +0 -25
  109. package/client/mobile/vite.config.ts +0 -12
  110. package/client/web/.dockerignore +0 -3
  111. package/client/web/.env.example +0 -1
  112. package/client/web/Dockerfile +0 -16
  113. package/client/web/Dockerfile.dev +0 -18
  114. package/client/web/README.md +0 -47
  115. package/client/web/index.html +0 -12
  116. package/client/web/package.json +0 -42
  117. package/client/web/postcss.config.js +0 -6
  118. package/client/web/scripts/ui-parity-web-adapter.mjs +0 -66
  119. package/client/web/src/api/client.ts +0 -30
  120. package/client/web/src/api/orders.ts +0 -42
  121. package/client/web/src/app/App.tsx +0 -21
  122. package/client/web/src/auth/AuthProvider.tsx +0 -122
  123. package/client/web/src/auth/ProtectedRoute.tsx +0 -22
  124. package/client/web/src/auth/auth-client.ts +0 -38
  125. package/client/web/src/auth/types.ts +0 -18
  126. package/client/web/src/components/AppShell.tsx +0 -59
  127. package/client/web/src/components/ui/button.tsx +0 -35
  128. package/client/web/src/components/ui/card.tsx +0 -7
  129. package/client/web/src/components/ui/input.tsx +0 -21
  130. package/client/web/src/lib/cn.ts +0 -6
  131. package/client/web/src/lib/specRouteCatalog.json +0 -23
  132. package/client/web/src/lib/specScreens.json +0 -17
  133. package/client/web/src/main.tsx +0 -17
  134. package/client/web/src/pages/DashboardPage.tsx +0 -158
  135. package/client/web/src/pages/LoginPage.tsx +0 -72
  136. package/client/web/src/pages/OrdersPage.tsx +0 -123
  137. package/client/web/src/styles/globals.css +0 -17
  138. package/client/web/src/theme-vars.ts +0 -18
  139. package/client/web/src/theme.ts +0 -25
  140. package/client/web/src/vite-env.d.ts +0 -1
  141. package/client/web/tailwind.config.js +0 -8
  142. package/client/web/tsconfig.json +0 -25
  143. package/client/web/vite.config.ts +0 -12
  144. package/server/.dockerignore +0 -4
  145. package/server/.env.example +0 -19
  146. package/server/Dockerfile +0 -22
  147. package/server/Dockerfile.dev +0 -19
  148. package/server/README.md +0 -33
  149. package/server/__init__.py +0 -0
  150. package/server/api/__init__.py +0 -1
  151. package/server/api/http/__init__.py +0 -4
  152. package/server/api/http/app.py +0 -53
  153. package/server/api/http/router.py +0 -24
  154. package/server/config.py +0 -52
  155. package/server/contexts/__init__.py +0 -12
  156. package/server/contexts/alerts/__init__.py +0 -1
  157. package/server/contexts/alerts/application/__init__.py +0 -13
  158. package/server/contexts/alerts/application/services.py +0 -41
  159. package/server/contexts/alerts/contracts/__init__.py +0 -3
  160. package/server/contexts/alerts/contracts/http/__init__.py +0 -3
  161. package/server/contexts/alerts/contracts/http/router.py +0 -37
  162. package/server/contexts/alerts/domain/__init__.py +0 -15
  163. package/server/contexts/alerts/domain/models.py +0 -29
  164. package/server/contexts/alerts/infrastructure/__init__.py +0 -11
  165. package/server/contexts/alerts/infrastructure/repository.py +0 -41
  166. package/server/contexts/auth/__init__.py +0 -1
  167. package/server/contexts/auth/application/__init__.py +0 -3
  168. package/server/contexts/auth/application/ports.py +0 -10
  169. package/server/contexts/auth/application/services.py +0 -64
  170. package/server/contexts/auth/contracts/__init__.py +0 -4
  171. package/server/contexts/auth/contracts/http/__init__.py +0 -4
  172. package/server/contexts/auth/contracts/http/dependencies.py +0 -37
  173. package/server/contexts/auth/contracts/http/router.py +0 -19
  174. package/server/contexts/auth/domain/__init__.py +0 -3
  175. package/server/contexts/auth/domain/models.py +0 -24
  176. package/server/contexts/auth/infrastructure/__init__.py +0 -4
  177. package/server/contexts/auth/infrastructure/adapters/memory.py +0 -19
  178. package/server/contexts/auth/infrastructure/adapters/mongodb.py +0 -24
  179. package/server/contexts/auth/infrastructure/adapters/sqlalchemy.py +0 -74
  180. package/server/contexts/auth/infrastructure/repository.py +0 -28
  181. package/server/contexts/catalog/__init__.py +0 -1
  182. package/server/contexts/catalog/application/__init__.py +0 -28
  183. package/server/contexts/catalog/application/ports.py +0 -15
  184. package/server/contexts/catalog/application/services.py +0 -154
  185. package/server/contexts/catalog/contracts/__init__.py +0 -3
  186. package/server/contexts/catalog/contracts/http/__init__.py +0 -3
  187. package/server/contexts/catalog/contracts/http/router.py +0 -60
  188. package/server/contexts/catalog/domain/__init__.py +0 -45
  189. package/server/contexts/catalog/domain/models.py +0 -113
  190. package/server/contexts/catalog/infrastructure/__init__.py +0 -4
  191. package/server/contexts/catalog/infrastructure/adapters/memory.py +0 -62
  192. package/server/contexts/catalog/infrastructure/repository.py +0 -8
  193. package/server/contexts/fulfillment/__init__.py +0 -1
  194. package/server/contexts/fulfillment/application/__init__.py +0 -13
  195. package/server/contexts/fulfillment/application/ports.py +0 -20
  196. package/server/contexts/fulfillment/application/services.py +0 -85
  197. package/server/contexts/fulfillment/contracts/__init__.py +0 -3
  198. package/server/contexts/fulfillment/contracts/http/__init__.py +0 -3
  199. package/server/contexts/fulfillment/contracts/http/router.py +0 -40
  200. package/server/contexts/fulfillment/domain/__init__.py +0 -25
  201. package/server/contexts/fulfillment/domain/models.py +0 -73
  202. package/server/contexts/fulfillment/infrastructure/__init__.py +0 -13
  203. package/server/contexts/fulfillment/infrastructure/adapters/memory.py +0 -43
  204. package/server/contexts/fulfillment/infrastructure/repository.py +0 -97
  205. package/server/contexts/health/__init__.py +0 -1
  206. package/server/contexts/health/application/__init__.py +0 -3
  207. package/server/contexts/health/application/services.py +0 -2
  208. package/server/contexts/health/contracts/__init__.py +0 -3
  209. package/server/contexts/health/contracts/http/__init__.py +0 -3
  210. package/server/contexts/health/contracts/http/router.py +0 -10
  211. package/server/contexts/inventory/__init__.py +0 -1
  212. package/server/contexts/inventory/application/__init__.py +0 -28
  213. package/server/contexts/inventory/application/ports.py +0 -11
  214. package/server/contexts/inventory/application/services.py +0 -214
  215. package/server/contexts/inventory/contracts/__init__.py +0 -3
  216. package/server/contexts/inventory/contracts/http/__init__.py +0 -3
  217. package/server/contexts/inventory/contracts/http/router.py +0 -82
  218. package/server/contexts/inventory/domain/__init__.py +0 -33
  219. package/server/contexts/inventory/domain/models.py +0 -93
  220. package/server/contexts/inventory/infrastructure/__init__.py +0 -4
  221. package/server/contexts/inventory/infrastructure/adapters/memory.py +0 -24
  222. package/server/contexts/inventory/infrastructure/repository.py +0 -8
  223. package/server/contexts/orders/__init__.py +0 -1
  224. package/server/contexts/orders/application/__init__.py +0 -19
  225. package/server/contexts/orders/application/services.py +0 -127
  226. package/server/contexts/orders/contracts/__init__.py +0 -3
  227. package/server/contexts/orders/contracts/http/__init__.py +0 -3
  228. package/server/contexts/orders/contracts/http/router.py +0 -82
  229. package/server/contexts/orders/domain/__init__.py +0 -29
  230. package/server/contexts/orders/domain/models.py +0 -95
  231. package/server/contexts/orders/infrastructure/__init__.py +0 -7
  232. package/server/contexts/orders/infrastructure/repository.py +0 -104
  233. package/server/contexts/shipping/__init__.py +0 -1
  234. package/server/contexts/shipping/application/__init__.py +0 -13
  235. package/server/contexts/shipping/application/services.py +0 -92
  236. package/server/contexts/shipping/contracts/__init__.py +0 -3
  237. package/server/contexts/shipping/contracts/http/__init__.py +0 -3
  238. package/server/contexts/shipping/contracts/http/router.py +0 -40
  239. package/server/contexts/shipping/domain/__init__.py +0 -19
  240. package/server/contexts/shipping/domain/models.py +0 -48
  241. package/server/contexts/shipping/infrastructure/__init__.py +0 -9
  242. package/server/contexts/shipping/infrastructure/repository.py +0 -50
  243. package/server/contexts/support/__init__.py +0 -1
  244. package/server/contexts/support/application/__init__.py +0 -13
  245. package/server/contexts/support/application/services.py +0 -29
  246. package/server/contexts/support/contracts/__init__.py +0 -3
  247. package/server/contexts/support/contracts/http/__init__.py +0 -3
  248. package/server/contexts/support/contracts/http/router.py +0 -40
  249. package/server/contexts/support/domain/__init__.py +0 -13
  250. package/server/contexts/support/domain/models.py +0 -27
  251. package/server/contexts/support/infrastructure/__init__.py +0 -11
  252. package/server/contexts/support/infrastructure/repository.py +0 -70
  253. package/server/contexts/user/__init__.py +0 -1
  254. package/server/contexts/user/application/__init__.py +0 -3
  255. package/server/contexts/user/application/ports.py +0 -11
  256. package/server/contexts/user/application/services.py +0 -44
  257. package/server/contexts/user/contracts/__init__.py +0 -3
  258. package/server/contexts/user/contracts/http/__init__.py +0 -3
  259. package/server/contexts/user/contracts/http/router.py +0 -26
  260. package/server/contexts/user/domain/__init__.py +0 -3
  261. package/server/contexts/user/domain/models.py +0 -22
  262. package/server/contexts/user/infrastructure/__init__.py +0 -3
  263. package/server/contexts/user/infrastructure/adapters/memory.py +0 -27
  264. package/server/contexts/user/infrastructure/adapters/mongodb.py +0 -41
  265. package/server/contexts/user/infrastructure/adapters/sqlalchemy.py +0 -94
  266. package/server/contexts/user/infrastructure/factory.py +0 -28
  267. package/server/data/README.md +0 -24
  268. package/server/data/bootstrap/alerts.json +0 -38
  269. package/server/data/bootstrap/auth_accounts.json +0 -18
  270. package/server/data/bootstrap/catalog_products.json +0 -179
  271. package/server/data/bootstrap/fulfillment_events.json +0 -5
  272. package/server/data/bootstrap/fulfillment_notes.json +0 -5
  273. package/server/data/bootstrap/fulfillment_tasks.json +0 -50
  274. package/server/data/bootstrap/inventory_levels.json +0 -80
  275. package/server/data/bootstrap/orders.json +0 -62
  276. package/server/data/bootstrap/shipping_shipments.json +0 -50
  277. package/server/data/bootstrap/support_faqs.json +0 -26
  278. package/server/data/bootstrap/users.json +0 -20
  279. package/server/data/bootstrap_loader.py +0 -15
  280. package/server/docker-entrypoint.sh +0 -56
  281. package/server/main.py +0 -3
  282. package/server/pyproject.toml +0 -36
  283. package/server/shared/__init__.py +0 -1
  284. package/server/shared/application/__init__.py +0 -3
  285. package/server/shared/application/health.py +0 -2
  286. package/server/shared/infrastructure/__init__.py +0 -10
  287. package/server/shared/infrastructure/runtime.py +0 -6
  288. package/server/shared/infrastructure/security.py +0 -33
  289. package/server/tests/e2e/test_domain_feature_flows.py +0 -483
  290. package/server/tests/test_health.py +0 -49
  291. package/server/uv.lock +0 -1169
@@ -1,41 +0,0 @@
1
- from pymongo import ASCENDING, MongoClient, ReturnDocument
2
-
3
- from contexts.user.domain import UserRecord, UserSummary
4
-
5
-
6
- class MongoUserRepository:
7
- def __init__(self, mongodb_url: str, database_name: str) -> None:
8
- self.client = MongoClient(mongodb_url)
9
- self.collection = self.client[database_name]["users"]
10
-
11
- def initialize(self) -> None:
12
- self.collection.create_index([("email", ASCENDING)], unique=True)
13
-
14
- def seed_users(self, users: list[UserRecord]) -> None:
15
- for user in users:
16
- self.collection.update_one({"id": user.id}, {"$set": user.model_dump()}, upsert=True)
17
-
18
- def get_by_id(self, user_id: str) -> UserRecord | None:
19
- record = self.collection.find_one({"id": user_id}, {"_id": 0})
20
- return UserRecord(**record) if record else None
21
-
22
- def list_summaries(self) -> list[UserSummary]:
23
- return [
24
- UserSummary(
25
- id=record["id"],
26
- name=record["name"],
27
- email=record["email"],
28
- role=record["role"],
29
- status=record["status"],
30
- )
31
- for record in self.collection.find({}, {"_id": 0}).sort("id", ASCENDING)
32
- ]
33
-
34
- def update_status(self, user_id: str, status: str) -> UserRecord | None:
35
- record = self.collection.find_one_and_update(
36
- {"id": user_id},
37
- {"$set": {"status": status}},
38
- return_document=ReturnDocument.AFTER,
39
- projection={"_id": 0},
40
- )
41
- return UserRecord(**record) if record else None
@@ -1,94 +0,0 @@
1
- from sqlalchemy import String, create_engine, select
2
- from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, sessionmaker
3
-
4
- from contexts.user.domain import UserRecord, UserSummary
5
-
6
-
7
- class Base(DeclarativeBase):
8
- pass
9
-
10
-
11
- class UserTable(Base):
12
- __tablename__ = "users"
13
-
14
- id: Mapped[str] = mapped_column(String(64), primary_key=True)
15
- name: Mapped[str] = mapped_column(String(128))
16
- email: Mapped[str] = mapped_column(String(255), unique=True, index=True)
17
- role: Mapped[str] = mapped_column(String(64))
18
- status: Mapped[str] = mapped_column(String(32))
19
- timezone: Mapped[str] = mapped_column(String(64))
20
- last_login_at: Mapped[str] = mapped_column(String(64))
21
-
22
-
23
- class SqlAlchemyUserRepository:
24
- def __init__(self, database_url: str) -> None:
25
- self.engine = create_engine(database_url, future=True)
26
- self.session_factory = sessionmaker(bind=self.engine, expire_on_commit=False)
27
-
28
- def initialize(self) -> None:
29
- Base.metadata.create_all(self.engine)
30
-
31
- def seed_users(self, users: list[UserRecord]) -> None:
32
- with self.session_factory() as session:
33
- for user in users:
34
- existing = session.get(UserTable, user.id)
35
- if existing is None:
36
- session.add(UserTable(**user.model_dump()))
37
- continue
38
- for field, value in user.model_dump().items():
39
- setattr(existing, field, value)
40
- session.commit()
41
-
42
- def get_by_id(self, user_id: str) -> UserRecord | None:
43
- with self.session_factory() as session:
44
- record = session.get(UserTable, user_id)
45
- return self._to_record(record)
46
-
47
- def list_summaries(self) -> list[UserSummary]:
48
- with self.session_factory() as session:
49
- records = session.scalars(select(UserTable).order_by(UserTable.id)).all()
50
- return [
51
- UserSummary(
52
- id=record.id,
53
- name=record.name,
54
- email=record.email,
55
- role=record.role,
56
- status=record.status,
57
- )
58
- for record in records
59
- ]
60
-
61
- def update_status(self, user_id: str, status: str) -> UserRecord | None:
62
- with self.session_factory() as session:
63
- record = session.get(UserTable, user_id)
64
- if record is None:
65
- return None
66
- record.status = status
67
- session.commit()
68
- return self._to_record(record)
69
-
70
- @staticmethod
71
- def _to_record(record: UserTable | None) -> UserRecord | None:
72
- if record is None:
73
- return None
74
- return UserRecord(
75
- id=record.id,
76
- name=record.name,
77
- email=record.email,
78
- role=record.role,
79
- status=record.status,
80
- timezone=record.timezone,
81
- last_login_at=record.last_login_at,
82
- )
83
-
84
-
85
- class PostgresUserRepository(SqlAlchemyUserRepository):
86
- pass
87
-
88
-
89
- class MySqlUserRepository(SqlAlchemyUserRepository):
90
- pass
91
-
92
-
93
- class MariaDbUserRepository(SqlAlchemyUserRepository):
94
- pass
@@ -1,28 +0,0 @@
1
- from functools import lru_cache
2
- from typing import TYPE_CHECKING
3
-
4
- from config import get_settings
5
- from contexts.user.infrastructure.adapters.memory import MemoryUserRepository
6
- from contexts.user.infrastructure.adapters.mongodb import MongoUserRepository
7
- from contexts.user.infrastructure.adapters.sqlalchemy import (
8
- MariaDbUserRepository,
9
- MySqlUserRepository,
10
- PostgresUserRepository,
11
- )
12
-
13
- if TYPE_CHECKING:
14
- from contexts.user.application.ports import UserRepository
15
-
16
-
17
- @lru_cache
18
- def get_user_repository() -> "UserRepository":
19
- settings = get_settings()
20
- if settings.database_backend == "postgres":
21
- return PostgresUserRepository(settings.postgres_url)
22
- if settings.database_backend == "mysql":
23
- return MySqlUserRepository(settings.mysql_url)
24
- if settings.database_backend == "mariadb":
25
- return MariaDbUserRepository(settings.mariadb_url)
26
- if settings.database_backend == "mongodb":
27
- return MongoUserRepository(settings.mongodb_url, settings.mongodb_database)
28
- return MemoryUserRepository()
@@ -1,24 +0,0 @@
1
- `data/`는 sample payload, fixture, seed data를 두는 루트다.
2
-
3
- 기본 정책:
4
-
5
- - domain/application logic는 `contexts/*`에 둔다
6
- - 재사용 가능한 fixture와 seed payload는 `data/`에 둔다
7
- - adapter별 local bootstrap 데이터도 이 루트에 둔다
8
-
9
- 현재 canonical bootstrap:
10
-
11
- - `bootstrap/auth_accounts.json`: auth credential/account bootstrap 원본
12
- - `bootstrap/users.json`: user profile bootstrap 원본
13
- - `bootstrap/catalog_products.json`: catalog product 원본
14
- - `bootstrap/inventory_levels.json`: inventory level 원본
15
- - `bootstrap/orders.json`: web/admin order surface 원본
16
- - `bootstrap/fulfillment_tasks.json`: mobile fulfillment board task 원본
17
- - `bootstrap/fulfillment_events.json`: mobile fulfillment timeline 원본
18
- - `bootstrap/fulfillment_notes.json`: mobile fulfillment note 원본
19
- - `bootstrap/support_faqs.json`: admin support surface 원본
20
-
21
- 규칙:
22
-
23
- - 코드 안에 seed 레코드를 하드코딩하지 않는다
24
- - memory/postgres/mysql/mariadb/mongodb adapter는 같은 `data/bootstrap/*` 원본을 consume한다
@@ -1,38 +0,0 @@
1
- [
2
- {
3
- "id": "alr-1001",
4
- "source": "orders",
5
- "title": "예외 검토 대기",
6
- "message": "주소 검증 보류 거래가 2건 누적되었습니다.",
7
- "tone": "danger",
8
- "created_at": "2026-03-14 09:12",
9
- "read": false
10
- },
11
- {
12
- "id": "alr-1002",
13
- "source": "shipping",
14
- "title": "배송 지연 감지",
15
- "message": "Hanjin 라인에서 지연 shipment가 1건 발생했습니다.",
16
- "tone": "warning",
17
- "created_at": "2026-03-14 08:40",
18
- "read": false
19
- },
20
- {
21
- "id": "alr-1003",
22
- "source": "inventory",
23
- "title": "안전재고 임계치",
24
- "message": "TSJ-BLK-S sku가 safety stock에 근접했습니다.",
25
- "tone": "neutral",
26
- "created_at": "2026-03-13 18:30",
27
- "read": false
28
- },
29
- {
30
- "id": "alr-1004",
31
- "source": "support",
32
- "title": "운영 지원 처리 완료",
33
- "message": "교환 문의 1건이 해결 처리되었습니다.",
34
- "tone": "neutral",
35
- "created_at": "2026-03-13 15:10",
36
- "read": true
37
- }
38
- ]
@@ -1,18 +0,0 @@
1
- [
2
- {
3
- "id": "user-1",
4
- "name": "Template Admin",
5
- "email": "admin@example.com",
6
- "role": "admin",
7
- "status": "active",
8
- "password_source": "bootstrap_admin_password"
9
- },
10
- {
11
- "id": "user-2",
12
- "name": "Template Operator",
13
- "email": "operator@example.com",
14
- "role": "operator",
15
- "status": "active",
16
- "password_source": "bootstrap_operator_password"
17
- }
18
- ]
@@ -1,179 +0,0 @@
1
- [
2
- {
3
- "id": "prd-1001",
4
- "slug": "trailshell-pack-jacket",
5
- "name": "TrailShell Pack Jacket",
6
- "brand": "Northstar Supply",
7
- "category": "outerwear",
8
- "status": "active",
9
- "short_description": "Waterproof shell that packs into its own chest pocket for commute-to-trail days.",
10
- "description": "TrailShell Pack Jacket pairs a lightweight recycled nylon shell with taped seams, two-way ventilation, and a stowaway hood. The silhouette is cut for layering and ships with durable trims built for wet-weather commuting.",
11
- "hero_image": {
12
- "url": "https://images.templates.dev/catalog/trailshell-pack-jacket/hero.jpg",
13
- "alt": "TrailShell Pack Jacket in basalt black"
14
- },
15
- "gallery": [
16
- {
17
- "url": "https://images.templates.dev/catalog/trailshell-pack-jacket/detail-1.jpg",
18
- "alt": "Front zipper and storm flap detail"
19
- },
20
- {
21
- "url": "https://images.templates.dev/catalog/trailshell-pack-jacket/detail-2.jpg",
22
- "alt": "Packable pocket configuration"
23
- }
24
- ],
25
- "price": {
26
- "amount": 189000,
27
- "currency": "KRW"
28
- },
29
- "compare_at_price": {
30
- "amount": 219000,
31
- "currency": "KRW"
32
- },
33
- "tags": ["best-seller", "spring-drop", "unisex"],
34
- "attributes": [
35
- {
36
- "name": "Material",
37
- "value": "100% recycled nylon shell"
38
- },
39
- {
40
- "name": "Waterproof rating",
41
- "value": "10,000 mm"
42
- },
43
- {
44
- "name": "Fit",
45
- "value": "Regular"
46
- }
47
- ],
48
- "variants": [
49
- {
50
- "sku": "TSJ-BLK-S",
51
- "name": "Basalt Black / S",
52
- "option_values": ["Basalt Black", "S"]
53
- },
54
- {
55
- "sku": "TSJ-BLK-M",
56
- "name": "Basalt Black / M",
57
- "option_values": ["Basalt Black", "M"]
58
- },
59
- {
60
- "sku": "TSJ-SGE-M",
61
- "name": "Sage / M",
62
- "option_values": ["Sage", "M"]
63
- }
64
- ],
65
- "created_at": "2026-03-01T09:00:00+09:00",
66
- "updated_at": "2026-03-10T11:40:00+09:00"
67
- },
68
- {
69
- "id": "prd-1002",
70
- "slug": "commuter-utility-sling",
71
- "name": "Commuter Utility Sling",
72
- "brand": "Harbor Line",
73
- "category": "bags",
74
- "status": "draft",
75
- "short_description": "Modular sling bag with removable organizer panels and hidden RFID pocket.",
76
- "description": "Commuter Utility Sling is designed for phones, keys, wallets, and compact cameras. The draft assortment includes two neutral colorways, a quick-adjust strap, and a wipe-clean coated lining for daily transit use.",
77
- "hero_image": {
78
- "url": "https://images.templates.dev/catalog/commuter-utility-sling/hero.jpg",
79
- "alt": "Commuter Utility Sling in sandstone"
80
- },
81
- "gallery": [
82
- {
83
- "url": "https://images.templates.dev/catalog/commuter-utility-sling/detail-1.jpg",
84
- "alt": "Removable organizer panel"
85
- },
86
- {
87
- "url": "https://images.templates.dev/catalog/commuter-utility-sling/detail-2.jpg",
88
- "alt": "Rear hidden RFID pocket"
89
- }
90
- ],
91
- "price": {
92
- "amount": 129000,
93
- "currency": "KRW"
94
- },
95
- "compare_at_price": null,
96
- "tags": ["pre-launch", "travel", "edc"],
97
- "attributes": [
98
- {
99
- "name": "Capacity",
100
- "value": "6 L"
101
- },
102
- {
103
- "name": "Shell",
104
- "value": "Waxed recycled polyester"
105
- },
106
- {
107
- "name": "Closure",
108
- "value": "Magnetic flap + zip"
109
- }
110
- ],
111
- "variants": [
112
- {
113
- "sku": "CUS-SND-STD",
114
- "name": "Sandstone / Standard",
115
- "option_values": ["Sandstone", "Standard"]
116
- },
117
- {
118
- "sku": "CUS-MOS-STD",
119
- "name": "Moss / Standard",
120
- "option_values": ["Moss", "Standard"]
121
- }
122
- ],
123
- "created_at": "2026-03-05T13:20:00+09:00",
124
- "updated_at": "2026-03-12T18:15:00+09:00"
125
- },
126
- {
127
- "id": "prd-1003",
128
- "slug": "fieldstone-thermal-mug",
129
- "name": "Fieldstone Thermal Mug",
130
- "brand": "Fieldhouse",
131
- "category": "drinkware",
132
- "status": "archived",
133
- "short_description": "Double-wall stoneware mug from a retired seasonal capsule with heat-lock lid.",
134
- "description": "Fieldstone Thermal Mug was released as part of the winter capsule and is now archived. Remaining stock is still serviceable for support workflows, with matte glaze options and a spill-resistant press lid.",
135
- "hero_image": {
136
- "url": "https://images.templates.dev/catalog/fieldstone-thermal-mug/hero.jpg",
137
- "alt": "Fieldstone Thermal Mug in ink blue"
138
- },
139
- "gallery": [
140
- {
141
- "url": "https://images.templates.dev/catalog/fieldstone-thermal-mug/detail-1.jpg",
142
- "alt": "Stoneware mug texture detail"
143
- }
144
- ],
145
- "price": {
146
- "amount": 42000,
147
- "currency": "KRW"
148
- },
149
- "compare_at_price": {
150
- "amount": 52000,
151
- "currency": "KRW"
152
- },
153
- "tags": ["archive", "winter-capsule"],
154
- "attributes": [
155
- {
156
- "name": "Capacity",
157
- "value": "355 ml"
158
- },
159
- {
160
- "name": "Finish",
161
- "value": "Matte glaze"
162
- }
163
- ],
164
- "variants": [
165
- {
166
- "sku": "FTM-INK-12OZ",
167
- "name": "Ink Blue / 12 oz",
168
- "option_values": ["Ink Blue", "12 oz"]
169
- },
170
- {
171
- "sku": "FTM-SND-12OZ",
172
- "name": "Sand / 12 oz",
173
- "option_values": ["Sand", "12 oz"]
174
- }
175
- ],
176
- "created_at": "2025-12-15T10:00:00+09:00",
177
- "updated_at": "2026-02-28T15:05:00+09:00"
178
- }
179
- ]
@@ -1,5 +0,0 @@
1
- [
2
- { "time": "09:05", "title": "Inbound slot capacity refreshed", "tone": "accent" },
3
- { "time": "10:15", "title": "Packing queue reprioritized for express orders", "tone": "warning" },
4
- { "time": "11:30", "title": "Outbound carrier window confirmed", "tone": "success" }
5
- ]
@@ -1,5 +0,0 @@
1
- [
2
- { "id": "fn-1", "note": "Blocked tasks should stay visible in the board header until cleared.", "emphasis": "warning" },
3
- { "id": "fn-2", "note": "Outbound handoff needs a tighter SLA once same-day carrier pickup goes live.", "emphasis": "accent" },
4
- { "id": "fn-3", "note": "Marketplace orders tend to create exception handling work in address verification.", "emphasis": "neutral" }
5
- ]
@@ -1,50 +0,0 @@
1
- [
2
- {
3
- "id": "ft-1",
4
- "order_id": "ORD-24051",
5
- "title": "Reserve inbound QA inspection slot",
6
- "assignee": "Warehouse A",
7
- "stage": "Inbound",
8
- "status": "Queued",
9
- "priority": "Critical",
10
- "channel": "Marketplace",
11
- "sla_minutes": 45,
12
- "units": 1
13
- },
14
- {
15
- "id": "ft-2",
16
- "order_id": "ORD-24052",
17
- "title": "Confirm packing checklist",
18
- "assignee": "Ops Desk",
19
- "stage": "Packing",
20
- "status": "In progress",
21
- "priority": "High",
22
- "channel": "Direct",
23
- "sla_minutes": 30,
24
- "units": 2
25
- },
26
- {
27
- "id": "ft-3",
28
- "order_id": "ORD-24053",
29
- "title": "Resolve address verification hold",
30
- "assignee": "Exception Desk",
31
- "stage": "Exception",
32
- "status": "Blocked",
33
- "priority": "Critical",
34
- "channel": "Marketplace",
35
- "sla_minutes": 20,
36
- "units": 1
37
- },
38
- {
39
- "id": "ft-4",
40
- "order_id": "ORD-24054",
41
- "title": "Hand off to outbound carrier",
42
- "assignee": "Dispatch",
43
- "stage": "Outbound",
44
- "status": "Queued",
45
- "priority": "Normal",
46
- "channel": "Direct",
47
- "sla_minutes": 60,
48
- "units": 1
49
- }
50
- ]
@@ -1,80 +0,0 @@
1
- [
2
- {
3
- "sku": "TSJ-BLK-S",
4
- "product_id": "prd-1001",
5
- "product_name": "TrailShell Pack Jacket",
6
- "variant_name": "Basalt Black / S",
7
- "location_id": "fc-seoul",
8
- "location_name": "Seoul Fulfillment Center",
9
- "on_hand": 18,
10
- "reserved": 3,
11
- "safety_stock": 4,
12
- "reorder_point": 8,
13
- "updated_at": "2026-03-13T08:30:00+09:00"
14
- },
15
- {
16
- "sku": "TSJ-BLK-M",
17
- "product_id": "prd-1001",
18
- "product_name": "TrailShell Pack Jacket",
19
- "variant_name": "Basalt Black / M",
20
- "location_id": "fc-seoul",
21
- "location_name": "Seoul Fulfillment Center",
22
- "on_hand": 6,
23
- "reserved": 1,
24
- "safety_stock": 4,
25
- "reorder_point": 8,
26
- "updated_at": "2026-03-13T08:32:00+09:00"
27
- },
28
- {
29
- "sku": "TSJ-SGE-M",
30
- "product_id": "prd-1001",
31
- "product_name": "TrailShell Pack Jacket",
32
- "variant_name": "Sage / M",
33
- "location_id": "fc-busan",
34
- "location_name": "Busan Overflow Hub",
35
- "on_hand": 11,
36
- "reserved": 2,
37
- "safety_stock": 3,
38
- "reorder_point": 6,
39
- "updated_at": "2026-03-13T09:10:00+09:00"
40
- },
41
- {
42
- "sku": "CUS-SND-STD",
43
- "product_id": "prd-1002",
44
- "product_name": "Commuter Utility Sling",
45
- "variant_name": "Sandstone / Standard",
46
- "location_id": "fc-incheon",
47
- "location_name": "Incheon Launch Warehouse",
48
- "on_hand": 24,
49
- "reserved": 0,
50
- "safety_stock": 5,
51
- "reorder_point": 10,
52
- "updated_at": "2026-03-13T07:45:00+09:00"
53
- },
54
- {
55
- "sku": "CUS-MOS-STD",
56
- "product_id": "prd-1002",
57
- "product_name": "Commuter Utility Sling",
58
- "variant_name": "Moss / Standard",
59
- "location_id": "fc-incheon",
60
- "location_name": "Incheon Launch Warehouse",
61
- "on_hand": 0,
62
- "reserved": 0,
63
- "safety_stock": 5,
64
- "reorder_point": 10,
65
- "updated_at": "2026-03-13T07:46:00+09:00"
66
- },
67
- {
68
- "sku": "FTM-INK-12OZ",
69
- "product_id": "prd-1003",
70
- "product_name": "Fieldstone Thermal Mug",
71
- "variant_name": "Ink Blue / 12 oz",
72
- "location_id": "fc-seoul",
73
- "location_name": "Seoul Fulfillment Center",
74
- "on_hand": 7,
75
- "reserved": 2,
76
- "safety_stock": 3,
77
- "reorder_point": 6,
78
- "updated_at": "2026-03-13T06:55:00+09:00"
79
- }
80
- ]
@@ -1,62 +0,0 @@
1
- [
2
- {
3
- "id": "ORD-24051",
4
- "product_id": "prd-1",
5
- "product_name": "Operations Console Starter",
6
- "customer_name": "Seoul Commerce",
7
- "seller_name": "Do4AI Mobility",
8
- "status": "Pending",
9
- "fulfillment_status": "Picking",
10
- "created_at": "2026.03.14",
11
- "amount_krw": 840000,
12
- "risk": "risk",
13
- "stage": "결제 대기",
14
- "sla": "45 min",
15
- "is_new_today": true
16
- },
17
- {
18
- "id": "ORD-24052",
19
- "product_id": "prd-2",
20
- "product_name": "Customer App Foundation",
21
- "customer_name": "Busan Retail Lab",
22
- "seller_name": "Do4AI Commerce",
23
- "status": "Paid",
24
- "fulfillment_status": "Shipping",
25
- "created_at": "2026.03.14",
26
- "amount_krw": 620000,
27
- "risk": "ok",
28
- "stage": "배송 준비",
29
- "sla": "70 min",
30
- "is_new_today": true
31
- },
32
- {
33
- "id": "ORD-24053",
34
- "product_id": "prd-3",
35
- "product_name": "Landing Funnel Experiment",
36
- "customer_name": "Growth Studio",
37
- "seller_name": "Growth Lab",
38
- "status": "At risk",
39
- "fulfillment_status": "Exception",
40
- "created_at": "2026.03.13",
41
- "amount_krw": 380000,
42
- "risk": "risk",
43
- "stage": "예외 검토",
44
- "sla": "120 min",
45
- "is_new_today": false
46
- },
47
- {
48
- "id": "ORD-24054",
49
- "product_id": "prd-1",
50
- "product_name": "Operations Console Starter",
51
- "customer_name": "West Hub Market",
52
- "seller_name": "Do4AI Mobility",
53
- "status": "Pending",
54
- "fulfillment_status": "Queued",
55
- "created_at": "2026.03.13",
56
- "amount_krw": 560000,
57
- "risk": "ok",
58
- "stage": "출고 대기",
59
- "sla": "55 min",
60
- "is_new_today": false
61
- }
62
- ]