<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mite</title>
    <description>The latest articles on DEV Community by Mite (@mitinoh).</description>
    <link>https://dev.to/mitinoh</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F880268%2F8b1b310a-7f2d-440d-8213-eba6f277cbb6.png</url>
      <title>DEV Community: Mite</title>
      <link>https://dev.to/mitinoh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mitinoh"/>
    <language>en</language>
    <item>
      <title>🚀 Crudify 1.2.6: Major Improvements &amp; New Features!</title>
      <dc:creator>Mite</dc:creator>
      <pubDate>Mon, 10 Feb 2025 09:50:15 +0000</pubDate>
      <link>https://dev.to/mitinoh/crudify-126-major-improvements-new-features-55lk</link>
      <guid>https://dev.to/mitinoh/crudify-126-major-improvements-new-features-55lk</guid>
      <description>&lt;p&gt;Hello, developers! 👋&lt;/p&gt;

&lt;p&gt;We're excited to announce the latest updates to &lt;strong&gt;Crudify&lt;/strong&gt;, our powerful NestJS library that simplifies CRUD operations. This update introduces significant improvements, fixes, and new features to make your API development even smoother. Let's dive into the details! 🎉&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 What's New in Crudify 1.2.6?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚀 Removed: CrudifyLoggerModule
&lt;/h3&gt;

&lt;p&gt;Starting from &lt;strong&gt;1.2.6&lt;/strong&gt;, we've removed &lt;code&gt;CrudifyLoggerModule&lt;/code&gt;. Instead, you should now use &lt;code&gt;CrudifyModule&lt;/code&gt; directly for logging functionalities. This change simplifies the module structure and enhances maintainability.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 Fixes &amp;amp; Enhancements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🛠 QueryParser Fix (1.2.5)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fixed an issue with the &lt;code&gt;in&lt;/code&gt; operator in &lt;strong&gt;QueryParser&lt;/strong&gt;, ensuring better query handling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Improved DTO Support (1.2.4)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;CrudifyController&lt;/code&gt; &amp;amp; &lt;code&gt;CrudifyService&lt;/code&gt; now support &lt;code&gt;CreateDto&lt;/code&gt; and &lt;code&gt;UpdateDto&lt;/code&gt;, enhancing type safety and flexibility in create/update operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🗑 Soft Delete Support (1.2.4)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;We've introduced &lt;strong&gt;soft delete&lt;/strong&gt; functionality! Now, you can soft-delete records individually or in bulk, providing greater control over data retention.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔥 Bulk Operation Control (1.2.4)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;disableBulk&lt;/code&gt; in &lt;code&gt;routes.disableBulk&lt;/code&gt;, allowing more granular control over bulk operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📌 OpenAPI Fix (1.2.4)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Resolved an issue where duplicate operationIds were being generated in &lt;strong&gt;Swagger/OpenAPI&lt;/strong&gt;, improving documentation clarity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔧 Errsole Configuration Fix (1.2.4)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fixed the default URI configuration for &lt;strong&gt;Errsole&lt;/strong&gt;, ensuring proper logging setup.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Other Notable Fixes &amp;amp; Changes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📜 Example Filters in Swagger (1.2.1)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Added &lt;strong&gt;example filters&lt;/strong&gt; in Swagger UI to demonstrate advanced query filtering.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Default Validation Pipe (1.2.1)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Now, &lt;code&gt;UsePipes(new ValidationPipe({ transform: true }))&lt;/code&gt; is applied by default to enhance request validation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📉 Removed CrudifySwaggerModule (1.2.1)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;We've deprecated &lt;code&gt;CrudifySwaggerModule&lt;/code&gt;. You should now use the classic Swagger configuration instead.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔥 Upgrade Now!
&lt;/h2&gt;

&lt;p&gt;To upgrade to the latest version, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm update ncrudify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or install it fresh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;ncrudify@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For full documentation, check out our &lt;strong&gt;&lt;a href="https://github.com/mitinoh/nest-crudify/wiki" rel="noopener noreferrer"&gt;Wiki&lt;/a&gt;&lt;/strong&gt; 📖.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Feedback &amp;amp; Contributions
&lt;/h2&gt;

