@m5kdev/backend 0.1.3 → 0.1.5

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 (309) hide show
  1. package/dist/src/lib/posthog.d.ts +0 -1
  2. package/dist/src/lib/sentry.d.ts +0 -1
  3. package/dist/src/modules/access/access.repository.d.ts +0 -1
  4. package/dist/src/modules/access/access.service.d.ts +0 -1
  5. package/dist/src/modules/access/access.test.d.ts +0 -1
  6. package/dist/src/modules/access/access.utils.d.ts +0 -1
  7. package/dist/src/modules/ai/ai.db.d.ts +0 -1
  8. package/dist/src/modules/ai/ai.prompt.d.ts +0 -1
  9. package/dist/src/modules/ai/ai.repository.d.ts +0 -1
  10. package/dist/src/modules/ai/ai.router.d.ts +0 -1
  11. package/dist/src/modules/ai/ai.service.d.ts +0 -1
  12. package/dist/src/modules/ai/ai.trpc.d.ts +4 -5
  13. package/dist/src/modules/ai/ideogram/ideogram.constants.d.ts +0 -1
  14. package/dist/src/modules/ai/ideogram/ideogram.dto.d.ts +0 -1
  15. package/dist/src/modules/ai/ideogram/ideogram.prompt.d.ts +0 -1
  16. package/dist/src/modules/ai/ideogram/ideogram.repository.d.ts +0 -1
  17. package/dist/src/modules/ai/ideogram/ideogram.service.d.ts +0 -1
  18. package/dist/src/modules/auth/auth.db.d.ts +0 -1
  19. package/dist/src/modules/auth/auth.dto.d.ts +7 -8
  20. package/dist/src/modules/auth/auth.lib.d.ts +8 -9
  21. package/dist/src/modules/auth/auth.middleware.d.ts +0 -1
  22. package/dist/src/modules/auth/auth.repository.d.ts +0 -1
  23. package/dist/src/modules/auth/auth.service.d.ts +0 -1
  24. package/dist/src/modules/auth/auth.trpc.d.ts +17 -18
  25. package/dist/src/modules/auth/auth.utils.d.ts +0 -1
  26. package/dist/src/modules/base/base.abstract.d.ts +0 -1
  27. package/dist/src/modules/base/base.dto.d.ts +2 -3
  28. package/dist/src/modules/base/base.grants.d.ts +0 -1
  29. package/dist/src/modules/base/base.grants.test.d.ts +0 -1
  30. package/dist/src/modules/base/base.repository.d.ts +0 -1
  31. package/dist/src/modules/base/base.service.d.ts +0 -1
  32. package/dist/src/modules/base/base.types.d.ts +0 -1
  33. package/dist/src/modules/billing/billing.db.d.ts +0 -1
  34. package/dist/src/modules/billing/billing.repository.d.ts +0 -1
  35. package/dist/src/modules/billing/billing.router.d.ts +0 -1
  36. package/dist/src/modules/billing/billing.service.d.ts +0 -1
  37. package/dist/src/modules/billing/billing.trpc.d.ts +4 -5
  38. package/dist/src/modules/clay/clay.repository.d.ts +0 -1
  39. package/dist/src/modules/clay/clay.service.d.ts +0 -1
  40. package/dist/src/modules/connect/connect.db.d.ts +0 -1
  41. package/dist/src/modules/connect/connect.dto.d.ts +8 -9
  42. package/dist/src/modules/connect/connect.linkedin.d.ts +0 -1
  43. package/dist/src/modules/connect/connect.oauth.d.ts +0 -1
  44. package/dist/src/modules/connect/connect.repository.d.ts +3 -4
  45. package/dist/src/modules/connect/connect.router.d.ts +0 -1
  46. package/dist/src/modules/connect/connect.service.d.ts +6 -7
  47. package/dist/src/modules/connect/connect.trpc.d.ts +6 -7
  48. package/dist/src/modules/connect/connect.types.d.ts +0 -1
  49. package/dist/src/modules/crypto/crypto.db.d.ts +0 -1
  50. package/dist/src/modules/crypto/crypto.repository.d.ts +0 -1
  51. package/dist/src/modules/crypto/crypto.service.d.ts +0 -1
  52. package/dist/src/modules/email/email.service.d.ts +0 -1
  53. package/dist/src/modules/file/file.repository.d.ts +0 -1
  54. package/dist/src/modules/file/file.router.d.ts +0 -1
  55. package/dist/src/modules/file/file.service.d.ts +0 -1
  56. package/dist/src/modules/recurrence/recurrence.db.d.ts +0 -1
  57. package/dist/src/modules/recurrence/recurrence.repository.d.ts +0 -1
  58. package/dist/src/modules/recurrence/recurrence.service.d.ts +0 -1
  59. package/dist/src/modules/recurrence/recurrence.trpc.d.ts +5 -6
  60. package/dist/src/modules/social/social.dto.d.ts +0 -1
  61. package/dist/src/modules/social/social.linkedin.d.ts +0 -1
  62. package/dist/src/modules/social/social.linkedin.test.d.ts +0 -1
  63. package/dist/src/modules/social/social.service.d.ts +0 -1
  64. package/dist/src/modules/social/social.types.d.ts +0 -1
  65. package/dist/src/modules/tag/tag.db.d.ts +0 -1
  66. package/dist/src/modules/tag/tag.dto.d.ts +0 -1
  67. package/dist/src/modules/tag/tag.repository.d.ts +0 -1
  68. package/dist/src/modules/tag/tag.service.d.ts +0 -1
  69. package/dist/src/modules/tag/tag.trpc.d.ts +6 -7
  70. package/dist/src/modules/utils/applyPagination.d.ts +0 -1
  71. package/dist/src/modules/utils/applySorting.d.ts +0 -1
  72. package/dist/src/modules/utils/getConditionsFromFilters.d.ts +0 -1
  73. package/dist/src/modules/video/video.service.d.ts +0 -1
  74. package/dist/src/modules/webhook/webhook.constants.d.ts +0 -1
  75. package/dist/src/modules/webhook/webhook.db.d.ts +0 -1
  76. package/dist/src/modules/webhook/webhook.dto.d.ts +0 -1
  77. package/dist/src/modules/webhook/webhook.repository.d.ts +0 -1
  78. package/dist/src/modules/webhook/webhook.router.d.ts +0 -1
  79. package/dist/src/modules/webhook/webhook.service.d.ts +0 -1
  80. package/dist/src/modules/workflow/workflow.db.d.ts +0 -1
  81. package/dist/src/modules/workflow/workflow.repository.d.ts +0 -1
  82. package/dist/src/modules/workflow/workflow.service.d.ts +0 -1
  83. package/dist/src/modules/workflow/workflow.trpc.d.ts +4 -5
  84. package/dist/src/modules/workflow/workflow.types.d.ts +0 -1
  85. package/dist/src/modules/workflow/workflow.utils.d.ts +0 -1
  86. package/dist/src/test/stubs/utils.d.ts +0 -1
  87. package/dist/src/trpc/context.d.ts +4 -5
  88. package/dist/src/trpc/index.d.ts +0 -1
  89. package/dist/src/trpc/procedures.d.ts +24 -25
  90. package/dist/src/trpc/utils.d.ts +0 -1
  91. package/dist/src/types.d.ts +29 -30
  92. package/dist/src/utils/errors.d.ts +0 -1
  93. package/dist/src/utils/logger.d.ts +0 -1
  94. package/dist/src/utils/posthog.d.ts +0 -1
  95. package/dist/src/utils/types.d.ts +0 -1
  96. package/dist/tsconfig.tsbuildinfo +1 -1
  97. package/package.json +6 -3
  98. package/.cursor/rules/backend.mdc +0 -70
  99. package/.turbo/turbo-build.log +0 -5
  100. package/.turbo/turbo-check-types.log +0 -5
  101. package/.turbo/turbo-lint$colon$fix.log +0 -255
  102. package/CHANGELOG.md +0 -28
  103. package/dist/src/lib/posthog.d.ts.map +0 -1
  104. package/dist/src/lib/sentry.d.ts.map +0 -1
  105. package/dist/src/modules/access/access.repository.d.ts.map +0 -1
  106. package/dist/src/modules/access/access.service.d.ts.map +0 -1
  107. package/dist/src/modules/access/access.test.d.ts.map +0 -1
  108. package/dist/src/modules/access/access.utils.d.ts.map +0 -1
  109. package/dist/src/modules/ai/ai.db.d.ts.map +0 -1
  110. package/dist/src/modules/ai/ai.prompt.d.ts.map +0 -1
  111. package/dist/src/modules/ai/ai.repository.d.ts.map +0 -1
  112. package/dist/src/modules/ai/ai.router.d.ts.map +0 -1
  113. package/dist/src/modules/ai/ai.service.d.ts.map +0 -1
  114. package/dist/src/modules/ai/ai.trpc.d.ts.map +0 -1
  115. package/dist/src/modules/ai/ideogram/ideogram.constants.d.ts.map +0 -1
  116. package/dist/src/modules/ai/ideogram/ideogram.dto.d.ts.map +0 -1
  117. package/dist/src/modules/ai/ideogram/ideogram.prompt.d.ts.map +0 -1
  118. package/dist/src/modules/ai/ideogram/ideogram.repository.d.ts.map +0 -1
  119. package/dist/src/modules/ai/ideogram/ideogram.service.d.ts.map +0 -1
  120. package/dist/src/modules/auth/auth.db.d.ts.map +0 -1
  121. package/dist/src/modules/auth/auth.dto.d.ts.map +0 -1
  122. package/dist/src/modules/auth/auth.lib.d.ts.map +0 -1
  123. package/dist/src/modules/auth/auth.middleware.d.ts.map +0 -1
  124. package/dist/src/modules/auth/auth.repository.d.ts.map +0 -1
  125. package/dist/src/modules/auth/auth.service.d.ts.map +0 -1
  126. package/dist/src/modules/auth/auth.trpc.d.ts.map +0 -1
  127. package/dist/src/modules/auth/auth.utils.d.ts.map +0 -1
  128. package/dist/src/modules/base/base.abstract.d.ts.map +0 -1
  129. package/dist/src/modules/base/base.dto.d.ts.map +0 -1
  130. package/dist/src/modules/base/base.grants.d.ts.map +0 -1
  131. package/dist/src/modules/base/base.grants.test.d.ts.map +0 -1
  132. package/dist/src/modules/base/base.repository.d.ts.map +0 -1
  133. package/dist/src/modules/base/base.service.d.ts.map +0 -1
  134. package/dist/src/modules/base/base.types.d.ts.map +0 -1
  135. package/dist/src/modules/billing/billing.db.d.ts.map +0 -1
  136. package/dist/src/modules/billing/billing.repository.d.ts.map +0 -1
  137. package/dist/src/modules/billing/billing.router.d.ts.map +0 -1
  138. package/dist/src/modules/billing/billing.service.d.ts.map +0 -1
  139. package/dist/src/modules/billing/billing.trpc.d.ts.map +0 -1
  140. package/dist/src/modules/clay/clay.repository.d.ts.map +0 -1
  141. package/dist/src/modules/clay/clay.service.d.ts.map +0 -1
  142. package/dist/src/modules/connect/connect.db.d.ts.map +0 -1
  143. package/dist/src/modules/connect/connect.dto.d.ts.map +0 -1
  144. package/dist/src/modules/connect/connect.linkedin.d.ts.map +0 -1
  145. package/dist/src/modules/connect/connect.oauth.d.ts.map +0 -1
  146. package/dist/src/modules/connect/connect.repository.d.ts.map +0 -1
  147. package/dist/src/modules/connect/connect.router.d.ts.map +0 -1
  148. package/dist/src/modules/connect/connect.service.d.ts.map +0 -1
  149. package/dist/src/modules/connect/connect.trpc.d.ts.map +0 -1
  150. package/dist/src/modules/connect/connect.types.d.ts.map +0 -1
  151. package/dist/src/modules/crypto/crypto.db.d.ts.map +0 -1
  152. package/dist/src/modules/crypto/crypto.repository.d.ts.map +0 -1
  153. package/dist/src/modules/crypto/crypto.service.d.ts.map +0 -1
  154. package/dist/src/modules/email/email.service.d.ts.map +0 -1
  155. package/dist/src/modules/file/file.repository.d.ts.map +0 -1
  156. package/dist/src/modules/file/file.router.d.ts.map +0 -1
  157. package/dist/src/modules/file/file.service.d.ts.map +0 -1
  158. package/dist/src/modules/recurrence/recurrence.db.d.ts.map +0 -1
  159. package/dist/src/modules/recurrence/recurrence.repository.d.ts.map +0 -1
  160. package/dist/src/modules/recurrence/recurrence.service.d.ts.map +0 -1
  161. package/dist/src/modules/recurrence/recurrence.trpc.d.ts.map +0 -1
  162. package/dist/src/modules/social/social.dto.d.ts.map +0 -1
  163. package/dist/src/modules/social/social.linkedin.d.ts.map +0 -1
  164. package/dist/src/modules/social/social.linkedin.test.d.ts.map +0 -1
  165. package/dist/src/modules/social/social.service.d.ts.map +0 -1
  166. package/dist/src/modules/social/social.types.d.ts.map +0 -1
  167. package/dist/src/modules/tag/tag.db.d.ts.map +0 -1
  168. package/dist/src/modules/tag/tag.dto.d.ts.map +0 -1
  169. package/dist/src/modules/tag/tag.repository.d.ts.map +0 -1
  170. package/dist/src/modules/tag/tag.service.d.ts.map +0 -1
  171. package/dist/src/modules/tag/tag.trpc.d.ts.map +0 -1
  172. package/dist/src/modules/utils/applyPagination.d.ts.map +0 -1
  173. package/dist/src/modules/utils/applySorting.d.ts.map +0 -1
  174. package/dist/src/modules/utils/getConditionsFromFilters.d.ts.map +0 -1
  175. package/dist/src/modules/video/video.service.d.ts.map +0 -1
  176. package/dist/src/modules/webhook/webhook.constants.d.ts.map +0 -1
  177. package/dist/src/modules/webhook/webhook.db.d.ts.map +0 -1
  178. package/dist/src/modules/webhook/webhook.dto.d.ts.map +0 -1
  179. package/dist/src/modules/webhook/webhook.repository.d.ts.map +0 -1
  180. package/dist/src/modules/webhook/webhook.router.d.ts.map +0 -1
  181. package/dist/src/modules/webhook/webhook.service.d.ts.map +0 -1
  182. package/dist/src/modules/workflow/workflow.db.d.ts.map +0 -1
  183. package/dist/src/modules/workflow/workflow.repository.d.ts.map +0 -1
  184. package/dist/src/modules/workflow/workflow.service.d.ts.map +0 -1
  185. package/dist/src/modules/workflow/workflow.trpc.d.ts.map +0 -1
  186. package/dist/src/modules/workflow/workflow.types.d.ts.map +0 -1
  187. package/dist/src/modules/workflow/workflow.utils.d.ts.map +0 -1
  188. package/dist/src/test/stubs/utils.d.ts.map +0 -1
  189. package/dist/src/trpc/context.d.ts.map +0 -1
  190. package/dist/src/trpc/index.d.ts.map +0 -1
  191. package/dist/src/trpc/procedures.d.ts.map +0 -1
  192. package/dist/src/trpc/utils.d.ts.map +0 -1
  193. package/dist/src/types.d.ts.map +0 -1
  194. package/dist/src/utils/errors.d.ts.map +0 -1
  195. package/dist/src/utils/logger.d.ts.map +0 -1
  196. package/dist/src/utils/posthog.d.ts.map +0 -1
  197. package/dist/src/utils/types.d.ts.map +0 -1
  198. package/jest.config.ts +0 -19
  199. package/src/lib/posthog.ts +0 -5
  200. package/src/lib/sentry.ts +0 -8
  201. package/src/modules/access/access.repository.ts +0 -36
  202. package/src/modules/access/access.service.ts +0 -81
  203. package/src/modules/access/access.test.ts +0 -216
  204. package/src/modules/access/access.utils.ts +0 -46
  205. package/src/modules/ai/ai.db.ts +0 -38
  206. package/src/modules/ai/ai.prompt.ts +0 -47
  207. package/src/modules/ai/ai.repository.ts +0 -53
  208. package/src/modules/ai/ai.router.ts +0 -148
  209. package/src/modules/ai/ai.service.ts +0 -310
  210. package/src/modules/ai/ai.trpc.ts +0 -22
  211. package/src/modules/ai/ideogram/ideogram.constants.ts +0 -170
  212. package/src/modules/ai/ideogram/ideogram.dto.ts +0 -64
  213. package/src/modules/ai/ideogram/ideogram.prompt.ts +0 -858
  214. package/src/modules/ai/ideogram/ideogram.repository.ts +0 -39
  215. package/src/modules/ai/ideogram/ideogram.service.ts +0 -14
  216. package/src/modules/auth/auth.db.ts +0 -224
  217. package/src/modules/auth/auth.dto.ts +0 -47
  218. package/src/modules/auth/auth.lib.ts +0 -349
  219. package/src/modules/auth/auth.middleware.ts +0 -62
  220. package/src/modules/auth/auth.repository.ts +0 -672
  221. package/src/modules/auth/auth.service.ts +0 -261
  222. package/src/modules/auth/auth.trpc.ts +0 -208
  223. package/src/modules/auth/auth.utils.ts +0 -117
  224. package/src/modules/base/base.abstract.ts +0 -62
  225. package/src/modules/base/base.dto.ts +0 -206
  226. package/src/modules/base/base.grants.test.ts +0 -861
  227. package/src/modules/base/base.grants.ts +0 -199
  228. package/src/modules/base/base.repository.ts +0 -433
  229. package/src/modules/base/base.service.ts +0 -154
  230. package/src/modules/base/base.types.ts +0 -7
  231. package/src/modules/billing/billing.db.ts +0 -27
  232. package/src/modules/billing/billing.repository.ts +0 -328
  233. package/src/modules/billing/billing.router.ts +0 -77
  234. package/src/modules/billing/billing.service.ts +0 -177
  235. package/src/modules/billing/billing.trpc.ts +0 -17
  236. package/src/modules/clay/clay.repository.ts +0 -29
  237. package/src/modules/clay/clay.service.ts +0 -61
  238. package/src/modules/connect/connect.db.ts +0 -32
  239. package/src/modules/connect/connect.dto.ts +0 -44
  240. package/src/modules/connect/connect.linkedin.ts +0 -70
  241. package/src/modules/connect/connect.oauth.ts +0 -288
  242. package/src/modules/connect/connect.repository.ts +0 -65
  243. package/src/modules/connect/connect.router.ts +0 -76
  244. package/src/modules/connect/connect.service.ts +0 -171
  245. package/src/modules/connect/connect.trpc.ts +0 -26
  246. package/src/modules/connect/connect.types.ts +0 -27
  247. package/src/modules/crypto/crypto.db.ts +0 -15
  248. package/src/modules/crypto/crypto.repository.ts +0 -13
  249. package/src/modules/crypto/crypto.service.ts +0 -57
  250. package/src/modules/email/email.service.ts +0 -222
  251. package/src/modules/file/file.repository.ts +0 -95
  252. package/src/modules/file/file.router.ts +0 -108
  253. package/src/modules/file/file.service.ts +0 -186
  254. package/src/modules/recurrence/recurrence.db.ts +0 -79
  255. package/src/modules/recurrence/recurrence.repository.ts +0 -70
  256. package/src/modules/recurrence/recurrence.service.ts +0 -105
  257. package/src/modules/recurrence/recurrence.trpc.ts +0 -82
  258. package/src/modules/social/social.dto.ts +0 -22
  259. package/src/modules/social/social.linkedin.test.ts +0 -277
  260. package/src/modules/social/social.linkedin.ts +0 -593
  261. package/src/modules/social/social.service.ts +0 -112
  262. package/src/modules/social/social.types.ts +0 -43
  263. package/src/modules/tag/tag.db.ts +0 -41
  264. package/src/modules/tag/tag.dto.ts +0 -18
  265. package/src/modules/tag/tag.repository.ts +0 -222
  266. package/src/modules/tag/tag.service.ts +0 -48
  267. package/src/modules/tag/tag.trpc.ts +0 -62
  268. package/src/modules/uploads/0581796b-8845-420d-bd95-cd7de79f6d37.webm +0 -0
  269. package/src/modules/uploads/33b1e649-6727-4bd0-94d0-a0b363646865.webm +0 -0
  270. package/src/modules/uploads/49a8c4c0-54d7-4c94-bef4-c93c029f9ed0.webm +0 -0
  271. package/src/modules/uploads/50e31e38-a2f0-47ca-8b7d-2d7fcad9267d.webm +0 -0
  272. package/src/modules/uploads/72ac8cf9-c3a7-4cd8-8a78-6d8e137a4c7e.webm +0 -0
  273. package/src/modules/uploads/75293649-d966-46cd-a675-67518958ae9c.png +0 -0
  274. package/src/modules/uploads/88b7b867-ce15-4891-bf73-81305a7de1f7.wav +0 -0
  275. package/src/modules/uploads/a5d6fee8-6a59-42c6-9d4a-ac8a3c5e7245.webm +0 -0
  276. package/src/modules/uploads/c13a9785-ca5a-4983-af30-b338ed76d370.webm +0 -0
  277. package/src/modules/uploads/caa1a5a7-71ba-4381-902d-7e2cafdf6dcb.webm +0 -0
  278. package/src/modules/uploads/cbeb0b81-374d-445b-914b-40ace7c8e031.webm +0 -0
  279. package/src/modules/uploads/d626aa82-b10f-493f-aee7-87bfb3361dfc.webm +0 -0
  280. package/src/modules/uploads/d7de4c16-de0c-495d-9612-e72260a6ecca.png +0 -0
  281. package/src/modules/uploads/e532e38a-6421-400e-8a5f-8e7bc8ce411b.wav +0 -0
  282. package/src/modules/uploads/e86ec867-6adf-4c51-84e0-00b0836625e8.webm +0 -0
  283. package/src/modules/utils/applyPagination.ts +0 -13
  284. package/src/modules/utils/applySorting.ts +0 -21
  285. package/src/modules/utils/getConditionsFromFilters.ts +0 -216
  286. package/src/modules/video/video.service.ts +0 -89
  287. package/src/modules/webhook/webhook.constants.ts +0 -9
  288. package/src/modules/webhook/webhook.db.ts +0 -15
  289. package/src/modules/webhook/webhook.dto.ts +0 -9
  290. package/src/modules/webhook/webhook.repository.ts +0 -68
  291. package/src/modules/webhook/webhook.router.ts +0 -29
  292. package/src/modules/webhook/webhook.service.ts +0 -78
  293. package/src/modules/workflow/workflow.db.ts +0 -29
  294. package/src/modules/workflow/workflow.repository.ts +0 -171
  295. package/src/modules/workflow/workflow.service.ts +0 -56
  296. package/src/modules/workflow/workflow.trpc.ts +0 -26
  297. package/src/modules/workflow/workflow.types.ts +0 -30
  298. package/src/modules/workflow/workflow.utils.ts +0 -259
  299. package/src/test/stubs/utils.ts +0 -2
  300. package/src/trpc/context.ts +0 -21
  301. package/src/trpc/index.ts +0 -3
  302. package/src/trpc/procedures.ts +0 -43
  303. package/src/trpc/utils.ts +0 -20
  304. package/src/types.ts +0 -22
  305. package/src/utils/errors.ts +0 -148
  306. package/src/utils/logger.ts +0 -8
  307. package/src/utils/posthog.ts +0 -43
  308. package/src/utils/types.ts +0 -5
  309. package/tsconfig.json +0 -21
