<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="http://localhost:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://localhost:4000/" rel="alternate" type="text/html" /><updated>2025-12-04T22:27:40+05:30</updated><id>http://localhost:4000/feed.xml</id><title type="html">Injee Blogs</title><subtitle>Injee - The no configuration instant database for frontend developers. As a front end developer it’s a pain to wait for API’s to be delivered. What if there is a miracle Database that has the API built in. Well, it’s no longer fantasy anymore. Injee (in memory JSON store) is a Database that comes with ready to use CRUD API’s for front end developers.</subtitle><entry><title type="html">Injee Outperforms Laravel</title><link href="http://localhost:4000/2025/12/04/injee-outperforms-laravel.html" rel="alternate" type="text/html" title="Injee Outperforms Laravel" /><published>2025-12-04T00:00:00+05:30</published><updated>2025-12-04T00:00:00+05:30</updated><id>http://localhost:4000/2025/12/04/injee-outperforms-laravel</id><content type="html" xml:base="http://localhost:4000/2025/12/04/injee-outperforms-laravel.html"><![CDATA[<p>Well, here is a the proof from Linkedin</p>

<p><img src="https://archive.org/download/injee-outperforms-laravel/Screenshot%202025-12-04%20at%2017-09-31%20injee%20Company%20Page%20Admin%20LinkedIn.png" alt="" /></p>

<p>:D</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Well, here is a the proof from Linkedin]]></summary></entry><entry><title type="html">Corrections in my GraphQL assumptions, and other stuff</title><link href="http://localhost:4000/2025/06/13/corrections-in-my-graphqL-assumptions-and-other-stuff.html" rel="alternate" type="text/html" title="Corrections in my GraphQL assumptions, and other stuff" /><published>2025-06-13T00:00:00+05:30</published><updated>2025-06-13T00:00:00+05:30</updated><id>http://localhost:4000/2025/06/13/corrections-in-my-graphqL-assumptions-and-other-stuff</id><content type="html" xml:base="http://localhost:4000/2025/06/13/corrections-in-my-graphqL-assumptions-and-other-stuff.html"><![CDATA[<div class="video">
    <figure>
    <iframe src="https://www.youtube.com/embed/87AspOW1-gQ?color=white&amp;theme=light" allowfullscreen="">
     </iframe>
     </figure>
     </div>

<p><strong>Notes</strong></p>