&lt;p&gt;We love hearing from the community! If you encounter issues or have feature requests, feel free to open an &lt;strong&gt;&lt;a href="https://github.com/mitinoh/nest-crudify/issues" rel="noopener noreferrer"&gt;issue&lt;/a&gt;&lt;/strong&gt; or submit a PR on &lt;strong&gt;&lt;a href="https://github.com/mitinoh/nest-crudify" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>node</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Introducing New Features in Crudify: Streamline Your API Development</title>
      <dc:creator>Mite</dc:creator>
      <pubDate>Wed, 22 Jan 2025 15:01:22 +0000</pubDate>
      <link>https://dev.to/mitinoh/introducing-new-features-in-crudify-streamline-your-api-development-4bic</link>
      <guid>https://dev.to/mitinoh/introducing-new-features-in-crudify-streamline-your-api-development-4bic</guid>
      <description>&lt;p&gt;Are you tired of writing the same CRUD operations repeatedly for your Mongoose models? Say hello to &lt;strong&gt;Crudify&lt;/strong&gt;! This NestJS library is designed to make your life easier by automatically generating RESTful CRUD endpoints for your Mongoose models. And now, with the latest updates, it’s even better! Let’s dive into what’s new in Crudify and how it can transform your development process.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 What's New in Crudify
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. &lt;strong&gt;Advanced Query Parser&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The new Query Parser in Crudify transforms URL query parameters into MongoDB-compatible queries. This feature supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filtering with operators like &lt;code&gt;eq&lt;/code&gt;, &lt;code&gt;ne&lt;/code&gt;, &lt;code&gt;gt&lt;/code&gt;, &lt;code&gt;lt&lt;/code&gt;, &lt;code&gt;in&lt;/code&gt;, and more.&lt;/li&gt;
&lt;li&gt;Sorting results by multiple fields.&lt;/li&gt;
&lt;li&gt;Pagination with &lt;code&gt;skip&lt;/code&gt; and &lt;code&gt;limit&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Population of references with nested options for filtering and sorting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/users?name[starts]=John&amp;amp;age[gte]=30&amp;amp;sort=-createdAt&amp;amp;limit=10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query fetches users whose names start with "John," are 30 years or older, sorted by creation date in descending order, and limited to 10 results.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. &lt;strong&gt;Custom Decorators for Enhanced Flexibility&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Easily add custom decorators to your routes, whether globally or individually. Use this feature to apply guards, add Swagger documentation, or manage authorization seamlessly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Crudify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;findAll&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;decorators&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
          &lt;span class="nc"&gt;ApiOperation&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Retrieve all users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fetches all users from the database.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;}),&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserController&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. &lt;strong&gt;Integrated Logger Module&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Debugging is now simpler with the new &lt;code&gt;CrudifyLoggerModule&lt;/code&gt;. It intercepts uncaught errors and logs them for you. Configure it to suit your project’s needs, ensuring you never miss an important detail.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Module&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;imports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;CrudifyLoggerModule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forRoot&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MONGODB_URI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;dbName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MONGODB_LOGDB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppModule&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. &lt;strong&gt;Bulk Operations&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Streamline your batch processing with new bulk endpoints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;POST /your-model/bulk&lt;/code&gt;: Create multiple records.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PATCH /your-model/bulk&lt;/code&gt;: Update multiple records.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DELETE /your-model/bulk&lt;/code&gt;: Delete multiple records.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  5. &lt;strong&gt;Authorization Made Simple&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Combine &lt;code&gt;UseGuards&lt;/code&gt; with Crudify to manage route access control effectively. Protect specific routes or entire controllers with your custom authorization logic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Crudify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;create&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;decorators&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;UseGuards&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;AuthGuard&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserController&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  💡 Why Use Crudify?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Save Time:&lt;/strong&gt; Focus on building features instead of boilerplate code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customization:&lt;/strong&gt; Tailor endpoints to your needs with ease.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swagger Support:&lt;/strong&gt; Automatically generate API documentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seamless NestJS Integration:&lt;/strong&gt; Fits perfectly into your existing projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Get Started Today
&lt;/h3&gt;