@@ -1,43 +0,0 @@
1
- import type { ConnectRow } from "#modules/connect/connect.repository";
2
- import type { FileService } from "#modules/file/file.service";
3
-
4
- export type SocialMediaType = "image" | "video" | "document";
5
-
6
- export interface SocialMediaDescriptor {
7
- readonly s3Path: string;
8
- readonly mediaType?: SocialMediaType;
9
- readonly title?: string;
10
- readonly description?: string;
11
- }
12
-
13
- export type SocialVisibility = "PUBLIC" | "CONNECTIONS";
14
-
15
- export interface SocialPostPayload {
16
- readonly text: string;
17
- readonly media?: readonly SocialMediaDescriptor[];
18
- readonly visibility: SocialVisibility;
19
- }
20
-
21
- export interface SocialProviderContext {
22
- readonly userId: string;
23
- readonly connection: ConnectRow;
24
- readonly accessToken: string;
25
- }
26
-
27
- export interface SocialProviderDeps {
28
- readonly fileService: FileService;
29
- }
30
-
31
- export interface SocialPostResult {
32
- readonly shareUrn?: string;
33
- readonly rawResponse?: unknown;
34
- }
35
-
36
- export interface SocialProvider {
37
- readonly id: string;
38
- post(options: {
39
- deps: SocialProviderDeps;
40
- context: SocialProviderContext;
41
- payload: SocialPostPayload;
42
- }): Promise<SocialPostResult>;
43
- }
@@ -1,41 +0,0 @@
1
- import { type AnySQLiteColumn, integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
2
- import { v4 as uuidv4 } from "uuid";
3
- import { organizations, teams, users } from "#modules/auth/auth.db";
4
-
5
- export const tags = sqliteTable("tags", {
6
- id: text("id").primaryKey().$default(uuidv4),
7
- createdAt: integer("created_at", { mode: "timestamp" })
8
- .notNull()
9
- .$default(() => new Date()),
10
- updatedAt: integer("updated_at", { mode: "timestamp" }),
11
- deletedAt: integer("deleted_at", { mode: "timestamp" }),
12
- userId: text("user_id")
13
- .notNull()
14
- .references(() => users.id, { onDelete: "cascade" }),
15
- organizationId: text("organization_id").references(() => organizations.id, {
16
- onDelete: "cascade",
17
- }),
18
- teamId: text("team_id").references(() => teams.id, { onDelete: "cascade" }),
19
- name: text("name").notNull(),
20
- color: text("color"),
21
- type: text("type"),
22
- isEnabled: integer("is_enabled", { mode: "boolean" }).notNull().default(true),
23
- parentId: text("parent_id").references((): AnySQLiteColumn => tags.id, { onDelete: "set null" }),
24
- assignableTo: text("assignable_to", {
25
- mode: "json",
26
- })
27
- .notNull()
28
- .$type<string[]>(),
29
- });
30
-
31
- export const taggings = sqliteTable("taggings", {
32
- id: text("id").primaryKey().$default(uuidv4),
33
- createdAt: integer("created_at", { mode: "timestamp" })
34
- .notNull()
35
- .$default(() => new Date()),
36
- tagId: text("tag_id")
37
- .notNull()
38
- .references(() => tags.id),
39
- resourceType: text("resource_type").notNull(), // e.g., "post", "image"
40
- resourceId: text("resource_id").notNull(), // id in the resource table
41
- });
@@ -1,18 +0,0 @@
1
- import type { Result } from "neverthrow";
2
- import type { z } from "zod";
3
- import { createSelectDTO } from "#modules/base/base.dto";
4
- import { taggings, tags } from "#modules/tag/tag.db";
5
- import type { ServerError } from "#utils/errors";
6
-
7
- export const tagsSelectDTO = createSelectDTO(tags);
8
- export const taggingsSelectDTO = createSelectDTO(taggings);
9
-
10
- export const tagsSelectOutput = tagsSelectDTO.schema;
11
- export const taggingsSelectOutput = taggingsSelectDTO.schema;
12
-
13
- export type TagSelectOutputResult = Result<z.infer<typeof tagsSelectOutput>, ServerError>;
14
- export type TaggingSelectOutputResult = Result<z.infer<typeof taggingsSelectOutput>, ServerError>;
15
- export type TaggingSelectOutputResults = Result<
16
- z.infer<typeof taggingsSelectOutput>[],
17
- ServerError
18
- >;
@@ -1,222 +0,0 @@
1
- import type {
2
- TaggingSchema,
3
- TagLinkSchema,
4
- TagListInputSchema,
5
- TagListSchema,
6
- TagSchema,
7
- } from "@m5kdev/commons/modules/tag/tag.schema";
8
- import { and, count, eq, inArray } from "drizzle-orm";
9
- import type { LibSQLDatabase } from "drizzle-orm/libsql";
10
- import { err, ok } from "neverthrow";
11
- import type { ServerResultAsync } from "#modules/base/base.dto";
12
- import { BaseTableRepository } from "#modules/base/base.repository";
13
- import * as tag from "#modules/tag/tag.db";
14
- import type { TaggingSelectOutputResult, TagSelectOutputResult } from "#modules/tag/tag.dto";
15
-
16
- const schema = { ...tag };
17
- type Schema = typeof schema;
18
- type Orm = LibSQLDatabase<Schema>;
19
-
20
- export class TagRepository extends BaseTableRepository<
21
- Orm,
22
- Schema,
23
- Record<string, never>,
24
- Schema["tags"]
25
- > {
26
- async link(
27
- { userId, ...data }: TagLinkSchema & { userId: string },
28
- tx?: Orm
29
- ): Promise<TaggingSelectOutputResult> {
30
- return this.throwableAsync(async () => {
31
- const db = tx ?? this.orm;
32
- const [foundTag] = await db
33
- .select({ id: this.schema.tags.id })
34
- .from(this.schema.tags)
35
- .where(and(eq(this.schema.tags.id, data.tagId), eq(this.schema.tags.userId, userId)))
36
- .limit(1);
37
- if (!foundTag) return this.error("FORBIDDEN");
38
-
39
- const [tagging] = await db
40
- .insert(this.schema.taggings)
41
- .values({ ...data, tagId: foundTag.id })
42
- .returning();
43
- if (!tagging) return this.error("NOT_FOUND");
44
- return ok(tagging);
45
- });
46
- }
47
-
48
- async linkBulk(data: TagLinkSchema[], tx?: Orm): ServerResultAsync<TagSchema[]> {
49
- return this.throwableAsync(async () => {
50
- const db = tx ?? this.orm;
51
- await db.insert(this.schema.taggings).values(data);
52
- const tags = await db
53
- .select()
54
- .from(this.schema.tags)
55
- .where(
56
- inArray(
57
- this.schema.tags.id,
58
- data.map((tag) => tag.tagId)
59
- )
60
- );
61
- return ok(tags);
62
- });
63
- }
64
-
65
- async set(data: TagLinkSchema[], tx?: Orm): ServerResultAsync<TagSchema[]> {
66
- return this.throwableAsync(async () => {
67
- const db = tx ?? this.orm;
68
- const result = await db.transaction(async (trx) => {
69
- // FIXME: We are assuming that all resourceIds are the same, this is not a good assumption.
70
- await trx
71
- .delete(this.schema.taggings)
72
- .where(eq(this.schema.taggings.resourceId, data[0].resourceId));
73
- await db.insert(this.schema.taggings).values(data);
74
- const tags = await db
75
- .select()
76
- .from(this.schema.tags)
77
- .where(
78
- inArray(
79
- this.schema.tags.id,
80
- data.map((tag) => tag.tagId)
81
- )
82
- );
83
- return tags;
84
- });
85
- return ok(result);
86
- });
87
- }
88
-
89
- async unlink(
90
- { userId, ...data }: TagLinkSchema & { userId: string },
91
- tx?: Orm
92
- ): Promise<TagSelectOutputResult> {
93
- return this.throwableAsync(async () => {
94
- const db = tx ?? this.orm;
95
- const [foundTag] = await db
96
- .select()
97
- .from(this.schema.tags)
98
- .where(and(eq(this.schema.tags.id, data.tagId), eq(this.schema.tags.userId, userId)))
99
- .limit(1);
100
- if (!foundTag) return this.error("FORBIDDEN");
101
-
102
- await db
103
- .delete(this.schema.taggings)
104
- .where(
105
- and(
106
- eq(this.schema.taggings.tagId, data.tagId),
107
- eq(this.schema.taggings.resourceId, data.resourceId),
108
- eq(this.schema.taggings.resourceType, data.resourceType)
109
- )
110
- );
111
-
112
- return ok(foundTag);
113
- });
114
- }
115
-
116
- async findTagsForResources(
117
- data: { resourceType: string; resourceIds: readonly string[] },
118
- tx?: Orm
119
- ): ServerResultAsync<Record<string, TagSchema[]>> {
120
- return this.throwableAsync(async () => {
121
- const db = tx ?? this.orm;
122
- if (data.resourceIds.length === 0) return ok({});
123
-
124
- const taggings = await db
125
- .select({
126
- resourceId: this.schema.taggings.resourceId,
127
- tagId: this.schema.taggings.tagId,
128
- })
129
- .from(this.schema.taggings)
130
- .where(
131
- and(
132
- eq(this.schema.taggings.resourceType, data.resourceType),
133
- inArray(this.schema.taggings.resourceId, data.resourceIds as string[])
134
- )
135
- );
136
-
137
- if (taggings.length === 0) return ok({});
138
-
139
- const tagIds = Array.from(new Set(taggings.map((tagging) => tagging.tagId)));
140
- const tags = await db
141
- .select()
142
- .from(this.schema.tags)
143
- .where(inArray(this.schema.tags.id, tagIds));
144
-
145
- const tagById = tags.reduce<Record<string, TagSchema>>((acc, tagRow) => {
146
- acc[tagRow.id] = tagRow;
147
- return acc;
148
- }, {});
149
-
150
- const grouped = taggings.reduce<Record<string, TagSchema[]>>((acc, tagging) => {
151
- const tagRow = tagById[tagging.tagId];
152
- if (!tagRow) return acc;
153
- const existing = acc[tagging.resourceId] ?? [];
154
- acc[tagging.resourceId] = [...existing, tagRow];
155
- return acc;
156
- }, {});
157
-
158
- return ok(grouped);
159
- });
160
- }
161
-
162
- async attachTagsToResources<TRow extends { id: string }>(
163
- resourceType: string,
164
- rows: readonly TRow[],
165
- tx?: Orm
166
- ): ServerResultAsync<Array<TRow & { tags: TagSchema[] }>> {
167
- return this.throwableAsync(async () => {
168
- if (rows.length === 0) return ok([]);
169
- const tagsResult = await this.findTagsForResources(
170
- { resourceType, resourceIds: rows.map((row) => row.id) },
171
- tx
172
- );
173
- if (tagsResult.isErr()) return err(tagsResult.error);
174
- const tagsByResource = tagsResult.value;
175
- const withTags = rows.map((row) => ({
176
- ...row,
177
- tags: tagsByResource[row.id] ?? [],
178
- }));
179
- return ok(withTags);
180
- });
181
- }
182
-
183
- async listTaggings(
184
- input: { resourceType: string; resourceIds?: readonly string[] },
185
- tx?: Orm
186
- ): ServerResultAsync<TaggingSchema[]> {
187
- return this.throwableAsync(async () => {
188
- const db = tx ?? this.orm;
189
- const filters = [eq(this.schema.taggings.resourceType, input.resourceType)];
190
- if (input.resourceIds?.length) {
191
- filters.push(inArray(this.schema.taggings.resourceId, input.resourceIds as string[]));
192
- }
193
- const rows = await db
194
- .select()
195
- .from(this.schema.taggings)
196
- .where(and(...filters));
197
- return ok(rows);
198
- });
199
- }
200
-
201
- async list(
202
- input: (TagListInputSchema & TagListSchema) | undefined,
203
- tx?: Orm
204
- ): ServerResultAsync<{ rows: TagSchema[]; total: number }> {
205
- return this.throwableAsync(async () => {
206
- const db = tx ?? this.orm;
207
- const conditions = this.getConditionBuilder(this.table);
208
- conditions.applyFilters(input);
209
- if (input?.assignableTo) {
210
- conditions.push(this.helpers.arrayContains(this.table.assignableTo, [input.assignableTo]));
211
- }
212
- const whereClause = conditions.join();
213
- const rowsQuery = this.withSortingAndPagination(
214
- db.select().from(this.table).where(whereClause),
215
- input || {}
216
- );
217
- const countQuery = db.select({ count: count() }).from(this.table).where(whereClause);
218
- const [rows, [totalResult]] = await Promise.all([rowsQuery, countQuery]);
219
- return ok({ rows, total: totalResult?.count ?? 0 });
220
- });
221
- }
222
- }
@@ -1,48 +0,0 @@
1
- import type {
2
- TagCreateSchema,
3
- TagLinkSchema,
4
- TagListInputSchema,
5
- TagListOutputSchema,
6
- TagListSchema,
7
- TagSchema,
8
- TagUpdateSchema,
9
- } from "@m5kdev/commons/modules/tag/tag.schema";
10
- import type { User } from "#modules/auth/auth.lib";
11
- import type { ServerResultAsync } from "#modules/base/base.dto";
12
- import { BaseService } from "#modules/base/base.service";
13
- import type { TaggingSelectOutputResult, TagSelectOutputResult } from "#modules/tag/tag.dto";
14
- import type { TagRepository } from "#modules/tag/tag.repository";
15
-
16
- export class TagService extends BaseService<{ tag: TagRepository }, Record<string, never>> {
17
- async list(input: TagListInputSchema & TagListSchema): ServerResultAsync<TagListOutputSchema> {
18
- return this.repository.tag.list(input);
19
- }
20
-
21
- async listTaggings(input: { resourceType: string; resourceIds?: readonly string[] }) {
22
- return this.repository.tag.listTaggings(input);
23
- }
24
-
25
- async create(data: TagCreateSchema, { user }: { user: User }): Promise<TagSelectOutputResult> {
26
- return this.repository.tag.create({ ...data, userId: user.id });
27
- }
28
-
29
- async update(data: TagUpdateSchema, { user }: { user: User }): Promise<TagSelectOutputResult> {
30
- return this.repository.tag.update({ ...data, userId: user.id });
31
- }
32
-
33
- async link(data: TagLinkSchema, { user }: { user: User }): Promise<TaggingSelectOutputResult> {
34
- return this.repository.tag.link({ ...data, userId: user.id });
35
- }
36
-
37
- async linkBulk(data: TagLinkSchema[]): ServerResultAsync<TagSchema[]> {
38
- return this.repository.tag.linkBulk(data);
39
- }
40
-
41
- async set(data: TagLinkSchema[]): ServerResultAsync<TagSchema[]> {
42
- return this.repository.tag.set(data);
43
- }
44
-
45
- async unlink(data: TagLinkSchema, { user }: { user: User }): Promise<TagSelectOutputResult> {
46
- return this.repository.tag.unlink({ ...data, userId: user.id });
47
- }
48
- }
@@ -1,62 +0,0 @@
1
- import {
2
- tagCreateSchema,
3
- taggingSchema,
4
- tagLinkSchema,
5
- tagListInputSchema,
6
- tagListOutputSchema,
7
- tagListSchema,
8
- tagUpdateSchema,
9
- } from "@m5kdev/commons/modules/tag/tag.schema";
10
- import { taggingsSelectOutput, tagsSelectOutput } from "#modules/tag/tag.dto";
11
- import type { TagService } from "#modules/tag/tag.service";
12
- import { handleTRPCResult, procedure, router } from "#trpc";
13
-
14
- export function createTagTRPC(tagService: TagService) {
15
- const tagListInput = tagListInputSchema.extend({
16
- assignableTo: tagListSchema.shape.assignableTo,
17
- });
18
-
19
- return router({
20
- list: procedure
21
- .input(tagListInput)
22
- .output(tagListOutputSchema)
23
- .query(async ({ input }) => handleTRPCResult(await tagService.list(input))),
24
-
25
- listTaggings: procedure
26
- .input(
27
- taggingSchema
28
- .pick({ resourceType: true })
29
- .extend({ resourceIds: tagListInputSchema.shape.filters.optional() })
30
- )
31
- .output(taggingsSelectOutput.array())
32
- .query(async ({ input }) => handleTRPCResult(await tagService.listTaggings(input as any))),
33
-
34
- create: procedure
35
- .input(tagCreateSchema)
36
- .output(tagsSelectOutput)
37
- .mutation(async ({ ctx, input }) => {
38
- return handleTRPCResult(await tagService.create(input, ctx));
39
- }),
40
-
41
- update: procedure
42
- .input(tagUpdateSchema)
43
- .output(tagsSelectOutput)
44
- .mutation(async ({ ctx, input }) => {
45
- return handleTRPCResult(await tagService.update(input, ctx));
46
- }),
47
-
48
- link: procedure
49
- .input(tagLinkSchema)
50
- .output(taggingsSelectOutput)
51
- .mutation(async ({ ctx, input }) => {
52
- return handleTRPCResult(await tagService.link(input, ctx));
53
- }),
54
-
55
- unlink: procedure
56
- .input(tagLinkSchema)
57
- .output(tagsSelectOutput)
58
- .mutation(async ({ ctx, input }) => {
59
- return handleTRPCResult(await tagService.unlink(input, ctx));
60
- }),
61
- });
62
- }
@@ -1,13 +0,0 @@
1
- /**
2
- * Applies pagination (limit and offset) to a drizzle query builder.
3
- * Returns the query builder with pagination applied, or the original query if no limit is specified.
4
- * Page is 1-based and only applied if limit is also provided.
5
- */
6
-
7
- export const applyPagination = <TQuery>(query: TQuery, limit?: number, page?: number): TQuery => {
8
- if (limit) (query as any).limit(limit);
9
-
10
- if (page && page > 1 && limit) (query as any).offset((page - 1) * limit);
11
-
12
- return query;
13
- };
@@ -1,21 +0,0 @@
1
- import { asc, desc } from "drizzle-orm";
2
- import type { SQLiteTableWithColumns } from "drizzle-orm/sqlite-core";
3
-
4
- /**
5
- * Applies sorting to a drizzle query builder.
6
- * Returns the query builder with sorting applied.
7
- * If no sort or order is specified, defaults to createdAt descending.
8
- * If createdAt column doesn't exist, returns the query unchanged.
9
- */
10
-
11
- export const applySorting = <TQuery, TTable extends SQLiteTableWithColumns<any>>(
12
- query: TQuery,
13
- table: TTable,
14
- sort?: string,
15
- order?: "asc" | "desc"
16
- ): TQuery => {
17
- const column = sort ? table[sort] : table.createdAt || table.id;
18
- if (!column) throw new Error(`Column ${sort} not found in table ${table.name}`);
19
- (query as any).orderBy(order === "asc" ? asc(column) : desc(column));
20
- return query;
21
- };