<figure class="highlight"><pre><code class="language-graphql" data-lang="graphql"><span class="p">{</span><span class="w">
  </span><span class="err">"</span><span class="n">query</span><span class="err">":</span><span class="w"> </span><span class="err">"</span><span class="w"> </span><span class="n">query</span><span class="w"> </span><span class="n">GetAllBooks</span><span class="p">(</span><span class="err">$</span><span class="n">q</span><span class="p">:</span><span class="w"> </span><span class="n">String</span><span class="p">,</span><span class="w"> </span><span class="err">$</span><span class="n">sort</span><span class="p">:</span><span class="w"> </span><span class="n">String</span><span class="p">,</span><span class="w"> </span><span class="err">$</span><span class="n">order</span><span class="p">:</span><span class="w"> </span><span class="n">SortOrder</span><span class="p">,</span><span class="w"> </span><span class="err">$</span><span class="n">page</span><span class="p">:</span><span class="w"> </span><span class="n">Int</span><span class="p">,</span><span class="w"> </span><span class="err">$</span><span class="n">perPage</span><span class="p">:</span><span class="w"> </span><span class="n">Int</span><span class="p">)</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="n">books</span><span class="p">(</span><span class="w">
      </span><span class="n">q</span><span class="p">:</span><span class="w"> </span><span class="nv">$q</span><span class="p">,</span><span class="w">
      </span><span class="n">sort</span><span class="p">:</span><span class="w"> </span><span class="nv">$sort</span><span class="p">,</span><span class="w">
      </span><span class="n">order</span><span class="p">:</span><span class="w"> </span><span class="nv">$order</span><span class="p">,</span><span class="w">
      </span><span class="n">page</span><span class="p">:</span><span class="w"> </span><span class="nv">$page</span><span class="p">,</span><span class="w">
      </span><span class="n">perPage</span><span class="p">:</span><span class="w"> </span><span class="nv">$perPage</span><span class="w">
      </span><span class="p">)</span><span class="w">

    </span><span class="p">{</span><span class="w">
      </span><span class="n">id</span><span class="w">
      </span><span class="n">title</span><span class="w">
      </span><span class="n">author</span><span class="w">
      </span><span class="n">publishedYear</span><span class="w">
      </span><span class="n">genre</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">}</span><span class="err">"</span><span class="p">,</span><span class="w">

  </span><span class="err">"</span><span class="n">variables</span><span class="err">":</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="err">"</span><span class="n">q</span><span class="err">":</span><span class="w"> </span><span class="err">"</span><span class="n">harry</span><span class="w"> </span><span class="n">potter</span><span class="err">"</span><span class="p">,</span><span class="w">
    </span><span class="err">"</span><span class="n">sort</span><span class="err">":</span><span class="w"> </span><span class="err">"</span><span class="n">title</span><span class="err">"</span><span class="p">,</span><span class="w">
    </span><span class="err">"</span><span class="n">order</span><span class="err">":</span><span class="w"> </span><span class="err">"</span><span class="n">asc</span><span class="err">"</span><span class="p">,</span><span class="w">
    </span><span class="err">"</span><span class="n">page</span><span class="err">":</span><span class="w"> </span><span class="err">2</span><span class="p">,</span><span class="w">
    </span><span class="err">"</span><span class="n">perPage</span><span class="err">":</span><span class="w"> </span><span class="err">2</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">GraphQL</title><link href="http://localhost:4000/2025/06/07/graphqL.html" rel="alternate" type="text/html" title="GraphQL" /><published>2025-06-07T00:00:00+05:30</published><updated>2025-06-07T00:00:00+05:30</updated><id>http://localhost:4000/2025/06/07/graphqL</id><content type="html" xml:base="http://localhost:4000/2025/06/07/graphqL.html"><![CDATA[<div class="video">
    <figure>
    <iframe src="https://www.youtube.com/embed/muJlCEObJtU?color=white&amp;theme=light" allowfullscreen="">
     </iframe>
     </figure>
     </div>

<h2 id="create">Create</h2>

<figure class="highlight"><pre><code class="language-graphql" data-lang="graphql"><span class="k">mutation</span><span class="w"> </span><span class="n">CreateBook</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">createBook</span><span class="p">(</span><span class="n">input</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">title</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Great Gatsby"</span><span class="p">,</span><span class="w">
    </span><span class="n">author</span><span class="p">:</span><span class="w"> </span><span class="s2">"F. Scott Fitzgerald"</span><span class="p">,</span><span class="w">
    </span><span class="n">publishedYear</span><span class="p">:</span><span class="w"> </span><span class="mi">1925</span><span class="p">,</span><span class="w">
    </span><span class="n">genre</span><span class="p">:</span><span class="w"> </span><span class="s2">"Classic"</span><span class="p">,</span><span class="w">
    </span><span class="n">isbn</span><span class="p">:</span><span class="w"> </span><span class="s2">"9780743273565"</span><span class="w">
  </span><span class="p">})</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">id</span><span class="w">
    </span><span class="n">title</span><span class="w">
    </span><span class="n">author</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p><strong>Response</strong></p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"createBook"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"101"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Great Gatsby"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="s2">"F. Scott Fitzgerald"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<h2 id="read">Read</h2>

<figure class="highlight"><pre><code class="language-graphql" data-lang="graphql"><span class="k">query</span><span class="w"> </span><span class="n">GetAllBooks</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">books</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">id</span><span class="w">
    </span><span class="n">title</span><span class="w">
    </span><span class="n">author</span><span class="w">
    </span><span class="n">publishedYear</span><span class="w">
    </span><span class="n">genre</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p><strong>Response</strong></p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"books"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"101"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Great Gatsby"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="s2">"F. Scott Fitzgerald"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"publishedYear"</span><span class="p">:</span><span class="w"> </span><span class="mi">1925</span><span class="p">,</span><span class="w">
        </span><span class="nl">"genre"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Classic"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"102"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Catcher in the Rye"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="s2">"J. D. Salinger"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"publishedYear"</span><span class="p">:</span><span class="w"> </span><span class="mi">1951</span><span class="p">,</span><span class="w">
        </span><span class="nl">"genre"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Classic"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<figure class="highlight"><pre><code class="language-graphql" data-lang="graphql"><span class="k">query</span><span class="w"> </span><span class="n">GetBook</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">book</span><span class="p">(</span><span class="n">id</span><span class="p">:</span><span class="w"> </span><span class="s2">"123"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">id</span><span class="w">
    </span><span class="n">title</span><span class="w">
    </span><span class="n">author</span><span class="w">
    </span><span class="n">publishedYear</span><span class="w">
    </span><span class="n">genre</span><span class="w">
    </span><span class="n">isbn</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p><strong>Response</strong></p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"book"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"123"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Great Gatsby"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="s2">"F. Scott Fitzgerald"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"publishedYear"</span><span class="p">:</span><span class="w"> </span><span class="mi">1925</span><span class="p">,</span><span class="w">
      </span><span class="nl">"genre"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Classic"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"isbn"</span><span class="p">:</span><span class="w"> </span><span class="s2">"9780743273565"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<h2 id="update">Update</h2>

<figure class="highlight"><pre><code class="language-graphql" data-lang="graphql"><span class="k">mutation</span><span class="w"> </span><span class="n">UpdateBook</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">updateBook</span><span class="p">(</span><span class="n">id</span><span class="p">:</span><span class="w"> </span><span class="s2">"123"</span><span class="p">,</span><span class="w"> </span><span class="n">input</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">title</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Great Gatsby (Special Edition)"</span><span class="p">,</span><span class="w">
    </span><span class="n">genre</span><span class="p">:</span><span class="w"> </span><span class="s2">"Literary Classic"</span><span class="w">
  </span><span class="p">})</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">id</span><span class="w">
    </span><span class="n">title</span><span class="w">
    </span><span class="n">genre</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p><strong>Response</strong></p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"updateBook"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"123"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Great Gatsby (Special Edition)"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"genre"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Literary Classic"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<h2 id="delete">Delete</h2>

