# sqlmodel-task-models > This skill should be used when defining a robust, type-safe, and async-compatible database schema for the Todo application using SQLModel, ensuring compatibility with Better Auth and optimized for PostgreSQL. - Author: nidaAfaq-sy - Repository: nidaAfaq-sy/Hackathone_2_phase_4 - Version: 20260209005402 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-08 - Source: https://github.com/nidaAfaq-sy/Hackathone_2_phase_4 - Web: https://mule.run/skillshub/@@nidaAfaq-sy/Hackathone_2_phase_4~sqlmodel-task-models:20260209005402 --- --- name: sqlmodel-task-models description: This skill should be used when defining a robust, type-safe, and async-compatible database schema for the Todo application using SQLModel, ensuring compatibility with Better Auth and optimized for PostgreSQL. --- # SQLModel Task Models This skill providing guidance on defining a robust database schema using SQLModel for the Todo application. ## Purpose Defining a robust, type-safe, and async-compatible database schema for the Todo application using SQLModel, ensuring compatibility with Better Auth and optimized for PostgreSQL. ## Capabilities - **User Model**: Schema aligned with Better Auth requirements. - **Task Model**: Full CRUD capability with relational mapping to Users. - **Relational Integrity**: Proper foreign key constraints and back-references. - **Performance**: Strategic indexing on `user_id` and `completed` fields. - **Safety**: Automated timestamp management (`created_at`, `updated_at`). ## Implementation Details ### Models Definition ```python from sqlmodel import SQLModel, Field, Relationship from typing import List, Optional from datetime import datetime class User(SQLModel, table=True): id: str = Field(primary_key=True) email: str = Field(unique=True, index=True) name: Optional[str] = None created_at: datetime = Field(default_factory=datetime.utcnow) tasks: List["Task"] = Relationship(back_populates="user") class Task(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) user_id: str = Field(foreign_key="user.id", index=True) title: str description: Optional[str] = None completed: bool = Field(default=False, index=True) created_at: datetime = Field(default_factory=datetime.utcnow) updated_at: datetime = Field(default_factory=datetime.utcnow) user: Optional[User] = Relationship(back_populates="tasks") ``` ## Best Practices - Using `table=True` for models that map to database tables. - Explicitly defining indexes for fields used in `WHERE` clauses (e.g., `user_id`, `completed`). - Using `datetime.utcnow` for consistent cross-region timestamping. - Keeping `user_id` as a string to match Better Auth's UUID/ID format.