Modeling help request
Hey Tyler.
I looked high and low for this in the README and in /examples. It seems like it should be straightforward.
I wanted to model the following:

Creating the top half of the model was easy. I then applied what I know about creating comments on a post or tickets on a project to addProductToWarehouse but I was immediately stumped. Can you offer some assistance when you have some time? It's not obvious to me how this should work.
https://electrodb.fun/?#code/PQKgBAsg9gJgpgGzARwK5wE4Es4GcA0YuccYGeqCALgUQBYCG5YA7llXWAGbZwB2MXGBDAAUKKwBbAA5QMVMAG8wAUT5V2AT0IBlTADcsAY1IBfbhiiSwAIkRwjVSzABGNgNzijUPrgVUGFwRSAF5bTShUDAB9AKC4aL4GSTgPcTgAD1l5MG9fBQAFZ1RHNQ0qTTAwvjgWVXUtAAowUTAlVrawSVhEAC52zs79TFwsH36bAEYbfA7B-nLNCaLYEqoZuc7iDEMTCbl4DFwNwdNZwYYqJywXVCo8fsVNtulixwBJGEfnzorpOAmfmwfAA5idBp1yGgsOQvmAnOhzhCzj8kilvhDfpp-oDrqDwZioagYXA4Qi4EjTpTOvBcEZsNINOMBpj4diAbYgVh8dS2ijMa9jBynqy2TjbHxUJIXJgCZ1+RDvKh1BjWX8OTZJdLZbywAq+dTufAMg8WYNgMB4XQsEIEDaaGBXqtHLgfm0LWB2AByIRSf4YLgOBS3BRQADWDE0PydMDWuFVArDCdZXBwCDhNmkYblmO8Migo3u-QA2gBdXUGt1EJNmlNpjO4bMVzp52SFjnFzNvKifGzlqumH76zosJhwOiRYgrWMu5ODbwIYKOMZ8Caj8gT1BT7vHZtGzITEGjabNrNziGpxAZo9YSZZnOKqxt9gdmzr8eTuC9-ui4eDRvnoMl7poex6Ng+85PgWL4ll2zo9jAfbNoOmLDihepIoocTBCiACU6RZHICh5H4YAAOpjpuxBlFoVRgDUdQ0RUzQdCKnTdPACDnsMRwrhMJ4-AsWgTBRG6fg+2y7BqBwjHKw6XNcIammxgzvlRX5wipELqriwJgs2RIkmSGCIkOuposKVY6ZyeL6VWhmwv05K6n+YAMDAMDkLg8a1oM1k2FyPL2XA0KOfCJkUmZPySAwSQgpggFihqgV2ah1LDvuJo+VpbRqZ+2VVh6HA2mAdp+EIeVbngLSih63q+jImCBo4YAhmA4aRlWC5Lkyq62JVxC7lWZ6+Re9YTPezZtK20FFmAZbIc2AGjUB42ck2VbTVB7awQNGlIQOUWYnt05xol3VBnx-WUZ+p0uhBnoCAetg3gJoojTlY1XqBt6TZtuTbTB81vjdVXfotVbLZ9q3fS9YEbaKW35jt80-qy6FUps6EKlhgQ4aI+EEdkCgMLgmh8EY3DKsuPi5OQlxwHdVCNBZ-QpYQtL0lgjIrgA-GztlgAAPvRlAIEigomPzovahgwui4uhBKuo0tajKcsi5Ki64bW5BUFEfBgEzTGaAAdPScAM40n0xmsnyAlYcAALSoMSiGEBalBYDAjS4eZySRZinMMr1-TB9zvXCyLNgPpLHJx1HYAAAy6srVD9GnidJ1juGmyCUC+6Ig5E0RblkxTVMU5HFsM6JH5Vdb9EB4Q7meXgQimI8TfokQtktx5Xm4NLKXy1r4uOt2nzD4Lmti3qOtsXrBvkaD1ENBUpsdDX9zW5sreD-0+-t4nMfUhZ1J7fbnKO07UAcJgLtuzMYAel7Pt+x0pi5-nhfFx6AAq1oKpyDDEIEE9MqAAEJRCZGJmXcmlMuDU0jq3CAsUGDxQwI0S+cJ2bdwBClBemwl4YENnXdSJtTaoGkDAK2n0cHpVzsQZmn0YpxQSvgxhecC7KC8rIXwGoGCLkSLUGw88i7iA9O8L01gkGLkqAgAsCgJx1CoFAMAMB1HFXjKIKRrBYr3BgPCdRFtLb3EIG1aR1gGCOFQEIhAlRqG0I0KCXRloyKMAUO8fR6hPRCFwI7YqoJSpYDDHAU2ES3FgC3NyEEVpSC2w+DAQgzD4lgH0EI9AUSoBcH0WJMGRi2AcDcgDZUVAYGERyKTBBlcaaG1bkzf+UByGfmwavDSAs9KEESQhTpsTCCs17npIhgwSGG2NuvM2Ti6HRknsknOptmG72Ou0z4uoPRp36AAai2Qsn++FTBAA
I can take a look at this more closely tonight 👍
Thanks in advance! I think what I need is to create a service to manage the join.
@aisflat439 I checked out your Playground (thank you for doing that btw, it is very helpful) and it looked like the error was that the product entity referenced warehouseId as a composite attribute but warehouseId was not defined in attributes. I changed that, and removed the export keywords (the playground doesn't like those right now) and everything is now running just fine:
https://electrodb.fun/?#code/PQKgBAsg9gJgpgGzARwK5wE4Es4GcA0YuccYGeqCALgUQBYCG5YA7llXWAGbZwB2MXGBDAAUKKwBbAA5QMVMAG8wAUT5V2AT0IBlTADcsAY1IBfbhiiSwAIkRwjVSzABGNgNzijUPrgVUGFwRSAF5bTShUDAB9AKC4aL4GSTgPLx8-MAAFZ1RHNQ0qTTAwvjgWVXUtAAowUTAleoawSVhEAC5G5ub9TFwsH06bAEYbfCbu-kLNIZzYPKoxiebiDEMTIbl4DFwl7tNx7oYqJywXVCo8TsVlhpYmODpI4gBJGGvb5qLpOCG-bD4AHM9t0wAdPtJco43h9QV9ND8-qcgSC4eQ0FhyO8wE50IdQeC4UkUrC4TiEb9bP8sCj8Wi4BisZ1cXA6c1CaD4LgjNhpBpBl0yd9KTZqbTPhzupDjJSbmTyYjbHxUJIXJhUey2Q1vKh1KS4cKhsrVeqtWC2ZKwDT4AAPK6C7rAYA4uhYIQIN00MCQ+aOXCfBpOq1UADkQikPwwXAcCnOCigAGsGJoIVCaPrQdIExm4VwcAhsTYsxq4d4ZFB+pdOgBtAC6Zoalu6uGzDrJecQhZbJdBZdklcp1aLabeNnrAbBErN93IT1QxDmMAWuBzzW8CGCjgGfCGM8ezzgi+XPYa1rgNqGgP6owb3tbcvl3HzhavWGGxdv2qs-fYg5se7nV4YDHW8mxWe8JwaDsC0va9u0-MA+wrX8a2HX0qFHcd5VMKdlhwxt8UUOJgnBABKdJfAUAB1B5ALgAotBKMAygqBiilqJoHwaVp4AQVdeh2bchhvT4pi0IYaNnA8e1WdYRS2PoNUtY5Tjje0uOaACDxhNtukNKlkWBW90VQTE4GxFkzTA4lZQnfTRUMk8yAZUymRxDA8VwuEGBgGByFwFddPhRUHIBIyJxMsyLI81kvNBSQGCSQFMFXBp7LFcK4UtS0zztQKNLuWiD3yicgw4N0wA9PwhC0+c8DqeUg3YMMrRkTBo0cMA4zARNkwnddN35HdbFq4hdlvLNUuaaDCw-SDEO-ZCqzAOtQNvFspqg58-gTJyv3LAdUNGuBMNAuLumOo8-SmgaYyEkairqq6aCc3LYLfJzJqC7oZve99doQpDDpW-9HqAkCJzAhoNu+6bttsV9hng+agZQlasLJfCCQtJoOSIwISNEcjxAYXBND4IxuF1LcfEQ8hjkPNNqhszoMsILkeSwPltwAflZwywAAH2YygEHxaUTD5kWTQwIWRY3QgdXUKXjTVWXheVDdSLbcgqCiPhsjTNjNAAOh5OAGeqArvRHLsrDgABaVBTOAwgnUoLAYGqUizRss0Od5IbOgDrmhqF4WbB7CXKWj8OwAABjNJWqE6ZO4-jvDSJNwEoG90QcJJsmKapimw-NhnJP3OqreY5JWTAHy-LwIRTGuWuSSIQzCEb-zcCljK5c1sWbfQt5+4FjXRbBbWH11-WwErujjZNppy8uK3lh75vOi3gK48jtk-eWY6dNFe2HagDhMCdl2xjAIMPa9n3caznO84LoMABVXRquQEyEQE9MqAAEJRCk3JpTLg1Mw6NwgIlBgyUMDVBPtiNm7dfgZRnssOeGADaLwPMvVA0gYCW2tigi0WdiBUA3nCBKSUUroIodnXOyh-KyF8CKBgG5EjlBsNPfO4ggwvBDNYKBG5igIArAoJ4FQqBQDADAeR5UVyiCEawRKlwYA4nkebC2lxCDdWEdYBgjhUBcIQMUIhJCNBAlUc6KijAFAvHUeoK0QhcD23KkCSqWAExwBNgEuxYB5w0kBC6UgPolzQhgIQKh4SwD6C4egIJUAuDqKknVN4rB2CcAYAtXUVAwFF0gdA7cDdfLPU-lAfB1cUH8zCoQSJCwdKYJ1nAPWuDDboUIcQ0hqZR4xMzibKhNDQTkM+EGZOnQADU0yhlv3IgXbwlF0lVyAkxEMLA6AO2GPHeOIZPDLMyE06JGziEOwAKx7IOSTCpaYqk1OIMgsGJ0YkjyiRhGApF3BAA
Can you verify if this is what you'd expect?
Just to chime in ... this is actually very helpful for me getting started with M2M relations, maybe this should be part of the documentation some time?
Also a question: I have almost the same situation BUT need to query on warehouseId to retrieve a single warehouse so I swapped the sk and pk as in this snippet:
const WarehouseEntity = new Entity(
// ...
indexes: {
warehouses: {
collection: "warehouses",
pk: {
field: "pk",
composite: ["warehouseId"],
},
sk: {
field: "sk",
composite: [],
}
},
// ...
});
And then the very basic function:
async function getWarehouse(warehouseId: string) {
return await WarehouseEntity.get({ warehouseId }).go();
}
Now my question: is this indeed the right approach for this access pattern or doesn't it matter at all?