<figure class="highlight"><pre><code class="language-graphql" data-lang="graphql"><span class="k">mutation</span><span class="w"> </span><span class="n">DeleteBook</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">deleteBook</span><span class="p">(</span><span class="n">id</span><span class="p">:</span><span class="w"> </span><span class="s2">"123"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">id</span><span class="w">
    </span><span class="n">title</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p><strong>Response</strong></p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"deleteBook"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"123"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Great Gatsby (Special Edition)"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<h2 id="search">Search</h2>

<p>Only supports paramter <code class="language-plaintext highlighter-rouge">q</code> for now.</p>

<figure class="highlight"><pre><code class="language-graphql" data-lang="graphql"><span class="k">query</span><span class="w"> </span><span class="n">SearchBooks</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">books</span><span class="p">(</span><span class="n">q</span><span class="p">:</span><span class="w"> </span><span class="s2">"Gatsby"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">id</span><span class="w">
    </span><span class="n">title</span><span class="w">
    </span><span class="n">author</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p><strong>Response</strong></p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"books"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"101"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Great Gatsby"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="s2">"F. Scott Fitzgerald"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"102"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Waste Gatsby"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="s2">"J. D. Salinger"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<h2 id="pagination">Pagination</h2>

<p>Only supports <code class="language-plaintext highlighter-rouge">page</code> and <code class="language-plaintext highlighter-rouge">perPage</code> for now.</p>

<figure class="highlight"><pre><code class="language-graphql" data-lang="graphql"><span class="k">query</span><span class="w"> </span><span class="n">GetBooks</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">books</span><span class="p">(</span><span class="n">page</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">perPage</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">id</span><span class="w">
    </span><span class="n">title</span><span class="w">
    </span><span class="n">author</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p><strong>Response</strong></p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"books"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"101"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Great Gatsby"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="s2">"F. Scott Fitzgerald"</span><span class="w">
      </span><span class="p">},</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"102"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Catcher in the Rye"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="s2">"J. D. Salinger"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<h2 id="filtering">Filtering</h2>

<figure class="highlight"><pre><code class="language-graphql" data-lang="graphql"><span class="k">query</span><span class="w"> </span><span class="n">GetBooks</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">books</span><span class="p">(</span><span class="n">filters</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">genre</span><span class="p">:</span><span class="w"> </span><span class="s2">"Classic"</span><span class="p">,</span><span class="w">
    </span><span class="n">author</span><span class="p">:</span><span class="w"> </span><span class="s2">"F. Scott Fitzgerald"</span><span class="w">
  </span><span class="p">})</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">id</span><span class="w">
    </span><span class="n">title</span><span class="w">
    </span><span class="n">author</span><span class="w">
    </span><span class="n">genre</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p><strong>Response</strong></p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"books"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"101"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Great Gatsby"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="s2">"F. Scott Fitzgerald"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"genre"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Classic"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span></code></pre></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Uravu - Relationship Detection in Injee</title><link href="http://localhost:4000/2025/04/13/uravu-relationship-detection-in-injee.html" rel="alternate" type="text/html" title="Uravu - Relationship Detection in Injee" /><published>2025-04-13T00:00:00+05:30</published><updated>2025-04-13T00:00:00+05:30</updated><id>http://localhost:4000/2025/04/13/uravu-relationship-detection-in-injee</id><content type="html" xml:base="http://localhost:4000/2025/04/13/uravu-relationship-detection-in-injee.html"><![CDATA[<p><img src="https://ia600107.us.archive.org/1/items/baby-and-mother/WhatsApp%20Image%202025-03-06%20at%2021.32.19.jpeg" alt="" /></p>

<p>Uravu is the object relationship intelligence engine yet to be developed for Injee. If done right, it will be the stepping stone for GraphQL, ORM classes export in various languages, and will enable Database Script export which will properly include foreign keys.</p>

