تعریف ساده Schemaهای GraphQL برای User و Task

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/06/24
  • تعداد بازدید: 2

تعریف ساده Schemaهای GraphQL برای User و Task

ابتدا Typeهای GraphQL را بدون هیچ ولیدیشنی تعریف می‌کنیم. هدف این است که ساختار داده‌ها مشخص شود و توسعه‌دهنده Frontend بداند چه فیلدهایی در دسترس است.

# graphql/users.py
import strawberry

@strawberry.type
class UserType:
    """
    GraphQL Type برای کاربران
    فیلدها:
    - id: شناسه یکتا
    - email: ایمیل کاربر
    - password: رمز عبور (در برخی سناریوها ممکن است به دلایل امنیتی حذف شود)
    - created_at: تاریخ ایجاد کاربر
    - updated_at: تاریخ آخرین تغییر
    """
    id: int
    email: str
    password: str
    created_at: str
    updated_at: str | None
# graphql/tasks.py
import strawberry

@strawberry.type
class TaskType:
    """
    GraphQL Type برای تسک‌ها
    فیلدها:
    - id: شناسه یکتا
    - title: عنوان تسک
    - description: توضیحات (اختیاری)
    - is_completed: وضعیت تکمیل شدن
    - created_at: تاریخ ایجاد تسک
    - updated_at: تاریخ آخرین تغییر
    - owner_id: شناسه کاربری که تسک را ایجاد کرده
    """
    id: int
    title: str
    description: str | None
    is_completed: bool
    created_at: str
    updated_at: str | None
    owner_id: int

این تعریف ساده است و در مراحل بعد می‌توانیم Query و Mutation اضافه کنیم تا داده‌ها از دیتابیس خوانده یا ایجاد شوند.

افزودن ولیدیشن ساده به Schemaها

حالا همان Typeها را با ولیدیشن‌های ابتدایی تکمیل می‌کنیم تا مطمئن شویم داده‌های ورودی حداقل قوانین اولیه را رعایت می‌کنند. این ولیدیشن‌ها در Strawberry می‌توانند با استفاده از strawberry.field و resolver اعمال شوند.

# graphql/users.py
import strawberry

def validate_email(email: str) -> str:
    if "@" not in email:
        raise ValueError("Email must contain '@'")
    return email

def validate_password(password: str) -> str:
    if len(password) < 6:
        raise ValueError("Password must be at least 6 characters long")
    return password

@strawberry.type
class UserType:
    id: int
    email: strawberry.field(resolver=validate_email)
    password: strawberry.field(resolver=validate_password)
    created_at: str
    updated_at: str | None
# graphql/tasks.py
import strawberry

def validate_title(title: str) -> str:
    if not title or len(title.strip()) == 0:
        raise ValueError("Title cannot be empty")
    return title

@strawberry.type
class TaskType:
    id: int
    title: strawberry.field(resolver=validate_title)
    description: str | None
    is_completed: bool
    created_at: str
    updated_at: str | None
    owner_id: int

با این روش، Schemaها ابتدا ساده و قابل فهم هستند و سپس ولیدیشن ابتدایی روی فیلدهای مهم اضافه شد تا داده‌های ورودی حداقل شرایط اولیه را داشته باشند. این کار پایه را برای مراحل بعدی، مانند افزودن Query و Mutation آماده می‌کند.

 

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.