electrodb icon indicating copy to clipboard operation
electrodb copied to clipboard

Modeling help request

Open aisflat439 opened this issue 3 years ago • 4 comments

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: image

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

aisflat439 avatar Sep 14 '22 22:09 aisflat439

I can take a look at this more closely tonight 👍

tywalch avatar Sep 16 '22 15:09 tywalch

Thanks in advance! I think what I need is to create a service to manage the join.

aisflat439 avatar Sep 16 '22 17:09 aisflat439

@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?

tywalch avatar Sep 24 '22 20:09 tywalch

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?

squio avatar Nov 17 '22 14:11 squio