&lt;p&gt;Ready to supercharge your NestJS development? Install Crudify and start building smarter APIs now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;ncrudify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check out the &lt;a href="https://github.com/mitinoh/nest-crudify" rel="noopener noreferrer"&gt;Crudify GitHub repository&lt;/a&gt; for more details, examples, and documentation. Don’t forget to give it a star if you find it helpful!&lt;/p&gt;

&lt;p&gt;Let Crudify handle the repetitive tasks so you can focus on what truly matters: creating amazing applications.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Have you seen the new bulk operations?</title>
      <dc:creator>Mite</dc:creator>
      <pubDate>Mon, 20 Jan 2025 13:33:21 +0000</pubDate>
      <link>https://dev.to/mitinoh/have-you-seen-the-new-bulk-operations-3dg4</link>
      <guid>https://dev.to/mitinoh/have-you-seen-the-new-bulk-operations-3dg4</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/mitinoh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F880268%2F8b1b310a-7f2d-440d-8213-eba6f277cbb6.png" alt="mitinoh"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/mitinoh/crudify-automate-your-mongoose-crud-operations-in-nestjs-455a" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Crudify: Automate Your Mongoose CRUD Operations in NestJS&lt;/h2&gt;
      &lt;h3&gt;Mite ・ Jan 9&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#nestjs&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#mongodb&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#mongoose&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#swagger&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>nestjs</category>
      <category>mongodb</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Crudify: Automate Your Mongoose CRUD Operations in NestJS</title>
      <dc:creator>Mite</dc:creator>
      <pubDate>Thu, 09 Jan 2025 13:09:57 +0000</pubDate>
      <link>https://dev.to/mitinoh/crudify-automate-your-mongoose-crud-operations-in-nestjs-455a</link>
      <guid>https://dev.to/mitinoh/crudify-automate-your-mongoose-crud-operations-in-nestjs-455a</guid>
      <description>&lt;p&gt;Are you tired of writing repetitive CRUD logic for your Mongoose models? Meet &lt;strong&gt;Crudify&lt;/strong&gt;, a NestJS library designed to simplify your development workflow by automatically generating RESTful CRUD endpoints. With just a few lines of code, you can set up a fully functional API, complete with Swagger documentation and built-in logging.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 What is Crudify?
&lt;/h2&gt;

&lt;p&gt;Crudify is a powerful tool for NestJS developers who work with Mongoose. It reduces boilerplate code by automating the creation of CRUD (Create, Read, Update, Delete) endpoints for your models. But that’s not all! It also provides automatic Swagger documentation and integrates a logger to handle uncaught errors, making your API more maintainable and developer-friendly.&lt;/p&gt;

