nuxt-mongoose icon indicating copy to clipboard operation
nuxt-mongoose copied to clipboard

Support more than one DB connection on different architectural layers

Open serhii-chernenko opened this issue 1 year ago • 3 comments

I want to separate logic between Nuxt 3 Layers and different DB connections:

  • For ecommerce logic such as customers, orders, payments, etc.
  • And for CMS logic such as pages, blocks, etc.

I want to have a few DB connections. Is it possible? If not, can I expect this feature will be delivered soon?

I see it's possible for SQL databases for Nitro OOTB. I want to have the same for MongoDB: https://nitro.build/guide/database#configuration

I also checked your repo and docs, I see you support more than one defineMongooseConnection: https://nuxt-mongoose.nuxt.space/docs/api/utils#definemongooseconnection But I suspect it doesn't support different models for different connections. I guess, all the used records will be just duplicated between the connections.

I expect separation by different connections and models dirs.

// nuxt.config.ts
export default defineNuxtConfig({
  mongoose: [
  {
    uri: 'process.env.MONGODB_CMS_URI',
    options: {},
    modelsDir: 'models/cms',
    devtools: true,
  },
  {
    uri: 'process.env.MONGODB_ECOMMERCE_URI',
    options: {},
    modelsDir: 'models/ecommerce',
    devtools: true,
  }
 ],
})

Usage:

  • page.scheme.ts in models/cms directory has to be automatically prefixed like CmsPage:
// layers/cms/server/api/pages/index.get.ts
export default defineEventHandler(async (event) => {
  try {
    return await CmsPage.find({})
  }
  catch (error) {
    return error
  }
})
  • user.scheme.ts in models/ecommerce directory has to be automatically prefixed like EcommerceUser:
// layers/ecommerce/server/api/users/index.get.ts
export default defineEventHandler(async (event) => {
  try {
    return await EcommerceUser.find({})
  }
  catch (error) {
    return error
  }
})

Just keep in mind that the folders have to be in different layers, just merged in result application, like

root                        # Project root directory
|
|—— layers                  # Custom Nuxt Layers for core functionalities
|   |—— core                # Core layer with core utilities and composables
|   |—— cms                 # Content Management System functionality
|   |—— ecommerce           # Ecommerce functionality
|   
|—— apps                    # Nuxt 3 applications for different platform parts
    |—— storefront          # Storefront application for public user interactions
    |—— admin               # Admin application for management

More about layers here:

  • https://nuxt.com/docs/getting-started/layers
  • https://nuxt.com/docs/guide/going-further/layers

Let me know please, if you don't plan to support the described feature, I'd try to implement it for my own project. But it'd be nice if you advise me on what to pay my attention.

It also could solve the previous Issues:

  • https://github.com/arashsheyda/nuxt-mongoose/issues/65
  • https://github.com/arashsheyda/nuxt-mongoose/issues/66

serhii-chernenko avatar Nov 10 '24 16:11 serhii-chernenko

this is great idea to have! but it definitely needs work to be done... I've been quite busy lately but I hope I can find some time in the next month to some issue tirage.

arashsheyda avatar Nov 11 '24 21:11 arashsheyda

hey @arashsheyda, just wanted to ask you if you have any updates regarding this feature?

serhii-chernenko avatar Jan 21 '25 11:01 serhii-chernenko

hey @arashsheyda, just wanted to ask you if you have any updates regarding this feature?

InfernalAzazel avatar Jul 28 '25 04:07 InfernalAzazel