<p>Injee was created to increase front end developers productivity massively, and it should also decrease the load on back end developers in the times ahead. Till today human needed to model a Database for CRUD app, no matter even if you use advanced frameworks like Ruby on Rails, Django etc. This is waste of time. We <strong>believe</strong> that a REST request too server, in a span of time holds enough information to model a database in a automated way. This is what we would like to develop in the near or far future depending on this cosmos makes us tick.</p>

<p>When modelling relationships between tables, there can be many types of relationships, this is how injee will detect it.</p>

<h2 id="has-one">has one</h2>

<p>A record can be related to another record in a way that it has only one relation with record in another table, and not anymore. This is called has one relation.</p>

<p>There is a table named citizens, and a citizen can have only one passport, so in injee it will be modelled as shown:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"citizens"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"e9b3cd95-861e-414e-9417-c6267b51c222"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Aravindan"</span><span class="w">
  </span><span class="p">}]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"passports"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"citizen_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"e9b3cd95-861e-414e-9417-c6267b51c222"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"number"</span><span class="p">:</span><span class="w"> </span><span class="s2">"12345678"</span><span class="w">
  </span><span class="p">}]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>There is a table <code class="language-plaintext highlighter-rouge">passports</code>, and a passport has a column named <code class="language-plaintext highlighter-rouge">citizen_id</code> that points to a citizen. Injee will scan for columns that has <code class="language-plaintext highlighter-rouge">_id</code> at its end, in this case its <code class="language-plaintext highlighter-rouge">citizen_id</code>, it will check if there is a table named <code class="language-plaintext highlighter-rouge">citizen</code> or <code class="language-plaintext highlighter-rouge">citizens</code>, if yes it will check if there is a citizen with id <code class="language-plaintext highlighter-rouge">e9b3cd95-861e-414e-9417-c6267b51c222</code>, if yes, injee will relate to it.</p>

<h2 id="has-many">has many</h2>

<p>In the ata structures below user has many owned books, one can model it as shown, where there is a table called <code class="language-plaintext highlighter-rouge">users</code>, and a user can have many <code class="language-plaintext highlighter-rouge">books</code></p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"users"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"e9b3cd95-861e-414e-9417-c6267b51c222"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Aravindan"</span><span class="w">
  </span><span class="p">}]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"books"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"user_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"e9b3cd95-861e-414e-9417-c6267b51c222"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Lord of the Rings"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"user_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"e9b3cd95-861e-414e-9417-c6267b51c222"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Hobbit"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>If you look at both the book records shown above, you can see that the <code class="language-plaintext highlighter-rouge">user_id</code> points to the same <code class="language-plaintext highlighter-rouge">user</code>. Injee will be smart to realize that this is a has many relationship. That is users has many books.</p>

<h2 id="belongs-to">belongs to</h2>

<p>A citizen can have a passport as shown:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"citizens"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"e9b3cd95-861e-414e-9417-c6267b51c222"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Aravindan"</span><span class="w">
  </span><span class="p">}]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"passports"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"citizen_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"e9b3cd95-861e-414e-9417-c6267b51c222"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"number"</span><span class="p">:</span><span class="w"> </span><span class="s2">"12345678"</span><span class="w">
  </span><span class="p">}]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>This means a passport belongs to a citizen, Injee will be smart enough to identify it.</p>

<h2 id="has-and-belongs-to-many-habtm">has and belongs to many (habtm)</h2>

<p>A book can have many authors, and an author can have many books, this is called has and belongs to many relation. It can be represented as follows.,</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"authors"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"aravindan_id"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Aravindan"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="p">{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"karthikeyan_id"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Karthikeyan"</span><span class="w">
  </span><span class="p">}]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"books"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"clojure_id"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Clojure"</span><span class="p">,</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="p">{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"python_id"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Python"</span><span class="p">,</span><span class="w">
  </span><span class="p">}]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"authors_books"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w">
    </span><span class="nl">"author_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"aravindan_id"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"book_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"python_id"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="p">{</span><span class="w">
    </span><span class="nl">"author_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"karthikeyan_id"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"book_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"clojure_id"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="p">{</span><span class="w">
    </span><span class="nl">"author_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"karthikeyan_id"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"book_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"python_id"</span><span class="w">
  </span><span class="p">}]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Look at the table <code class="language-plaintext highlighter-rouge">authors_books</code> above, it contains <code class="language-plaintext highlighter-rouge">author_id</code> and <code class="language-plaintext highlighter-rouge">book_id</code>. Injee should be smart enough to identify this is habtm. But, how we create this <code class="language-plaintext highlighter-rouge">authors_books</code> from CRUD interface or something? Should we hit <code class="language-plaintext highlighter-rouge">POST /authors_books</code> endpoint with data? For now maybe yes. Or what if we have hit <code class="language-plaintext highlighter-rouge">POST /authors</code> and <code class="language-plaintext highlighter-rouge">POST /books</code> endpoints with filed named <code class="language-plaintext highlighter-rouge">book_id[]</code> and <code class="language-plaintext highlighter-rouge">author_id[]</code>? The latter seems more elegant right?</p>

