<!-- CANARY: REQ=REQ-DOCS-003; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-28 --> <h2 id="building-your-first-application" class="position-relative d-flex align-items-center group"> <span>Building Your First Application</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="building-your-first-application" aria-haspopup="dialog" aria-label="Share link: Building Your First Application"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h2><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden> <div class="hsm-dialog" role="document"> <div class="hsm-header"> <h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2> <button type="button" class="hsm-close" aria-label="Close"> <i class="fa-solid fa-xmark"></i> </button> </div> <div class="hsm-body"> <label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label> <div class="input-group mb-4 hsm-url-group"> <input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" /> <button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy"> <i class="fa-duotone fa-clipboard" aria-hidden="true"></i> </button> </div> <div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div> <div class="hsm-share-grid"> <a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-twitter me-2"></i>Twitter </a> <a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-linkedin me-2"></i>LinkedIn </a> <a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-facebook me-2"></i>Facebook </a> </div> </div> </div> </div> <style> .heading-share-modal { position: fixed; inset: 0; display: flex; justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.6); z-index: 1050; padding: 1rem; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .heading-share-modal[hidden] { display: none !important; } .hsm-dialog { max-width: 420px; width: 100%; background: var(--bs-body-bg, #fff); color: var(--bs-body-color, #212529); border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); border-radius: 1rem; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; animation: hsm-fade-in 0.2s ease-out; } @keyframes hsm-fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } [data-bs-theme="dark"] .hsm-dialog { background: #1e293b; border-color: rgba(255,255,255,0.1); color: #f8f9fa; } .hsm-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); background: rgba(0,0,0,0.02); } [data-bs-theme="dark"] .hsm-header { background: rgba(255,255,255,0.02); border-color: rgba(255,255,255,0.1); } .hsm-close { background: transparent; border: none; color: inherit; opacity: 0.5; padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 1.2rem; line-height: 1; transition: opacity 0.2s; } .hsm-close:hover { opacity: 1; } .hsm-body { padding: 1.5rem; } .hsm-url-group { display: flex !important; align-items: stretch; } .hsm-url-group .form-control { flex: 1; min-width: 0; margin: 0; background: var(--bs-secondary-bg, #f8f9fa); border-color: var(--bs-border-color, #dee2e6); border-top-right-radius: 0; border-bottom-right-radius: 0; height: 42px; } .hsm-url-group .btn { flex: 0 0 auto; margin: 0; margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; height: 42px; display: flex; align-items: center; justify-content: center; padding: 0 1.25rem; z-index: 2; } [data-bs-theme="dark"] .hsm-url-group .form-control { background: #0f172a; border-color: #334155; color: #e2e8f0; } .hsm-share-grid { display: flex; flex-direction: column; gap: 0.5rem; } .hsm-share-grid .btn { display: flex; align-items: center; justify-content: center; font-size: 0.9rem; padding: 0.6rem; border-color: var(--bs-border-color); width: 100%; } [data-bs-theme="dark"] .hsm-share-grid .btn { color: #e2e8f0; border-color: #475569; } [data-bs-theme="dark"] .hsm-share-grid .btn:hover { background: #334155; border-color: #cbd5e1; } </style> <script> (function(){ const modal = document.getElementById('headingShareModal'); if(!modal) return; const input = modal.querySelector('#headingShareInput'); const copyBtn = modal.querySelector('.hsm-copy'); const twitter = modal.querySelector('#share-twitter'); const linkedin = modal.querySelector('#share-linkedin'); const facebook = modal.querySelector('#share-facebook'); const closeBtn = modal.querySelector('.hsm-close'); let lastFocus=null; let trapBound=false; function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; } function isOpen(){ return !modal.hasAttribute('hidden'); } function hydrate(id){ const url=buildUrl(id); input.value=url; const enc=encodeURIComponent(url); const text=encodeURIComponent(document.title); if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`; if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`; if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`; } function openModal(id){ lastFocus=document.activeElement; hydrate(id); if(!isOpen()){ modal.removeAttribute('hidden'); } requestAnimationFrame(()=>{ input.focus(); }); trapFocus(); } function closeModal(){ if(!isOpen()) return; modal.setAttribute('hidden',''); if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus(); } function copyCurrent(){ try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); } catch(e){ fallback(); } } function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} } function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); } function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); } function bindShareButtons(){ document.querySelectorAll('.h-share').forEach(btn=>{ if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; } }); } bindShareButtons(); if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', bindShareButtons); } else { requestAnimationFrame(bindShareButtons); } document.addEventListener('click', function(e){ const shareBtn=e.target.closest && e.target.closest('.h-share'); if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); } }, true); document.addEventListener('click', e=>{ if(e.target===modal) closeModal(); if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); } if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); } }); document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); }); function trapFocus(){ if(trapBound) return; trapBound=true; modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } }); } if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); }); })(); </script><p>This guide walks you through building a complete application with Geode. You&rsquo;ll learn how to set up a project, connect to the database, design a data model, perform CRUD operations, and handle errors properly.</p> <h3 id="what-were-building" class="position-relative d-flex align-items-center group"> <span>What We&amp;rsquo;re Building</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="what-were-building" aria-haspopup="dialog" aria-label="Share link: What Were Building"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>We&rsquo;ll build a simple <strong>Task Management System</strong> that demonstrates:</p> <ul> <li>Creating nodes (tasks, users, projects)</li> <li>Establishing relationships (assignments, ownership)</li> <li>Parameterized queries for security</li> <li>CRUD operations</li> <li>Transaction handling</li> <li>Error handling best practices</li> </ul> <h3 id="prerequisites" class="position-relative d-flex align-items-center group"> <span>Prerequisites</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="prerequisites" aria-haspopup="dialog" aria-label="Share link: Prerequisites"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Before starting, ensure you have:</p> <ul> <li>Geode server running (see <a href="/guides/installation/" >Installation Guide</a> )</li> <li>Your preferred programming language environment set up</li> <li>Basic understanding of graph concepts</li> </ul> <p>Verify Geode is running:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">geode ping localhost:3141 </span></span></code></pre></div><hr> <h3 id="project-setup" class="position-relative d-flex align-items-center group"> <span>Project Setup</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="project-setup" aria-haspopup="dialog" aria-label="Share link: Project Setup"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Set up your project structure for each language.</p> <div class="docs-tabs mb-4"> <ul class="nav nav-tabs" id="tabs-1774880881837035856" role="tablist"><li class="nav-item" role="presentation"> <button class="nav-link active" id="tabs-1774880881837035856-tab-0-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881837035856-tab-0" type="button" role="tab" aria-controls="tabs-1774880881837035856-tab-0" aria-selected="true" > Go </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881837035856-tab-1-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881837035856-tab-1" type="button" role="tab" aria-controls="tabs-1774880881837035856-tab-1" aria-selected="false" > Python </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881837035856-tab-2-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881837035856-tab-2" type="button" role="tab" aria-controls="tabs-1774880881837035856-tab-2" aria-selected="false" > Rust </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881837035856-tab-3-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881837035856-tab-3" type="button" role="tab" aria-controls="tabs-1774880881837035856-tab-3" aria-selected="false" > Node.js </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881837035856-tab-4-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881837035856-tab-4" type="button" role="tab" aria-controls="tabs-1774880881837035856-tab-4" aria-selected="false" > Zig </button> </li></ul> <div class="tab-content border border-top-0 rounded-bottom p-3" id="tabs-1774880881837035856-content"><div class="tab-pane fade show active" id="tabs-1774880881837035856-tab-0" role="tabpanel" aria-labelledby="tabs-1774880881837035856-tab-0-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create project</span> </span></span><span class="line"><span class="cl">mkdir geode-tasks <span class="o">&amp;&amp;</span> <span class="nb">cd</span> geode-tasks </span></span><span class="line"><span class="cl">go mod init geode-tasks </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Install dependencies</span> </span></span><span class="line"><span class="cl">go get geodedb.com/geode </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create project structure</span> </span></span><span class="line"><span class="cl">mkdir -p cmd/server internal/<span class="o">{</span>models,repository<span class="o">}</span> </span></span><span class="line"><span class="cl">touch cmd/server/main.go </span></span><span class="line"><span class="cl">touch internal/models/models.go </span></span><span class="line"><span class="cl">touch internal/repository/repository.go </span></span></code></pre></div><p><strong>Project Structure</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">geode-tasks/ </span></span><span class="line"><span class="cl">├── go.mod </span></span><span class="line"><span class="cl">├── go.sum </span></span><span class="line"><span class="cl">├── cmd/ </span></span><span class="line"><span class="cl">│ └── server/ </span></span><span class="line"><span class="cl">│ └── main.go </span></span><span class="line"><span class="cl">└── internal/ </span></span><span class="line"><span class="cl"> ├── models/ </span></span><span class="line"><span class="cl"> │ └── models.go </span></span><span class="line"><span class="cl"> └── repository/ </span></span><span class="line"><span class="cl"> └── repository.go </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881837035856-tab-1" role="tabpanel" aria-labelledby="tabs-1774880881837035856-tab-1-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create project</span> </span></span><span class="line"><span class="cl">mkdir geode-tasks <span class="o">&amp;&amp;</span> <span class="nb">cd</span> geode-tasks </span></span><span class="line"><span class="cl">python -m venv venv </span></span><span class="line"><span class="cl"><span class="nb">source</span> venv/bin/activate <span class="c1"># On Windows: venv\Scripts\activate</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Install dependencies</span> </span></span><span class="line"><span class="cl">pip install geode-client </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create project structure</span> </span></span><span class="line"><span class="cl">mkdir -p src/models src/repository tests </span></span><span class="line"><span class="cl">touch src/__init__.py </span></span><span class="line"><span class="cl">touch src/models/__init__.py src/models/models.py </span></span><span class="line"><span class="cl">touch src/repository/__init__.py src/repository/repository.py </span></span><span class="line"><span class="cl">touch src/main.py </span></span><span class="line"><span class="cl">touch tests/__init__.py tests/test_repository.py </span></span></code></pre></div><p><strong>Project Structure</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">geode-tasks/ </span></span><span class="line"><span class="cl">├── venv/ </span></span><span class="line"><span class="cl">├── src/ </span></span><span class="line"><span class="cl">│ ├── __init__.py </span></span><span class="line"><span class="cl">│ ├── main.py </span></span><span class="line"><span class="cl">│ ├── models/ </span></span><span class="line"><span class="cl">│ │ ├── __init__.py </span></span><span class="line"><span class="cl">│ │ └── models.py </span></span><span class="line"><span class="cl">│ └── repository/ </span></span><span class="line"><span class="cl">│ ├── __init__.py </span></span><span class="line"><span class="cl">│ └── repository.py </span></span><span class="line"><span class="cl">└── tests/ </span></span><span class="line"><span class="cl"> ├── __init__.py </span></span><span class="line"><span class="cl"> └── test_repository.py </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881837035856-tab-2" role="tabpanel" aria-labelledby="tabs-1774880881837035856-tab-2-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create project</span> </span></span><span class="line"><span class="cl">cargo new geode-tasks </span></span><span class="line"><span class="cl"><span class="nb">cd</span> geode-tasks </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Add dependencies to Cargo.toml</span> </span></span><span class="line"><span class="cl">cat &gt;&gt; Cargo.toml <span class="s">&lt;&lt; &#39;EOF&#39; </span></span></span><span class="line"><span class="cl"><span class="s">[dependencies] </span></span></span><span class="line"><span class="cl"><span class="s">geode-client = &#34;0.18&#34; </span></span></span><span class="line"><span class="cl"><span class="s">tokio = { version = &#34;1&#34;, features = [&#34;full&#34;] } </span></span></span><span class="line"><span class="cl"><span class="s">serde = { version = &#34;1&#34;, features = [&#34;derive&#34;] } </span></span></span><span class="line"><span class="cl"><span class="s">serde_json = &#34;1&#34; </span></span></span><span class="line"><span class="cl"><span class="s">thiserror = &#34;1&#34; </span></span></span><span class="line"><span class="cl"><span class="s">chrono = { version = &#34;0.4&#34;, features = [&#34;serde&#34;] } </span></span></span><span class="line"><span class="cl"><span class="s">EOF</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create project structure</span> </span></span><span class="line"><span class="cl">mkdir -p src/<span class="o">{</span>models,repository<span class="o">}</span> </span></span><span class="line"><span class="cl">touch src/models/mod.rs src/repository/mod.rs </span></span></code></pre></div><p><strong>Project Structure</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">geode-tasks/ </span></span><span class="line"><span class="cl">├── Cargo.toml </span></span><span class="line"><span class="cl">├── Cargo.lock </span></span><span class="line"><span class="cl">└── src/ </span></span><span class="line"><span class="cl"> ├── main.rs </span></span><span class="line"><span class="cl"> ├── models/ </span></span><span class="line"><span class="cl"> │ └── mod.rs </span></span><span class="line"><span class="cl"> └── repository/ </span></span><span class="line"><span class="cl"> └── mod.rs </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881837035856-tab-3" role="tabpanel" aria-labelledby="tabs-1774880881837035856-tab-3-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create project</span> </span></span><span class="line"><span class="cl">mkdir geode-tasks <span class="o">&amp;&amp;</span> <span class="nb">cd</span> geode-tasks </span></span><span class="line"><span class="cl">npm init -y </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Install dependencies</span> </span></span><span class="line"><span class="cl">npm install @geodedb/client </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># For TypeScript support</span> </span></span><span class="line"><span class="cl">npm install -D typescript @types/node ts-node </span></span><span class="line"><span class="cl">npx tsc --init </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create project structure</span> </span></span><span class="line"><span class="cl">mkdir -p src/<span class="o">{</span>models,repository<span class="o">}</span> </span></span><span class="line"><span class="cl">touch src/index.ts </span></span><span class="line"><span class="cl">touch src/models/index.ts </span></span><span class="line"><span class="cl">touch src/repository/index.ts </span></span></code></pre></div><p><strong>Project Structure</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">geode-tasks/ </span></span><span class="line"><span class="cl">├── package.json </span></span><span class="line"><span class="cl">├── tsconfig.json </span></span><span class="line"><span class="cl">└── src/ </span></span><span class="line"><span class="cl"> ├── index.ts </span></span><span class="line"><span class="cl"> ├── models/ </span></span><span class="line"><span class="cl"> │ └── index.ts </span></span><span class="line"><span class="cl"> └── repository/ </span></span><span class="line"><span class="cl"> └── index.ts </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881837035856-tab-4" role="tabpanel" aria-labelledby="tabs-1774880881837035856-tab-4-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create project</span> </span></span><span class="line"><span class="cl">mkdir geode-tasks <span class="o">&amp;&amp;</span> <span class="nb">cd</span> geode-tasks </span></span><span class="line"><span class="cl">zig init </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create project structure</span> </span></span><span class="line"><span class="cl">mkdir -p src/<span class="o">{</span>models,repository<span class="o">}</span> </span></span><span class="line"><span class="cl">touch src/models.zig src/repository.zig </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Add geode-client to build.zig.zon (see Installation Guide)</span> </span></span></code></pre></div><p><strong>Project Structure</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">geode-tasks/ </span></span><span class="line"><span class="cl">├── build.zig </span></span><span class="line"><span class="cl">├── build.zig.zon </span></span><span class="line"><span class="cl">└── src/ </span></span><span class="line"><span class="cl"> ├── main.zig </span></span><span class="line"><span class="cl"> ├── models.zig </span></span><span class="line"><span class="cl"> └── repository.zig </span></span></code></pre></div> </div></div> </div> <hr> <h3 id="connecting-to-geode" class="position-relative d-flex align-items-center group"> <span>Connecting to Geode</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="connecting-to-geode" aria-haspopup="dialog" aria-label="Share link: Connecting to Geode"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Establish a connection to your Geode server.</p> <div class="docs-tabs mb-4"> <ul class="nav nav-tabs" id="tabs-1774880881843093945" role="tablist"><li class="nav-item" role="presentation"> <button class="nav-link active" id="tabs-1774880881843093945-tab-0-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881843093945-tab-0" type="button" role="tab" aria-controls="tabs-1774880881843093945-tab-0" aria-selected="true" > Go </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881843093945-tab-1-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881843093945-tab-1" type="button" role="tab" aria-controls="tabs-1774880881843093945-tab-1" aria-selected="false" > Python </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881843093945-tab-2-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881843093945-tab-2" type="button" role="tab" aria-controls="tabs-1774880881843093945-tab-2" aria-selected="false" > Rust </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881843093945-tab-3-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881843093945-tab-3" type="button" role="tab" aria-controls="tabs-1774880881843093945-tab-3" aria-selected="false" > Node.js </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881843093945-tab-4-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881843093945-tab-4" type="button" role="tab" aria-controls="tabs-1774880881843093945-tab-4" aria-selected="false" > Zig </button> </li></ul> <div class="tab-content border border-top-0 rounded-bottom p-3" id="tabs-1774880881843093945-content"><div class="tab-pane fade show active" id="tabs-1774880881843093945-tab-0" role="tabpanel" aria-labelledby="tabs-1774880881843093945-tab-0-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// internal/repository/repository.go </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">package</span> <span class="nx">repository</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;context&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;database/sql&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;fmt&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;time&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">_</span> <span class="s">&#34;geodedb.com/geode&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">Repository</span> <span class="kd">struct</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">db</span> <span class="o">*</span><span class="nx">sql</span><span class="p">.</span><span class="nx">DB</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">NewRepository</span><span class="p">(</span><span class="nx">host</span> <span class="kt">string</span><span class="p">,</span> <span class="nx">port</span> <span class="kt">int</span><span class="p">)</span> <span class="p">(</span><span class="o">*</span><span class="nx">Repository</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">connStr</span> <span class="o">:=</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Sprintf</span><span class="p">(</span><span class="s">&#34;%s:%d&#34;</span><span class="p">,</span> <span class="nx">host</span><span class="p">,</span> <span class="nx">port</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">db</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">sql</span><span class="p">.</span><span class="nf">Open</span><span class="p">(</span><span class="s">&#34;geode&#34;</span><span class="p">,</span> <span class="nx">connStr</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to open connection: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Configure connection pool </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">db</span><span class="p">.</span><span class="nf">SetMaxOpenConns</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">db</span><span class="p">.</span><span class="nf">SetMaxIdleConns</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">db</span><span class="p">.</span><span class="nf">SetConnMaxLifetime</span><span class="p">(</span><span class="mi">5</span> <span class="o">*</span> <span class="nx">time</span><span class="p">.</span><span class="nx">Minute</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Verify connection </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">ctx</span><span class="p">,</span> <span class="nx">cancel</span> <span class="o">:=</span> <span class="nx">context</span><span class="p">.</span><span class="nf">WithTimeout</span><span class="p">(</span><span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span> <span class="mi">5</span><span class="o">*</span><span class="nx">time</span><span class="p">.</span><span class="nx">Second</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">defer</span> <span class="nf">cancel</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">db</span><span class="p">.</span><span class="nf">PingContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">);</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to ping database: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="o">&amp;</span><span class="nx">Repository</span><span class="p">{</span><span class="nx">db</span><span class="p">:</span> <span class="nx">db</span><span class="p">},</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">Close</span><span class="p">()</span> <span class="kt">error</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">DB</span><span class="p">()</span> <span class="o">*</span><span class="nx">sql</span><span class="p">.</span><span class="nx">DB</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div><p><strong>Usage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// cmd/server/main.go </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">package</span> <span class="nx">main</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;log&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;geode-tasks/internal/repository&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">repo</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">repository</span><span class="p">.</span><span class="nf">NewRepository</span><span class="p">(</span><span class="s">&#34;localhost&#34;</span><span class="p">,</span> <span class="mi">3141</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">log</span><span class="p">.</span><span class="nf">Fatalf</span><span class="p">(</span><span class="s">&#34;Failed to connect: %v&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">defer</span> <span class="nx">repo</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">log</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Connected to Geode!&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881843093945-tab-1" role="tabpanel" aria-labelledby="tabs-1774880881843093945-tab-1-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># src/repository/repository.py</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">asynccontextmanager</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">Client</span><span class="p">,</span> <span class="n">Connection</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">AsyncIterator</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Repository</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&#34;localhost&#34;</span><span class="p">,</span> <span class="n">port</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3141</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">host</span><span class="o">=</span><span class="n">host</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">port</span><span class="o">=</span><span class="n">port</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">skip_verify</span><span class="o">=</span><span class="kc">True</span> <span class="c1"># Set to False in production with proper certs</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nd">@asynccontextmanager</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">connection</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AsyncIterator</span><span class="p">[</span><span class="n">Connection</span><span class="p">]:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Get a connection from the pool.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">conn</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">ping</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Test connectivity.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">ping</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> </span></span></code></pre></div><p><strong>Usage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># src/main.py</span> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">asyncio</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">repository.repository</span> <span class="kn">import</span> <span class="n">Repository</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">main</span><span class="p">():</span> </span></span><span class="line"><span class="cl"> <span class="n">repo</span> <span class="o">=</span> <span class="n">Repository</span><span class="p">(</span><span class="s2">&#34;localhost&#34;</span><span class="p">,</span> <span class="mi">3141</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="k">await</span> <span class="n">repo</span><span class="o">.</span><span class="n">ping</span><span class="p">():</span> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Connected to Geode!&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">else</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Failed to connect&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&#34;__main__&#34;</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">asyncio</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">main</span><span class="p">())</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881843093945-tab-2" role="tabpanel" aria-labelledby="tabs-1774880881843093945-tab-2-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// src/repository/mod.rs </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">use</span><span class="w"> </span><span class="n">geode_client</span>::<span class="p">{</span><span class="n">Client</span><span class="p">,</span><span class="w"> </span><span class="n">Connection</span><span class="p">,</span><span class="w"> </span><span class="n">GeodeError</span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">std</span>::<span class="n">sync</span>::<span class="n">Arc</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">pub</span><span class="w"> </span><span class="k">struct</span> <span class="nc">Repository</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">client</span>: <span class="nc">Arc</span><span class="o">&lt;</span><span class="n">Client</span><span class="o">&gt;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">impl</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">new</span><span class="p">(</span><span class="n">host</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">,</span><span class="w"> </span><span class="n">port</span>: <span class="kt">u16</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nc">Self</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Client</span>::<span class="n">new</span><span class="p">(</span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">).</span><span class="n">skip_verify</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">client</span>: <span class="nc">Arc</span>::<span class="n">new</span><span class="p">(</span><span class="n">client</span><span class="p">),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">connect</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="n">Connection</span><span class="p">,</span><span class="w"> </span><span class="n">GeodeError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">connect</span><span class="p">().</span><span class="k">await</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">ping</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="kt">bool</span><span class="p">,</span><span class="w"> </span><span class="n">GeodeError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">connect</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">ping</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div><p><strong>Usage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// src/main.rs </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">mod</span> <span class="nn">repository</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">repository</span>::<span class="n">Repository</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="cp">#[tokio::main]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">main</span><span class="p">()</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="p">(),</span><span class="w"> </span><span class="nb">Box</span><span class="o">&lt;</span><span class="k">dyn</span><span class="w"> </span><span class="n">std</span>::<span class="n">error</span>::<span class="n">Error</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">repo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Repository</span>::<span class="n">new</span><span class="p">(</span><span class="s">&#34;127.0.0.1&#34;</span><span class="p">,</span><span class="w"> </span><span class="mi">3141</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">ping</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">&#34;Connected to Geode!&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(())</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881843093945-tab-3" role="tabpanel" aria-labelledby="tabs-1774880881843093945-tab-3-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="c1">// src/repository/index.ts </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">import</span> <span class="p">{</span> <span class="nx">createClient</span><span class="p">,</span> <span class="nx">GeodeClient</span> <span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;@geodedb/client&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kr">class</span> <span class="nx">Repository</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">private</span> <span class="nx">client</span>: <span class="kt">GeodeClient</span> <span class="o">|</span> <span class="kc">null</span> <span class="o">=</span> <span class="kc">null</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kr">private</span> <span class="nx">connectionString</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">constructor</span><span class="p">(</span><span class="nx">host</span>: <span class="kt">string</span> <span class="o">=</span> <span class="s1">&#39;localhost&#39;</span><span class="p">,</span> <span class="nx">port</span>: <span class="kt">number</span> <span class="o">=</span> <span class="mi">3141</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">this</span><span class="p">.</span><span class="nx">connectionString</span> <span class="o">=</span> <span class="sb">`quic://</span><span class="si">${</span><span class="nx">host</span><span class="si">}</span><span class="sb">:</span><span class="si">${</span><span class="nx">port</span><span class="si">}</span><span class="sb">`</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">connect</span><span class="p">()</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">void</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">this</span><span class="p">.</span><span class="nx">client</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">createClient</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">connectionString</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">close</span><span class="p">()</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">void</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">client</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="k">this</span><span class="p">.</span><span class="nx">client</span><span class="p">.</span><span class="nx">close</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> <span class="k">this</span><span class="p">.</span><span class="nx">client</span> <span class="o">=</span> <span class="kc">null</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">ping</span><span class="p">()</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">boolean</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">client</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">&#39;Not connected&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">result</span> <span class="o">=</span> <span class="k">await</span> <span class="k">this</span><span class="p">.</span><span class="nx">client</span><span class="p">.</span><span class="nx">ping</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">result</span> <span class="o">!==</span> <span class="kc">null</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">getClient</span><span class="p">()</span><span class="o">:</span> <span class="nx">GeodeClient</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">client</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">&#39;Not connected&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">client</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div><p><strong>Usage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="c1">// src/index.ts </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">import</span> <span class="p">{</span> <span class="nx">Repository</span> <span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;./repository&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">async</span> <span class="kd">function</span> <span class="nx">main() {</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">repo</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Repository</span><span class="p">(</span><span class="s1">&#39;localhost&#39;</span><span class="p">,</span> <span class="mi">3141</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">connect</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">ping</span><span class="p">())</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;Connected to Geode!&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">close</span><span class="p">();</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nx">main</span><span class="p">().</span><span class="k">catch</span><span class="p">(</span><span class="nx">console</span><span class="p">.</span><span class="nx">error</span><span class="p">);</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881843093945-tab-4" role="tabpanel" aria-labelledby="tabs-1774880881843093945-tab-4-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// src/repository.zig </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">const</span><span class="w"> </span><span class="n">std</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@import</span><span class="p">(</span><span class="s">&#34;std&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">const</span><span class="w"> </span><span class="n">geode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@import</span><span class="p">(</span><span class="s">&#34;geode_client&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">allocator</span><span class="o">:</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">Allocator</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">client</span><span class="o">:</span><span class="w"> </span><span class="n">geode</span><span class="p">.</span><span class="n">GeodeClient</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">connected</span><span class="o">:</span><span class="w"> </span><span class="kt">bool</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">init</span><span class="p">(</span><span class="n">allocator</span><span class="o">:</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">Allocator</span><span class="p">,</span><span class="w"> </span><span class="n">host</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="o">:</span><span class="w"> </span><span class="kt">u16</span><span class="p">)</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Repository</span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">allocator</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">geode</span><span class="p">.</span><span class="n">GeodeClient</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">allocator</span><span class="p">,</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="kc">true</span><span class="p">),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">connected</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">deinit</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">)</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">connect</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">connect</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendHello</span><span class="p">(</span><span class="s">&#34;geode-tasks&#34;</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;1.0.0&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">connected</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">ping</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">bool</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">self</span><span class="p">.</span><span class="n">connected</span><span class="p">)</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">error</span><span class="p">.</span><span class="n">NotConnected</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendPing</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">getClient</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="n">geode</span><span class="p">.</span><span class="n">GeodeClient</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="o">&amp;</span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span></code></pre></div><p><strong>Usage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// src/main.zig </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">const</span><span class="w"> </span><span class="n">std</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@import</span><span class="p">(</span><span class="s">&#34;std&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">const</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@import</span><span class="p">(</span><span class="s">&#34;repository.zig&#34;</span><span class="p">).</span><span class="n">Repository</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">main</span><span class="p">()</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">gpa</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">heap</span><span class="p">.</span><span class="n">GeneralPurposeAllocator</span><span class="p">(.{}){};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gpa</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gpa</span><span class="p">.</span><span class="n">allocator</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">repo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Repository</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">allocator</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;localhost&#34;</span><span class="p">,</span><span class="w"> </span><span class="mi">3141</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">connect</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">ping</span><span class="p">())</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">debug</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">&#34;Connected to Geode!</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div> </div></div> </div> <hr> <h3 id="creating-a-data-model" class="position-relative d-flex align-items-center group"> <span>Creating a Data Model</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="creating-a-data-model" aria-haspopup="dialog" aria-label="Share link: Creating a Data Model"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Define your data model using GQL schema concepts.</p> <h4 id="schema-design" class="position-relative d-flex align-items-center group"> <span>Schema Design</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="schema-design" aria-haspopup="dialog" aria-label="Share link: Schema Design"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Our task management system has the following entities:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Users</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">people</span><span class="w"> </span><span class="py">who</span><span class="w"> </span><span class="py">use</span><span class="w"> </span><span class="py">the</span><span class="w"> </span><span class="py">system</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nc">STRING</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Unique</span><span class="w"> </span><span class="py">identifier</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="nc">STRING</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Email</span><span class="w"> </span><span class="py">address</span><span class="w"> </span><span class="p">(</span><span class="py">unique</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="nc">STRING</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Display</span><span class="w"> </span><span class="py">name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_at</span><span class="p">:</span><span class="w"> </span><span class="nc">INTEGER</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Unix</span><span class="w"> </span><span class="py">timestamp</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Projects</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">containers</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">tasks</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(:</span><span class="nc">Project</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nc">STRING</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Unique</span><span class="w"> </span><span class="py">identifier</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="nc">STRING</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Project</span><span class="w"> </span><span class="py">name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">description</span><span class="p">:</span><span class="w"> </span><span class="nc">STRING</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Project</span><span class="w"> </span><span class="py">description</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_at</span><span class="p">:</span><span class="w"> </span><span class="nc">INTEGER</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Unix</span><span class="w"> </span><span class="py">timestamp</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Tasks</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">work</span><span class="w"> </span><span class="py">items</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(:</span><span class="nc">Task</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nc">STRING</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Unique</span><span class="w"> </span><span class="py">identifier</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">title</span><span class="p">:</span><span class="w"> </span><span class="nc">STRING</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Task</span><span class="w"> </span><span class="py">title</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">description</span><span class="p">:</span><span class="w"> </span><span class="nc">STRING</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Task</span><span class="w"> </span><span class="py">details</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">status</span><span class="p">:</span><span class="w"> </span><span class="nc">STRING</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">pending</span><span class="p">,</span><span class="w"> </span><span class="py">in_progress</span><span class="p">,</span><span class="w"> </span><span class="py">completed</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">priority</span><span class="p">:</span><span class="w"> </span><span class="nc">INTEGER</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">1</span><span class="p">=</span><span class="py">low</span><span class="p">,</span><span class="w"> </span><span class="py">2</span><span class="p">=</span><span class="py">medium</span><span class="p">,</span><span class="w"> </span><span class="py">3</span><span class="p">=</span><span class="py">high</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">due_date</span><span class="p">:</span><span class="w"> </span><span class="nc">INTEGER</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Unix</span><span class="w"> </span><span class="py">timestamp</span><span class="w"> </span><span class="p">(</span><span class="py">optional</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_at</span><span class="p">:</span><span class="w"> </span><span class="nc">INTEGER</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Unix</span><span class="w"> </span><span class="py">timestamp</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">updated_at</span><span class="p">:</span><span class="w"> </span><span class="nc">INTEGER</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Unix</span><span class="w"> </span><span class="py">timestamp</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Relationships</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">OWNS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(:</span><span class="nc">Project</span><span class="p">)</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="py">owns</span><span class="w"> </span><span class="py">projects</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">ASSIGNED_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(:</span><span class="nc">Task</span><span class="p">)</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="py">is</span><span class="w"> </span><span class="py">assigned</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">tasks</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(:</span><span class="nc">Project</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">CONTAINS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(:</span><span class="nc">Task</span><span class="p">)</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Projects</span><span class="w"> </span><span class="py">contain</span><span class="w"> </span><span class="py">tasks</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(:</span><span class="nc">Task</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">DEPENDS_ON</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(:</span><span class="nc">Task</span><span class="p">)</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Tasks</span><span class="w"> </span><span class="py">can</span><span class="w"> </span><span class="py">depend</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">other</span><span class="w"> </span><span class="py">tasks</span><span class="w"> </span></span></span></code></pre></div> <h4 id="model-definitions" class="position-relative d-flex align-items-center group"> <span>Model Definitions</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="model-definitions" aria-haspopup="dialog" aria-label="Share link: Model Definitions"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="docs-tabs mb-4"> <ul class="nav nav-tabs" id="tabs-1774880881862689114" role="tablist"><li class="nav-item" role="presentation"> <button class="nav-link active" id="tabs-1774880881862689114-tab-0-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881862689114-tab-0" type="button" role="tab" aria-controls="tabs-1774880881862689114-tab-0" aria-selected="true" > Go </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881862689114-tab-1-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881862689114-tab-1" type="button" role="tab" aria-controls="tabs-1774880881862689114-tab-1" aria-selected="false" > Python </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881862689114-tab-2-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881862689114-tab-2" type="button" role="tab" aria-controls="tabs-1774880881862689114-tab-2" aria-selected="false" > Rust </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881862689114-tab-3-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881862689114-tab-3" type="button" role="tab" aria-controls="tabs-1774880881862689114-tab-3" aria-selected="false" > Node.js </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881862689114-tab-4-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881862689114-tab-4" type="button" role="tab" aria-controls="tabs-1774880881862689114-tab-4" aria-selected="false" > Zig </button> </li></ul> <div class="tab-content border border-top-0 rounded-bottom p-3" id="tabs-1774880881862689114-content"><div class="tab-pane fade show active" id="tabs-1774880881862689114-tab-0" role="tabpanel" aria-labelledby="tabs-1774880881862689114-tab-0-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// internal/models/models.go </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">package</span> <span class="nx">models</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;time&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">User</span> <span class="kd">struct</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">ID</span> <span class="kt">string</span> <span class="s">`json:&#34;id&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">Email</span> <span class="kt">string</span> <span class="s">`json:&#34;email&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">Name</span> <span class="kt">string</span> <span class="s">`json:&#34;name&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">CreatedAt</span> <span class="nx">time</span><span class="p">.</span><span class="nx">Time</span> <span class="s">`json:&#34;created_at&#34;`</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">Project</span> <span class="kd">struct</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">ID</span> <span class="kt">string</span> <span class="s">`json:&#34;id&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">Name</span> <span class="kt">string</span> <span class="s">`json:&#34;name&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">Description</span> <span class="kt">string</span> <span class="s">`json:&#34;description&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">OwnerID</span> <span class="kt">string</span> <span class="s">`json:&#34;owner_id&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">CreatedAt</span> <span class="nx">time</span><span class="p">.</span><span class="nx">Time</span> <span class="s">`json:&#34;created_at&#34;`</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">Task</span> <span class="kd">struct</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">ID</span> <span class="kt">string</span> <span class="s">`json:&#34;id&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">Title</span> <span class="kt">string</span> <span class="s">`json:&#34;title&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">Description</span> <span class="kt">string</span> <span class="s">`json:&#34;description&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">Status</span> <span class="nx">TaskStatus</span> <span class="s">`json:&#34;status&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">Priority</span> <span class="nx">Priority</span> <span class="s">`json:&#34;priority&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">DueDate</span> <span class="o">*</span><span class="nx">time</span><span class="p">.</span><span class="nx">Time</span> <span class="s">`json:&#34;due_date,omitempty&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">ProjectID</span> <span class="kt">string</span> <span class="s">`json:&#34;project_id&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">AssigneeID</span> <span class="o">*</span><span class="kt">string</span> <span class="s">`json:&#34;assignee_id,omitempty&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">CreatedAt</span> <span class="nx">time</span><span class="p">.</span><span class="nx">Time</span> <span class="s">`json:&#34;created_at&#34;`</span> </span></span><span class="line"><span class="cl"> <span class="nx">UpdatedAt</span> <span class="nx">time</span><span class="p">.</span><span class="nx">Time</span> <span class="s">`json:&#34;updated_at&#34;`</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">TaskStatus</span> <span class="kt">string</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">const</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nx">StatusPending</span> <span class="nx">TaskStatus</span> <span class="p">=</span> <span class="s">&#34;pending&#34;</span> </span></span><span class="line"><span class="cl"> <span class="nx">StatusInProgress</span> <span class="nx">TaskStatus</span> <span class="p">=</span> <span class="s">&#34;in_progress&#34;</span> </span></span><span class="line"><span class="cl"> <span class="nx">StatusCompleted</span> <span class="nx">TaskStatus</span> <span class="p">=</span> <span class="s">&#34;completed&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">Priority</span> <span class="kt">int</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">const</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nx">PriorityLow</span> <span class="nx">Priority</span> <span class="p">=</span> <span class="mi">1</span> </span></span><span class="line"><span class="cl"> <span class="nx">PriorityMedium</span> <span class="nx">Priority</span> <span class="p">=</span> <span class="mi">2</span> </span></span><span class="line"><span class="cl"> <span class="nx">PriorityHigh</span> <span class="nx">Priority</span> <span class="p">=</span> <span class="mi">3</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881862689114-tab-1" role="tabpanel" aria-labelledby="tabs-1774880881862689114-tab-1-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># src/models/models.py</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">dataclasses</span> <span class="kn">import</span> <span class="n">dataclass</span><span class="p">,</span> <span class="n">field</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Enum</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Optional</span> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">uuid</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">TaskStatus</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">Enum</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="n">PENDING</span> <span class="o">=</span> <span class="s2">&#34;pending&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">IN_PROGRESS</span> <span class="o">=</span> <span class="s2">&#34;in_progress&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">COMPLETED</span> <span class="o">=</span> <span class="s2">&#34;completed&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Priority</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">Enum</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="n">LOW</span> <span class="o">=</span> <span class="mi">1</span> </span></span><span class="line"><span class="cl"> <span class="n">MEDIUM</span> <span class="o">=</span> <span class="mi">2</span> </span></span><span class="line"><span class="cl"> <span class="n">HIGH</span> <span class="o">=</span> <span class="mi">3</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nd">@dataclass</span> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">User</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="nb">id</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()))</span> </span></span><span class="line"><span class="cl"> <span class="n">email</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">created_at</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nd">@dataclass</span> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Project</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="nb">id</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()))</span> </span></span><span class="line"><span class="cl"> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">owner_id</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">created_at</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nd">@dataclass</span> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Task</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="nb">id</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()))</span> </span></span><span class="line"><span class="cl"> <span class="n">title</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">status</span><span class="p">:</span> <span class="n">TaskStatus</span> <span class="o">=</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">PENDING</span> </span></span><span class="line"><span class="cl"> <span class="n">priority</span><span class="p">:</span> <span class="n">Priority</span> <span class="o">=</span> <span class="n">Priority</span><span class="o">.</span><span class="n">MEDIUM</span> </span></span><span class="line"><span class="cl"> <span class="n">due_date</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">datetime</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span> </span></span><span class="line"><span class="cl"> <span class="n">project_id</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">assignee_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span> </span></span><span class="line"><span class="cl"> <span class="n">created_at</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="n">updated_at</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">)</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881862689114-tab-2" role="tabpanel" aria-labelledby="tabs-1774880881862689114-tab-2-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// src/models/mod.rs </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">use</span><span class="w"> </span><span class="n">chrono</span>::<span class="p">{</span><span class="n">DateTime</span><span class="p">,</span><span class="w"> </span><span class="n">Utc</span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">serde</span>::<span class="p">{</span><span class="n">Deserialize</span><span class="p">,</span><span class="w"> </span><span class="n">Serialize</span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">uuid</span>::<span class="n">Uuid</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="cp">#[derive(Debug, Clone, Serialize, Deserialize)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">pub</span><span class="w"> </span><span class="k">enum</span> <span class="nc">TaskStatus</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Pending</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">InProgress</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Completed</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">impl</span><span class="w"> </span><span class="n">TaskStatus</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">as_str</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kp">&amp;</span><span class="kt">str</span> <span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">match</span><span class="w"> </span><span class="bp">self</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">TaskStatus</span>::<span class="n">Pending</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="s">&#34;pending&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">TaskStatus</span>::<span class="n">InProgress</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="s">&#34;in_progress&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">TaskStatus</span>::<span class="n">Completed</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="s">&#34;completed&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="cp">#[derive(Debug, Clone, Copy, Serialize, Deserialize)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="cp">#[repr(i32)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">pub</span><span class="w"> </span><span class="k">enum</span> <span class="nc">Priority</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Medium</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">High</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="cp">#[derive(Debug, Clone, Serialize, Deserialize)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">pub</span><span class="w"> </span><span class="k">struct</span> <span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">id</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">email</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">name</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">created_at</span>: <span class="nc">DateTime</span><span class="o">&lt;</span><span class="n">Utc</span><span class="o">&gt;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">impl</span><span class="w"> </span><span class="n">User</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">new</span><span class="p">(</span><span class="n">email</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="n">name</span>: <span class="nb">String</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nc">Self</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">User</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">id</span>: <span class="nc">Uuid</span>::<span class="n">new_v4</span><span class="p">().</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">email</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">created_at</span>: <span class="nc">Utc</span>::<span class="n">now</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="cp">#[derive(Debug, Clone, Serialize, Deserialize)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">pub</span><span class="w"> </span><span class="k">struct</span> <span class="nc">Project</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">id</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">name</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">description</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">owner_id</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">created_at</span>: <span class="nc">DateTime</span><span class="o">&lt;</span><span class="n">Utc</span><span class="o">&gt;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="cp">#[derive(Debug, Clone, Serialize, Deserialize)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">pub</span><span class="w"> </span><span class="k">struct</span> <span class="nc">Task</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">id</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">title</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">description</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">status</span>: <span class="nc">TaskStatus</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">priority</span>: <span class="nc">Priority</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">due_date</span>: <span class="nb">Option</span><span class="o">&lt;</span><span class="n">DateTime</span><span class="o">&lt;</span><span class="n">Utc</span><span class="o">&gt;&gt;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">project_id</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">assignee_id</span>: <span class="nb">Option</span><span class="o">&lt;</span><span class="nb">String</span><span class="o">&gt;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">created_at</span>: <span class="nc">DateTime</span><span class="o">&lt;</span><span class="n">Utc</span><span class="o">&gt;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">updated_at</span>: <span class="nc">DateTime</span><span class="o">&lt;</span><span class="n">Utc</span><span class="o">&gt;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881862689114-tab-3" role="tabpanel" aria-labelledby="tabs-1774880881862689114-tab-3-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="c1">// src/models/index.ts </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">import</span> <span class="p">{</span> <span class="nx">v4</span> <span class="kr">as</span> <span class="nx">uuidv4</span> <span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;uuid&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kr">enum</span> <span class="nx">TaskStatus</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">Pending</span> <span class="o">=</span> <span class="s1">&#39;pending&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">InProgress</span> <span class="o">=</span> <span class="s1">&#39;in_progress&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Completed</span> <span class="o">=</span> <span class="s1">&#39;completed&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kr">enum</span> <span class="nx">Priority</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">Low</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Medium</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">High</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kr">interface</span> <span class="nx">User</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">id</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">email</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">name</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">createdAt</span>: <span class="kt">Date</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kr">interface</span> <span class="nx">Project</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">id</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">name</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">description</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">ownerId</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">createdAt</span>: <span class="kt">Date</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kr">interface</span> <span class="nx">Task</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">id</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">title</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">description</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">status</span>: <span class="kt">TaskStatus</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">priority</span>: <span class="kt">Priority</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">dueDate?</span>: <span class="kt">Date</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">projectId</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">assigneeId?</span>: <span class="kt">string</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">createdAt</span>: <span class="kt">Date</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="nx">updatedAt</span>: <span class="kt">Date</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kd">function</span> <span class="nx">createUser</span><span class="p">(</span><span class="nx">email</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">name</span>: <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="nx">User</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">id</span>: <span class="kt">uuidv4</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="nx">email</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">name</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">createdAt</span>: <span class="kt">new</span> <span class="nb">Date</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="p">};</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kd">function</span> <span class="nx">createProject</span><span class="p">(</span><span class="nx">name</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">description</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">ownerId</span>: <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="nx">Project</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">id</span>: <span class="kt">uuidv4</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="nx">name</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">description</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">ownerId</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">createdAt</span>: <span class="kt">new</span> <span class="nb">Date</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="p">};</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kd">function</span> <span class="nx">createTask</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nx">title</span>: <span class="kt">string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">description</span>: <span class="kt">string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">projectId</span>: <span class="kt">string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">priority</span>: <span class="kt">Priority</span> <span class="o">=</span> <span class="nx">Priority</span><span class="p">.</span><span class="nx">Medium</span> </span></span><span class="line"><span class="cl"><span class="p">)</span><span class="o">:</span> <span class="nx">Task</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">now</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">id</span>: <span class="kt">uuidv4</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="nx">title</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">description</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">status</span>: <span class="kt">TaskStatus.Pending</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">priority</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">projectId</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">createdAt</span>: <span class="kt">now</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">updatedAt</span>: <span class="kt">now</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">};</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881862689114-tab-4" role="tabpanel" aria-labelledby="tabs-1774880881862689114-tab-4-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// src/models.zig </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">const</span><span class="w"> </span><span class="n">std</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@import</span><span class="p">(</span><span class="s">&#34;std&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">TaskStatus</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">enum</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">pending</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">in_progress</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">completed</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">toString</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="n">TaskStatus</span><span class="p">)</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">self</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">pending</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="s">&#34;pending&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">in_progress</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="s">&#34;in_progress&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">completed</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="s">&#34;completed&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">Priority</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">enum</span><span class="p">(</span><span class="kt">i32</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">low</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">medium</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">high</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">User</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">email</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">created_at</span><span class="o">:</span><span class="w"> </span><span class="kt">i64</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">Project</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">description</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">owner_id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">created_at</span><span class="o">:</span><span class="w"> </span><span class="kt">i64</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">title</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">description</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">status</span><span class="o">:</span><span class="w"> </span><span class="n">TaskStatus</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">priority</span><span class="o">:</span><span class="w"> </span><span class="n">Priority</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">due_date</span><span class="o">:</span><span class="w"> </span><span class="o">?</span><span class="kt">i64</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">project_id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">assignee_id</span><span class="o">:</span><span class="w"> </span><span class="o">?</span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">created_at</span><span class="o">:</span><span class="w"> </span><span class="kt">i64</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">updated_at</span><span class="o">:</span><span class="w"> </span><span class="kt">i64</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">generateId</span><span class="p">(</span><span class="n">allocator</span><span class="o">:</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">Allocator</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="p">[]</span><span class="kt">u8</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">uuid</span><span class="o">:</span><span class="w"> </span><span class="p">[</span><span class="mi">36</span><span class="p">]</span><span class="kt">u8</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">undefined</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">crypto</span><span class="p">.</span><span class="n">random</span><span class="p">.</span><span class="n">bytes</span><span class="p">(</span><span class="o">&amp;</span><span class="n">uuid</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Simple UUID-like format </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">fmt</span><span class="p">.</span><span class="n">allocPrint</span><span class="p">(</span><span class="n">allocator</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;{x:0&gt;32}&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="n">std</span><span class="p">.</span><span class="n">crypto</span><span class="p">.</span><span class="n">random</span><span class="p">.</span><span class="n">int</span><span class="p">(</span><span class="kt">u128</span><span class="p">)});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div> </div></div> </div> <hr> <h3 id="crud-operations-with-parameterized-queries" class="position-relative d-flex align-items-center group"> <span>CRUD Operations with Parameterized Queries</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="crud-operations-with-parameterized-queries" aria-haspopup="dialog" aria-label="Share link: CRUD Operations with Parameterized Queries"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Always use parameterized queries to prevent injection attacks and improve performance.</p> <h4 id="create-operations" class="position-relative d-flex align-items-center group"> <span>Create Operations</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="create-operations" aria-haspopup="dialog" aria-label="Share link: Create Operations"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="docs-tabs mb-4"> <ul class="nav nav-tabs" id="tabs-1774880881882736125" role="tablist"><li class="nav-item" role="presentation"> <button class="nav-link active" id="tabs-1774880881882736125-tab-0-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881882736125-tab-0" type="button" role="tab" aria-controls="tabs-1774880881882736125-tab-0" aria-selected="true" > Go </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881882736125-tab-1-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881882736125-tab-1" type="button" role="tab" aria-controls="tabs-1774880881882736125-tab-1" aria-selected="false" > Python </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881882736125-tab-2-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881882736125-tab-2" type="button" role="tab" aria-controls="tabs-1774880881882736125-tab-2" aria-selected="false" > Rust </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881882736125-tab-3-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881882736125-tab-3" type="button" role="tab" aria-controls="tabs-1774880881882736125-tab-3" aria-selected="false" > Node.js </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881882736125-tab-4-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881882736125-tab-4" type="button" role="tab" aria-controls="tabs-1774880881882736125-tab-4" aria-selected="false" > Zig </button> </li></ul> <div class="tab-content border border-top-0 rounded-bottom p-3" id="tabs-1774880881882736125-content"><div class="tab-pane fade show active" id="tabs-1774880881882736125-tab-0" role="tabpanel" aria-labelledby="tabs-1774880881882736125-tab-0-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// internal/repository/user_repository.go </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">package</span> <span class="nx">repository</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;context&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;fmt&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;time&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="s">&#34;geode-tasks/internal/models&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;github.com/google/uuid&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">CreateUser</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">email</span><span class="p">,</span> <span class="nx">name</span> <span class="kt">string</span><span class="p">)</span> <span class="p">(</span><span class="o">*</span><span class="nx">models</span><span class="p">.</span><span class="nx">User</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">user</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">models</span><span class="p">.</span><span class="nx">User</span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">ID</span><span class="p">:</span> <span class="nx">uuid</span><span class="p">.</span><span class="nf">New</span><span class="p">().</span><span class="nf">String</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="nx">Email</span><span class="p">:</span> <span class="nx">email</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Name</span><span class="p">:</span> <span class="nx">name</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">CreatedAt</span><span class="p">:</span> <span class="nx">time</span><span class="p">.</span><span class="nf">Now</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (:User { </span></span></span><span class="line"><span class="cl"><span class="s"> id: ?, </span></span></span><span class="line"><span class="cl"><span class="s"> email: ?, </span></span></span><span class="line"><span class="cl"><span class="s"> name: ?, </span></span></span><span class="line"><span class="cl"><span class="s"> created_at: ? </span></span></span><span class="line"><span class="cl"><span class="s"> }) </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">user</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="nx">user</span><span class="p">.</span><span class="nx">Email</span><span class="p">,</span> <span class="nx">user</span><span class="p">.</span><span class="nx">Name</span><span class="p">,</span> <span class="nx">user</span><span class="p">.</span><span class="nx">CreatedAt</span><span class="p">.</span><span class="nf">Unix</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to create user: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">user</span><span class="p">,</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">CreateProject</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">description</span><span class="p">,</span> <span class="nx">ownerID</span> <span class="kt">string</span><span class="p">)</span> <span class="p">(</span><span class="o">*</span><span class="nx">models</span><span class="p">.</span><span class="nx">Project</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">project</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">models</span><span class="p">.</span><span class="nx">Project</span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">ID</span><span class="p">:</span> <span class="nx">uuid</span><span class="p">.</span><span class="nf">New</span><span class="p">().</span><span class="nf">String</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="nx">Name</span><span class="p">:</span> <span class="nx">name</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Description</span><span class="p">:</span> <span class="nx">description</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">OwnerID</span><span class="p">:</span> <span class="nx">ownerID</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">CreatedAt</span><span class="p">:</span> <span class="nx">time</span><span class="p">.</span><span class="nf">Now</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (:Project { </span></span></span><span class="line"><span class="cl"><span class="s"> id: ?, </span></span></span><span class="line"><span class="cl"><span class="s"> name: ?, </span></span></span><span class="line"><span class="cl"><span class="s"> description: ?, </span></span></span><span class="line"><span class="cl"><span class="s"> created_at: ? </span></span></span><span class="line"><span class="cl"><span class="s"> }) </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">project</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="nx">project</span><span class="p">.</span><span class="nx">Name</span><span class="p">,</span> <span class="nx">project</span><span class="p">.</span><span class="nx">Description</span><span class="p">,</span> <span class="nx">project</span><span class="p">.</span><span class="nx">CreatedAt</span><span class="p">.</span><span class="nf">Unix</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to create project: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create OWNS relationship </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="p">=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (u:User {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (p:Project {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (u)-[:OWNS]-&gt;(p) </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">ownerID</span><span class="p">,</span> <span class="nx">project</span><span class="p">.</span><span class="nx">ID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to create ownership: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">project</span><span class="p">,</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">CreateTask</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">title</span><span class="p">,</span> <span class="nx">description</span><span class="p">,</span> <span class="nx">projectID</span> <span class="kt">string</span><span class="p">,</span> <span class="nx">priority</span> <span class="nx">models</span><span class="p">.</span><span class="nx">Priority</span><span class="p">)</span> <span class="p">(</span><span class="o">*</span><span class="nx">models</span><span class="p">.</span><span class="nx">Task</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">now</span> <span class="o">:=</span> <span class="nx">time</span><span class="p">.</span><span class="nf">Now</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> <span class="nx">task</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">models</span><span class="p">.</span><span class="nx">Task</span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">ID</span><span class="p">:</span> <span class="nx">uuid</span><span class="p">.</span><span class="nf">New</span><span class="p">().</span><span class="nf">String</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="nx">Title</span><span class="p">:</span> <span class="nx">title</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Description</span><span class="p">:</span> <span class="nx">description</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Status</span><span class="p">:</span> <span class="nx">models</span><span class="p">.</span><span class="nx">StatusPending</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Priority</span><span class="p">:</span> <span class="nx">priority</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">ProjectID</span><span class="p">:</span> <span class="nx">projectID</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">CreatedAt</span><span class="p">:</span> <span class="nx">now</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">UpdatedAt</span><span class="p">:</span> <span class="nx">now</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (:Task { </span></span></span><span class="line"><span class="cl"><span class="s"> id: ?, </span></span></span><span class="line"><span class="cl"><span class="s"> title: ?, </span></span></span><span class="line"><span class="cl"><span class="s"> description: ?, </span></span></span><span class="line"><span class="cl"><span class="s"> status: ?, </span></span></span><span class="line"><span class="cl"><span class="s"> priority: ?, </span></span></span><span class="line"><span class="cl"><span class="s"> created_at: ?, </span></span></span><span class="line"><span class="cl"><span class="s"> updated_at: ? </span></span></span><span class="line"><span class="cl"><span class="s"> }) </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">task</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="nx">task</span><span class="p">.</span><span class="nx">Title</span><span class="p">,</span> <span class="nx">task</span><span class="p">.</span><span class="nx">Description</span><span class="p">,</span> <span class="nb">string</span><span class="p">(</span><span class="nx">task</span><span class="p">.</span><span class="nx">Status</span><span class="p">),</span> <span class="nb">int</span><span class="p">(</span><span class="nx">task</span><span class="p">.</span><span class="nx">Priority</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="nx">task</span><span class="p">.</span><span class="nx">CreatedAt</span><span class="p">.</span><span class="nf">Unix</span><span class="p">(),</span> <span class="nx">task</span><span class="p">.</span><span class="nx">UpdatedAt</span><span class="p">.</span><span class="nf">Unix</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to create task: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create CONTAINS relationship </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="p">=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (p:Project {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (t:Task {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (p)-[:CONTAINS]-&gt;(t) </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">projectID</span><span class="p">,</span> <span class="nx">task</span><span class="p">.</span><span class="nx">ID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to link task to project: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">task</span><span class="p">,</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881882736125-tab-1" role="tabpanel" aria-labelledby="tabs-1774880881882736125-tab-1-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># src/repository/repository.py (continued)</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Optional</span> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">uuid</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">models.models</span> <span class="kn">import</span> <span class="n">User</span><span class="p">,</span> <span class="n">Project</span><span class="p">,</span> <span class="n">Task</span><span class="p">,</span> <span class="n">TaskStatus</span><span class="p">,</span> <span class="n">Priority</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Repository</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># ... previous connection code ...</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">create_user</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">email</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">User</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Create a new user.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">user</span> <span class="o">=</span> <span class="n">User</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nb">id</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()),</span> </span></span><span class="line"><span class="cl"> <span class="n">email</span><span class="o">=</span><span class="n">email</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">created_at</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (:User { </span></span></span><span class="line"><span class="cl"><span class="s2"> id: $id, </span></span></span><span class="line"><span class="cl"><span class="s2"> email: $email, </span></span></span><span class="line"><span class="cl"><span class="s2"> name: $name, </span></span></span><span class="line"><span class="cl"><span class="s2"> created_at: $created_at </span></span></span><span class="line"><span class="cl"><span class="s2"> }) </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;id&#34;</span><span class="p">:</span> <span class="n">user</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;email&#34;</span><span class="p">:</span> <span class="n">user</span><span class="o">.</span><span class="n">email</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;name&#34;</span><span class="p">:</span> <span class="n">user</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;created_at&#34;</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">created_at</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">user</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">create_project</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">owner_id</span><span class="p">:</span> <span class="nb">str</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Project</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Create a new project with owner relationship.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">project</span> <span class="o">=</span> <span class="n">Project</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nb">id</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()),</span> </span></span><span class="line"><span class="cl"> <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">owner_id</span><span class="o">=</span><span class="n">owner_id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">created_at</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Create project node</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (:Project { </span></span></span><span class="line"><span class="cl"><span class="s2"> id: $id, </span></span></span><span class="line"><span class="cl"><span class="s2"> name: $name, </span></span></span><span class="line"><span class="cl"><span class="s2"> description: $description, </span></span></span><span class="line"><span class="cl"><span class="s2"> created_at: $created_at </span></span></span><span class="line"><span class="cl"><span class="s2"> }) </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;id&#34;</span><span class="p">:</span> <span class="n">project</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;name&#34;</span><span class="p">:</span> <span class="n">project</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;description&#34;</span><span class="p">:</span> <span class="n">project</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;created_at&#34;</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">project</span><span class="o">.</span><span class="n">created_at</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Create OWNS relationship</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $owner_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (p:Project {id: $project_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (u)-[:OWNS]-&gt;(p) </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;owner_id&#34;</span><span class="p">:</span> <span class="n">owner_id</span><span class="p">,</span> <span class="s2">&#34;project_id&#34;</span><span class="p">:</span> <span class="n">project</span><span class="o">.</span><span class="n">id</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">project</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">create_task</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">title</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">project_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">priority</span><span class="p">:</span> <span class="n">Priority</span> <span class="o">=</span> <span class="n">Priority</span><span class="o">.</span><span class="n">MEDIUM</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Task</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Create a new task in a project.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">now</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> <span class="n">task</span> <span class="o">=</span> <span class="n">Task</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nb">id</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()),</span> </span></span><span class="line"><span class="cl"> <span class="n">title</span><span class="o">=</span><span class="n">title</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">status</span><span class="o">=</span><span class="n">TaskStatus</span><span class="o">.</span><span class="n">PENDING</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">priority</span><span class="o">=</span><span class="n">priority</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">project_id</span><span class="o">=</span><span class="n">project_id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">created_at</span><span class="o">=</span><span class="n">now</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">updated_at</span><span class="o">=</span><span class="n">now</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Create task node</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (:Task { </span></span></span><span class="line"><span class="cl"><span class="s2"> id: $id, </span></span></span><span class="line"><span class="cl"><span class="s2"> title: $title, </span></span></span><span class="line"><span class="cl"><span class="s2"> description: $description, </span></span></span><span class="line"><span class="cl"><span class="s2"> status: $status, </span></span></span><span class="line"><span class="cl"><span class="s2"> priority: $priority, </span></span></span><span class="line"><span class="cl"><span class="s2"> created_at: $created_at, </span></span></span><span class="line"><span class="cl"><span class="s2"> updated_at: $updated_at </span></span></span><span class="line"><span class="cl"><span class="s2"> }) </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;id&#34;</span><span class="p">:</span> <span class="n">task</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;title&#34;</span><span class="p">:</span> <span class="n">task</span><span class="o">.</span><span class="n">title</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;description&#34;</span><span class="p">:</span> <span class="n">task</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;status&#34;</span><span class="p">:</span> <span class="n">task</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;priority&#34;</span><span class="p">:</span> <span class="n">task</span><span class="o">.</span><span class="n">priority</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;created_at&#34;</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">task</span><span class="o">.</span><span class="n">created_at</span><span class="o">.</span><span class="n">timestamp</span><span class="p">()),</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;updated_at&#34;</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">task</span><span class="o">.</span><span class="n">updated_at</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Create CONTAINS relationship</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (p:Project {id: $project_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (p)-[:CONTAINS]-&gt;(t) </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;project_id&#34;</span><span class="p">:</span> <span class="n">project_id</span><span class="p">,</span> <span class="s2">&#34;task_id&#34;</span><span class="p">:</span> <span class="n">task</span><span class="o">.</span><span class="n">id</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">task</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881882736125-tab-2" role="tabpanel" aria-labelledby="tabs-1774880881882736125-tab-2-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// src/repository/mod.rs (continued) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">use</span><span class="w"> </span><span class="k">crate</span>::<span class="n">models</span>::<span class="p">{</span><span class="n">User</span><span class="p">,</span><span class="w"> </span><span class="n">Project</span><span class="p">,</span><span class="w"> </span><span class="n">Task</span><span class="p">,</span><span class="w"> </span><span class="n">TaskStatus</span><span class="p">,</span><span class="w"> </span><span class="n">Priority</span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">std</span>::<span class="n">collections</span>::<span class="n">HashMap</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">geode_client</span>::<span class="n">Value</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">chrono</span>::<span class="n">Utc</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">uuid</span>::<span class="n">Uuid</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">impl</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">create_user</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">email</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="n">name</span>: <span class="nb">String</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="n">User</span><span class="p">,</span><span class="w"> </span><span class="n">GeodeError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">User</span>::<span class="n">new</span><span class="p">(</span><span class="n">email</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">connect</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">user</span><span class="p">.</span><span class="n">id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;email&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">user</span><span class="p">.</span><span class="n">email</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;name&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">user</span><span class="p">.</span><span class="n">name</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;created_at&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">int</span><span class="p">(</span><span class="n">user</span><span class="p">.</span><span class="n">created_at</span><span class="p">.</span><span class="n">timestamp</span><span class="p">()));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (:User { </span></span></span><span class="line"><span class="cl"><span class="s"> id: $id, </span></span></span><span class="line"><span class="cl"><span class="s"> email: $email, </span></span></span><span class="line"><span class="cl"><span class="s"> name: $name, </span></span></span><span class="line"><span class="cl"><span class="s"> created_at: $created_at </span></span></span><span class="line"><span class="cl"><span class="s"> }) </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="n">user</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">create_project</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">name</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">description</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">owner_id</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="n">Project</span><span class="p">,</span><span class="w"> </span><span class="n">GeodeError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">project</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Project</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">id</span>: <span class="nc">Uuid</span>::<span class="n">new_v4</span><span class="p">().</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">description</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">owner_id</span>: <span class="nc">owner_id</span><span class="p">.</span><span class="n">clone</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">created_at</span>: <span class="nc">Utc</span>::<span class="n">now</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">connect</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create project node </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">project</span><span class="p">.</span><span class="n">id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;name&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">project</span><span class="p">.</span><span class="n">name</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;description&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">project</span><span class="p">.</span><span class="n">description</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;created_at&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">int</span><span class="p">(</span><span class="n">project</span><span class="p">.</span><span class="n">created_at</span><span class="p">.</span><span class="n">timestamp</span><span class="p">()));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (:Project { </span></span></span><span class="line"><span class="cl"><span class="s"> id: $id, </span></span></span><span class="line"><span class="cl"><span class="s"> name: $name, </span></span></span><span class="line"><span class="cl"><span class="s"> description: $description, </span></span></span><span class="line"><span class="cl"><span class="s"> created_at: $created_at </span></span></span><span class="line"><span class="cl"><span class="s"> }) </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create OWNS relationship </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">rel_params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">rel_params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;owner_id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">owner_id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">rel_params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;project_id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">project</span><span class="p">.</span><span class="n">id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (u:User {id: $owner_id}) </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (p:Project {id: $project_id}) </span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (u)-[:OWNS]-&gt;(p) </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">rel_params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="n">project</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">create_task</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">title</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">description</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">project_id</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">priority</span>: <span class="nc">Priority</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="n">Task</span><span class="p">,</span><span class="w"> </span><span class="n">GeodeError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">now</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Utc</span>::<span class="n">now</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">task</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">id</span>: <span class="nc">Uuid</span>::<span class="n">new_v4</span><span class="p">().</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">title</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">description</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">status</span>: <span class="nc">TaskStatus</span>::<span class="n">Pending</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">priority</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">due_date</span>: <span class="nb">None</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">project_id</span>: <span class="nc">project_id</span><span class="p">.</span><span class="n">clone</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">assignee_id</span>: <span class="nb">None</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">created_at</span>: <span class="nc">now</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">updated_at</span>: <span class="nc">now</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">connect</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create task node </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">task</span><span class="p">.</span><span class="n">id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;title&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">task</span><span class="p">.</span><span class="n">title</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;description&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">task</span><span class="p">.</span><span class="n">description</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;status&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="n">task</span><span class="p">.</span><span class="n">status</span><span class="p">.</span><span class="n">as_str</span><span class="p">()));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;priority&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">int</span><span class="p">(</span><span class="n">task</span><span class="p">.</span><span class="n">priority</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="kt">i64</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;created_at&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">int</span><span class="p">(</span><span class="n">task</span><span class="p">.</span><span class="n">created_at</span><span class="p">.</span><span class="n">timestamp</span><span class="p">()));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;updated_at&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">int</span><span class="p">(</span><span class="n">task</span><span class="p">.</span><span class="n">updated_at</span><span class="p">.</span><span class="n">timestamp</span><span class="p">()));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (:Task { </span></span></span><span class="line"><span class="cl"><span class="s"> id: $id, </span></span></span><span class="line"><span class="cl"><span class="s"> title: $title, </span></span></span><span class="line"><span class="cl"><span class="s"> description: $description, </span></span></span><span class="line"><span class="cl"><span class="s"> status: $status, </span></span></span><span class="line"><span class="cl"><span class="s"> priority: $priority, </span></span></span><span class="line"><span class="cl"><span class="s"> created_at: $created_at, </span></span></span><span class="line"><span class="cl"><span class="s"> updated_at: $updated_at </span></span></span><span class="line"><span class="cl"><span class="s"> }) </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create CONTAINS relationship </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">rel_params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">rel_params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;project_id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">project_id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">rel_params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;task_id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">task</span><span class="p">.</span><span class="n">id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (p:Project {id: $project_id}) </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (p)-[:CONTAINS]-&gt;(t) </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">rel_params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="n">task</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881882736125-tab-3" role="tabpanel" aria-labelledby="tabs-1774880881882736125-tab-3-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="c1">// src/repository/index.ts (continued) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">import</span> <span class="p">{</span> <span class="nx">User</span><span class="p">,</span> <span class="nx">Project</span><span class="p">,</span> <span class="nx">Task</span><span class="p">,</span> <span class="nx">TaskStatus</span><span class="p">,</span> <span class="nx">Priority</span><span class="p">,</span> <span class="nx">createUser</span><span class="p">,</span> <span class="nx">createProject</span><span class="p">,</span> <span class="nx">createTask</span> <span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;../models&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kr">class</span> <span class="nx">Repository</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// ... previous connection code ... </span></span></span><span class="line"><span class="cl"><span class="c1"></span> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">createUser</span><span class="p">(</span><span class="nx">email</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">name</span>: <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">User</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">user</span> <span class="o">=</span> <span class="nx">createUser</span><span class="p">(</span><span class="nx">email</span><span class="p">,</span> <span class="nx">name</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getClient</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`CREATE (:User { </span></span></span><span class="line"><span class="cl"><span class="sb"> id: $id, </span></span></span><span class="line"><span class="cl"><span class="sb"> email: $email, </span></span></span><span class="line"><span class="cl"><span class="sb"> name: $name, </span></span></span><span class="line"><span class="cl"><span class="sb"> created_at: $created_at </span></span></span><span class="line"><span class="cl"><span class="sb"> })`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">id</span>: <span class="kt">user.id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">email</span>: <span class="kt">user.email</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">name</span>: <span class="kt">user.name</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">created_at</span>: <span class="kt">Math.floor</span><span class="p">(</span><span class="nx">user</span><span class="p">.</span><span class="nx">createdAt</span><span class="p">.</span><span class="nx">getTime</span><span class="p">()</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">user</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">createProject</span><span class="p">(</span><span class="nx">name</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">description</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">ownerId</span>: <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">Project</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">project</span> <span class="o">=</span> <span class="nx">createProject</span><span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">description</span><span class="p">,</span> <span class="nx">ownerId</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getClient</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create project node </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`CREATE (:Project { </span></span></span><span class="line"><span class="cl"><span class="sb"> id: $id, </span></span></span><span class="line"><span class="cl"><span class="sb"> name: $name, </span></span></span><span class="line"><span class="cl"><span class="sb"> description: $description, </span></span></span><span class="line"><span class="cl"><span class="sb"> created_at: $created_at </span></span></span><span class="line"><span class="cl"><span class="sb"> })`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">id</span>: <span class="kt">project.id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">name</span>: <span class="kt">project.name</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">description</span>: <span class="kt">project.description</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">created_at</span>: <span class="kt">Math.floor</span><span class="p">(</span><span class="nx">project</span><span class="p">.</span><span class="nx">createdAt</span><span class="p">.</span><span class="nx">getTime</span><span class="p">()</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create OWNS relationship </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`MATCH (u:User {id: $owner_id}) </span></span></span><span class="line"><span class="cl"><span class="sb"> MATCH (p:Project {id: $project_id}) </span></span></span><span class="line"><span class="cl"><span class="sb"> CREATE (u)-[:OWNS]-&gt;(p)`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> <span class="nx">owner_id</span>: <span class="kt">ownerId</span><span class="p">,</span> <span class="nx">project_id</span>: <span class="kt">project.id</span> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">project</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">createTask</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nx">title</span>: <span class="kt">string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">description</span>: <span class="kt">string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">projectId</span>: <span class="kt">string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">priority</span>: <span class="kt">Priority</span> <span class="o">=</span> <span class="nx">Priority</span><span class="p">.</span><span class="nx">Medium</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">Task</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">task</span> <span class="o">=</span> <span class="nx">createTask</span><span class="p">(</span><span class="nx">title</span><span class="p">,</span> <span class="nx">description</span><span class="p">,</span> <span class="nx">projectId</span><span class="p">,</span> <span class="nx">priority</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getClient</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create task node </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`CREATE (:Task { </span></span></span><span class="line"><span class="cl"><span class="sb"> id: $id, </span></span></span><span class="line"><span class="cl"><span class="sb"> title: $title, </span></span></span><span class="line"><span class="cl"><span class="sb"> description: $description, </span></span></span><span class="line"><span class="cl"><span class="sb"> status: $status, </span></span></span><span class="line"><span class="cl"><span class="sb"> priority: $priority, </span></span></span><span class="line"><span class="cl"><span class="sb"> created_at: $created_at, </span></span></span><span class="line"><span class="cl"><span class="sb"> updated_at: $updated_at </span></span></span><span class="line"><span class="cl"><span class="sb"> })`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">id</span>: <span class="kt">task.id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">title</span>: <span class="kt">task.title</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">description</span>: <span class="kt">task.description</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">status</span>: <span class="kt">task.status</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">priority</span>: <span class="kt">task.priority</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">created_at</span>: <span class="kt">Math.floor</span><span class="p">(</span><span class="nx">task</span><span class="p">.</span><span class="nx">createdAt</span><span class="p">.</span><span class="nx">getTime</span><span class="p">()</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="nx">updated_at</span>: <span class="kt">Math.floor</span><span class="p">(</span><span class="nx">task</span><span class="p">.</span><span class="nx">updatedAt</span><span class="p">.</span><span class="nx">getTime</span><span class="p">()</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create CONTAINS relationship </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`MATCH (p:Project {id: $project_id}) </span></span></span><span class="line"><span class="cl"><span class="sb"> MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="sb"> CREATE (p)-[:CONTAINS]-&gt;(t)`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> <span class="nx">project_id</span>: <span class="kt">projectId</span><span class="p">,</span> <span class="nx">task_id</span>: <span class="kt">task.id</span> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">task</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881882736125-tab-4" role="tabpanel" aria-labelledby="tabs-1774880881882736125-tab-4-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// src/repository.zig (continued) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">const</span><span class="w"> </span><span class="n">models</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@import</span><span class="p">(</span><span class="s">&#34;models.zig&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// ... previous connection code ... </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">createUser</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">,</span><span class="w"> </span><span class="n">email</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="n">models</span><span class="p">.</span><span class="n">User</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">models</span><span class="p">.</span><span class="n">generateId</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">created_at</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">time</span><span class="p">.</span><span class="n">timestamp</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">json</span><span class="p">.</span><span class="n">ObjectMap</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;email&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">email</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;name&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;created_at&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">integer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">created_at</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\CREATE (:User {</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ id: $id,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ email: $email,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ name: $name,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ created_at: $created_at</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">models</span><span class="p">.</span><span class="n">User</span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">id</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">email</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">email</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">created_at</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">created_at</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">createProject</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">description</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">owner_id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="n">models</span><span class="p">.</span><span class="n">Project</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">models</span><span class="p">.</span><span class="n">generateId</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">created_at</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">time</span><span class="p">.</span><span class="n">timestamp</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create project node </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">json</span><span class="p">.</span><span class="n">ObjectMap</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;name&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;description&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">description</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;created_at&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">integer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">created_at</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\CREATE (:Project {</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ id: $id,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ name: $name,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ description: $description,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ created_at: $created_at</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create OWNS relationship </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">clearRetainingCapacity</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;owner_id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">owner_id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;project_id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (u:User {id: $owner_id})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (p:Project {id: $project_id})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\CREATE (u)-[:OWNS]-&gt;(p)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">models</span><span class="p">.</span><span class="n">Project</span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">id</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">description</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">description</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">owner_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">owner_id</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">created_at</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">created_at</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">createTask</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">title</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">description</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">project_id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">priority</span><span class="o">:</span><span class="w"> </span><span class="n">models</span><span class="p">.</span><span class="n">Priority</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="n">models</span><span class="p">.</span><span class="n">Task</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">models</span><span class="p">.</span><span class="n">generateId</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">now</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">time</span><span class="p">.</span><span class="n">timestamp</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">json</span><span class="p">.</span><span class="n">ObjectMap</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;title&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">title</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;description&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">description</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;status&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&#34;pending&#34;</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;priority&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">integer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@intFromEnum</span><span class="p">(</span><span class="n">priority</span><span class="p">)</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;created_at&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">integer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">now</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;updated_at&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">integer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">now</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\CREATE (:Task {</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ id: $id,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ title: $title,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ description: $description,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ status: $status,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ priority: $priority,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ created_at: $created_at,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ updated_at: $updated_at</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create CONTAINS relationship </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">clearRetainingCapacity</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;project_id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">project_id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;task_id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (p:Project {id: $project_id})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (t:Task {id: $task_id})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\CREATE (p)-[:CONTAINS]-&gt;(t)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">models</span><span class="p">.</span><span class="n">Task</span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">id</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">title</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">title</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">description</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">description</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">.</span><span class="n">pending</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">priority</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">priority</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">due_date</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">project_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">project_id</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">assignee_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">created_at</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">now</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">updated_at</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">now</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span></code></pre></div> </div></div> </div> <h4 id="read-operations" class="position-relative d-flex align-items-center group"> <span>Read Operations</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="read-operations" aria-haspopup="dialog" aria-label="Share link: Read Operations"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="docs-tabs mb-4"> <ul class="nav nav-tabs" id="tabs-1774880881931976690" role="tablist"><li class="nav-item" role="presentation"> <button class="nav-link active" id="tabs-1774880881931976690-tab-0-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881931976690-tab-0" type="button" role="tab" aria-controls="tabs-1774880881931976690-tab-0" aria-selected="true" > Go </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881931976690-tab-1-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881931976690-tab-1" type="button" role="tab" aria-controls="tabs-1774880881931976690-tab-1" aria-selected="false" > Python </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881931976690-tab-2-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881931976690-tab-2" type="button" role="tab" aria-controls="tabs-1774880881931976690-tab-2" aria-selected="false" > Rust </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881931976690-tab-3-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881931976690-tab-3" type="button" role="tab" aria-controls="tabs-1774880881931976690-tab-3" aria-selected="false" > Node.js </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881931976690-tab-4-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881931976690-tab-4" type="button" role="tab" aria-controls="tabs-1774880881931976690-tab-4" aria-selected="false" > Zig </button> </li></ul> <div class="tab-content border border-top-0 rounded-bottom p-3" id="tabs-1774880881931976690-content"><div class="tab-pane fade show active" id="tabs-1774880881931976690-tab-0" role="tabpanel" aria-labelledby="tabs-1774880881931976690-tab-0-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// internal/repository/query_repository.go </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">package</span> <span class="nx">repository</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;context&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;database/sql&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;fmt&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;time&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="s">&#34;geode-tasks/internal/models&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">GetUserByID</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">id</span> <span class="kt">string</span><span class="p">)</span> <span class="p">(</span><span class="o">*</span><span class="nx">models</span><span class="p">.</span><span class="nx">User</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">row</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">QueryRowContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (u:User {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> RETURN u.id, u.email, u.name, u.created_at </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">id</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">user</span> <span class="nx">models</span><span class="p">.</span><span class="nx">User</span> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">createdAt</span> <span class="kt">int64</span> </span></span><span class="line"><span class="cl"> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">row</span><span class="p">.</span><span class="nf">Scan</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">user</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">user</span><span class="p">.</span><span class="nx">Email</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">user</span><span class="p">.</span><span class="nx">Name</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">createdAt</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">==</span> <span class="nx">sql</span><span class="p">.</span><span class="nx">ErrNoRows</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to get user: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">user</span><span class="p">.</span><span class="nx">CreatedAt</span> <span class="p">=</span> <span class="nx">time</span><span class="p">.</span><span class="nf">Unix</span><span class="p">(</span><span class="nx">createdAt</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="o">&amp;</span><span class="nx">user</span><span class="p">,</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">GetTasksByProject</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">projectID</span> <span class="kt">string</span><span class="p">)</span> <span class="p">([]</span><span class="nx">models</span><span class="p">.</span><span class="nx">Task</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">rows</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">QueryContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (p:Project {id: ?})-[:CONTAINS]-&gt;(t:Task) </span></span></span><span class="line"><span class="cl"><span class="s"> RETURN t.id, t.title, t.description, t.status, t.priority, </span></span></span><span class="line"><span class="cl"><span class="s"> t.created_at, t.updated_at </span></span></span><span class="line"><span class="cl"><span class="s"> ORDER BY t.priority DESC, t.created_at DESC </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">projectID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to query tasks: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">defer</span> <span class="nx">rows</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">tasks</span> <span class="p">[]</span><span class="nx">models</span><span class="p">.</span><span class="nx">Task</span> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="nx">rows</span><span class="p">.</span><span class="nf">Next</span><span class="p">()</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">task</span> <span class="nx">models</span><span class="p">.</span><span class="nx">Task</span> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">status</span> <span class="kt">string</span> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">priority</span><span class="p">,</span> <span class="nx">createdAt</span><span class="p">,</span> <span class="nx">updatedAt</span> <span class="kt">int64</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">rows</span><span class="p">.</span><span class="nf">Scan</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">task</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">task</span><span class="p">.</span><span class="nx">Title</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">task</span><span class="p">.</span><span class="nx">Description</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="o">&amp;</span><span class="nx">status</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">priority</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">createdAt</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">updatedAt</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to scan task: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">task</span><span class="p">.</span><span class="nx">Status</span> <span class="p">=</span> <span class="nx">models</span><span class="p">.</span><span class="nf">TaskStatus</span><span class="p">(</span><span class="nx">status</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">task</span><span class="p">.</span><span class="nx">Priority</span> <span class="p">=</span> <span class="nx">models</span><span class="p">.</span><span class="nf">Priority</span><span class="p">(</span><span class="nx">priority</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">task</span><span class="p">.</span><span class="nx">ProjectID</span> <span class="p">=</span> <span class="nx">projectID</span> </span></span><span class="line"><span class="cl"> <span class="nx">task</span><span class="p">.</span><span class="nx">CreatedAt</span> <span class="p">=</span> <span class="nx">time</span><span class="p">.</span><span class="nf">Unix</span><span class="p">(</span><span class="nx">createdAt</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">task</span><span class="p">.</span><span class="nx">UpdatedAt</span> <span class="p">=</span> <span class="nx">time</span><span class="p">.</span><span class="nf">Unix</span><span class="p">(</span><span class="nx">updatedAt</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">tasks</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">tasks</span><span class="p">,</span> <span class="nx">task</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">tasks</span><span class="p">,</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">GetUserTasks</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">userID</span> <span class="kt">string</span><span class="p">)</span> <span class="p">([]</span><span class="nx">models</span><span class="p">.</span><span class="nx">Task</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">rows</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">QueryContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (u:User {id: ?})-[:ASSIGNED_TO]-&gt;(t:Task) </span></span></span><span class="line"><span class="cl"><span class="s"> RETURN t.id, t.title, t.status, t.priority, t.due_date </span></span></span><span class="line"><span class="cl"><span class="s"> ORDER BY t.due_date ASC, t.priority DESC </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">userID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to query user tasks: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">defer</span> <span class="nx">rows</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">tasks</span> <span class="p">[]</span><span class="nx">models</span><span class="p">.</span><span class="nx">Task</span> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="nx">rows</span><span class="p">.</span><span class="nf">Next</span><span class="p">()</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">task</span> <span class="nx">models</span><span class="p">.</span><span class="nx">Task</span> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">status</span> <span class="kt">string</span> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">priority</span> <span class="kt">int64</span> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">dueDate</span> <span class="nx">sql</span><span class="p">.</span><span class="nx">NullInt64</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">rows</span><span class="p">.</span><span class="nf">Scan</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">task</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">task</span><span class="p">.</span><span class="nx">Title</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">status</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">priority</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">dueDate</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to scan task: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">task</span><span class="p">.</span><span class="nx">Status</span> <span class="p">=</span> <span class="nx">models</span><span class="p">.</span><span class="nf">TaskStatus</span><span class="p">(</span><span class="nx">status</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">task</span><span class="p">.</span><span class="nx">Priority</span> <span class="p">=</span> <span class="nx">models</span><span class="p">.</span><span class="nf">Priority</span><span class="p">(</span><span class="nx">priority</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">task</span><span class="p">.</span><span class="nx">AssigneeID</span> <span class="p">=</span> <span class="o">&amp;</span><span class="nx">userID</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">dueDate</span><span class="p">.</span><span class="nx">Valid</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">t</span> <span class="o">:=</span> <span class="nx">time</span><span class="p">.</span><span class="nf">Unix</span><span class="p">(</span><span class="nx">dueDate</span><span class="p">.</span><span class="nx">Int64</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">task</span><span class="p">.</span><span class="nx">DueDate</span> <span class="p">=</span> <span class="o">&amp;</span><span class="nx">t</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="nx">tasks</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">tasks</span><span class="p">,</span> <span class="nx">task</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">tasks</span><span class="p">,</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881931976690-tab-1" role="tabpanel" aria-labelledby="tabs-1774880881931976690-tab-1-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># src/repository/repository.py (continued)</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">List</span><span class="p">,</span> <span class="n">Optional</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Repository</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># ... previous code ...</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_user_by_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">User</span><span class="p">]:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Get a user by ID.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">page</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u.id, u.email, u.name, u.created_at </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;id&#34;</span><span class="p">:</span> <span class="n">user_id</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="ow">not</span> <span class="n">page</span><span class="o">.</span><span class="n">rows</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">None</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">row</span> <span class="o">=</span> <span class="n">page</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">User</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nb">id</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;u.id&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">email</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;u.email&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">name</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;u.name&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">created_at</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;u.created_at&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_int</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_tasks_by_project</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">project_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Task</span><span class="p">]:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Get all tasks in a project.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">page</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (p:Project {id: $project_id})-[:CONTAINS]-&gt;(t:Task) </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN t.id, t.title, t.description, t.status, t.priority, </span></span></span><span class="line"><span class="cl"><span class="s2"> t.created_at, t.updated_at </span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY t.priority DESC, t.created_at DESC </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;project_id&#34;</span><span class="p">:</span> <span class="n">project_id</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">tasks</span> <span class="o">=</span> <span class="p">[]</span> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">page</span><span class="o">.</span><span class="n">rows</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">task</span> <span class="o">=</span> <span class="n">Task</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nb">id</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.id&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">title</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.title&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">description</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.description&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">status</span><span class="o">=</span><span class="n">TaskStatus</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.status&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_string</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="n">priority</span><span class="o">=</span><span class="n">Priority</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.priority&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_int</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="n">project_id</span><span class="o">=</span><span class="n">project_id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">created_at</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.created_at&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_int</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="n">updated_at</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.updated_at&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_int</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="n">tasks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">task</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">tasks</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_user_tasks</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Task</span><span class="p">]:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Get all tasks assigned to a user.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">page</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $user_id})-[:ASSIGNED_TO]-&gt;(t:Task) </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN t.id, t.title, t.status, t.priority, t.due_date </span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY t.due_date ASC, t.priority DESC </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;user_id&#34;</span><span class="p">:</span> <span class="n">user_id</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">tasks</span> <span class="o">=</span> <span class="p">[]</span> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">page</span><span class="o">.</span><span class="n">rows</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">due_date</span> <span class="o">=</span> <span class="kc">None</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;t.due_date&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.due_date&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_int</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">due_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.due_date&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_int</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">task</span> <span class="o">=</span> <span class="n">Task</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nb">id</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.id&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">title</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.title&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">status</span><span class="o">=</span><span class="n">TaskStatus</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.status&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_string</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="n">priority</span><span class="o">=</span><span class="n">Priority</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;t.priority&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">as_int</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="n">due_date</span><span class="o">=</span><span class="n">due_date</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">assignee_id</span><span class="o">=</span><span class="n">user_id</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="n">tasks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">task</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">tasks</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881931976690-tab-2" role="tabpanel" aria-labelledby="tabs-1774880881931976690-tab-2-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// src/repository/mod.rs (continued) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">impl</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">get_user_by_id</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">user_id</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="nb">Option</span><span class="o">&lt;</span><span class="n">User</span><span class="o">&gt;</span><span class="p">,</span><span class="w"> </span><span class="n">GeodeError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">connect</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="n">user_id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="p">(</span><span class="n">page</span><span class="p">,</span><span class="w"> </span><span class="n">_</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (u:User {id: $id}) </span></span></span><span class="line"><span class="cl"><span class="s"> RETURN u.id, u.email, u.name, u.created_at </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">page</span><span class="p">.</span><span class="n">rows</span><span class="p">.</span><span class="n">is_empty</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="nb">None</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">row</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">page</span><span class="p">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">User</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">id</span>: <span class="nc">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#34;u.id&#34;</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">as_string</span><span class="p">()</span><span class="o">?</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">email</span>: <span class="nc">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#34;u.email&#34;</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">as_string</span><span class="p">()</span><span class="o">?</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">name</span>: <span class="nc">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#34;u.name&#34;</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">as_string</span><span class="p">()</span><span class="o">?</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">created_at</span>: <span class="nc">DateTime</span>::<span class="n">from_timestamp</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#34;u.created_at&#34;</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">as_int</span><span class="p">()</span><span class="o">?</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="mi">0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="n">unwrap</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="nb">Some</span><span class="p">(</span><span class="n">user</span><span class="p">))</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">get_tasks_by_project</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">project_id</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="nb">Vec</span><span class="o">&lt;</span><span class="n">Task</span><span class="o">&gt;</span><span class="p">,</span><span class="w"> </span><span class="n">GeodeError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">connect</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;project_id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="n">project_id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="p">(</span><span class="n">page</span><span class="p">,</span><span class="w"> </span><span class="n">_</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (p:Project {id: $project_id})-[:CONTAINS]-&gt;(t:Task) </span></span></span><span class="line"><span class="cl"><span class="s"> RETURN t.id, t.title, t.description, t.status, t.priority, </span></span></span><span class="line"><span class="cl"><span class="s"> t.created_at, t.updated_at </span></span></span><span class="line"><span class="cl"><span class="s"> ORDER BY t.priority DESC, t.created_at DESC </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">tasks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Vec</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">row</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="o">&amp;</span><span class="n">page</span><span class="p">.</span><span class="n">rows</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">match</span><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#34;t.status&#34;</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">as_string</span><span class="p">()</span><span class="o">?</span><span class="p">.</span><span class="n">as_str</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;pending&#34;</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="n">TaskStatus</span>::<span class="n">Pending</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;in_progress&#34;</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="n">TaskStatus</span>::<span class="n">InProgress</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;completed&#34;</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="n">TaskStatus</span>::<span class="n">Completed</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="n">TaskStatus</span>::<span class="n">Pending</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">priority</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">match</span><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#34;t.priority&#34;</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">as_int</span><span class="p">()</span><span class="o">?</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="n">Priority</span>::<span class="n">Low</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="n">Priority</span>::<span class="n">Medium</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="n">Priority</span>::<span class="n">High</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="n">Priority</span>::<span class="n">Medium</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">task</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">id</span>: <span class="nc">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#34;t.id&#34;</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">as_string</span><span class="p">()</span><span class="o">?</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">title</span>: <span class="nc">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#34;t.title&#34;</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">as_string</span><span class="p">()</span><span class="o">?</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">description</span>: <span class="nc">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#34;t.description&#34;</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">as_string</span><span class="p">()</span><span class="o">?</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">status</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">priority</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">due_date</span>: <span class="nb">None</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">project_id</span>: <span class="nc">project_id</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">assignee_id</span>: <span class="nb">None</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">created_at</span>: <span class="nc">DateTime</span>::<span class="n">from_timestamp</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#34;t.created_at&#34;</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">as_int</span><span class="p">()</span><span class="o">?</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="n">unwrap</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">updated_at</span>: <span class="nc">DateTime</span>::<span class="n">from_timestamp</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#34;t.updated_at&#34;</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">as_int</span><span class="p">()</span><span class="o">?</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="n">unwrap</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">tasks</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="n">task</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="n">tasks</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881931976690-tab-3" role="tabpanel" aria-labelledby="tabs-1774880881931976690-tab-3-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="c1">// src/repository/index.ts (continued) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">export</span> <span class="kr">class</span> <span class="nx">Repository</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// ... previous code ... </span></span></span><span class="line"><span class="cl"><span class="c1"></span> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">getUserById</span><span class="p">(</span><span class="nx">userId</span>: <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">User</span> <span class="err">|</span> <span class="na">null</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getClient</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">rows</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">queryAll</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`MATCH (u:User {id: $id}) </span></span></span><span class="line"><span class="cl"><span class="sb"> RETURN u.id, u.email, u.name, u.created_at`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> <span class="nx">id</span>: <span class="kt">userId</span> <span class="p">}</span> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="nx">rows</span><span class="p">.</span><span class="nx">length</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">null</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">row</span> <span class="o">=</span> <span class="nx">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">id</span>: <span class="kt">row.get</span><span class="p">(</span><span class="s1">&#39;u.id&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asString</span> <span class="o">??</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">email</span>: <span class="kt">row.get</span><span class="p">(</span><span class="s1">&#39;u.email&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asString</span> <span class="o">??</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">name</span>: <span class="kt">row.get</span><span class="p">(</span><span class="s1">&#39;u.name&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asString</span> <span class="o">??</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">createdAt</span>: <span class="kt">new</span> <span class="nb">Date</span><span class="p">((</span><span class="nx">row</span><span class="p">.</span><span class="kr">get</span><span class="p">(</span><span class="s1">&#39;u.created_at&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asNumber</span> <span class="o">??</span> <span class="mi">0</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="p">};</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">getTasksByProject</span><span class="p">(</span><span class="nx">projectId</span>: <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">Task</span><span class="err">[]</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getClient</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">rows</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">queryAll</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`MATCH (p:Project {id: $project_id})-[:CONTAINS]-&gt;(t:Task) </span></span></span><span class="line"><span class="cl"><span class="sb"> RETURN t.id, t.title, t.description, t.status, t.priority, </span></span></span><span class="line"><span class="cl"><span class="sb"> t.created_at, t.updated_at </span></span></span><span class="line"><span class="cl"><span class="sb"> ORDER BY t.priority DESC, t.created_at DESC`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> <span class="nx">project_id</span>: <span class="kt">projectId</span> <span class="p">}</span> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">rows</span><span class="p">.</span><span class="nx">map</span><span class="p">((</span><span class="nx">row</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">({</span> </span></span><span class="line"><span class="cl"> <span class="nx">id</span>: <span class="kt">row.get</span><span class="p">(</span><span class="s1">&#39;t.id&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asString</span> <span class="o">??</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">title</span>: <span class="kt">row.get</span><span class="p">(</span><span class="s1">&#39;t.title&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asString</span> <span class="o">??</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">description</span>: <span class="kt">row.get</span><span class="p">(</span><span class="s1">&#39;t.description&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asString</span> <span class="o">??</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">status</span>: <span class="kt">row.get</span><span class="p">(</span><span class="s1">&#39;t.status&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asString</span> <span class="kr">as</span> <span class="nx">TaskStatus</span> <span class="o">??</span> <span class="nx">TaskStatus</span><span class="p">.</span><span class="nx">Pending</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">priority</span>: <span class="kt">row.get</span><span class="p">(</span><span class="s1">&#39;t.priority&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asNumber</span> <span class="kr">as</span> <span class="nx">Priority</span> <span class="o">??</span> <span class="nx">Priority</span><span class="p">.</span><span class="nx">Medium</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">projectId</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">createdAt</span>: <span class="kt">new</span> <span class="nb">Date</span><span class="p">((</span><span class="nx">row</span><span class="p">.</span><span class="kr">get</span><span class="p">(</span><span class="s1">&#39;t.created_at&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asNumber</span> <span class="o">??</span> <span class="mi">0</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="nx">updatedAt</span>: <span class="kt">new</span> <span class="nb">Date</span><span class="p">((</span><span class="nx">row</span><span class="p">.</span><span class="kr">get</span><span class="p">(</span><span class="s1">&#39;t.updated_at&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asNumber</span> <span class="o">??</span> <span class="mi">0</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="p">}));</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">getUserTasks</span><span class="p">(</span><span class="nx">userId</span>: <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">Task</span><span class="err">[]</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getClient</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">rows</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">queryAll</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`MATCH (u:User {id: $user_id})-[:ASSIGNED_TO]-&gt;(t:Task) </span></span></span><span class="line"><span class="cl"><span class="sb"> RETURN t.id, t.title, t.status, t.priority, t.due_date </span></span></span><span class="line"><span class="cl"><span class="sb"> ORDER BY t.due_date ASC, t.priority DESC`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> <span class="nx">user_id</span>: <span class="kt">userId</span> <span class="p">}</span> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">rows</span><span class="p">.</span><span class="nx">map</span><span class="p">((</span><span class="nx">row</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">dueDateValue</span> <span class="o">=</span> <span class="nx">row</span><span class="p">.</span><span class="kr">get</span><span class="p">(</span><span class="s1">&#39;t.due_date&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asNumber</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">id</span>: <span class="kt">row.get</span><span class="p">(</span><span class="s1">&#39;t.id&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asString</span> <span class="o">??</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">title</span>: <span class="kt">row.get</span><span class="p">(</span><span class="s1">&#39;t.title&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asString</span> <span class="o">??</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">description</span><span class="o">:</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">status</span>: <span class="kt">row.get</span><span class="p">(</span><span class="s1">&#39;t.status&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asString</span> <span class="kr">as</span> <span class="nx">TaskStatus</span> <span class="o">??</span> <span class="nx">TaskStatus</span><span class="p">.</span><span class="nx">Pending</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">priority</span>: <span class="kt">row.get</span><span class="p">(</span><span class="s1">&#39;t.priority&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">asNumber</span> <span class="kr">as</span> <span class="nx">Priority</span> <span class="o">??</span> <span class="nx">Priority</span><span class="p">.</span><span class="nx">Medium</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">dueDate</span>: <span class="kt">dueDateValue</span> <span class="o">?</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="nx">dueDateValue</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">)</span> <span class="o">:</span> <span class="kc">undefined</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">projectId</span><span class="o">:</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">assigneeId</span>: <span class="kt">userId</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">createdAt</span>: <span class="kt">new</span> <span class="nb">Date</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="nx">updatedAt</span>: <span class="kt">new</span> <span class="nb">Date</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="p">};</span> </span></span><span class="line"><span class="cl"> <span class="p">});</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881931976690-tab-4" role="tabpanel" aria-labelledby="tabs-1774880881931976690-tab-4-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// src/repository.zig (continued) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// ... previous code ... </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">getUserById</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">,</span><span class="w"> </span><span class="n">user_id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">)</span><span class="w"> </span><span class="o">!?</span><span class="n">models</span><span class="p">.</span><span class="n">User</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">json</span><span class="p">.</span><span class="n">ObjectMap</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">user_id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (u:User {id: $id})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\RETURN u.id, u.email, u.name, u.created_at</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">schema</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">.</span><span class="n">free</span><span class="p">(</span><span class="n">schema</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendPull</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">1000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">.</span><span class="n">free</span><span class="p">(</span><span class="n">result</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Parse JSON result and extract user </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="c1">// Implementation depends on JSON parsing library </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="c1">// Return null if no results </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span><span class="w"> </span><span class="c1">// Placeholder </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">getTasksByProject</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">,</span><span class="w"> </span><span class="n">project_id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="p">[]</span><span class="n">models</span><span class="p">.</span><span class="n">Task</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">json</span><span class="p">.</span><span class="n">ObjectMap</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;project_id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">project_id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (p:Project {id: $project_id})-[:CONTAINS]-&gt;(t:Task)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\RETURN t.id, t.title, t.description, t.status, t.priority,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ t.created_at, t.updated_at</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\ORDER BY t.priority DESC, t.created_at DESC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">schema</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">.</span><span class="n">free</span><span class="p">(</span><span class="n">schema</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendPull</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">1000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">.</span><span class="n">free</span><span class="p">(</span><span class="n">result</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Parse JSON result and return tasks array </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">tasks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">ArrayList</span><span class="p">(</span><span class="n">models</span><span class="p">.</span><span class="n">Task</span><span class="p">).</span><span class="n">init</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Parse result and populate tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">tasks</span><span class="p">.</span><span class="n">toOwnedSlice</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span></code></pre></div> </div></div> </div> <h4 id="update-operations" class="position-relative d-flex align-items-center group"> <span>Update Operations</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="update-operations" aria-haspopup="dialog" aria-label="Share link: Update Operations"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="docs-tabs mb-4"> <ul class="nav nav-tabs" id="tabs-1774880881985513800" role="tablist"><li class="nav-item" role="presentation"> <button class="nav-link active" id="tabs-1774880881985513800-tab-0-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881985513800-tab-0" type="button" role="tab" aria-controls="tabs-1774880881985513800-tab-0" aria-selected="true" > Go </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881985513800-tab-1-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881985513800-tab-1" type="button" role="tab" aria-controls="tabs-1774880881985513800-tab-1" aria-selected="false" > Python </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881985513800-tab-2-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881985513800-tab-2" type="button" role="tab" aria-controls="tabs-1774880881985513800-tab-2" aria-selected="false" > Rust </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881985513800-tab-3-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881985513800-tab-3" type="button" role="tab" aria-controls="tabs-1774880881985513800-tab-3" aria-selected="false" > Node.js </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880881985513800-tab-4-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880881985513800-tab-4" type="button" role="tab" aria-controls="tabs-1774880881985513800-tab-4" aria-selected="false" > Zig </button> </li></ul> <div class="tab-content border border-top-0 rounded-bottom p-3" id="tabs-1774880881985513800-content"><div class="tab-pane fade show active" id="tabs-1774880881985513800-tab-0" role="tabpanel" aria-labelledby="tabs-1774880881985513800-tab-0-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// internal/repository/update_repository.go </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">package</span> <span class="nx">repository</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;context&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;fmt&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;time&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="s">&#34;geode-tasks/internal/models&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">UpdateTaskStatus</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">taskID</span> <span class="kt">string</span><span class="p">,</span> <span class="nx">status</span> <span class="nx">models</span><span class="p">.</span><span class="nx">TaskStatus</span><span class="p">)</span> <span class="kt">error</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (t:Task {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> SET t.status = ?, t.updated_at = ? </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">taskID</span><span class="p">,</span> <span class="nb">string</span><span class="p">(</span><span class="nx">status</span><span class="p">),</span> <span class="nx">time</span><span class="p">.</span><span class="nf">Now</span><span class="p">().</span><span class="nf">Unix</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to update task status: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">AssignTask</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">taskID</span><span class="p">,</span> <span class="nx">userID</span> <span class="kt">string</span><span class="p">)</span> <span class="kt">error</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// Remove existing assignment </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (:User)-[a:ASSIGNED_TO]-&gt;(:Task {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> DELETE a </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">taskID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to remove existing assignment: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create new assignment </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="p">=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (u:User {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (t:Task {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (u)-[:ASSIGNED_TO]-&gt;(t) </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">userID</span><span class="p">,</span> <span class="nx">taskID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to assign task: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Update task </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="p">=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (t:Task {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> SET t.updated_at = ? </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">taskID</span><span class="p">,</span> <span class="nx">time</span><span class="p">.</span><span class="nf">Now</span><span class="p">().</span><span class="nf">Unix</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">err</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">UpdateTask</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">task</span> <span class="o">*</span><span class="nx">models</span><span class="p">.</span><span class="nx">Task</span><span class="p">)</span> <span class="kt">error</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">task</span><span class="p">.</span><span class="nx">UpdatedAt</span> <span class="p">=</span> <span class="nx">time</span><span class="p">.</span><span class="nf">Now</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (t:Task {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> SET t.title = ?, </span></span></span><span class="line"><span class="cl"><span class="s"> t.description = ?, </span></span></span><span class="line"><span class="cl"><span class="s"> t.status = ?, </span></span></span><span class="line"><span class="cl"><span class="s"> t.priority = ?, </span></span></span><span class="line"><span class="cl"><span class="s"> t.due_date = ?, </span></span></span><span class="line"><span class="cl"><span class="s"> t.updated_at = ? </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">task</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="nx">task</span><span class="p">.</span><span class="nx">Title</span><span class="p">,</span> <span class="nx">task</span><span class="p">.</span><span class="nx">Description</span><span class="p">,</span> <span class="nb">string</span><span class="p">(</span><span class="nx">task</span><span class="p">.</span><span class="nx">Status</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="nb">int</span><span class="p">(</span><span class="nx">task</span><span class="p">.</span><span class="nx">Priority</span><span class="p">),</span> <span class="nx">task</span><span class="p">.</span><span class="nx">DueDate</span><span class="p">,</span> <span class="nx">task</span><span class="p">.</span><span class="nx">UpdatedAt</span><span class="p">.</span><span class="nf">Unix</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to update task: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881985513800-tab-1" role="tabpanel" aria-labelledby="tabs-1774880881985513800-tab-1-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># src/repository/repository.py (continued)</span> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Repository</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># ... previous code ...</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">update_task_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">status</span><span class="p">:</span> <span class="n">TaskStatus</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Update task status.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> SET t.status = $status, t.updated_at = $updated_at </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;task_id&#34;</span><span class="p">:</span> <span class="n">task_id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;status&#34;</span><span class="p">:</span> <span class="n">status</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;updated_at&#34;</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">assign_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Assign a task to a user.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Remove existing assignment</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (:User)-[a:ASSIGNED_TO]-&gt;(:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> DELETE a </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;task_id&#34;</span><span class="p">:</span> <span class="n">task_id</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Create new assignment</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $user_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (u)-[:ASSIGNED_TO]-&gt;(t) </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;user_id&#34;</span><span class="p">:</span> <span class="n">user_id</span><span class="p">,</span> <span class="s2">&#34;task_id&#34;</span><span class="p">:</span> <span class="n">task_id</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Update task timestamp</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> SET t.updated_at = $updated_at </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;task_id&#34;</span><span class="p">:</span> <span class="n">task_id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;updated_at&#34;</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">update_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task</span><span class="p">:</span> <span class="n">Task</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Update all task properties.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">task</span><span class="o">.</span><span class="n">updated_at</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (t:Task {id: $id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> SET t.title = $title, </span></span></span><span class="line"><span class="cl"><span class="s2"> t.description = $description, </span></span></span><span class="line"><span class="cl"><span class="s2"> t.status = $status, </span></span></span><span class="line"><span class="cl"><span class="s2"> t.priority = $priority, </span></span></span><span class="line"><span class="cl"><span class="s2"> t.due_date = $due_date, </span></span></span><span class="line"><span class="cl"><span class="s2"> t.updated_at = $updated_at </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;id&#34;</span><span class="p">:</span> <span class="n">task</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;title&#34;</span><span class="p">:</span> <span class="n">task</span><span class="o">.</span><span class="n">title</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;description&#34;</span><span class="p">:</span> <span class="n">task</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;status&#34;</span><span class="p">:</span> <span class="n">task</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;priority&#34;</span><span class="p">:</span> <span class="n">task</span><span class="o">.</span><span class="n">priority</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;due_date&#34;</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">task</span><span class="o">.</span><span class="n">due_date</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span> <span class="k">if</span> <span class="n">task</span><span class="o">.</span><span class="n">due_date</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;updated_at&#34;</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">task</span><span class="o">.</span><span class="n">updated_at</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881985513800-tab-2" role="tabpanel" aria-labelledby="tabs-1774880881985513800-tab-2-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// src/repository/mod.rs (continued) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">impl</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">update_task_status</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">task_id</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">,</span><span class="w"> </span><span class="n">status</span>: <span class="nc">TaskStatus</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="p">(),</span><span class="w"> </span><span class="n">GeodeError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">connect</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;task_id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="n">task_id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;status&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="n">status</span><span class="p">.</span><span class="n">as_str</span><span class="p">()));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;updated_at&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">int</span><span class="p">(</span><span class="n">Utc</span>::<span class="n">now</span><span class="p">().</span><span class="n">timestamp</span><span class="p">()));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="s"> SET t.status = $status, t.updated_at = $updated_at </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(())</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">assign_task</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">task_id</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">,</span><span class="w"> </span><span class="n">user_id</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="p">(),</span><span class="w"> </span><span class="n">GeodeError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">connect</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Remove existing assignment </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;task_id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="n">task_id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (:User)-[a:ASSIGNED_TO]-&gt;(:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="s"> DELETE a </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create new assignment </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;user_id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="n">user_id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (u:User {id: $user_id}) </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (u)-[:ASSIGNED_TO]-&gt;(t) </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Update timestamp </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;updated_at&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">int</span><span class="p">(</span><span class="n">Utc</span>::<span class="n">now</span><span class="p">().</span><span class="n">timestamp</span><span class="p">()));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="s"> SET t.updated_at = $updated_at </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(())</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881985513800-tab-3" role="tabpanel" aria-labelledby="tabs-1774880881985513800-tab-3-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="c1">// src/repository/index.ts (continued) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">export</span> <span class="kr">class</span> <span class="nx">Repository</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// ... previous code ... </span></span></span><span class="line"><span class="cl"><span class="c1"></span> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">updateTaskStatus</span><span class="p">(</span><span class="nx">taskId</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">status</span>: <span class="kt">TaskStatus</span><span class="p">)</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">void</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getClient</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="sb"> SET t.status = $status, t.updated_at = $updated_at`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">task_id</span>: <span class="kt">taskId</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">status</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">updated_at</span>: <span class="kt">Math.floor</span><span class="p">(</span><span class="nb">Date</span><span class="p">.</span><span class="nx">now</span><span class="p">()</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">assignTask</span><span class="p">(</span><span class="nx">taskId</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">userId</span>: <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">void</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getClient</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Remove existing assignment </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`MATCH (:User)-[a:ASSIGNED_TO]-&gt;(:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="sb"> DELETE a`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> <span class="nx">task_id</span>: <span class="kt">taskId</span> <span class="p">}</span> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create new assignment </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`MATCH (u:User {id: $user_id}) </span></span></span><span class="line"><span class="cl"><span class="sb"> MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="sb"> CREATE (u)-[:ASSIGNED_TO]-&gt;(t)`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> <span class="nx">user_id</span>: <span class="kt">userId</span><span class="p">,</span> <span class="nx">task_id</span>: <span class="kt">taskId</span> <span class="p">}</span> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Update timestamp </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="sb"> SET t.updated_at = $updated_at`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">task_id</span>: <span class="kt">taskId</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">updated_at</span>: <span class="kt">Math.floor</span><span class="p">(</span><span class="nb">Date</span><span class="p">.</span><span class="nx">now</span><span class="p">()</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880881985513800-tab-4" role="tabpanel" aria-labelledby="tabs-1774880881985513800-tab-4-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// src/repository.zig (continued) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// ... previous code ... </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">updateTaskStatus</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">,</span><span class="w"> </span><span class="n">task_id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="o">:</span><span class="w"> </span><span class="n">models</span><span class="p">.</span><span class="n">TaskStatus</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">json</span><span class="p">.</span><span class="n">ObjectMap</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;task_id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">task_id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;status&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">status</span><span class="p">.</span><span class="n">toString</span><span class="p">()</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;updated_at&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">integer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">time</span><span class="p">.</span><span class="n">timestamp</span><span class="p">()</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (t:Task {id: $task_id})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\SET t.status = $status, t.updated_at = $updated_at</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">assignTask</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">,</span><span class="w"> </span><span class="n">task_id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">user_id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">json</span><span class="p">.</span><span class="n">ObjectMap</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Remove existing assignment </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;task_id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">task_id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (:User)-[a:ASSIGNED_TO]-&gt;(:Task {id: $task_id})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\DELETE a</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create new assignment </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;user_id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">user_id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (u:User {id: $user_id})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (t:Task {id: $task_id})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\CREATE (u)-[:ASSIGNED_TO]-&gt;(t)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Update timestamp </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;updated_at&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">integer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">time</span><span class="p">.</span><span class="n">timestamp</span><span class="p">()</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (t:Task {id: $task_id})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\SET t.updated_at = $updated_at</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span></code></pre></div> </div></div> </div> <h4 id="delete-operations" class="position-relative d-flex align-items-center group"> <span>Delete Operations</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="delete-operations" aria-haspopup="dialog" aria-label="Share link: Delete Operations"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="docs-tabs mb-4"> <ul class="nav nav-tabs" id="tabs-1774880882033760021" role="tablist"><li class="nav-item" role="presentation"> <button class="nav-link active" id="tabs-1774880882033760021-tab-0-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882033760021-tab-0" type="button" role="tab" aria-controls="tabs-1774880882033760021-tab-0" aria-selected="true" > Go </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880882033760021-tab-1-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882033760021-tab-1" type="button" role="tab" aria-controls="tabs-1774880882033760021-tab-1" aria-selected="false" > Python </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880882033760021-tab-2-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882033760021-tab-2" type="button" role="tab" aria-controls="tabs-1774880882033760021-tab-2" aria-selected="false" > Rust </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880882033760021-tab-3-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882033760021-tab-3" type="button" role="tab" aria-controls="tabs-1774880882033760021-tab-3" aria-selected="false" > Node.js </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880882033760021-tab-4-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882033760021-tab-4" type="button" role="tab" aria-controls="tabs-1774880882033760021-tab-4" aria-selected="false" > Zig </button> </li></ul> <div class="tab-content border border-top-0 rounded-bottom p-3" id="tabs-1774880882033760021-content"><div class="tab-pane fade show active" id="tabs-1774880882033760021-tab-0" role="tabpanel" aria-labelledby="tabs-1774880882033760021-tab-0-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// internal/repository/delete_repository.go </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">package</span> <span class="nx">repository</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;context&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;fmt&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">DeleteTask</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">taskID</span> <span class="kt">string</span><span class="p">)</span> <span class="kt">error</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// Delete relationships first, then the node </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (t:Task {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> DETACH DELETE t </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">taskID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to delete task: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">DeleteProject</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">projectID</span> <span class="kt">string</span><span class="p">)</span> <span class="kt">error</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// Delete all tasks in the project first </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (p:Project {id: ?})-[:CONTAINS]-&gt;(t:Task) </span></span></span><span class="line"><span class="cl"><span class="s"> DETACH DELETE t </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">projectID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to delete project tasks: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Delete the project </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="p">=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (p:Project {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> DETACH DELETE p </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">projectID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to delete project: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">RemoveTaskDependency</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">taskID</span><span class="p">,</span> <span class="nx">dependsOnID</span> <span class="kt">string</span><span class="p">)</span> <span class="kt">error</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">db</span><span class="p">.</span><span class="nf">ExecContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">` </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (t:Task {id: ?})-[d:DEPENDS_ON]-&gt;(dep:Task {id: ?}) </span></span></span><span class="line"><span class="cl"><span class="s"> DELETE d </span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">taskID</span><span class="p">,</span> <span class="nx">dependsOnID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;failed to remove dependency: %w&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880882033760021-tab-1" role="tabpanel" aria-labelledby="tabs-1774880882033760021-tab-1-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># src/repository/repository.py (continued)</span> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Repository</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># ... previous code ...</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">delete_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Delete a task and its relationships.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> DETACH DELETE t </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;task_id&#34;</span><span class="p">:</span> <span class="n">task_id</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">delete_project</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">project_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Delete a project and all its tasks.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Delete all tasks in the project</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (p:Project {id: $project_id})-[:CONTAINS]-&gt;(t:Task) </span></span></span><span class="line"><span class="cl"><span class="s2"> DETACH DELETE t </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;project_id&#34;</span><span class="p">:</span> <span class="n">project_id</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Delete the project</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (p:Project {id: $project_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> DETACH DELETE p </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;project_id&#34;</span><span class="p">:</span> <span class="n">project_id</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">remove_task_dependency</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">depends_on_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Remove a dependency relationship between tasks.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (t:Task {id: $task_id})-[d:DEPENDS_ON]-&gt;(dep:Task {id: $depends_on_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> DELETE d </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;task_id&#34;</span><span class="p">:</span> <span class="n">task_id</span><span class="p">,</span> <span class="s2">&#34;depends_on_id&#34;</span><span class="p">:</span> <span class="n">depends_on_id</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880882033760021-tab-2" role="tabpanel" aria-labelledby="tabs-1774880882033760021-tab-2-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// src/repository/mod.rs (continued) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">impl</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">delete_task</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">task_id</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="p">(),</span><span class="w"> </span><span class="n">GeodeError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">connect</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;task_id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="n">task_id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="s"> DETACH DELETE t </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(())</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">delete_project</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">project_id</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="p">(),</span><span class="w"> </span><span class="n">GeodeError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">connect</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;project_id&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="n">project_id</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Delete all tasks in the project </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (p:Project {id: $project_id})-[:CONTAINS]-&gt;(t:Task) </span></span></span><span class="line"><span class="cl"><span class="s"> DETACH DELETE t </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Delete the project </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="sa">r</span><span class="s">#&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (p:Project {id: $project_id}) </span></span></span><span class="line"><span class="cl"><span class="s"> DETACH DELETE p </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;#</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(())</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880882033760021-tab-3" role="tabpanel" aria-labelledby="tabs-1774880882033760021-tab-3-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="c1">// src/repository/index.ts (continued) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">export</span> <span class="kr">class</span> <span class="nx">Repository</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// ... previous code ... </span></span></span><span class="line"><span class="cl"><span class="c1"></span> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">deleteTask</span><span class="p">(</span><span class="nx">taskId</span>: <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">void</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getClient</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`MATCH (t:Task {id: $task_id}) </span></span></span><span class="line"><span class="cl"><span class="sb"> DETACH DELETE t`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> <span class="nx">task_id</span>: <span class="kt">taskId</span> <span class="p">}</span> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">deleteProject</span><span class="p">(</span><span class="nx">projectId</span>: <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">void</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getClient</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Delete all tasks in the project </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`MATCH (p:Project {id: $project_id})-[:CONTAINS]-&gt;(t:Task) </span></span></span><span class="line"><span class="cl"><span class="sb"> DETACH DELETE t`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> <span class="nx">project_id</span>: <span class="kt">projectId</span> <span class="p">}</span> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Delete the project </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`MATCH (p:Project {id: $project_id}) </span></span></span><span class="line"><span class="cl"><span class="sb"> DETACH DELETE p`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> <span class="nx">project_id</span>: <span class="kt">projectId</span> <span class="p">}</span> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880882033760021-tab-4" role="tabpanel" aria-labelledby="tabs-1774880882033760021-tab-4-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// src/repository.zig (continued) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// ... previous code ... </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">deleteTask</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">,</span><span class="w"> </span><span class="n">task_id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">json</span><span class="p">.</span><span class="n">ObjectMap</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;task_id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">task_id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (t:Task {id: $task_id})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\DETACH DELETE t</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">deleteProject</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">,</span><span class="w"> </span><span class="n">project_id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">json</span><span class="p">.</span><span class="n">ObjectMap</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">allocator</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&#34;project_id&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="p">.</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">project_id</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Delete all tasks in the project </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (p:Project {id: $project_id})-[:CONTAINS]-&gt;(t:Task)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\DETACH DELETE t</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Delete the project </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">sendRunGql</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\MATCH (p:Project {id: $project_id})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sh">\\DETACH DELETE p</span><span class="w"> </span></span></span><span class="line"><span class="cl"><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="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">receiveMessage</span><span class="p">(</span><span class="mi">30000</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span></code></pre></div> </div></div> </div> <hr> <h3 id="error-handling" class="position-relative d-flex align-items-center group"> <span>Error Handling</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="error-handling" aria-haspopup="dialog" aria-label="Share link: Error Handling"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Proper error handling is crucial for production applications.</p> <div class="docs-tabs mb-4"> <ul class="nav nav-tabs" id="tabs-1774880882070275914" role="tablist"><li class="nav-item" role="presentation"> <button class="nav-link active" id="tabs-1774880882070275914-tab-0-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882070275914-tab-0" type="button" role="tab" aria-controls="tabs-1774880882070275914-tab-0" aria-selected="true" > Go </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880882070275914-tab-1-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882070275914-tab-1" type="button" role="tab" aria-controls="tabs-1774880882070275914-tab-1" aria-selected="false" > Python </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880882070275914-tab-2-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882070275914-tab-2" type="button" role="tab" aria-controls="tabs-1774880882070275914-tab-2" aria-selected="false" > Rust </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880882070275914-tab-3-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882070275914-tab-3" type="button" role="tab" aria-controls="tabs-1774880882070275914-tab-3" aria-selected="false" > Node.js </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880882070275914-tab-4-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882070275914-tab-4" type="button" role="tab" aria-controls="tabs-1774880882070275914-tab-4" aria-selected="false" > Zig </button> </li></ul> <div class="tab-content border border-top-0 rounded-bottom p-3" id="tabs-1774880882070275914-content"><div class="tab-pane fade show active" id="tabs-1774880882070275914-tab-0" role="tabpanel" aria-labelledby="tabs-1774880882070275914-tab-0-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// internal/repository/errors.go </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">package</span> <span class="nx">repository</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;errors&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;fmt&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1">// Custom error types </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">var</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nx">ErrNotFound</span> <span class="p">=</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">&#34;resource not found&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">ErrDuplicate</span> <span class="p">=</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">&#34;resource already exists&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">ErrInvalidInput</span> <span class="p">=</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">&#34;invalid input&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">ErrConnection</span> <span class="p">=</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">&#34;database connection error&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">ErrTransaction</span> <span class="p">=</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">&#34;transaction error&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1">// GeodeError wraps database errors with context </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">type</span> <span class="nx">GeodeError</span> <span class="kd">struct</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">Op</span> <span class="kt">string</span> <span class="c1">// Operation that failed </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">Code</span> <span class="kt">string</span> <span class="c1">// Error code from Geode </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">Message</span> <span class="kt">string</span> <span class="c1">// Error message </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">Err</span> <span class="kt">error</span> <span class="c1">// Underlying error </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">e</span> <span class="o">*</span><span class="nx">GeodeError</span><span class="p">)</span> <span class="nf">Error</span><span class="p">()</span> <span class="kt">string</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">e</span><span class="p">.</span><span class="nx">Err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Sprintf</span><span class="p">(</span><span class="s">&#34;%s: %s [%s]: %v&#34;</span><span class="p">,</span> <span class="nx">e</span><span class="p">.</span><span class="nx">Op</span><span class="p">,</span> <span class="nx">e</span><span class="p">.</span><span class="nx">Message</span><span class="p">,</span> <span class="nx">e</span><span class="p">.</span><span class="nx">Code</span><span class="p">,</span> <span class="nx">e</span><span class="p">.</span><span class="nx">Err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Sprintf</span><span class="p">(</span><span class="s">&#34;%s: %s [%s]&#34;</span><span class="p">,</span> <span class="nx">e</span><span class="p">.</span><span class="nx">Op</span><span class="p">,</span> <span class="nx">e</span><span class="p">.</span><span class="nx">Message</span><span class="p">,</span> <span class="nx">e</span><span class="p">.</span><span class="nx">Code</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">e</span> <span class="o">*</span><span class="nx">GeodeError</span><span class="p">)</span> <span class="nf">Unwrap</span><span class="p">()</span> <span class="kt">error</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">e</span><span class="p">.</span><span class="nx">Err</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1">// Helper to check error types </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">func</span> <span class="nf">IsNotFound</span><span class="p">(</span><span class="nx">err</span> <span class="kt">error</span><span class="p">)</span> <span class="kt">bool</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">geodeErr</span> <span class="o">*</span><span class="nx">GeodeError</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">As</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">geodeErr</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">geodeErr</span><span class="p">.</span><span class="nx">Code</span> <span class="o">==</span> <span class="s">&#34;02000&#34;</span> <span class="c1">// No data </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">Is</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">ErrNotFound</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">IsDuplicate</span><span class="p">(</span><span class="nx">err</span> <span class="kt">error</span><span class="p">)</span> <span class="kt">bool</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">geodeErr</span> <span class="o">*</span><span class="nx">GeodeError</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">As</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">geodeErr</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">geodeErr</span><span class="p">.</span><span class="nx">Code</span> <span class="o">==</span> <span class="s">&#34;23000&#34;</span> <span class="c1">// Integrity constraint violation </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">Is</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">ErrDuplicate</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1">// Usage example </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><span class="nx">Repository</span><span class="p">)</span> <span class="nf">CreateUserWithErrorHandling</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">email</span><span class="p">,</span> <span class="nx">name</span> <span class="kt">string</span><span class="p">)</span> <span class="p">(</span><span class="o">*</span><span class="nx">models</span><span class="p">.</span><span class="nx">User</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">user</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">r</span><span class="p">.</span><span class="nf">CreateUser</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="nx">email</span><span class="p">,</span> <span class="nx">name</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// Check for specific error types </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">if</span> <span class="nx">strings</span><span class="p">.</span><span class="nf">Contains</span><span class="p">(</span><span class="nx">err</span><span class="p">.</span><span class="nf">Error</span><span class="p">(),</span> <span class="s">&#34;constraint&#34;</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">GeodeError</span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">Op</span><span class="p">:</span> <span class="s">&#34;CreateUser&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Code</span><span class="p">:</span> <span class="s">&#34;23000&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Message</span><span class="p">:</span> <span class="s">&#34;User with this email already exists&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Err</span><span class="p">:</span> <span class="nx">ErrDuplicate</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">GeodeError</span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">Op</span><span class="p">:</span> <span class="s">&#34;CreateUser&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Code</span><span class="p">:</span> <span class="s">&#34;unknown&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Message</span><span class="p">:</span> <span class="s">&#34;Failed to create user&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Err</span><span class="p">:</span> <span class="nx">err</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">user</span><span class="p">,</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880882070275914-tab-1" role="tabpanel" aria-labelledby="tabs-1774880882070275914-tab-1-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># src/repository/errors.py</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Optional</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">GeodeError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Base exception for Geode operations.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">code</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&#34;unknown&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">operation</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">cause</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="ne">Exception</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span> </span></span><span class="line"><span class="cl"> <span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">message</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">code</span> <span class="o">=</span> <span class="n">code</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">operation</span> <span class="o">=</span> <span class="n">operation</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">cause</span> <span class="o">=</span> <span class="n">cause</span> </span></span><span class="line"><span class="cl"> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">operation</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2"> [</span><span class="si">{</span><span class="n">code</span><span class="si">}</span><span class="s2">]&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">NotFoundError</span><span class="p">(</span><span class="n">GeodeError</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Resource not found.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resource</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">message</span><span class="o">=</span><span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">resource</span><span class="si">}</span><span class="s2"> with id &#39;</span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&#39; not found&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">code</span><span class="o">=</span><span class="s2">&#34;02000&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">operation</span><span class="o">=</span><span class="s2">&#34;query&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">DuplicateError</span><span class="p">(</span><span class="n">GeodeError</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Resource already exists.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resource</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">field</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">message</span><span class="o">=</span><span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">resource</span><span class="si">}</span><span class="s2"> with </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2"> &#39;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&#39; already exists&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">code</span><span class="o">=</span><span class="s2">&#34;23000&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">operation</span><span class="o">=</span><span class="s2">&#34;create&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">ConnectionError</span><span class="p">(</span><span class="n">GeodeError</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Database connection error.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">cause</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="ne">Exception</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">code</span><span class="o">=</span><span class="s2">&#34;08000&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">operation</span><span class="o">=</span><span class="s2">&#34;connect&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">cause</span><span class="o">=</span><span class="n">cause</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">TransactionError</span><span class="p">(</span><span class="n">GeodeError</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Transaction error.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">cause</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="ne">Exception</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">code</span><span class="o">=</span><span class="s2">&#34;40000&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">operation</span><span class="o">=</span><span class="s2">&#34;transaction&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">cause</span><span class="o">=</span><span class="n">cause</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Usage example</span> </span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Repository</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_user_or_raise</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">User</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Get a user by ID or raise NotFoundError.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">user</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_user_by_id</span><span class="p">(</span><span class="n">user_id</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">user</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">raise</span> <span class="n">NotFoundError</span><span class="p">(</span><span class="s2">&#34;User&#34;</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">user</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">create_user_safe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">email</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">User</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Create a user with proper error handling.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">try</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Check if user already exists</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">page</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;MATCH (u:User {email: $email}) RETURN u&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;email&#34;</span><span class="p">:</span> <span class="n">email</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">page</span><span class="o">.</span><span class="n">rows</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">raise</span> <span class="n">DuplicateError</span><span class="p">(</span><span class="s2">&#34;User&#34;</span><span class="p">,</span> <span class="s2">&#34;email&#34;</span><span class="p">,</span> <span class="n">email</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_user</span><span class="p">(</span><span class="n">email</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">GeodeError</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="k">raise</span> </span></span><span class="line"><span class="cl"> <span class="k">raise</span> <span class="n">GeodeError</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">message</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="n">operation</span><span class="o">=</span><span class="s2">&#34;create_user&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">cause</span><span class="o">=</span><span class="n">e</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880882070275914-tab-2" role="tabpanel" aria-labelledby="tabs-1774880882070275914-tab-2-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// src/repository/errors.rs </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">use</span><span class="w"> </span><span class="n">thiserror</span>::<span class="n">Error</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="cp">#[derive(Error, Debug)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">pub</span><span class="w"> </span><span class="k">enum</span> <span class="nc">RepositoryError</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="cp">#[error(</span><span class="s">&#34;Resource not found: {resource} with id &#39;{id}&#39;&#34;</span><span class="cp">)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">NotFound</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">resource</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="n">id</span>: <span class="nb">String</span> <span class="p">},</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="cp">#[error(</span><span class="s">&#34;Duplicate resource: {resource} with {field} &#39;{value}&#39; already exists&#34;</span><span class="cp">)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Duplicate</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">resource</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">field</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">value</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">},</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="cp">#[error(</span><span class="s">&#34;Invalid input: {message}&#34;</span><span class="cp">)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">InvalidInput</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">message</span>: <span class="nb">String</span> <span class="p">},</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="cp">#[error(</span><span class="s">&#34;Connection error: {message}&#34;</span><span class="cp">)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Connection</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">message</span>: <span class="nb">String</span> <span class="p">},</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="cp">#[error(</span><span class="s">&#34;Transaction error: {message}&#34;</span><span class="cp">)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Transaction</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">message</span>: <span class="nb">String</span> <span class="p">},</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="cp">#[error(</span><span class="s">&#34;Database error: {0}&#34;</span><span class="cp">)]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Database</span><span class="p">(</span><span class="cp">#[from]</span><span class="w"> </span><span class="n">GeodeError</span><span class="p">),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">impl</span><span class="w"> </span><span class="n">RepositoryError</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">not_found</span><span class="p">(</span><span class="n">resource</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">,</span><span class="w"> </span><span class="n">id</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nc">Self</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">RepositoryError</span>::<span class="n">NotFound</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">resource</span>: <span class="nc">resource</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">id</span>: <span class="nc">id</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">duplicate</span><span class="p">(</span><span class="n">resource</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">,</span><span class="w"> </span><span class="n">field</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">,</span><span class="w"> </span><span class="n">value</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nc">Self</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">RepositoryError</span>::<span class="n">Duplicate</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">resource</span>: <span class="nc">resource</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">field</span>: <span class="nc">field</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">value</span>: <span class="nc">value</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1">// Usage example </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">impl</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">get_user_or_error</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">user_id</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="n">User</span><span class="p">,</span><span class="w"> </span><span class="n">RepositoryError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">match</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">get_user_by_id</span><span class="p">(</span><span class="n">user_id</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">user</span><span class="p">)</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="n">user</span><span class="p">),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">None</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="nb">Err</span><span class="p">(</span><span class="n">RepositoryError</span>::<span class="n">not_found</span><span class="p">(</span><span class="s">&#34;User&#34;</span><span class="p">,</span><span class="w"> </span><span class="n">user_id</span><span class="p">)),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">create_user_safe</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">email</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">name</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="n">User</span><span class="p">,</span><span class="w"> </span><span class="n">RepositoryError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Check for existing user </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">connect</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;email&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span><span class="n">Value</span>::<span class="n">string</span><span class="p">(</span><span class="o">&amp;</span><span class="n">email</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="p">(</span><span class="n">page</span><span class="p">,</span><span class="w"> </span><span class="n">_</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query_with_params</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;MATCH (u:User {email: $email}) RETURN u&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="o">!</span><span class="n">page</span><span class="p">.</span><span class="n">rows</span><span class="p">.</span><span class="n">is_empty</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">Err</span><span class="p">(</span><span class="n">RepositoryError</span>::<span class="n">duplicate</span><span class="p">(</span><span class="s">&#34;User&#34;</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;email&#34;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">email</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">create_user</span><span class="p">(</span><span class="n">email</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">).</span><span class="k">await</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">map_err</span><span class="p">(</span><span class="o">|</span><span class="n">e</span><span class="o">|</span><span class="w"> </span><span class="n">RepositoryError</span>::<span class="n">Database</span><span class="p">(</span><span class="n">e</span><span class="p">))</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880882070275914-tab-3" role="tabpanel" aria-labelledby="tabs-1774880882070275914-tab-3-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="c1">// src/repository/errors.ts </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">export</span> <span class="kr">class</span> <span class="nx">GeodeError</span> <span class="kr">extends</span> <span class="nb">Error</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">constructor</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nx">message</span>: <span class="kt">string</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="kr">public</span> <span class="kr">readonly</span> <span class="nx">code</span>: <span class="kt">string</span> <span class="o">=</span> <span class="s1">&#39;unknown&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="kr">public</span> <span class="kr">readonly</span> <span class="nx">operation</span>: <span class="kt">string</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="kr">public</span> <span class="kr">readonly</span> <span class="nx">cause?</span>: <span class="kt">Error</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">super</span><span class="p">(</span><span class="sb">`</span><span class="si">${</span><span class="nx">operation</span><span class="si">}</span><span class="sb">: </span><span class="si">${</span><span class="nx">message</span><span class="si">}</span><span class="sb"> [</span><span class="si">${</span><span class="nx">code</span><span class="si">}</span><span class="sb">]`</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="k">this</span><span class="p">.</span><span class="nx">name</span> <span class="o">=</span> <span class="s1">&#39;GeodeError&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kr">class</span> <span class="nx">NotFoundError</span> <span class="kr">extends</span> <span class="nx">GeodeError</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">constructor</span><span class="p">(</span><span class="nx">resource</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">id</span>: <span class="kt">string</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">super</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`</span><span class="si">${</span><span class="nx">resource</span><span class="si">}</span><span class="sb"> with id &#39;</span><span class="si">${</span><span class="nx">id</span><span class="si">}</span><span class="sb">&#39; not found`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;02000&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;query&#39;</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="k">this</span><span class="p">.</span><span class="nx">name</span> <span class="o">=</span> <span class="s1">&#39;NotFoundError&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kr">class</span> <span class="nx">DuplicateError</span> <span class="kr">extends</span> <span class="nx">GeodeError</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">constructor</span><span class="p">(</span><span class="nx">resource</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">field</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">value</span>: <span class="kt">string</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">super</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sb">`</span><span class="si">${</span><span class="nx">resource</span><span class="si">}</span><span class="sb"> with </span><span class="si">${</span><span class="nx">field</span><span class="si">}</span><span class="sb"> &#39;</span><span class="si">${</span><span class="nx">value</span><span class="si">}</span><span class="sb">&#39; already exists`</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;23000&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;create&#39;</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="k">this</span><span class="p">.</span><span class="nx">name</span> <span class="o">=</span> <span class="s1">&#39;DuplicateError&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="kr">class</span> <span class="nx">ConnectionError</span> <span class="kr">extends</span> <span class="nx">GeodeError</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">constructor</span><span class="p">(</span><span class="nx">message</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">cause?</span>: <span class="kt">Error</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">super</span><span class="p">(</span><span class="nx">message</span><span class="p">,</span> <span class="s1">&#39;08000&#39;</span><span class="p">,</span> <span class="s1">&#39;connect&#39;</span><span class="p">,</span> <span class="nx">cause</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="k">this</span><span class="p">.</span><span class="nx">name</span> <span class="o">=</span> <span class="s1">&#39;ConnectionError&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1">// Usage example </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">export</span> <span class="kr">class</span> <span class="nx">Repository</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">getUserOrThrow</span><span class="p">(</span><span class="nx">userId</span>: <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">User</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">user</span> <span class="o">=</span> <span class="k">await</span> <span class="k">this</span><span class="p">.</span><span class="nx">getUserById</span><span class="p">(</span><span class="nx">userId</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">user</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">throw</span> <span class="k">new</span> <span class="nx">NotFoundError</span><span class="p">(</span><span class="s1">&#39;User&#39;</span><span class="p">,</span> <span class="nx">userId</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">user</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kr">async</span> <span class="nx">createUserSafe</span><span class="p">(</span><span class="nx">email</span>: <span class="kt">string</span><span class="p">,</span> <span class="nx">name</span>: <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="nx">Promise</span><span class="p">&lt;</span><span class="nt">User</span><span class="p">&gt;</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">try</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// Check for existing user </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kr">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getClient</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">existing</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">queryAll</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;MATCH (u:User {email: $email}) RETURN u&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> <span class="nx">email</span> <span class="p">}</span> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="nx">existing</span><span class="p">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">throw</span> <span class="k">new</span> <span class="nx">DuplicateError</span><span class="p">(</span><span class="s1">&#39;User&#39;</span><span class="p">,</span> <span class="s1">&#39;email&#39;</span><span class="p">,</span> <span class="nx">email</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="k">await</span> <span class="k">this</span><span class="p">.</span><span class="nx">createUser</span><span class="p">(</span><span class="nx">email</span><span class="p">,</span> <span class="nx">name</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="nx">error</span> <span class="k">instanceof</span> <span class="nx">GeodeError</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">throw</span> <span class="nx">error</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">throw</span> <span class="k">new</span> <span class="nx">GeodeError</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="nx">error</span> <span class="k">instanceof</span> <span class="nb">Error</span> <span class="o">?</span> <span class="nx">error</span><span class="p">.</span><span class="nx">message</span> <span class="o">:</span> <span class="s1">&#39;Unknown error&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;unknown&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;createUser&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">error</span> <span class="k">instanceof</span> <span class="nb">Error</span> <span class="o">?</span> <span class="nx">error</span> : <span class="kt">undefined</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880882070275914-tab-4" role="tabpanel" aria-labelledby="tabs-1774880882070275914-tab-4-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// src/errors.zig </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">const</span><span class="w"> </span><span class="n">std</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@import</span><span class="p">(</span><span class="s">&#34;std&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">RepositoryError</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">error</span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">NotFound</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Duplicate</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">InvalidInput</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">ConnectionFailed</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">TransactionFailed</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">QueryFailed</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Timeout</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">ErrorInfo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">code</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">message</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">operation</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">format</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="n">ErrorInfo</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">comptime</span><span class="w"> </span><span class="n">fmt</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">options</span><span class="o">:</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">fmt</span><span class="p">.</span><span class="n">FormatOptions</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">writer</span><span class="o">:</span><span class="w"> </span><span class="n">anytype</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fmt</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">options</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">writer</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">&#34;{s}: {s} [{s}]&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">operation</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">message</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">code</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">notFoundError</span><span class="p">(</span><span class="n">resource</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">)</span><span class="w"> </span><span class="n">ErrorInfo</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">buf</span><span class="o">:</span><span class="w"> </span><span class="p">[</span><span class="mi">256</span><span class="p">]</span><span class="kt">u8</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">undefined</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">fmt</span><span class="p">.</span><span class="n">bufPrint</span><span class="p">(</span><span class="o">&amp;</span><span class="n">buf</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;{s} with id &#39;{s}&#39; not found&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="n">resource</span><span class="p">,</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="p">})</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="s">&#34;not found&#34;</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">ErrorInfo</span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&#34;02000&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">message</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">operation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&#34;query&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">duplicateError</span><span class="p">(</span><span class="n">resource</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">field</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">)</span><span class="w"> </span><span class="n">ErrorInfo</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">buf</span><span class="o">:</span><span class="w"> </span><span class="p">[</span><span class="mi">256</span><span class="p">]</span><span class="kt">u8</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">undefined</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">fmt</span><span class="p">.</span><span class="n">bufPrint</span><span class="p">(</span><span class="o">&amp;</span><span class="n">buf</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;{s} with {s} &#39;{s}&#39; already exists&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span><span class="n">resource</span><span class="p">,</span><span class="w"> </span><span class="n">field</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="p">})</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="s">&#34;duplicate&#34;</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">ErrorInfo</span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&#34;23000&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">message</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">operation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&#34;create&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1">// Usage in repository </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">pub</span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">last_error</span><span class="o">:</span><span class="w"> </span><span class="o">?</span><span class="n">ErrorInfo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">getUserOrError</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Repository</span><span class="p">,</span><span class="w"> </span><span class="n">user_id</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="kr">const</span><span class="w"> </span><span class="kt">u8</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="n">models</span><span class="p">.</span><span class="n">User</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">getUserById</span><span class="p">(</span><span class="n">user_id</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">user</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="n">u</span><span class="o">|</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">u</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">last_error</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">notFoundError</span><span class="p">(</span><span class="s">&#34;User&#34;</span><span class="p">,</span><span class="w"> </span><span class="n">user_id</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">error</span><span class="p">.</span><span class="n">NotFound</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">};</span><span class="w"> </span></span></span></code></pre></div> </div></div> </div> <hr> <h3 id="putting-it-all-together" class="position-relative d-flex align-items-center group"> <span>Putting It All Together</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="putting-it-all-together" aria-haspopup="dialog" aria-label="Share link: Putting It All Together"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Here&rsquo;s a complete example application.</p> <div class="docs-tabs mb-4"> <ul class="nav nav-tabs" id="tabs-1774880882108821548" role="tablist"><li class="nav-item" role="presentation"> <button class="nav-link active" id="tabs-1774880882108821548-tab-0-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882108821548-tab-0" type="button" role="tab" aria-controls="tabs-1774880882108821548-tab-0" aria-selected="true" > Go </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880882108821548-tab-1-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882108821548-tab-1" type="button" role="tab" aria-controls="tabs-1774880882108821548-tab-1" aria-selected="false" > Python </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880882108821548-tab-2-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882108821548-tab-2" type="button" role="tab" aria-controls="tabs-1774880882108821548-tab-2" aria-selected="false" > Rust </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880882108821548-tab-3-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882108821548-tab-3" type="button" role="tab" aria-controls="tabs-1774880882108821548-tab-3" aria-selected="false" > Node.js </button> </li><li class="nav-item" role="presentation"> <button class="nav-link" id="tabs-1774880882108821548-tab-4-tab" data-bs-toggle="tab" data-bs-target="#tabs-1774880882108821548-tab-4" type="button" role="tab" aria-controls="tabs-1774880882108821548-tab-4" aria-selected="false" > Zig </button> </li></ul> <div class="tab-content border border-top-0 rounded-bottom p-3" id="tabs-1774880882108821548-content"><div class="tab-pane fade show active" id="tabs-1774880882108821548-tab-0" role="tabpanel" aria-labelledby="tabs-1774880882108821548-tab-0-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// cmd/server/main.go </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">package</span> <span class="nx">main</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;context&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;fmt&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;log&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="s">&#34;geode-tasks/internal/models&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;geode-tasks/internal/repository&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">ctx</span> <span class="o">:=</span> <span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Connect to Geode </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">repo</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">repository</span><span class="p">.</span><span class="nf">NewRepository</span><span class="p">(</span><span class="s">&#34;localhost&#34;</span><span class="p">,</span> <span class="mi">3141</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">log</span><span class="p">.</span><span class="nf">Fatalf</span><span class="p">(</span><span class="s">&#34;Failed to connect: %v&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">defer</span> <span class="nx">repo</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Connected to Geode!&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create a user </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">user</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">repo</span><span class="p">.</span><span class="nf">CreateUser</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">&#34;[email protected]&#34;</span><span class="p">,</span> <span class="s">&#34;Alice Johnson&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">log</span><span class="p">.</span><span class="nf">Fatalf</span><span class="p">(</span><span class="s">&#34;Failed to create user: %v&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Created user: %s\n&#34;</span><span class="p">,</span> <span class="nx">user</span><span class="p">.</span><span class="nx">Name</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create a project </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">project</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">repo</span><span class="p">.</span><span class="nf">CreateProject</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">&#34;Website Redesign&#34;</span><span class="p">,</span> <span class="s">&#34;Redesign the company website&#34;</span><span class="p">,</span> <span class="nx">user</span><span class="p">.</span><span class="nx">ID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">log</span><span class="p">.</span><span class="nf">Fatalf</span><span class="p">(</span><span class="s">&#34;Failed to create project: %v&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Created project: %s\n&#34;</span><span class="p">,</span> <span class="nx">project</span><span class="p">.</span><span class="nx">Name</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">task1</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">repo</span><span class="p">.</span><span class="nf">CreateTask</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">&#34;Design mockups&#34;</span><span class="p">,</span> <span class="s">&#34;Create initial design mockups&#34;</span><span class="p">,</span> <span class="nx">project</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="nx">models</span><span class="p">.</span><span class="nx">PriorityHigh</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">task2</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">repo</span><span class="p">.</span><span class="nf">CreateTask</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">&#34;Review designs&#34;</span><span class="p">,</span> <span class="s">&#34;Review and approve mockups&#34;</span><span class="p">,</span> <span class="nx">project</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="nx">models</span><span class="p">.</span><span class="nx">PriorityMedium</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">task3</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">repo</span><span class="p">.</span><span class="nf">CreateTask</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">&#34;Implement frontend&#34;</span><span class="p">,</span> <span class="s">&#34;Build the React frontend&#34;</span><span class="p">,</span> <span class="nx">project</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="nx">models</span><span class="p">.</span><span class="nx">PriorityHigh</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Created %d tasks\n&#34;</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Assign tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">_</span> <span class="p">=</span> <span class="nx">repo</span><span class="p">.</span><span class="nf">AssignTask</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="nx">task1</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="nx">user</span><span class="p">.</span><span class="nx">ID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">_</span> <span class="p">=</span> <span class="nx">repo</span><span class="p">.</span><span class="nf">AssignTask</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="nx">task2</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="nx">user</span><span class="p">.</span><span class="nx">ID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Update task status </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">_</span> <span class="p">=</span> <span class="nx">repo</span><span class="p">.</span><span class="nf">UpdateTaskStatus</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="nx">task1</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="nx">models</span><span class="p">.</span><span class="nx">StatusInProgress</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Query tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">tasks</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">repo</span><span class="p">.</span><span class="nf">GetTasksByProject</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="nx">project</span><span class="p">.</span><span class="nx">ID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">log</span><span class="p">.</span><span class="nf">Fatalf</span><span class="p">(</span><span class="s">&#34;Failed to get tasks: %v&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;\nProject Tasks:&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="nx">_</span><span class="p">,</span> <span class="nx">task</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">tasks</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34; - [%s] %s (Priority: %d)\n&#34;</span><span class="p">,</span> <span class="nx">task</span><span class="p">.</span><span class="nx">Status</span><span class="p">,</span> <span class="nx">task</span><span class="p">.</span><span class="nx">Title</span><span class="p">,</span> <span class="nx">task</span><span class="p">.</span><span class="nx">Priority</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Get user&#39;s assigned tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">userTasks</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">repo</span><span class="p">.</span><span class="nf">GetUserTasks</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="nx">user</span><span class="p">.</span><span class="nx">ID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;\n%s&#39;s Tasks: %d assigned\n&#34;</span><span class="p">,</span> <span class="nx">user</span><span class="p">.</span><span class="nx">Name</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nx">userTasks</span><span class="p">))</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Cleanup (optional) </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="c1">// _ = repo.DeleteProject(ctx, project.ID) </span></span></span><span class="line"><span class="cl"><span class="c1"></span> </span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;\nApplication complete!&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880882108821548-tab-1" role="tabpanel" aria-labelledby="tabs-1774880882108821548-tab-1-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># src/main.py</span> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">asyncio</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">repository.repository</span> <span class="kn">import</span> <span class="n">Repository</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">models.models</span> <span class="kn">import</span> <span class="n">Priority</span><span class="p">,</span> <span class="n">TaskStatus</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">main</span><span class="p">():</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Connect to Geode</span> </span></span><span class="line"><span class="cl"> <span class="n">repo</span> <span class="o">=</span> <span class="n">Repository</span><span class="p">(</span><span class="s2">&#34;localhost&#34;</span><span class="p">,</span> <span class="mi">3141</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="ow">not</span> <span class="k">await</span> <span class="n">repo</span><span class="o">.</span><span class="n">ping</span><span class="p">():</span> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Failed to connect to Geode&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Connected to Geode!&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Create a user</span> </span></span><span class="line"><span class="cl"> <span class="n">user</span> <span class="o">=</span> <span class="k">await</span> <span class="n">repo</span><span class="o">.</span><span class="n">create_user</span><span class="p">(</span><span class="s2">&#34;[email protected]&#34;</span><span class="p">,</span> <span class="s2">&#34;Alice Johnson&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Created user: </span><span class="si">{</span><span class="n">user</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Create a project</span> </span></span><span class="line"><span class="cl"> <span class="n">project</span> <span class="o">=</span> <span class="k">await</span> <span class="n">repo</span><span class="o">.</span><span class="n">create_project</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;Website Redesign&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;Redesign the company website&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">user</span><span class="o">.</span><span class="n">id</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Created project: </span><span class="si">{</span><span class="n">project</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Create tasks</span> </span></span><span class="line"><span class="cl"> <span class="n">task1</span> <span class="o">=</span> <span class="k">await</span> <span class="n">repo</span><span class="o">.</span><span class="n">create_task</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;Design mockups&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;Create initial design mockups&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">project</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">Priority</span><span class="o">.</span><span class="n">HIGH</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="n">task2</span> <span class="o">=</span> <span class="k">await</span> <span class="n">repo</span><span class="o">.</span><span class="n">create_task</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;Review designs&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;Review and approve mockups&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">project</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">Priority</span><span class="o">.</span><span class="n">MEDIUM</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="n">task3</span> <span class="o">=</span> <span class="k">await</span> <span class="n">repo</span><span class="o">.</span><span class="n">create_task</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;Implement frontend&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;Build the React frontend&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">project</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">Priority</span><span class="o">.</span><span class="n">HIGH</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Created 3 tasks&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Assign tasks</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">repo</span><span class="o">.</span><span class="n">assign_task</span><span class="p">(</span><span class="n">task1</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">user</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">repo</span><span class="o">.</span><span class="n">assign_task</span><span class="p">(</span><span class="n">task2</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">user</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Update task status</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">repo</span><span class="o">.</span><span class="n">update_task_status</span><span class="p">(</span><span class="n">task1</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">IN_PROGRESS</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Query tasks</span> </span></span><span class="line"><span class="cl"> <span class="n">tasks</span> <span class="o">=</span> <span class="k">await</span> <span class="n">repo</span><span class="o">.</span><span class="n">get_tasks_by_project</span><span class="p">(</span><span class="n">project</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">Project Tasks:&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">task</span> <span class="ow">in</span> <span class="n">tasks</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34; - [</span><span class="si">{</span><span class="n">task</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2">] </span><span class="si">{</span><span class="n">task</span><span class="o">.</span><span class="n">title</span><span class="si">}</span><span class="s2"> (Priority: </span><span class="si">{</span><span class="n">task</span><span class="o">.</span><span class="n">priority</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2">)&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Get user&#39;s assigned tasks</span> </span></span><span class="line"><span class="cl"> <span class="n">user_tasks</span> <span class="o">=</span> <span class="k">await</span> <span class="n">repo</span><span class="o">.</span><span class="n">get_user_tasks</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="se">\n</span><span class="si">{</span><span class="n">user</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;s Tasks: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">user_tasks</span><span class="p">)</span><span class="si">}</span><span class="s2"> assigned&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">Application complete!&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&#34;__main__&#34;</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">asyncio</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">main</span><span class="p">())</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880882108821548-tab-2" role="tabpanel" aria-labelledby="tabs-1774880882108821548-tab-2-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// src/main.rs </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">mod</span> <span class="nn">models</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">mod</span> <span class="nn">repository</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">models</span>::<span class="p">{</span><span class="n">Priority</span><span class="p">,</span><span class="w"> </span><span class="n">TaskStatus</span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">repository</span>::<span class="n">Repository</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="cp">#[tokio::main]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">main</span><span class="p">()</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="p">(),</span><span class="w"> </span><span class="nb">Box</span><span class="o">&lt;</span><span class="k">dyn</span><span class="w"> </span><span class="n">std</span>::<span class="n">error</span>::<span class="n">Error</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Connect to Geode </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">repo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Repository</span>::<span class="n">new</span><span class="p">(</span><span class="s">&#34;127.0.0.1&#34;</span><span class="p">,</span><span class="w"> </span><span class="mi">3141</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">ping</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">&#34;Connected to Geode!&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create a user </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">create_user</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;[email protected]&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Alice Johnson&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">&#34;Created user: </span><span class="si">{}</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="n">user</span><span class="p">.</span><span class="n">name</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create a project </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">project</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">create_project</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Website Redesign&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Redesign the company website&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">user</span><span class="p">.</span><span class="n">id</span><span class="p">.</span><span class="n">clone</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">&#34;Created project: </span><span class="si">{}</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="n">project</span><span class="p">.</span><span class="n">name</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">task1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">create_task</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Design mockups&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Create initial design mockups&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">project</span><span class="p">.</span><span class="n">id</span><span class="p">.</span><span class="n">clone</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Priority</span>::<span class="n">High</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">task2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">create_task</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Review designs&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Review and approve mockups&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">project</span><span class="p">.</span><span class="n">id</span><span class="p">.</span><span class="n">clone</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Priority</span>::<span class="n">Medium</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">_task3</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">create_task</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Implement frontend&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Build the React frontend&#34;</span><span class="p">.</span><span class="n">to_string</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">project</span><span class="p">.</span><span class="n">id</span><span class="p">.</span><span class="n">clone</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">Priority</span>::<span class="n">High</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">&#34;Created 3 tasks&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Assign tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">assign_task</span><span class="p">(</span><span class="o">&amp;</span><span class="n">task1</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">user</span><span class="p">.</span><span class="n">id</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">assign_task</span><span class="p">(</span><span class="o">&amp;</span><span class="n">task2</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">user</span><span class="p">.</span><span class="n">id</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Update task status </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">update_task_status</span><span class="p">(</span><span class="o">&amp;</span><span class="n">task1</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">TaskStatus</span>::<span class="n">InProgress</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Query tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">tasks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">get_tasks_by_project</span><span class="p">(</span><span class="o">&amp;</span><span class="n">project</span><span class="p">.</span><span class="n">id</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">&#34;</span><span class="se">\n</span><span class="s">Project Tasks:&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">task</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="o">&amp;</span><span class="n">tasks</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">&#34; - [</span><span class="si">{}</span><span class="s">] </span><span class="si">{}</span><span class="s"> (Priority: </span><span class="si">{:?}</span><span class="s">)&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">task</span><span class="p">.</span><span class="n">status</span><span class="p">.</span><span class="n">as_str</span><span class="p">(),</span><span class="w"> </span><span class="n">task</span><span class="p">.</span><span class="n">title</span><span class="p">,</span><span class="w"> </span><span class="n">task</span><span class="p">.</span><span class="n">priority</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">&#34;</span><span class="se">\n</span><span class="s">Application complete!&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(())</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880882108821548-tab-3" role="tabpanel" aria-labelledby="tabs-1774880882108821548-tab-3-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="cl"><span class="c1">// src/index.ts </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">import</span> <span class="p">{</span> <span class="nx">Repository</span> <span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;./repository&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">Priority</span><span class="p">,</span> <span class="nx">TaskStatus</span> <span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;./models&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kr">async</span> <span class="kd">function</span> <span class="nx">main() {</span> </span></span><span class="line"><span class="cl"> <span class="c1">// Connect to Geode </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kr">const</span> <span class="nx">repo</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Repository</span><span class="p">(</span><span class="s1">&#39;localhost&#39;</span><span class="p">,</span> <span class="mi">3141</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">connect</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">ping</span><span class="p">())</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;Connected to Geode!&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">try</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// Create a user </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kr">const</span> <span class="nx">user</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">createUser</span><span class="p">(</span><span class="s1">&#39;[email protected]&#39;</span><span class="p">,</span> <span class="s1">&#39;Alice Johnson&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`Created user: </span><span class="si">${</span><span class="nx">user</span><span class="p">.</span><span class="nx">name</span><span class="si">}</span><span class="sb">`</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create a project </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kr">const</span> <span class="nx">project</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">createProject</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;Website Redesign&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;Redesign the company website&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">user</span><span class="p">.</span><span class="nx">id</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`Created project: </span><span class="si">${</span><span class="nx">project</span><span class="p">.</span><span class="nx">name</span><span class="si">}</span><span class="sb">`</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Create tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kr">const</span> <span class="nx">task1</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">createTask</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;Design mockups&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;Create initial design mockups&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">project</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Priority</span><span class="p">.</span><span class="nx">High</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">task2</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">createTask</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;Review designs&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;Review and approve mockups&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">project</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Priority</span><span class="p">.</span><span class="nx">Medium</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">task3</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">createTask</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;Implement frontend&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;Build the React frontend&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">project</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Priority</span><span class="p">.</span><span class="nx">High</span> </span></span><span class="line"><span class="cl"> <span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;Created 3 tasks&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Assign tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">assignTask</span><span class="p">(</span><span class="nx">task1</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span> <span class="nx">user</span><span class="p">.</span><span class="nx">id</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">assignTask</span><span class="p">(</span><span class="nx">task2</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span> <span class="nx">user</span><span class="p">.</span><span class="nx">id</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Update task status </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">updateTaskStatus</span><span class="p">(</span><span class="nx">task1</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span> <span class="nx">TaskStatus</span><span class="p">.</span><span class="nx">InProgress</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Query tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kr">const</span> <span class="nx">tasks</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">getTasksByProject</span><span class="p">(</span><span class="nx">project</span><span class="p">.</span><span class="nx">id</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;\nProject Tasks:&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="p">(</span><span class="kr">const</span> <span class="nx">task</span> <span class="k">of</span> <span class="nx">tasks</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">` - [</span><span class="si">${</span><span class="nx">task</span><span class="p">.</span><span class="nx">status</span><span class="si">}</span><span class="sb">] </span><span class="si">${</span><span class="nx">task</span><span class="p">.</span><span class="nx">title</span><span class="si">}</span><span class="sb"> (Priority: </span><span class="si">${</span><span class="nx">task</span><span class="p">.</span><span class="nx">priority</span><span class="si">}</span><span class="sb">)`</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// Get user&#39;s assigned tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kr">const</span> <span class="nx">userTasks</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">getUserTasks</span><span class="p">(</span><span class="nx">user</span><span class="p">.</span><span class="nx">id</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`</span><span class="err">\</span><span class="sb">n</span><span class="si">${</span><span class="nx">user</span><span class="p">.</span><span class="nx">name</span><span class="si">}</span><span class="sb">&#39;s Tasks: </span><span class="si">${</span><span class="nx">userTasks</span><span class="p">.</span><span class="nx">length</span><span class="si">}</span><span class="sb"> assigned`</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;\nApplication complete!&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> <span class="k">finally</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="nx">repo</span><span class="p">.</span><span class="nx">close</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nx">main</span><span class="p">().</span><span class="k">catch</span><span class="p">(</span><span class="nx">console</span><span class="p">.</span><span class="nx">error</span><span class="p">);</span> </span></span></code></pre></div> </div><div class="tab-pane fade" id="tabs-1774880882108821548-tab-4" role="tabpanel" aria-labelledby="tabs-1774880882108821548-tab-4-tab" > <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zig" data-lang="zig"><span class="line"><span class="cl"><span class="c1">// src/main.zig </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">const</span><span class="w"> </span><span class="n">std</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@import</span><span class="p">(</span><span class="s">&#34;std&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">const</span><span class="w"> </span><span class="n">Repository</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@import</span><span class="p">(</span><span class="s">&#34;repository.zig&#34;</span><span class="p">).</span><span class="n">Repository</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">const</span><span class="w"> </span><span class="n">models</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@import</span><span class="p">(</span><span class="s">&#34;models.zig&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">main</span><span class="p">()</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">gpa</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">heap</span><span class="p">.</span><span class="n">GeneralPurposeAllocator</span><span class="p">(.{}){};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gpa</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gpa</span><span class="p">.</span><span class="n">allocator</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Connect to Geode </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">repo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Repository</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">allocator</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;localhost&#34;</span><span class="p">,</span><span class="w"> </span><span class="mi">3141</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">connect</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">ping</span><span class="p">())</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">debug</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">&#34;Connected to Geode!</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create a user </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">createUser</span><span class="p">(</span><span class="s">&#34;[email protected]&#34;</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;Alice Johnson&#34;</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">debug</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">&#34;Created user: {s}</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="n">user</span><span class="p">.</span><span class="n">name</span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create a project </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">project</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">createProject</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Website Redesign&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Redesign the company website&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">user</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">debug</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">&#34;Created project: {s}</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="n">project</span><span class="p">.</span><span class="n">name</span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Create tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">task1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">createTask</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Design mockups&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Create initial design mockups&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">project</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">high</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">task2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">createTask</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Review designs&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Review and approve mockups&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">project</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">medium</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">createTask</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Implement frontend&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;Build the React frontend&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">project</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">.</span><span class="n">high</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">debug</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">&#34;Created 3 tasks</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Assign tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">assignTask</span><span class="p">(</span><span class="n">task1</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">user</span><span class="p">.</span><span class="n">id</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">assignTask</span><span class="p">(</span><span class="n">task2</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">user</span><span class="p">.</span><span class="n">id</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Update task status </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">updateTaskStatus</span><span class="p">(</span><span class="n">task1</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="p">.</span><span class="n">in_progress</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Query tasks </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">tasks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">repo</span><span class="p">.</span><span class="n">getTasksByProject</span><span class="p">(</span><span class="n">project</span><span class="p">.</span><span class="n">id</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="n">allocator</span><span class="p">.</span><span class="n">free</span><span class="p">(</span><span class="n">tasks</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">debug</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">&#34;</span><span class="se">\n</span><span class="s">Project Tasks:</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">tasks</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="n">task</span><span class="o">|</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">debug</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">&#34; - [{s}] {s} (Priority: {d})</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">task</span><span class="p">.</span><span class="n">status</span><span class="p">.</span><span class="n">toString</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">task</span><span class="p">.</span><span class="n">title</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">@intFromEnum</span><span class="p">(</span><span class="n">task</span><span class="p">.</span><span class="n">priority</span><span class="p">),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">debug</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">&#34;</span><span class="se">\n</span><span class="s">Application complete!</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="p">.{});</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div> </div></div> </div> <hr> <h3 id="best-practices" class="position-relative d-flex align-items-center group"> <span>Best Practices</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="best-practices" aria-haspopup="dialog" aria-label="Share link: Best Practices"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="security" class="position-relative d-flex align-items-center group"> <span>Security</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="security" aria-haspopup="dialog" aria-label="Share link: Security"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ol> <li><strong>Always use parameterized queries</strong> - Never concatenate user input into queries</li> <li><strong>Validate input</strong> - Check data types and ranges before querying</li> <li><strong>Use TLS in production</strong> - Enable proper certificate verification</li> <li><strong>Implement proper authentication</strong> - Don&rsquo;t store credentials in code</li> </ol> <h4 id="performance" class="position-relative d-flex align-items-center group"> <span>Performance</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance" aria-haspopup="dialog" aria-label="Share link: Performance"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ol> <li><strong>Create indexes</strong> for frequently queried properties</li> <li><strong>Use connection pooling</strong> - Reuse connections instead of creating new ones</li> <li><strong>Batch operations</strong> when creating multiple nodes</li> <li><strong>Limit result sets</strong> - Always use LIMIT for large queries</li> </ol> <h4 id="maintainability" class="position-relative d-flex align-items-center group"> <span>Maintainability</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="maintainability" aria-haspopup="dialog" aria-label="Share link: Maintainability"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ol> <li><strong>Use a repository pattern</strong> - Separate data access from business logic</li> <li><strong>Define clear models</strong> - Type your data structures</li> <li><strong>Handle errors gracefully</strong> - Use custom error types</li> <li><strong>Write tests</strong> - Test your repository methods</li> </ol> <hr> <h3 id="next-steps" class="position-relative d-flex align-items-center group"> <span>Next Steps</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="next-steps" aria-haspopup="dialog" aria-label="Share link: Next Steps"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Now that you&rsquo;ve built your first application:</p> <ol> <li><strong>Learn GQL</strong>: Explore the <a href="/docs/gql-reference/" >GQL Reference</a> for advanced queries</li> <li><strong>Optimize Performance</strong>: Read <a href="/guides/query-performance/" >Query Optimization</a> </li> <li><strong>Design Better Schemas</strong>: Review the <a href="/guides/graph-modeling/" >Graph Modeling Guide</a> </li> <li><strong>Deploy to Production</strong>: See <a href="/guides/production-deployment/" >Production Deployment</a> </li> <li><strong>Explore Examples</strong>: Check out <a href="/docs/use-cases/" >Use Cases</a> </li> </ol> <hr> <h3 id="resources" class="position-relative d-flex align-items-center group"> <span>Resources</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="resources" aria-haspopup="dialog" aria-label="Share link: Resources"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><a href="/docs/" >Full Documentation</a> </li> <li><a href="/clients/" >Client Library APIs</a> </li> <li><a href="/docs/gql-reference/" >GQL Reference</a> </li> <li><a href="https://forum.geodedb.com" aria-label="Community Forum – opens in new window" target="_blank" rel="noopener noreferrer" >Community Forum <span aria-hidden="true" class="external-icon">↗</span> </a> </li> </ul> <h3 id="get-help" class="position-relative d-flex align-items-center group"> <span>Get Help</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="get-help" aria-haspopup="dialog" aria-label="Share link: Get Help"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><a href="https://docs.geodedb.com" aria-label="Documentation – opens in new window" target="_blank" rel="noopener noreferrer" >Documentation <span aria-hidden="true" class="external-icon">↗</span> </a> </li> <li><a href="https://gitlab.com/devnw/codepros/geode/geode/-/issues" aria-label="GitLab Issues – opens in new window" target="_blank" rel="noopener noreferrer" >GitLab Issues <span aria-hidden="true" class="external-icon">↗</span> </a> </li> <li><a href="https://chat.geodedb.com" aria-label="Community Chat – opens in new window" target="_blank" rel="noopener noreferrer" >Community Chat <span aria-hidden="true" class="external-icon">↗</span> </a> </li> <li><a href="mailto:[email protected]" >Email Support</a> </li> </ul>