feat: implement payment service with error handling and validation

Add new payment service with repository, error handling, and validation
Add exceptions package with database and validation utilities
Update database package with new schema and zod types
Add turbo start script for development
This commit is contained in:
Yuu Ottosoka
2025-07-11 13:54:55 +03:00
parent 49f0385d00
commit 084b100589
23 changed files with 792 additions and 13 deletions

201
package-lock.json generated
View File

@@ -594,7 +594,6 @@
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.11.1.tgz",
"integrity": "sha512-z6rCTQN741wxDq82cpdzx2uVykpnQIXalLhrWQSR0jlBVOxCIkz3HZnd8ern3uYTcWKfB3IpVAF7K2FU8t/8AQ==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
"jiti": "2.4.2"
@@ -604,14 +603,18 @@
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.11.1.tgz",
"integrity": "sha512-lWRb/YSWu8l4Yum1UXfGLtqFzZkVS2ygkWYpgkbgMHn9XJlMITIgeMvJyX5GepChzhmxuSuiq/MY/kGFweOpGw==",
"devOptional": true,
"license": "Apache-2.0"
},
"node_modules/@prisma/dmmf": {
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/dmmf/-/dmmf-6.11.1.tgz",
"integrity": "sha512-EwPSlhz7Qt5msepoxlKIGjtGP6fUEFQyxrYx6f0IdvQ8l0rLSJEqBrTiMpNhgKQFeR8kuiQTv+xzHk/l8mV+Xw==",
"license": "Apache-2.0"
},
"node_modules/@prisma/engines": {
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.11.1.tgz",
"integrity": "sha512-6eKEcV6V8W2eZAUwX2xTktxqPM4vnx3sxz3SDtpZwjHKpC6lhOtc4vtAtFUuf5+eEqBk+dbJ9Dcaj6uQU+FNNg==",
"devOptional": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
@@ -625,14 +628,12 @@
"version": "6.11.1-1.f40f79ec31188888a2e33acda0ecc8fd10a853a9",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.11.1-1.f40f79ec31188888a2e33acda0ecc8fd10a853a9.tgz",
"integrity": "sha512-swFJTOOg4tHyOM1zB/pHb3MeH0i6t7jFKn5l+ZsB23d9AQACuIRo9MouvuKGvnDogzkcjbWnXi/NvOZ0+n5Jfw==",
"devOptional": true,
"license": "Apache-2.0"
},
"node_modules/@prisma/fetch-engine": {
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.11.1.tgz",
"integrity": "sha512-NBYzmkXTkj9+LxNPRSndaAeALOL1Gr3tjvgRYNqruIPlZ6/ixLeuE/5boYOewant58tnaYFZ5Ne0jFBPfGXHpQ==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
"@prisma/debug": "6.11.1",
@@ -640,11 +641,27 @@
"@prisma/get-platform": "6.11.1"
}
},
"node_modules/@prisma/generator": {
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/generator/-/generator-6.11.1.tgz",
"integrity": "sha512-LNpsWyVjebWbVIHVw0bTTQUIlnK+92naGB5fWnjEJqJcxXuDnNQ0XomZAQ1BrqwbMrYL6RYS4whkTpKtu1ijLQ==",
"license": "Apache-2.0"
},
"node_modules/@prisma/generator-helper": {
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/generator-helper/-/generator-helper-6.11.1.tgz",
"integrity": "sha512-mxdeBqW8inKkuE2nHLo0SsdzsjY51cyRQYgD1uEshvy1/n5eXJJOhEA9T948qA0ZBYUb8SppO2HZtQjwkGwzjQ==",
"license": "Apache-2.0",
"dependencies": {
"@prisma/debug": "6.11.1",
"@prisma/dmmf": "6.11.1",
"@prisma/generator": "6.11.1"
}
},
"node_modules/@prisma/get-platform": {
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.11.1.tgz",
"integrity": "sha512-b2Z8oV2gwvdCkFemBTFd0x4lsL4O2jLSx8lB7D+XqoFALOQZPa7eAPE1NU0Mj1V8gPHRxIsHnyUNtw2i92psUw==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
"@prisma/debug": "6.11.1"
@@ -662,14 +679,39 @@
"resolved": "packages/eslint-config",
"link": true
},
"node_modules/@repo/exceptions": {
"resolved": "packages/exceptions",
"link": true
},
"node_modules/@repo/logger": {
"resolved": "packages/logger",
"link": true
},
"node_modules/@repo/services": {
"resolved": "packages/services",
"link": true
},
"node_modules/@repo/typescript-config": {
"resolved": "packages/typescript-config",
"link": true
},
"node_modules/@repo/utils": {
"resolved": "packages/utils",
"link": true
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.44.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz",
"integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@tsconfig/node10": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
@@ -1490,6 +1532,12 @@
"node": ">=0.8"
}
},
"node_modules/code-block-writer": {
"version": "12.0.0",
"resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz",
"integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==",
"license": "MIT"
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -3126,7 +3174,6 @@
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
"integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
"devOptional": true,
"license": "MIT",
"bin": {
"jiti": "lib/jiti-cli.mjs"
@@ -3241,6 +3288,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
},
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -3351,6 +3404,18 @@
"dev": true,
"license": "MIT"
},
"node_modules/neverthrow": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/neverthrow/-/neverthrow-8.2.0.tgz",
"integrity": "sha512-kOCT/1MCPAxY5iUV3wytNFUMUolzuwd/VF/1KCx7kf6CutrOsTie+84zTGTpgQycjvfLdBBdvBvFLqFD2c0wkQ==",
"license": "MIT",
"engines": {
"node": ">=18"
},
"optionalDependencies": {
"@rollup/rollup-linux-x64-gnu": "^4.24.0"
}
},
"node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
@@ -3686,7 +3751,6 @@
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/prisma/-/prisma-6.11.1.tgz",
"integrity": "sha512-VzJToRlV0s9Vu2bfqHiRJw73hZNCG/AyJeX+kopbu4GATTjTUdEWUteO3p4BLYoHpMS4o8pD3v6tF44BHNZI1w==",
"devOptional": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
@@ -3708,6 +3772,43 @@
}
}
},
"node_modules/prisma-json-types-generator": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/prisma-json-types-generator/-/prisma-json-types-generator-3.5.1.tgz",
"integrity": "sha512-PKhsAxs6IYx/BD6vomsfm0SZQ3wSUDb3GKof7o/CaAJ7kCLmHub6/qJQfD+qwve3omoSrp9kQ29Qj2T980PEUA==",
"license": "MIT",
"dependencies": {
"@prisma/generator-helper": "^6.11.0",
"semver": "^7.7.2",
"tslib": "^2.8.1"
},
"bin": {
"prisma-json-types-generator": "index.js"
},
"engines": {
"node": ">=14.0"
},
"funding": {
"url": "https://github.com/arthurfiorette/prisma-json-types-generator?sponsor=1"
},
"peerDependencies": {
"@prisma/client": "~6.11",
"prisma": "~6.11",
"typescript": "^5.8"
}
},
"node_modules/prisma-json-types-generator/node_modules/semver": {
"version": "7.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -4452,6 +4553,12 @@
"node": ">=0.10.0"
}
},
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
},
"node_modules/turbo": {
"version": "2.5.4",
"resolved": "https://registry.npmjs.org/turbo/-/turbo-2.5.4.tgz",
@@ -4649,7 +4756,6 @@
"version": "5.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"devOptional": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
@@ -4938,6 +5044,25 @@
"zod": "^3.21.4"
}
},
"node_modules/zod-prisma-types": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/zod-prisma-types/-/zod-prisma-types-3.2.4.tgz",
"integrity": "sha512-S4spVBMJAmecLv+aLyRhXK26qW9nWwcsOf1H1fRcEmiI8DPbftZ99u0fhqHlymuTpmMcUpuKxcNNOIqNY0ScSQ==",
"license": "MIT",
"dependencies": {
"@prisma/generator-helper": "^6.3.0",
"code-block-writer": "^12.0.0",
"lodash": "^4.17.21",
"zod": "^3.24.1"
},
"bin": {
"zod-prisma-types": "dist/bin.js"
},
"peerDependencies": {
"@prisma/client": "^4.x.x || ^5.x.x || ^6.x.x",
"prisma": "^4.x.x || ^5.x.x || ^6.x.x"
}
},
"packages/config": {
"name": "@repo/config",
"version": "0.0.0",
@@ -4954,7 +5079,10 @@
"name": "@repo/db",
"version": "0.0.0",
"dependencies": {
"@prisma/client": "^6.11.1"
"@prisma/client": "^6.11.1",
"@repo/exceptions": "*",
"prisma-json-types-generator": "^3.5.1",
"zod-prisma-types": "^3.2.4"
},
"devDependencies": {
"@types/node": "^24.0.10",
@@ -4978,6 +5106,27 @@
"typescript-eslint": "^8.35.0"
}
},
"packages/exceptions": {
"name": "@repo/exceptions",
"version": "0.0.0",
"dependencies": {
"neverthrow": "^8.2.0",
"zod": "^4.0.2"
},
"devDependencies": {
"@repo/typescript-config": "*",
"typescript": "^5.0.0"
}
},
"packages/exceptions/node_modules/zod": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/zod/-/zod-4.0.2.tgz",
"integrity": "sha512-X2niJNY54MGam4L6Kj0AxeedeDIi/E5QFW0On2faSX5J4/pfLk1tW+cRMIMoojnCavn/u5W/kX17e1CSGnKMxA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
"packages/logger": {
"name": "@repo/logger",
"devDependencies": {
@@ -4985,10 +5134,42 @@
"typescript": "latest"
}
},
"packages/services": {
"name": "@repo/services",
"version": "0.0.0",
"dependencies": {
"@repo/db": "*",
"@repo/exceptions": "*",
"@repo/utils": "*",
"neverthrow": "^8.2.0",
"zod": "^4.0.2"
},
"devDependencies": {
"@repo/typescript-config": "*",
"typescript": "^5.0.0"
}
},
"packages/services/node_modules/zod": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/zod/-/zod-4.0.2.tgz",
"integrity": "sha512-X2niJNY54MGam4L6Kj0AxeedeDIi/E5QFW0On2faSX5J4/pfLk1tW+cRMIMoojnCavn/u5W/kX17e1CSGnKMxA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
"packages/typescript-config": {
"name": "@repo/typescript-config",
"version": "0.0.0",
"license": "MIT"
},
"packages/utils": {
"name": "@repo/utils",
"devDependencies": {
"@repo/exceptions": "*",
"@repo/typescript-config": "*",
"typescript": "latest"
}
}
}
}