<h2 id="automatic-model-detection">Automatic model detection</h2>

<p>So how does Injee detect a table is related to another table? One hint is, if the key is say <code class="language-plaintext highlighter-rouge">user_id</code> or <code class="language-plaintext highlighter-rouge">users_id</code>, and if there is table named <code class="language-plaintext highlighter-rouge">users</code> then Injee will detect it. But what if there is table named <code class="language-plaintext highlighter-rouge">users</code>, and user owns books, and if the key in <code class="language-plaintext highlighter-rouge">books</code> is <code class="language-plaintext highlighter-rouge">owned_by_id</code>, still Injee should detect it. Welcome to the magic of UUID.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"users"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"e9b3cd95-861e-414e-9417-c6267b51c222"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Aravindan"</span><span class="w">
  </span><span class="p">}]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"books"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"owned_by_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"e9b3cd95-861e-414e-9417-c6267b51c222"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Lord of the Rings"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"owned_by_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"e9b3cd95-861e-414e-9417-c6267b51c222"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The Hobbit"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>In the case above, Injee will check if there is a table named <code class="language-plaintext highlighter-rouge">owned_by</code> or it will try to pluralize it and see if there is a table in that name. If not, its UUID value is used. This could be expensive, but we believe that computers should work for us and no the other way around.</p>

<h2 id="polymorphism">Polymorphism</h2>

<p>Say you have a table named details with the following data:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"details"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"e9b3cd95-861e-414e-9417-c6267b51c222"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Aravindan"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"My name is Aravindan"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"belongs_to_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"user_aravindan_uuid"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="p">{</span><span class="w">
    </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"e9b3cd95-861e-414e-9417-c6267b51c222"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Data Scientists"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"A group for Data Scientists"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"belongs_to_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"group_data_scientists_uuid"</span><span class="w">
  </span><span class="p">}]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">belongs_to_id</code> in the first record points to a record in <code class="language-plaintext highlighter-rouge">users</code> table, and in the second record, points to a record in <code class="language-plaintext highlighter-rouge">groups</code> table. Injee should be smart enough to detect it, and deduce that this is a polymorphic relationship.</p>

<h2 id="advantages">Advantages</h2>

<p>The advantage is that, the front end dev gets seamless experience. One is able to hit some URLs, and when one requires DB scripts to create databases, or ORM’s that needs to be generated in Python, Ruby or what ever language, those get generated seamlessly along with relations and foreign keys. If we implement GraphQL support in Injee, this uravu project will come handy for us. This should look like magic if we do our work right</p>

<h2 id="disadvantages">Disadvantages</h2>

<p>The disadvantage we fear is performance, let’s say that one has a gigabyte of data in memory, and we want to process it, may be the uravu engine will take time to process, maybe it could crash your system due to limited memory. We just don’t know. But we will give it a shot. We firmly believe in future fast volatile and slow permanent storage will blend to form fast permanent storage, then the equation for Databases will change and size of data will not matter much, even if it’s a lot.</p>

<iframe width="100%" height="315" src="https://www.youtube.com/embed/d1_njf8BGsI?si=_Ahio6eCA-b3cwG2" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">How will authentication work?</title><link href="http://localhost:4000/2025/03/06/how-will-authentication-workt.html" rel="alternate" type="text/html" title="How will authentication work?" /><published>2025-03-06T00:00:00+05:30</published><updated>2025-03-06T00:00:00+05:30</updated><id>http://localhost:4000/2025/03/06/how-will-authentication-workt</id><content type="html" xml:base="http://localhost:4000/2025/03/06/how-will-authentication-workt.html"><![CDATA[<h2 id="what-is-authentication-in-injee">What is authentication in Injee?</h2>

<p>Injee is an automated backend not meant for serious projects, it was created due to frustration of a backend developer who was forced to learn ReactJS. To learn it, he had to concentrate on ReactJS hard, for that the developer should not think about the backend, it’s for that Injee was created.</p>

<p>Injee is great for learners, and it’s great for POC. Maybe it will get better, maybe not. So authentication in Injee might not be super professional. This document will describe how.</p>

<h2 id="how-it-will-work">How it will work</h2>

<p>So you are a designer / front end dev, you have designed a page like this.</p>

<p><img src="https://archive.org/download/injee_login/injee_login.svg" alt="" /></p>

<p>Once the user clicks login, ask for username, and password; or email, and password. Say the user credentials are stored in table <code class="language-plaintext highlighter-rouge">users</code>, give a <code class="language-plaintext highlighter-rouge">POST</code> hit as shown:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>POST /auth/:table/login
</code></pre></div></div>

