עזרה בנוגע למבנה של הפרויקט

היי, אשמח לעזרה בהבנה של התגובות על הPR שלי.

על קובץ בשם export.py (שמייצא event לפורמט של icalendar), קיבלתי הערה שהוא שייך לתיקיית routers:

Maybe should be under app/routers/export.py?

לפי מה שאני הבנתי, המטרה של תיקיית routers היא לאחד את כל ה-routes, אולי הבנתי לא נכון…
קיבלתי הערות דומות על קבצים אחרים, יש לכם עצות מה לעשות?

ה־routes אמור בגדול לכלול את כל הלוגיקה של הפרויקט.
אפשר לקרוא לזה גם בשם אחר – api נניח, זה פשוט הדוגמה שהם נותנים בתיעוד שלהם.
תוכל לראות דוגמה טובה כאן – fastapi-realworld-example-app/app at master · nsidnev/fastapi-realworld-example-app · GitHub

אין לי יותר ידע משלכם בעניין הזה, אז אפשר לפתוח את זה לדיון.
בכ"מ מבחינת ארכיטקטורה חשוב שלא ישב כמעט קוד ב־main.py, זה יהפוך את הניווט בפרויקט למאוד לא נוח

כנראה שלא הבנתי נכון אותך או את הדוגמה.
בדוגמה, יש תיקיה בשם route שמכילה את כל הנתיבים. בדוגמה יש גם תיקיה בשם core שנראה שהיא מכילה את הלוגיקה של הפרויקט.
אני חשבתי שתיקיית הrouters שלנו מקבילה לשלהם, ולכן היא צריכה להכיל רק את הנתיבים.

תוכל לכוון אותי איפה הבנתי לא נכון?

2 לייקים

היי,

עיינתי בתיקיית cores ולא ראיתי לוגיקה. יכול להיות שאני מפספס משהו, אבל יש שם 4 קבצים שקשורים יותר לסטאפ (לוגינג, קונפיגורציה וכד’).
לעומת זאת בתיקייה api/routes אני רואה פה ממש את כל הלוגיקה של התוכנה – התייחסות למשתמשים, פרופילים, הערות וכד’.

יש מצב שאנחנו מדברים על פרויקטים אחרים או משהו? :slight_smile:

אנסה לנסח בצורה שונה.

אני לא הבנתי באיזו תיקייה אני אמור לשמור את הפונקציות הבסיסיות/ כלליות? (יצירת משתמש/ יצוא אירוע ועוד)

בתיקיית הroutes בדוגמה שנתת, יש רק פונקציות שמנתבות את בקשות הget/ post של המשתמש, אין שם פונקציות “כלליות”, לכן אני לא מצליח להבין איפה אני אמור למקם את אותן הפונקציות.

תראה, יש ב־routes ממש לוגיקה.
נניח הבט על הפונקציה register:

אז גם אותן פונקציות כלליות אמורות להכנס תחת תיקיית routers?
לדוגמה, כתבתי קובץ שמאחד את כל פעולות הCRUD של המשתמש. הנה דוגמא מתוכו:

from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import Session

from app.database.models import User
from app.internal.utils import save


def create_user(username, password, email, session: Session) -> User:
    """Creates and saves a new user."""

    user = User(
        username=username,
        password=password,
        email=email,
    )
    save(user, session=session)
    return user

אני חשבתי שהמקום של הקובץ הזה הוא בתיקיית internal, האם הכוונה שלך היא שהוא יהיה בתיקיית routers?

לדעתי תחת routes אמור להיכנס כל מה שאנחנו רוצים שיהפוך ל־API שאפשר להשתמש בו אח"כ ע"י המשתמשים שלנו, ותחת internal אמורים להיכנס דברים שפחות מתאימים לתפקד כ־API.
לא סגור על זה. אולי ל־@leddest שקרא את הדוקומנטציה לאורכה ולרוחבה תהיה תשובה מדויקת יותר

3 לייקים

פה יש דיבור על קובץ בשם crud.py:

https://fastapi.tiangolo.com/tutorial/sql-databases/#crud-utils

מה דעתכם?