&lt;p&gt;With Crudify, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚀 Automatically generate CRUD endpoints for your Mongoose models.&lt;/li&gt;
&lt;li&gt;📖 Get fully functional Swagger UI without any additional setup.&lt;/li&gt;
&lt;li&gt;🛠️ Customize endpoints to fit your specific needs.&lt;/li&gt;
&lt;li&gt;🧰 Simplify debugging with integrated logging.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ Quick Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Install Dependencies
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;ncrudify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Define Your Model
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Prop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Schema&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;SchemaFactory&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@nestjs/mongoose&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Document&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mongoose&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Schema&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Document&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Prop&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Prop&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;unique&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Prop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;UserSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;SchemaFactory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createForClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Create a Service
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Injectable&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@nestjs/common&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mongoose&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;InjectModel&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@nestjs/mongoose&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CrudifyService&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ncrudify&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Injectable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserService&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;CrudifyService&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(@&lt;/span&gt;&lt;span class="nd"&gt;InjectModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="na"&gt;userModel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userModel&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Build a Controller
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@nestjs/common&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;UserService&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./user.service&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Crudify&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CrudifyController&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ncrudify&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Crudify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserController&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;CrudifyController&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;public&lt;/span&gt; &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;UserService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🌐 Swagger Integration
&lt;/h2&gt;

&lt;p&gt;Crudify makes it effortless to set up Swagger documentation for your API. Swagger automatically documents all your CRUD endpoints, making it easier to test and share your API with your team or external users. &lt;/p&gt;

&lt;p&gt;Once set up, you can access the Swagger UI at &lt;code&gt;http://localhost:3000/api&lt;/code&gt;, where you’ll find a user-friendly interface to interact with your API.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Import &lt;code&gt;CrudifySwaggerModule&lt;/code&gt; in &lt;code&gt;AppModule&lt;/code&gt;:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Module&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@nestjs/common&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;MongooseModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@nestjs/mongoose&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CrudifySwaggerModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ncrudify&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Module&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;imports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;MongooseModule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forRoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MONGODB_URI&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;CrudifySwaggerModule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppModule&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Setup Swagger in &lt;code&gt;main.ts&lt;/code&gt;:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NestFactory&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@nestjs/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CrudifySwaggerModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ncrudify&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;bootstrap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;NestFactory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;AppModule&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;CrudifySwaggerModule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setupSwagger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;bootstrap&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧰 Integrated Logging
&lt;/h2&gt;

&lt;p&gt;Crudify includes a logger to capture and manage uncaught errors, making your debugging process more efficient. The logger is based on &lt;strong&gt;Errsole&lt;/strong&gt;, a tool designed to help developers track runtime errors and improve error handling.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Enable the Logger
&lt;/h3&gt;

&lt;h3&gt;
  
  
  1. Import &lt;code&gt;CrudifyLoggerModule&lt;/code&gt; in &lt;code&gt;AppModule&lt;/code&gt;:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CrudifyLoggerModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ncrudify&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Module&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;imports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;CrudifyLoggerModule&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppModule&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Access the Logger UI
&lt;/h3&gt;

&lt;p&gt;By default, the Crudify Logger listens on &lt;code&gt;http://localhost:3001&lt;/code&gt;. You can access this interface to see all uncaught errors, including stack traces and request details, which makes identifying and fixing issues faster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Customize the Logger
&lt;/h3&gt;

&lt;p&gt;You can adjust the logger’s configuration by providing custom options, such as log levels or output destinations, to match your project’s needs.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔎 Advanced Query Filters
&lt;/h2&gt;

&lt;p&gt;Crudify supports powerful query filters using a simple format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;field=[$operator]:value
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;age=[$gt]:30&lt;/code&gt; - Find users older than 30.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;name=[$eq]:John&lt;/code&gt; - Find users named John.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Supported Operators
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$eq&lt;/code&gt;: Equal to&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$ne&lt;/code&gt;: Not equal to&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$gt&lt;/code&gt;: Greater than&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$lt&lt;/code&gt;: Less than&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$gte&lt;/code&gt;: Greater than or equal to&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$lte&lt;/code&gt;: Less than or equal to&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$cont&lt;/code&gt;: Contains (for strings)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$excl&lt;/code&gt;: Does not contain (for strings)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$in&lt;/code&gt;: In a set of values&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$notin&lt;/code&gt;: Not in a set of values&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$isnull&lt;/code&gt;: Is null&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$notnull&lt;/code&gt;: Is not null&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$between&lt;/code&gt;: Between two values&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Boost Your Productivity
&lt;/h2&gt;

&lt;p&gt;Crudify is more than just a tool for generating endpoints. It’s a productivity booster for NestJS developers, helping you focus on what matters: building great applications. By handling the repetitive parts of CRUD operations, Swagger setup, and error logging, Crudify saves you time and effort.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/mitinoh/nest-crudify" rel="noopener noreferrer"&gt;Crudify&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;❤️ Support on &lt;a href="https://www.buymeacoffee.com/mitinoh" rel="noopener noreferrer"&gt;Buy Me a Coffee&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>nestjs</category>
      <category>mongodb</category>
      <category>mongoose</category>
      <category>swagger</category>
    </item>
    <item>
      <title>Nextjs tech stack</title>
      <dc:creator>Mite</dc:creator>
      <pubDate>Sun, 05 Jan 2025 02:51:44 +0000</pubDate>
      <link>https://dev.to/mitinoh/nextjs-tech-stack-11i3</link>
      <guid>https://dev.to/mitinoh/nextjs-tech-stack-11i3</guid>
      <description></description>
      <category>nextjs</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