<p>You can pass the these parameters in the hit:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"username"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"password"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>It could also be email and password as shown. Pass them as body params.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"email"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"password"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Once successful login, the response will be as shown:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"token"</span><span class="p">:</span><span class="w"> </span><span class="s2">"slkdgslkjg3284923rsdfjsdfj"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>This token will be accoumpanied by HTTP status <code class="language-plaintext highlighter-rouge">200</code>. Else with status <code class="language-plaintext highlighter-rouge">401</code> unauthorized, you will get a message as shown:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Invalid username or password"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>To get user details, one needs to hit a URL like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>GET /auth/:table/current
</code></pre></div></div>

<p>Along with the auth token which was returned on successful login. You might get the user details as shown:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"username"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"first_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"last_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"email"</span><span class="p">:</span><span class="w"> </span><span class="s2">"......"</span><span class="p">,</span><span class="w">
  </span><span class="err">....</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Once logged in you might change the UI top reflect a user icon.</p>

<p><img src="https://archive.org/download/injee_login/injee_logged_in.svg" alt="" /></p>

<p>When clicked it might goto users page, which displays user details.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[What is authentication in Injee?]]></summary></entry><entry><title type="html">Welcome to Jekyll!</title><link href="http://localhost:4000/jekyll/update/2025/02/19/welcome-to-jekyll.html" rel="alternate" type="text/html" title="Welcome to Jekyll!" /><published>2025-02-19T12:20:12+05:30</published><updated>2025-02-19T12:20:12+05:30</updated><id>http://localhost:4000/jekyll/update/2025/02/19/welcome-to-jekyll</id><content type="html" xml:base="http://localhost:4000/jekyll/update/2025/02/19/welcome-to-jekyll.html"><![CDATA[<p>You’ll find this post in your <code class="language-plaintext highlighter-rouge">_posts</code> directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run <code class="language-plaintext highlighter-rouge">jekyll serve</code>, which launches a web server and auto-regenerates your site when a file is updated.</p>

<p>Jekyll requires blog post files to be named according to the following format:</p>

<p><code class="language-plaintext highlighter-rouge">YEAR-MONTH-DAY-title.MARKUP</code></p>

<p>Where <code class="language-plaintext highlighter-rouge">YEAR</code> is a four-digit number, <code class="language-plaintext highlighter-rouge">MONTH</code> and <code class="language-plaintext highlighter-rouge">DAY</code> are both two-digit numbers, and <code class="language-plaintext highlighter-rouge">MARKUP</code> is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works.</p>

<p>Jekyll also offers powerful support for code snippets:</p>

<figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">def</span> <span class="nf">print_hi</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
  <span class="nb">puts</span> <span class="s2">"Hi, </span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="n">print_hi</span><span class="p">(</span><span class="s1">'Tom'</span><span class="p">)</span>
<span class="c1">#=&gt; prints 'Hi, Tom' to STDOUT.</span></code></pre></figure>

<p>Check out the <a href="https://jekyllrb.com/docs/home">Jekyll docs</a> for more info on how to get the most out of Jekyll. File all bugs/feature requests at <a href="https://github.com/jekyll/jekyll">Jekyll’s GitHub repo</a>. If you have questions, you can ask them on <a href="https://talk.jekyllrb.com/">Jekyll Talk</a>.</p>]]></content><author><name></name></author><category term="jekyll" /><category term="update" /><summary type="html"><![CDATA[You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run jekyll serve, which launches a web server and auto-regenerates your site when a file is updated.]]></summary></entry><entry><title type="html">Breaking changes in Injee 1.0.0</title><link href="http://localhost:4000/2024/12/22/breaking-changes-in-injee-1.0.0.html" rel="alternate" type="text/html" title="Breaking changes in Injee 1.0.0" /><published>2024-12-22T00:00:00+05:30</published><updated>2024-12-22T00:00:00+05:30</updated><id>http://localhost:4000/2024/12/22/breaking-changes-in-injee-1.0.0</id><content type="html" xml:base="http://localhost:4000/2024/12/22/breaking-changes-in-injee-1.0.0.html"><![CDATA[<p>To add more <a href="ideas.html">features</a> to Injee, we are listening to its user feedback, and we are writing automated tests, so that future rollouts will be faster. Having said that, we have discovered a thing that could break some people’s app. These are the changes we have identified so far:</p>

<h2 id="deleting-table">Deleting Table</h2>

<p>Let’s say that you want delete a table, this is how you do it currently:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>curl <span class="nt">-X</span> DELETE http://localhost:4125/api/delete-table/users</code></pre></figure>

<p>We get a message as shown below, informing us that the table has been deleted:</p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"deleted table users"</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p>From now on the <code class="language-plaintext highlighter-rouge">api</code> above will be replaced with <code class="language-plaintext highlighter-rouge">ops</code>, and status returned will be 204. So the new api will be like this:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>curl <span class="nt">-X</span> DELETE http://localhost:4125/ops/delete-table/users    </code></pre></figure>

