feat: add stock database with prisma for portfolio persistence

- Initialize Prisma with SQLite and Stock model
- Create database service layer with singleton client
- Add API routes for stock CRUD operations
- Integrate database with analyze page to persist ticker entries
- Add Playwright tests for stock database functionality
This commit is contained in:
2026-05-14 10:23:56 +02:00
parent f40eec1420
commit 3340fd11ca
29 changed files with 2530 additions and 221 deletions
+1 -1
View File
@@ -87,4 +87,4 @@ Error generating stack: `+l.message+`
<div id='root'></div>
</body>
</html>
<template id="playwrightReportBase64">data:application/zip;base64,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</template>
<template id="playwrightReportBase64">data:application/zip;base64,UEsDBBQAAAgIAHJMrlw9qeNO4gIAAPUHAAALAAAAcmVwb3J0Lmpzb269lVFv2zYQx7/KgU8OoMiWZTsxtwbdihbbyzKg7V7KbqClk8RGJAXy2MTL/N0LynYko0nal1V6Ie94f/3uSB3vmUaSpSTJ+P0uYZ6ko3dKI+PZxcXlxWKR5flidpmwMjhJyhrG81U+S5eXy/XxyRNWqRY94x8+Jqxz9hMW9IfUR4snSZ7xe0aWZMv4LGF412FBWPaTYE6mVStvtv3I36iuO1jtDePkAu4Shs5ZF7XZ6zji8Jci9ASVVC2WQBYqZUqgBqEIzqEh8EERpnBtEGzVeyrbtvZWmRqUh856rzYtcmHOQbDPvZ5g0aV0Zx1hCaVyWFC7hVtFjQ0ELhgT40frC6u1NOUzKsp4VSIIVrd2I9u3SKETDCY99B1Qo3wCwccVPvrexMJGDeMJZZnABgu5958quGA8KAMSSlVV2GddWEN4R2ff5okVhOmxkIU1laohbmoMvaYG3a3ymIAi0KpuCDYI8rh8E+oU/mxRegSHUTiuIwsNUef5dForasImLaye7iHOS/x8GE6V9wG9MP0bZrNs82E90wAgCQ7zfK1lp4SQRrbbfzGNcSl5no9iZhpG0Rn8N8Q+yKz0Pu+R6x76ohwMuU5Gvv2phN0ovnJWPyI810N5B/eg+tPIaMac8zHnQy55dozN9NVhNJ/rr5SjQn6SaUSYjKm6VhbY2LZEB0/zjbOenMHgeHE1rtUpOzxa4xH634+in2gsTjTgUPLJUPD4yw8rzgaydLCS/RW/J+TJXVieUOyeCDmes4dtmkfieEyl9+gIJq+4EO89Oi/Eb2jcVojO2dpJrZWphfjl93dOluiEMLbEf7QtQ/y5xcvD0RGxo0R3qeKsaIK5OZeOVCULSj95nq3yjK/PRmX9CqVGerXveW9jy/sRTKsVnz/LdL2JF0L6szTWbLUN/uoHYC1X+Tew+t71v4Ms12ueLZ4F+W6E+EUvxOO9kGfDN9jHhNkuXtd+f69rWTTK7C/k3RdQSwECPwMUAAAICAByTK5cPanjTuICAAD1BwAACwAAAAAAAAAAAAAAtIEAAAAAcmVwb3J0Lmpzb25QSwUGAAAAAAEAAQA5AAAACwMAAAAA</template>