@m5kdev/backend 0.1.4 → 0.2.0

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 (319) 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 +5 -42
  13. package/dist/src/modules/ai/ai.trpc.js +5 -5
  14. package/dist/src/modules/ai/ideogram/ideogram.constants.d.ts +0 -1
  15. package/dist/src/modules/ai/ideogram/ideogram.dto.d.ts +0 -1
  16. package/dist/src/modules/ai/ideogram/ideogram.prompt.d.ts +0 -1
  17. package/dist/src/modules/ai/ideogram/ideogram.repository.d.ts +0 -1
  18. package/dist/src/modules/ai/ideogram/ideogram.service.d.ts +0 -1
  19. package/dist/src/modules/auth/auth.db.d.ts +0 -1
  20. package/dist/src/modules/auth/auth.dto.d.ts +7 -8
  21. package/dist/src/modules/auth/auth.lib.d.ts +8 -9
  22. package/dist/src/modules/auth/auth.middleware.d.ts +0 -1
  23. package/dist/src/modules/auth/auth.repository.d.ts +0 -1
  24. package/dist/src/modules/auth/auth.service.d.ts +0 -1
  25. package/dist/src/modules/auth/auth.trpc.d.ts +52 -89
  26. package/dist/src/modules/auth/auth.trpc.js +55 -53
  27. package/dist/src/modules/auth/auth.utils.d.ts +0 -1
  28. package/dist/src/modules/base/base.abstract.d.ts +0 -1
  29. package/dist/src/modules/base/base.dto.d.ts +2 -3
  30. package/dist/src/modules/base/base.grants.d.ts +0 -1
  31. package/dist/src/modules/base/base.grants.test.d.ts +0 -1
  32. package/dist/src/modules/base/base.repository.d.ts +0 -1
  33. package/dist/src/modules/base/base.service.d.ts +2 -4
  34. package/dist/src/modules/base/base.types.d.ts +0 -1
  35. package/dist/src/modules/billing/billing.db.d.ts +0 -1
  36. package/dist/src/modules/billing/billing.repository.d.ts +0 -1
  37. package/dist/src/modules/billing/billing.router.d.ts +0 -1
  38. package/dist/src/modules/billing/billing.service.d.ts +0 -1
  39. package/dist/src/modules/billing/billing.trpc.d.ts +6 -43
  40. package/dist/src/modules/billing/billing.trpc.js +7 -7
  41. package/dist/src/modules/clay/clay.repository.d.ts +0 -1
  42. package/dist/src/modules/clay/clay.service.d.ts +0 -1
  43. package/dist/src/modules/connect/connect.db.d.ts +0 -1
  44. package/dist/src/modules/connect/connect.dto.d.ts +8 -9
  45. package/dist/src/modules/connect/connect.linkedin.d.ts +0 -1
  46. package/dist/src/modules/connect/connect.oauth.d.ts +0 -1
  47. package/dist/src/modules/connect/connect.repository.d.ts +3 -4
  48. package/dist/src/modules/connect/connect.router.d.ts +0 -1
  49. package/dist/src/modules/connect/connect.service.d.ts +6 -7
  50. package/dist/src/modules/connect/connect.trpc.d.ts +9 -46
  51. package/dist/src/modules/connect/connect.trpc.js +7 -7
  52. package/dist/src/modules/connect/connect.types.d.ts +0 -1
  53. package/dist/src/modules/crypto/crypto.db.d.ts +0 -1
  54. package/dist/src/modules/crypto/crypto.repository.d.ts +0 -1
  55. package/dist/src/modules/crypto/crypto.service.d.ts +0 -1
  56. package/dist/src/modules/email/email.service.d.ts +0 -1
  57. package/dist/src/modules/file/file.repository.d.ts +0 -1
  58. package/dist/src/modules/file/file.router.d.ts +0 -1
  59. package/dist/src/modules/file/file.service.d.ts +0 -1
  60. package/dist/src/modules/recurrence/recurrence.db.d.ts +0 -1
  61. package/dist/src/modules/recurrence/recurrence.repository.d.ts +0 -1
  62. package/dist/src/modules/recurrence/recurrence.service.d.ts +0 -1
  63. package/dist/src/modules/recurrence/recurrence.trpc.d.ts +11 -48
  64. package/dist/src/modules/recurrence/recurrence.trpc.js +17 -17
  65. package/dist/src/modules/social/social.dto.d.ts +0 -1
  66. package/dist/src/modules/social/social.linkedin.d.ts +0 -1
  67. package/dist/src/modules/social/social.linkedin.test.d.ts +0 -1
  68. package/dist/src/modules/social/social.service.d.ts +0 -1
  69. package/dist/src/modules/social/social.types.d.ts +0 -1
  70. package/dist/src/modules/tag/tag.db.d.ts +0 -1
  71. package/dist/src/modules/tag/tag.dto.d.ts +0 -1
  72. package/dist/src/modules/tag/tag.repository.d.ts +0 -1
  73. package/dist/src/modules/tag/tag.service.d.ts +0 -1
  74. package/dist/src/modules/tag/tag.trpc.d.ts +10 -47
  75. package/dist/src/modules/tag/tag.trpc.js +15 -15
  76. package/dist/src/modules/utils/applyPagination.d.ts +0 -1
  77. package/dist/src/modules/utils/applySorting.d.ts +0 -1
  78. package/dist/src/modules/utils/getConditionsFromFilters.d.ts +0 -1
  79. package/dist/src/modules/video/video.service.d.ts +0 -1
  80. package/dist/src/modules/webhook/webhook.constants.d.ts +0 -1
  81. package/dist/src/modules/webhook/webhook.db.d.ts +0 -1
  82. package/dist/src/modules/webhook/webhook.dto.d.ts +0 -1
  83. package/dist/src/modules/webhook/webhook.repository.d.ts +0 -1
  84. package/dist/src/modules/webhook/webhook.router.d.ts +0 -1
  85. package/dist/src/modules/webhook/webhook.service.d.ts +0 -1
  86. package/dist/src/modules/workflow/workflow.db.d.ts +0 -1
  87. package/dist/src/modules/workflow/workflow.repository.d.ts +0 -1
  88. package/dist/src/modules/workflow/workflow.service.d.ts +0 -1
  89. package/dist/src/modules/workflow/workflow.trpc.d.ts +6 -43
  90. package/dist/src/modules/workflow/workflow.trpc.js +7 -7
  91. package/dist/src/modules/workflow/workflow.types.d.ts +0 -1
  92. package/dist/src/modules/workflow/workflow.utils.d.ts +0 -1
  93. package/dist/src/test/stubs/utils.d.ts +0 -1
  94. package/dist/src/trpc/context.d.ts +4 -5
  95. package/dist/src/trpc/index.d.ts +0 -1
  96. package/dist/src/trpc/procedures.d.ts +24 -25
  97. package/dist/src/trpc/utils.d.ts +0 -1
  98. package/dist/src/types.d.ts +61 -209
  99. package/dist/src/types.js +4 -5
  100. package/dist/src/utils/errors.d.ts +0 -1
  101. package/dist/src/utils/logger.d.ts +0 -1
  102. package/dist/src/utils/posthog.d.ts +0 -1
  103. package/dist/src/utils/trpc.d.ts +58 -0
  104. package/dist/src/utils/trpc.js +63 -0
  105. package/dist/src/utils/types.d.ts +0 -1
  106. package/dist/tsconfig.tsbuildinfo +1 -1
  107. package/package.json +6 -8
  108. package/.cursor/rules/backend.mdc +0 -70
  109. package/.turbo/turbo-build.log +0 -5
  110. package/.turbo/turbo-check-types.log +0 -5
  111. package/.turbo/turbo-lint$colon$fix.log +0 -255
  112. package/CHANGELOG.md +0 -37
  113. package/dist/src/lib/posthog.d.ts.map +0 -1
  114. package/dist/src/lib/sentry.d.ts.map +0 -1
  115. package/dist/src/modules/access/access.repository.d.ts.map +0 -1
  116. package/dist/src/modules/access/access.service.d.ts.map +0 -1
  117. package/dist/src/modules/access/access.test.d.ts.map +0 -1
  118. package/dist/src/modules/access/access.utils.d.ts.map +0 -1
  119. package/dist/src/modules/ai/ai.db.d.ts.map +0 -1
  120. package/dist/src/modules/ai/ai.prompt.d.ts.map +0 -1
  121. package/dist/src/modules/ai/ai.repository.d.ts.map +0 -1
  122. package/dist/src/modules/ai/ai.router.d.ts.map +0 -1
  123. package/dist/src/modules/ai/ai.service.d.ts.map +0 -1
  124. package/dist/src/modules/ai/ai.trpc.d.ts.map +0 -1
  125. package/dist/src/modules/ai/ideogram/ideogram.constants.d.ts.map +0 -1
  126. package/dist/src/modules/ai/ideogram/ideogram.dto.d.ts.map +0 -1
  127. package/dist/src/modules/ai/ideogram/ideogram.prompt.d.ts.map +0 -1
  128. package/dist/src/modules/ai/ideogram/ideogram.repository.d.ts.map +0 -1
  129. package/dist/src/modules/ai/ideogram/ideogram.service.d.ts.map +0 -1
  130. package/dist/src/modules/auth/auth.db.d.ts.map +0 -1
  131. package/dist/src/modules/auth/auth.dto.d.ts.map +0 -1
  132. package/dist/src/modules/auth/auth.lib.d.ts.map +0 -1
  133. package/dist/src/modules/auth/auth.middleware.d.ts.map +0 -1
  134. package/dist/src/modules/auth/auth.repository.d.ts.map +0 -1
  135. package/dist/src/modules/auth/auth.service.d.ts.map +0 -1
  136. package/dist/src/modules/auth/auth.trpc.d.ts.map +0 -1
  137. package/dist/src/modules/auth/auth.utils.d.ts.map +0 -1
  138. package/dist/src/modules/base/base.abstract.d.ts.map +0 -1
  139. package/dist/src/modules/base/base.dto.d.ts.map +0 -1
  140. package/dist/src/modules/base/base.grants.d.ts.map +0 -1
  141. package/dist/src/modules/base/base.grants.test.d.ts.map +0 -1
  142. package/dist/src/modules/base/base.repository.d.ts.map +0 -1
  143. package/dist/src/modules/base/base.service.d.ts.map +0 -1
  144. package/dist/src/modules/base/base.types.d.ts.map +0 -1
  145. package/dist/src/modules/billing/billing.db.d.ts.map +0 -1
  146. package/dist/src/modules/billing/billing.repository.d.ts.map +0 -1
  147. package/dist/src/modules/billing/billing.router.d.ts.map +0 -1
  148. package/dist/src/modules/billing/billing.service.d.ts.map +0 -1
  149. package/dist/src/modules/billing/billing.trpc.d.ts.map +0 -1
  150. package/dist/src/modules/clay/clay.repository.d.ts.map +0 -1
  151. package/dist/src/modules/clay/clay.service.d.ts.map +0 -1
  152. package/dist/src/modules/connect/connect.db.d.ts.map +0 -1
  153. package/dist/src/modules/connect/connect.dto.d.ts.map +0 -1
  154. package/dist/src/modules/connect/connect.linkedin.d.ts.map +0 -1
  155. package/dist/src/modules/connect/connect.oauth.d.ts.map +0 -1
  156. package/dist/src/modules/connect/connect.repository.d.ts.map +0 -1
  157. package/dist/src/modules/connect/connect.router.d.ts.map +0 -1
  158. package/dist/src/modules/connect/connect.service.d.ts.map +0 -1
  159. package/dist/src/modules/connect/connect.trpc.d.ts.map +0 -1
  160. package/dist/src/modules/connect/connect.types.d.ts.map +0 -1
  161. package/dist/src/modules/crypto/crypto.db.d.ts.map +0 -1
  162. package/dist/src/modules/crypto/crypto.repository.d.ts.map +0 -1
  163. package/dist/src/modules/crypto/crypto.service.d.ts.map +0 -1
  164. package/dist/src/modules/email/email.service.d.ts.map +0 -1
  165. package/dist/src/modules/file/file.repository.d.ts.map +0 -1
  166. package/dist/src/modules/file/file.router.d.ts.map +0 -1
  167. package/dist/src/modules/file/file.service.d.ts.map +0 -1
  168. package/dist/src/modules/recurrence/recurrence.db.d.ts.map +0 -1
  169. package/dist/src/modules/recurrence/recurrence.repository.d.ts.map +0 -1
  170. package/dist/src/modules/recurrence/recurrence.service.d.ts.map +0 -1
  171. package/dist/src/modules/recurrence/recurrence.trpc.d.ts.map +0 -1
  172. package/dist/src/modules/social/social.dto.d.ts.map +0 -1
  173. package/dist/src/modules/social/social.linkedin.d.ts.map +0 -1
  174. package/dist/src/modules/social/social.linkedin.test.d.ts.map +0 -1
  175. package/dist/src/modules/social/social.service.d.ts.map +0 -1
  176. package/dist/src/modules/social/social.types.d.ts.map +0 -1
  177. package/dist/src/modules/tag/tag.db.d.ts.map +0 -1
  178. package/dist/src/modules/tag/tag.dto.d.ts.map +0 -1
  179. package/dist/src/modules/tag/tag.repository.d.ts.map +0 -1
  180. package/dist/src/modules/tag/tag.service.d.ts.map +0 -1
  181. package/dist/src/modules/tag/tag.trpc.d.ts.map +0 -1
  182. package/dist/src/modules/utils/applyPagination.d.ts.map +0 -1
  183. package/dist/src/modules/utils/applySorting.d.ts.map +0 -1
  184. package/dist/src/modules/utils/getConditionsFromFilters.d.ts.map +0 -1
  185. package/dist/src/modules/video/video.service.d.ts.map +0 -1
  186. package/dist/src/modules/webhook/webhook.constants.d.ts.map +0 -1
  187. package/dist/src/modules/webhook/webhook.db.d.ts.map +0 -1
  188. package/dist/src/modules/webhook/webhook.dto.d.ts.map +0 -1
  189. package/dist/src/modules/webhook/webhook.repository.d.ts.map +0 -1
  190. package/dist/src/modules/webhook/webhook.router.d.ts.map +0 -1
  191. package/dist/src/modules/webhook/webhook.service.d.ts.map +0 -1
  192. package/dist/src/modules/workflow/workflow.db.d.ts.map +0 -1
  193. package/dist/src/modules/workflow/workflow.repository.d.ts.map +0 -1
  194. package/dist/src/modules/workflow/workflow.service.d.ts.map +0 -1
  195. package/dist/src/modules/workflow/workflow.trpc.d.ts.map +0 -1
  196. package/dist/src/modules/workflow/workflow.types.d.ts.map +0 -1
  197. package/dist/src/modules/workflow/workflow.utils.d.ts.map +0 -1
  198. package/dist/src/test/stubs/utils.d.ts.map +0 -1
  199. package/dist/src/trpc/context.d.ts.map +0 -1
  200. package/dist/src/trpc/index.d.ts.map +0 -1
  201. package/dist/src/trpc/procedures.d.ts.map +0 -1
  202. package/dist/src/trpc/utils.d.ts.map +0 -1
  203. package/dist/src/types.d.ts.map +0 -1
  204. package/dist/src/utils/errors.d.ts.map +0 -1
  205. package/dist/src/utils/logger.d.ts.map +0 -1
  206. package/dist/src/utils/posthog.d.ts.map +0 -1
  207. package/dist/src/utils/types.d.ts.map +0 -1
  208. package/jest.config.ts +0 -19
  209. package/src/lib/posthog.ts +0 -5
  210. package/src/lib/sentry.ts +0 -8
  211. package/src/modules/access/access.repository.ts +0 -36
  212. package/src/modules/access/access.service.ts +0 -81
  213. package/src/modules/access/access.test.ts +0 -216
  214. package/src/modules/access/access.utils.ts +0 -46
  215. package/src/modules/ai/ai.db.ts +0 -38
  216. package/src/modules/ai/ai.prompt.ts +0 -47
  217. package/src/modules/ai/ai.repository.ts +0 -53
  218. package/src/modules/ai/ai.router.ts +0 -148
  219. package/src/modules/ai/ai.service.ts +0 -310
  220. package/src/modules/ai/ai.trpc.ts +0 -22
  221. package/src/modules/ai/ideogram/ideogram.constants.ts +0 -170
  222. package/src/modules/ai/ideogram/ideogram.dto.ts +0 -64
  223. package/src/modules/ai/ideogram/ideogram.prompt.ts +0 -858
  224. package/src/modules/ai/ideogram/ideogram.repository.ts +0 -39
  225. package/src/modules/ai/ideogram/ideogram.service.ts +0 -14
  226. package/src/modules/auth/auth.db.ts +0 -224
  227. package/src/modules/auth/auth.dto.ts +0 -47
  228. package/src/modules/auth/auth.lib.ts +0 -349
  229. package/src/modules/auth/auth.middleware.ts +0 -62
  230. package/src/modules/auth/auth.repository.ts +0 -672
  231. package/src/modules/auth/auth.service.ts +0 -261
  232. package/src/modules/auth/auth.trpc.ts +0 -208
  233. package/src/modules/auth/auth.utils.ts +0 -117
  234. package/src/modules/base/base.abstract.ts +0 -62
  235. package/src/modules/base/base.dto.ts +0 -206
  236. package/src/modules/base/base.grants.test.ts +0 -861
  237. package/src/modules/base/base.grants.ts +0 -199
  238. package/src/modules/base/base.repository.ts +0 -433
  239. package/src/modules/base/base.service.ts +0 -154
  240. package/src/modules/base/base.types.ts +0 -7
  241. package/src/modules/billing/billing.db.ts +0 -27
  242. package/src/modules/billing/billing.repository.ts +0 -328
  243. package/src/modules/billing/billing.router.ts +0 -77
  244. package/src/modules/billing/billing.service.ts +0 -177
  245. package/src/modules/billing/billing.trpc.ts +0 -17
  246. package/src/modules/clay/clay.repository.ts +0 -29
  247. package/src/modules/clay/clay.service.ts +0 -61
  248. package/src/modules/connect/connect.db.ts +0 -32
  249. package/src/modules/connect/connect.dto.ts +0 -44
  250. package/src/modules/connect/connect.linkedin.ts +0 -70
  251. package/src/modules/connect/connect.oauth.ts +0 -288
  252. package/src/modules/connect/connect.repository.ts +0 -65
  253. package/src/modules/connect/connect.router.ts +0 -76
  254. package/src/modules/connect/connect.service.ts +0 -171
  255. package/src/modules/connect/connect.trpc.ts +0 -26
  256. package/src/modules/connect/connect.types.ts +0 -27
  257. package/src/modules/crypto/crypto.db.ts +0 -15
  258. package/src/modules/crypto/crypto.repository.ts +0 -13
  259. package/src/modules/crypto/crypto.service.ts +0 -57
  260. package/src/modules/email/email.service.ts +0 -222
  261. package/src/modules/file/file.repository.ts +0 -95
  262. package/src/modules/file/file.router.ts +0 -108
  263. package/src/modules/file/file.service.ts +0 -186
  264. package/src/modules/recurrence/recurrence.db.ts +0 -79
  265. package/src/modules/recurrence/recurrence.repository.ts +0 -70
  266. package/src/modules/recurrence/recurrence.service.ts +0 -105
  267. package/src/modules/recurrence/recurrence.trpc.ts +0 -82
  268. package/src/modules/social/social.dto.ts +0 -22
  269. package/src/modules/social/social.linkedin.test.ts +0 -277
  270. package/src/modules/social/social.linkedin.ts +0 -593
  271. package/src/modules/social/social.service.ts +0 -112
  272. package/src/modules/social/social.types.ts +0 -43
  273. package/src/modules/tag/tag.db.ts +0 -41
  274. package/src/modules/tag/tag.dto.ts +0 -18
  275. package/src/modules/tag/tag.repository.ts +0 -222
  276. package/src/modules/tag/tag.service.ts +0 -48
  277. package/src/modules/tag/tag.trpc.ts +0 -62
  278. package/src/modules/uploads/0581796b-8845-420d-bd95-cd7de79f6d37.webm +0 -0
  279. package/src/modules/uploads/33b1e649-6727-4bd0-94d0-a0b363646865.webm +0 -0
  280. package/src/modules/uploads/49a8c4c0-54d7-4c94-bef4-c93c029f9ed0.webm +0 -0
  281. package/src/modules/uploads/50e31e38-a2f0-47ca-8b7d-2d7fcad9267d.webm +0 -0
  282. package/src/modules/uploads/72ac8cf9-c3a7-4cd8-8a78-6d8e137a4c7e.webm +0 -0
  283. package/src/modules/uploads/75293649-d966-46cd-a675-67518958ae9c.png +0 -0
  284. package/src/modules/uploads/88b7b867-ce15-4891-bf73-81305a7de1f7.wav +0 -0
  285. package/src/modules/uploads/a5d6fee8-6a59-42c6-9d4a-ac8a3c5e7245.webm +0 -0
  286. package/src/modules/uploads/c13a9785-ca5a-4983-af30-b338ed76d370.webm +0 -0
  287. package/src/modules/uploads/caa1a5a7-71ba-4381-902d-7e2cafdf6dcb.webm +0 -0
  288. package/src/modules/uploads/cbeb0b81-374d-445b-914b-40ace7c8e031.webm +0 -0
  289. package/src/modules/uploads/d626aa82-b10f-493f-aee7-87bfb3361dfc.webm +0 -0
  290. package/src/modules/uploads/d7de4c16-de0c-495d-9612-e72260a6ecca.png +0 -0
  291. package/src/modules/uploads/e532e38a-6421-400e-8a5f-8e7bc8ce411b.wav +0 -0
  292. package/src/modules/uploads/e86ec867-6adf-4c51-84e0-00b0836625e8.webm +0 -0
  293. package/src/modules/utils/applyPagination.ts +0 -13
  294. package/src/modules/utils/applySorting.ts +0 -21
  295. package/src/modules/utils/getConditionsFromFilters.ts +0 -216
  296. package/src/modules/video/video.service.ts +0 -89
  297. package/src/modules/webhook/webhook.constants.ts +0 -9
  298. package/src/modules/webhook/webhook.db.ts +0 -15
  299. package/src/modules/webhook/webhook.dto.ts +0 -9
  300. package/src/modules/webhook/webhook.repository.ts +0 -68
  301. package/src/modules/webhook/webhook.router.ts +0 -29
  302. package/src/modules/webhook/webhook.service.ts +0 -78
  303. package/src/modules/workflow/workflow.db.ts +0 -29
  304. package/src/modules/workflow/workflow.repository.ts +0 -171
  305. package/src/modules/workflow/workflow.service.ts +0 -56
  306. package/src/modules/workflow/workflow.trpc.ts +0 -26
  307. package/src/modules/workflow/workflow.types.ts +0 -30
  308. package/src/modules/workflow/workflow.utils.ts +0 -259
  309. package/src/test/stubs/utils.ts +0 -2
  310. package/src/trpc/context.ts +0 -21
  311. package/src/trpc/index.ts +0 -3
  312. package/src/trpc/procedures.ts +0 -43
  313. package/src/trpc/utils.ts +0 -20
  314. package/src/types.ts +0 -22
  315. package/src/utils/errors.ts +0 -148
  316. package/src/utils/logger.ts +0 -8
  317. package/src/utils/posthog.ts +0 -43
  318. package/src/utils/types.ts +0 -5
  319. 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
- };