<h2 id="listing-tables">Listing Tables</h2>

<p>Currently this is how one lists tables:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>curl <span class="nt">-X</span> GET http://localhost:4125/ops/tables</code></pre></figure>

<p>Output</p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">[</span><span class="w">
  </span><span class="s2">"books"</span><span class="p">,</span><span class="w">
  </span><span class="s2">"users"</span><span class="w">
</span><span class="p">]</span></code></pre></figure>

<p>From 1.0.0, this is what will be returned:</p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"tables"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="s2">"books"</span><span class="p">,</span><span class="w">
    </span><span class="s2">"users"</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p>If you are following Injee, you know that we want to build an admin UI for Injee so that UI/UX people don’t have to use command line to administer Injee. We prefer to use HTMX as it requires less development effort than other JavaScript frameworks, the above returned will enable us to <a href="https://github.com/fhd/clostache?tab=readme-ov-file#implicit-iterators">embed it properly using mustache</a>.</p>

<h2 id="thats-it">That’s it!</h2>

<p>That’s it for now. Until the next Injee update, bye bye!!</p>]]></content><author><name></name></author><summary type="html"><![CDATA[To add more features to Injee, we are listening to its user feedback, and we are writing automated tests, so that future rollouts will be faster. Having said that, we have discovered a thing that could break some people’s app. These are the changes we have identified so far:]]></summary></entry><entry><title type="html">Meditations</title><link href="http://localhost:4000/2024/12/11/meditations.html" rel="alternate" type="text/html" title="Meditations" /><published>2024-12-11T00:00:00+05:30</published><updated>2024-12-11T00:00:00+05:30</updated><id>http://localhost:4000/2024/12/11/meditations</id><content type="html" xml:base="http://localhost:4000/2024/12/11/meditations.html"><![CDATA[<p><img src="https://archive.org/download/meditations_20241211/meditations.png" alt="" /></p>

<p>Injee’s success has been swift, thanks to rock solid programming language <a href="https://clojure.org">Clojure</a> we were was able to achieve it. Though Injee has got success upon success, we know that this could bring complacency and failure as we are drowned in the dope of success. Though there are <a href="/ideas.html">features that need to be implemented Injee</a>, we are announcing a feature freeze till February 2025. During this time we will be looking at Injee’s code, reviewing it, perfecting it, and testing it, improving the documentation..</p>

<p>This will ensure Injee’s code is agile and is able to respond to changes as and when necessary. Injee is created by Clojure learners, and not experts, we have used ring which is new to us. We need to upgrade our knowledge in those domains too and implement our learnings in Injee.</p>

<p>What we wish to achieve is to have a rock solid codebase for Injee, with which we can develop new features. We hope Injee brings happiness to your life.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">injex</title><link href="http://localhost:4000/2024/11/16/injex.html" rel="alternate" type="text/html" title="injex" /><published>2024-11-16T00:00:00+05:30</published><updated>2024-11-16T00:00:00+05:30</updated><id>http://localhost:4000/2024/11/16/injex</id><content type="html" xml:base="http://localhost:4000/2024/11/16/injex.html"><![CDATA[<p><img src="https://archive.org/download/injex/injex.png" alt="" /></p>

<p>Every backend framework creator does get a excited while seeing how sexy HTMX is, as a creator of injee, I am no different. I have been thinking about how to make injee work with HTMX.</p>

<p>JavaScript frameworks are good to people only who know JavaScript, but for a person who knows programming they suck. So its natural that any backend creator does want to support HTMX.</p>

<p>There are my ideas for Injex = Injee + HTMX.</p>

<h2 id="defining-views">Defining views</h2>

<p>Views in injee are just normal text file, say you want to display a content about user, then in the place where injee runs, define a file called <code class="language-plaintext highlighter-rouge">/views/users/display.html</code>, now say that file has the following content:</p>

<figure class="highlight"><pre><code class="language-html" data-lang="html"><span class="nt">&lt;h1&gt;</span> {{ user.name }} <span class="nt">&lt;/h1&gt;</span>
<span class="nt">&lt;h2&gt;</span> {{ user.profession }} <span class="nt">&lt;/h2&gt;</span></code></pre></figure>

<h2 id="calling-views-from-views">Calling views from views</h2>

<p>Now when you call <code class="language-plaintext highlighter-rouge">/views/:table/:view</code>, that is <code class="language-plaintext highlighter-rouge">http://localhost:4125/views/users/CRDT-Y7-HQ/display.html</code>, then, the user ones values:</p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
 </span><span class="err">id:</span><span class="w"> </span><span class="err">CRDT-Y</span><span class="mi">7</span><span class="err">-HQ</span><span class="w">
 </span><span class="err">name:</span><span class="w"> </span><span class="err">John</span><span class="w"> </span><span class="err">Doe</span><span class="w">
 </span><span class="err">profession:</span><span class="w"> </span><span class="err">Software</span><span class="w"> </span><span class="err">Engineer</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p>Then the returned HTML would be:</p>

<figure class="highlight"><pre><code class="language-html" data-lang="html"><span class="nt">&lt;h1&gt;</span> John Doe <span class="nt">&lt;/h1&gt;</span>
<span class="nt">&lt;h2&gt;</span> Software Engineer <span class="nt">&lt;/h2&gt;</span></code></pre></figure>

<h2 id="calling-views-for-all-records">Calling views for all records</h2>

<p>One can call views for all records using URL like this: <code class="language-plaintext highlighter-rouge">http://localhost:4125/views/users/all/display.html</code>. In this special case, one can paginate, search and so on.</p>

<h2 id="crud">CRUD</h2>

<p>Of course you might need some views to be returned when you CRUD, right now I am not sure how to do it. But if I get the idea, I will write about it.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Released Injee 0.4.0 - Ability to delete table</title><link href="http://localhost:4000/2024/08/21/released-injee-0-4-0-ability-to-delete-table.html" rel="alternate" type="text/html" title="Released Injee 0.4.0 - Ability to delete table" /><published>2024-08-21T00:00:00+05:30</published><updated>2024-08-21T00:00:00+05:30</updated><id>http://localhost:4000/2024/08/21/released-injee-0-4-0-ability-to-delete-table</id><content type="html" xml:base="http://localhost:4000/2024/08/21/released-injee-0-4-0-ability-to-delete-table.html"><![CDATA[<p>We at Injee are pleased to announce the release of Injee 0.4.0. Sometimes one need to delete all data in table and get it clean, and we have an api for that.</p>

<p>So let’s start our injee:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>curl <span class="nt">-L</span> https://yu7.in/run-injee | sh</code></pre></figure>

<p>Now let’s create a user:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>curl <span class="nt">-X</span> POST http://localhost:4125/api/users <span class="se">\</span>
       <span class="nt">-H</span> <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
       <span class="nt">-d</span> <span class="s1">'{"name": "Aravindan", "country": "Sri Lanka"}'</span></code></pre></figure>

<p>So we get a confirmation of the creation:</p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Aravindan"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"country"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Sri Lanka"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"created_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2024-08-21T15:04:25Z"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"updated_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2024-08-21T15:04:25Z"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"a65cf235-2a0e-4ca2-9114-79fb3722184d"</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p>Now let’s create a book:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>curl <span class="nt">-X</span> POST http://localhost:4125/api/books <span class="se">\</span>
       <span class="nt">-H</span> <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
       <span class="nt">-d</span> <span class="s1">'{"title": "Adventures of Huckleberry Finn", "author": "Mark Twain"}'</span></code></pre></figure>

<p>As we see below it’s created successfully:</p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Adventures of Huckleberry Finn"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Mark Twain"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"created_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2024-08-21T15:04:32Z"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"updated_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2024-08-21T15:04:32Z"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"8f0df4e3-bc34-4dd2-a979-39469168bf10"</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p>Let’s list tables:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>curl <span class="nt">-X</span> GET http://localhost:4125/ops/tables</code></pre></figure>

<p>As we see below there are two tables, <code class="language-plaintext highlighter-rouge">users</code> and<code class="language-plaintext highlighter-rouge"> books</code>:</p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">[</span><span class="w">
  </span><span class="s2">"users"</span><span class="p">,</span><span class="w">
  </span><span class="s2">"books"</span><span class="w">
</span><span class="p">]</span></code></pre></figure>

<p>Now let’s delete the table <code class="language-plaintext highlighter-rouge">users</code>:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>curl <span class="nt">-X</span> DELETE http://localhost:4125/api/delete-table/users</code></pre></figure>

<p>We get a message as shown below, informing us that the table has been deleted:</p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span><span class="w">
  </span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"deleted table users"</span><span class="w">
</span><span class="p">}</span></code></pre></figure>

<p>Now let’s list tables:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>curl <span class="nt">-X</span> GET http://localhost:4125/ops/tables</code></pre></figure>

<p>As you can see below, we don’t see <code class="language-plaintext highlighter-rouge">users</code> table anymore.</p>

<figure class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">[</span><span class="w">
  </span><span class="s2">"books"</span><span class="w">
</span><span class="p">]</span></code></pre></figure>

<p>In the terminal where injee is started, hit <code class="language-plaintext highlighter-rouge">CTRL+C</code> to stop it.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[We at Injee are pleased to announce the release of Injee 0.4.0. Sometimes one need to delete all data in table and get it clean, and we have an api for that.]]></summary></entry></feed>