From 7fddea8c933cc5aa5c189b01aa350652352b0529 Mon Sep 17 00:00:00 2001 From: Graeme Woodsworth <80045834+gw0ods@users.noreply.github.com> Date: Wed, 21 Aug 2024 16:01:21 +0800 Subject: [PATCH 1/2] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index afe124f3fb..1c7e31fc09 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Test Coverage -## Technology Stack and Features +## Technology Stack and Features getit - ⚡ [**FastAPI**](https://fastapi.tiangolo.com) for the Python backend API. - 🧰 [SQLModel](https://sqlmodel.tiangolo.com) for the Python SQL database interactions (ORM). From 6d9bc19685fb086f48ce78d0d4c5ba6f1a9497bd Mon Sep 17 00:00:00 2001 From: gw0ods Date: Thu, 14 Nov 2024 21:25:52 +0800 Subject: [PATCH 2/2] backend - geospatial routes, initial table, front end fucked --- .env | 2 +- backend/app/api/main.py | 10 +- backend/app/api/routes/geospatial.py | 79 ++++++++++++ backend/app/api/routes/items.py | 71 ++++++----- backend/app/api/routes/login.py | 19 ++- backend/app/crud.py | 30 +++++ backend/app/main.py | 9 +- backend/app/models.py | 74 ++++++++--- backend/poetry.lock | 20 ++- backend/pyproject.toml | 1 + docker-compose.yml | 2 +- frontend/package.json | 10 +- .../src/components/Geospatial/LeafletMap.tsx | 116 ++++++++++++++++++ frontend/src/components/Geospatial/MapApp.tsx | 77 ++++++++++++ .../src/components/Geospatial/MapSwitcher.js | 46 +++++++ .../components/Geospatial/ModelSelector.tsx | 33 +++++ .../components/Geospatial/ParameterMenu.tsx | 102 +++++++++++++++ .../components/Geospatial/RasterFileUpload.js | 31 +++++ .../Geospatial/VectorFileUpload.tsx | 57 +++++++++ .../Geospatial/icons/Logo1_Graeme.png | Bin 0 -> 252380 bytes .../Geospatial/icons/placeholder.png | Bin 0 -> 7398 bytes .../src/components/Geospatial/leaflet.css | 15 +++ frontend/src/main.tsx | 33 +++-- frontend/src/routes/__root.tsx | 23 ++-- frontend/src/routes/_layout.tsx | 1 + frontend/src/routes/_layout/admin.tsx | 79 +++++++----- frontend/src/routes/_layout/index.tsx | 31 +++-- frontend/src/routes/_layout/items.tsx | 81 ++++++------ frontend/src/routes/_layout/settings.tsx | 53 +++++--- frontend/src/routes/login.tsx | 55 ++++++--- frontend/src/routes/recover-password.tsx | 43 ++++--- frontend/src/theme.tsx | 46 ++++--- frontend/src/utils.ts | 14 ++- frontend/tests/reset-password.spec.ts | 58 +++++---- frontend/tests/utils/mailcatcher.ts | 14 +++ scrap.txt | 77 ++++++++++++ 36 files changed, 1160 insertions(+), 252 deletions(-) create mode 100644 backend/app/api/routes/geospatial.py create mode 100644 frontend/src/components/Geospatial/LeafletMap.tsx create mode 100644 frontend/src/components/Geospatial/MapApp.tsx create mode 100644 frontend/src/components/Geospatial/MapSwitcher.js create mode 100644 frontend/src/components/Geospatial/ModelSelector.tsx create mode 100644 frontend/src/components/Geospatial/ParameterMenu.tsx create mode 100644 frontend/src/components/Geospatial/RasterFileUpload.js create mode 100644 frontend/src/components/Geospatial/VectorFileUpload.tsx create mode 100644 frontend/src/components/Geospatial/icons/Logo1_Graeme.png create mode 100644 frontend/src/components/Geospatial/icons/placeholder.png create mode 100644 frontend/src/components/Geospatial/leaflet.css create mode 100644 scrap.txt diff --git a/.env b/.env index 98c8196862..4cc0da44b8 100644 --- a/.env +++ b/.env @@ -34,4 +34,4 @@ SENTRY_DSN= # Configure these with your own Docker registry images DOCKER_IMAGE_BACKEND=backend -DOCKER_IMAGE_FRONTEND=frontend +DOCKER_IMAGE_FRONTEND=frontend \ No newline at end of file diff --git a/backend/app/api/main.py b/backend/app/api/main.py index 09e0663fc3..8f20c24969 100644 --- a/backend/app/api/main.py +++ b/backend/app/api/main.py @@ -1,9 +1,17 @@ +# This script sets up the main API router for the FastAPI application, organizing and including various sub-routers to handle specific sections of the API. Each sub-router, defined in separate route modules (items, login, users, utils, and geospatial), corresponds to different functional areas of the application, such as user management, item handling, utility functions, and geospatial data handling. By consolidating these routers under the main api_router, this script provides a centralized routing structure, enabling modular API section management and streamlined route access for the application’s endpoints. + +# Import APIRouter from FastAPI and the other route modules from fastapi import APIRouter -from app.api.routes import items, login, users, utils +# Import the other route modules +from app.api.routes import items, login, users, utils, geospatial +# Initialize the main API router api_router = APIRouter() + +# Include routers for different API sections api_router.include_router(login.router, tags=["login"]) api_router.include_router(users.router, prefix="/users", tags=["users"]) api_router.include_router(utils.router, prefix="/utils", tags=["utils"]) api_router.include_router(items.router, prefix="/items", tags=["items"]) +api_router.include_router(geospatial.router, prefix="/geospatial", tags=["geospatial"]) \ No newline at end of file diff --git a/backend/app/api/routes/geospatial.py b/backend/app/api/routes/geospatial.py new file mode 100644 index 0000000000..59e8086c9d --- /dev/null +++ b/backend/app/api/routes/geospatial.py @@ -0,0 +1,79 @@ +from fastapi import APIRouter, Depends, File, UploadFile, HTTPException +from sqlalchemy.orm import Session +from typing import List +from uuid import UUID +import os # Import os to handle file path and directory creation + +from app import crud +from app.models import GeoFile +from app.api import deps +from app.models import User + +router = APIRouter() + +# Dependency to get the current authenticated user +# This uses the get_current_user function from deps.py +# that decodes the JWT token, fetches the user from the database, +# and ensures the user is active. +@router.post("/upload", response_model=GeoFile) +def upload_geofile( + file: UploadFile = File(...), # Accepts an uploaded file + description: str = None, # Optional description for the file + db: Session = Depends(deps.get_db), # Database session dependency + current_user: User = Depends(deps.get_current_user), # Get the current authenticated user +): + """ + Endpoint to upload a geospatial file. The file is saved to a designated directory, + and a record is created in the database associating the file with the current user. + """ + # Directory where files will be stored + upload_dir = "uploads" + os.makedirs(upload_dir, exist_ok=True) # Create directory if it doesn't exist + + # Construct file path + file_location = os.path.join(upload_dir, file.filename) + + # Write the file to the storage path + with open(file_location, "wb+") as file_object: + file_object.write(file.file.read()) + + # Create geofile record in the database with user ownership + geofile = crud.create_geofile( + db=db, + owner_id=current_user.id, + file_name=file.filename, + file_path=file_location, + description=description, + ) + return geofile # Return the created geofile record + + +# Dependency to get a list of geofiles uploaded by the current user +@router.get("/", response_model=List[GeoFile]) +def list_geofiles( + db: Session = Depends(deps.get_db), # Database session dependency + current_user: User = Depends(deps.get_current_user), # Get the current authenticated user +): + """ + Retrieve a list of geofiles uploaded by the current user. + """ + return crud.get_user_geofiles(db=db, user_id=current_user.id) + + +# Dependency to retrieve details of a specific geofile by its ID. +# Access to geofile is restricted to the file's owner. +@router.get("/{geofile_id}", response_model=GeoFile) +def get_geofile( + geofile_id: UUID, # Unique identifier for the geofile + db: Session = Depends(deps.get_db), # Database session dependency + current_user: User = Depends(deps.get_current_user), # Get the current authenticated user +): + """ + Retrieve details of a specific geofile by its ID. Access is restricted to the file's owner. + """ + geofile = crud.get_geofile(db=db, geofile_id=geofile_id) + + # Check if geofile exists and if the user is the owner + if not geofile or geofile.owner_id != current_user.id: + raise HTTPException(status_code=404, detail="Geofile not found") + return geofile # Return geofile details if access is allowed \ No newline at end of file diff --git a/backend/app/api/routes/items.py b/backend/app/api/routes/items.py index 67196c2366..e118d16d9a 100644 --- a/backend/app/api/routes/items.py +++ b/backend/app/api/routes/items.py @@ -1,13 +1,11 @@ import uuid from typing import Any - from fastapi import APIRouter, HTTPException from sqlmodel import func, select +from app.api.deps import CurrentUser, SessionDep # Custom dependencies for user and session +from app.models import Item, ItemCreate, ItemPublic, ItemsPublic, ItemUpdate, Message # Importing models -from app.api.deps import CurrentUser, SessionDep -from app.models import Item, ItemCreate, ItemPublic, ItemsPublic, ItemUpdate, Message - -router = APIRouter() +router = APIRouter() # Create an APIRouter instance for routing @router.get("/", response_model=ItemsPublic) @@ -15,15 +13,19 @@ def read_items( session: SessionDep, current_user: CurrentUser, skip: int = 0, limit: int = 100 ) -> Any: """ - Retrieve items. + Retrieve items for the logged-in user. If the user is a superuser, they can see all items. + Otherwise, they can only see their own items. """ - + # Check if the current user is a superuser if current_user.is_superuser: + # Count all items in the database count_statement = select(func.count()).select_from(Item) count = session.exec(count_statement).one() + # Retrieve items with pagination statement = select(Item).offset(skip).limit(limit) items = session.exec(statement).all() else: + # For non-superusers, only retrieve items owned by the logged-in user count_statement = ( select(func.count()) .select_from(Item) @@ -38,19 +40,19 @@ def read_items( ) items = session.exec(statement).all() - return ItemsPublic(data=items, count=count) + return ItemsPublic(data=items, count=count) # Return items and total count @router.get("/{id}", response_model=ItemPublic) def read_item(session: SessionDep, current_user: CurrentUser, id: uuid.UUID) -> Any: """ - Get item by ID. + Get a single item by ID. Users can only access their own items unless they are a superuser. """ - item = session.get(Item, id) + item = session.get(Item, id) # Retrieve item by ID if not item: - raise HTTPException(status_code=404, detail="Item not found") + raise HTTPException(status_code=404, detail="Item not found") # Item not found if not current_user.is_superuser and (item.owner_id != current_user.id): - raise HTTPException(status_code=400, detail="Not enough permissions") + raise HTTPException(status_code=400, detail="Not enough permissions") # Permission check return item @@ -59,13 +61,14 @@ def create_item( *, session: SessionDep, current_user: CurrentUser, item_in: ItemCreate ) -> Any: """ - Create new item. + Create a new item. The item will be associated with the logged-in user. """ + # Create a new Item object, validating and assigning the owner (current user) item = Item.model_validate(item_in, update={"owner_id": current_user.id}) - session.add(item) - session.commit() - session.refresh(item) - return item + session.add(item) # Add the new item to the session + session.commit() # Commit the transaction to the database + session.refresh(item) # Refresh the item object to get the updated values + return item # Return the newly created item @router.put("/{id}", response_model=ItemPublic) @@ -77,19 +80,19 @@ def update_item( item_in: ItemUpdate, ) -> Any: """ - Update an item. + Update an existing item. Users can only update their own items unless they are superusers. """ - item = session.get(Item, id) + item = session.get(Item, id) # Retrieve item by ID if not item: - raise HTTPException(status_code=404, detail="Item not found") + raise HTTPException(status_code=404, detail="Item not found") # Item not found if not current_user.is_superuser and (item.owner_id != current_user.id): - raise HTTPException(status_code=400, detail="Not enough permissions") - update_dict = item_in.model_dump(exclude_unset=True) - item.sqlmodel_update(update_dict) - session.add(item) - session.commit() - session.refresh(item) - return item + raise HTTPException(status_code=400, detail="Not enough permissions") # Permission check + update_dict = item_in.model_dump(exclude_unset=True) # Prepare update data + item.sqlmodel_update(update_dict) # Apply updates to the item + session.add(item) # Add updated item to session + session.commit() # Commit the transaction + session.refresh(item) # Refresh the item object to get the updated values + return item # Return the updated item @router.delete("/{id}") @@ -97,13 +100,13 @@ def delete_item( session: SessionDep, current_user: CurrentUser, id: uuid.UUID ) -> Message: """ - Delete an item. + Delete an item. Users can only delete their own items unless they are superusers. """ - item = session.get(Item, id) + item = session.get(Item, id) # Retrieve item by ID if not item: - raise HTTPException(status_code=404, detail="Item not found") + raise HTTPException(status_code=404, detail="Item not found") # Item not found if not current_user.is_superuser and (item.owner_id != current_user.id): - raise HTTPException(status_code=400, detail="Not enough permissions") - session.delete(item) - session.commit() - return Message(message="Item deleted successfully") + raise HTTPException(status_code=400, detail="Not enough permissions") # Permission check + session.delete(item) # Delete the item from the session + session.commit() # Commit the transaction + return Message(message="Item deleted successfully") # Return a success message diff --git a/backend/app/api/routes/login.py b/backend/app/api/routes/login.py index fe7e94d5c1..8273ef8f8d 100644 --- a/backend/app/api/routes/login.py +++ b/backend/app/api/routes/login.py @@ -5,6 +5,7 @@ from fastapi.responses import HTMLResponse from fastapi.security import OAuth2PasswordRequestForm +# Import necessary modules and dependencies from app import crud from app.api.deps import CurrentUser, SessionDep, get_current_active_superuser from app.core import security @@ -18,6 +19,7 @@ verify_password_reset_token, ) +# Initialize the APIRouter for defining login and password-related endpoints router = APIRouter() @@ -26,7 +28,8 @@ def login_access_token( session: SessionDep, form_data: Annotated[OAuth2PasswordRequestForm, Depends()] ) -> Token: """ - OAuth2 compatible token login, get an access token for future requests + OAuth2 compatible token login, get an access token for future requests. + Validates user credentials and returns a JWT access token if successful. """ user = crud.authenticate( session=session, email=form_data.username, password=form_data.password @@ -46,7 +49,8 @@ def login_access_token( @router.post("/login/test-token", response_model=UserPublic) def test_token(current_user: CurrentUser) -> Any: """ - Test access token + Test access token. + Validates the current access token and returns user details if valid. """ return current_user @@ -54,7 +58,8 @@ def test_token(current_user: CurrentUser) -> Any: @router.post("/password-recovery/{email}") def recover_password(email: str, session: SessionDep) -> Message: """ - Password Recovery + Password recovery. + Generates and sends a password reset token to the user's email if they exist in the system. """ user = crud.get_user_by_email(session=session, email=email) @@ -78,7 +83,8 @@ def recover_password(email: str, session: SessionDep) -> Message: @router.post("/reset-password/") def reset_password(session: SessionDep, body: NewPassword) -> Message: """ - Reset password + Reset password. + Verifies the provided token, checks if the user exists and is active, then updates their password. """ email = verify_password_reset_token(token=body.token) if not email: @@ -105,7 +111,8 @@ def reset_password(session: SessionDep, body: NewPassword) -> Message: ) def recover_password_html_content(email: str, session: SessionDep) -> Any: """ - HTML Content for Password Recovery + HTML content for password recovery. + Generates HTML content of the password recovery email for preview, accessible only to superusers. """ user = crud.get_user_by_email(session=session, email=email) @@ -121,4 +128,4 @@ def recover_password_html_content(email: str, session: SessionDep) -> Any: return HTMLResponse( content=email_data.html_content, headers={"subject:": email_data.subject} - ) + ) \ No newline at end of file diff --git a/backend/app/crud.py b/backend/app/crud.py index 905bf48724..f0f419850d 100644 --- a/backend/app/crud.py +++ b/backend/app/crud.py @@ -1,3 +1,6 @@ +# This script is a set of utility functions that manage user and item creation, updates, and authentication within a FastAPI application using SQLModel. +# Each function interacts with the database through a Session object, performing standard CRUD operations and handling security concerns like password hashing and verification. +# Database interaction functions (CRUD operations) for data. CRUD stands for Create, Read, Update, and Delete import uuid from typing import Any @@ -6,6 +9,7 @@ from app.core.security import get_password_hash, verify_password from app.models import Item, ItemCreate, User, UserCreate, UserUpdate +# create_user: Creates a new user in the database, hashing the user's password before saving it. def create_user(*, session: Session, user_create: UserCreate) -> User: db_obj = User.model_validate( @@ -16,6 +20,7 @@ def create_user(*, session: Session, user_create: UserCreate) -> User: session.refresh(db_obj) return db_obj +# update_user: Updates an existing user's information in the database, including re-hashing the password if it’s updated. def update_user(*, session: Session, db_user: User, user_in: UserUpdate) -> Any: user_data = user_in.model_dump(exclude_unset=True) @@ -30,12 +35,14 @@ def update_user(*, session: Session, db_user: User, user_in: UserUpdate) -> Any: session.refresh(db_user) return db_user +# get_user_by_email: Retrieves a user from the database based on their email address. def get_user_by_email(*, session: Session, email: str) -> User | None: statement = select(User).where(User.email == email) session_user = session.exec(statement).first() return session_user +# authenticate: Authenticates a user by verifying their email and password, returning the user if the credentials match. def authenticate(*, session: Session, email: str, password: str) -> User | None: db_user = get_user_by_email(session=session, email=email) @@ -45,6 +52,7 @@ def authenticate(*, session: Session, email: str, password: str) -> User | None: return None return db_user +# create_item: Creates a new item in the database, associating it with the owner (a specific user). def create_item(*, session: Session, item_in: ItemCreate, owner_id: uuid.UUID) -> Item: db_item = Item.model_validate(item_in, update={"owner_id": owner_id}) @@ -52,3 +60,25 @@ def create_item(*, session: Session, item_in: ItemCreate, owner_id: uuid.UUID) - session.commit() session.refresh(db_item) return db_item + +from app.models import GeoFile # Import the GeoFile model + +# create_geofile: Adds a new GeoFile record to the database. + +def create_geofile(session: Session, file_name: str, file_path: str, description: str = None) -> GeoFile: + geofile = GeoFile(file_name=file_name, file_path=file_path, description=description) + session.add(geofile) # Add the new GeoFile instance to the session. + session.commit() # Commit the transaction to save the GeoFile in the database. + session.refresh(geofile) # Refresh the instance to load any updated database state. + return geofile # Return the created GeoFile object. + +# get_geofile: Retrieves a GeoFile record by its unique ID. + +def get_geofile(session: Session, geofile_id: uuid.UUID) -> GeoFile | None: + return session.get(GeoFile, geofile_id) # Get the GeoFile by its ID, or None if not found. + +# list_geofiles: Retrieves all GeoFile records from the database. + +def list_geofiles(session: Session) -> list[GeoFile]: + statement = select(GeoFile) # Prepare a query to select all GeoFile records. + return session.exec(statement).all() # Execute the query and return all results as a list. \ No newline at end of file diff --git a/backend/app/main.py b/backend/app/main.py index 4c252a1722..cf3ba40a57 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -1,3 +1,5 @@ +#This file initializes and configures the main FastAPI application. It sets up error tracking with Sentry, custom route ID generation, and CORS middleware for secure frontend-backend communication. The primary API router, which includes all route modules, is also attached here, allowing the app to serve endpoints under a unified API prefix. This centralized setup keeps core configurations and middleware management in one place, while routing and business logic remain modular in separate files. + import sentry_sdk from fastapi import FastAPI from fastapi.routing import APIRoute @@ -11,16 +13,18 @@ def custom_generate_unique_id(route: APIRoute) -> str: return f"{route.tags[0]}-{route.name}" +# Initialize Sentry if DSN is set and environment is not local if settings.SENTRY_DSN and settings.ENVIRONMENT != "local": sentry_sdk.init(dsn=str(settings.SENTRY_DSN), enable_tracing=True) +# Initialize FastAPI app app = FastAPI( title=settings.PROJECT_NAME, openapi_url=f"{settings.API_V1_STR}/openapi.json", generate_unique_id_function=custom_generate_unique_id, ) -# Set all CORS enabled origins +# Set up CORS middleware for frontend-backend communication if settings.BACKEND_CORS_ORIGINS: app.add_middleware( CORSMiddleware, @@ -32,4 +36,5 @@ def custom_generate_unique_id(route: APIRoute) -> str: allow_headers=["*"], ) -app.include_router(api_router, prefix=settings.API_V1_STR) +# Include main API router +app.include_router(api_router, prefix=settings.API_V1_STR) \ No newline at end of file diff --git a/backend/app/models.py b/backend/app/models.py index 90ef5559e3..839e3a00e3 100644 --- a/backend/app/models.py +++ b/backend/app/models.py @@ -1,10 +1,28 @@ import uuid - +from datetime import datetime from pydantic import EmailStr from sqlmodel import Field, Relationship, SQLModel - -# Shared properties +# Define a new database model called GeoFile, which will create a table in the database +class GeoFile(SQLModel, table=True): + # Unique identifier for each record, generated using UUIDs + id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) + + # The name of the file as it was uploaded + file_name: str = Field(max_length=255) + + # The date and time when the file was uploaded, set to the current time by default + upload_date: datetime = Field(default_factory=datetime.utcnow) + + # Path where the file is stored on the server + file_path: str = Field(max_length=255) + + # Optional field for a description of the file, with a maximum length of 500 characters + description: str | None = Field(default=None, max_length=500) + +# UserBase: A base class that defines shared properties for the User model. +# It includes fields like email, full_name, is_active, and is_superuser. +# This class is used as a base for other models related to users. class UserBase(SQLModel): email: EmailStr = Field(unique=True, index=True, max_length=255) is_active: bool = True @@ -12,67 +30,83 @@ class UserBase(SQLModel): full_name: str | None = Field(default=None, max_length=255) -# Properties to receive via API on creation +# UserCreate: Inherits from UserBase and adds a password field. +# This model is used when creating a new user via the API. class UserCreate(UserBase): password: str = Field(min_length=8, max_length=40) +# UserRegister: Similar to UserCreate but used specifically for user registration. +# Includes fields for email, password, and optional full_name. class UserRegister(SQLModel): email: EmailStr = Field(max_length=255) password: str = Field(min_length=8, max_length=40) full_name: str | None = Field(default=None, max_length=255) -# Properties to receive via API on update, all are optional +# UserUpdate: Used for updating existing user details. +# It allows partial updates by making all fields optional. class UserUpdate(UserBase): email: EmailStr | None = Field(default=None, max_length=255) # type: ignore password: str | None = Field(default=None, min_length=8, max_length=40) +# UserUpdateMe: A model for updating the current user's details. +# It allows users to update their own email and full name. class UserUpdateMe(SQLModel): full_name: str | None = Field(default=None, max_length=255) email: EmailStr | None = Field(default=None, max_length=255) +# UpdatePassword: A model for updating a user's password. +# It includes fields for the current and new passwords. class UpdatePassword(SQLModel): current_password: str = Field(min_length=8, max_length=40) new_password: str = Field(min_length=8, max_length=40) -# Database model, database table inferred from class name +# User: Represents the User table in the database. +# Inherits from UserBase and adds fields for id, hashed_password, and relationships. class User(UserBase, table=True): id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) hashed_password: str items: list["Item"] = Relationship(back_populates="owner", cascade_delete=True) -# Properties to return via API, id is always required +# UserPublic: A model for returning public user data via the API. +# It excludes sensitive information like the hashed password. class UserPublic(UserBase): id: uuid.UUID +# UsersPublic: A model for returning a list of public user data. +# It includes the user data and a count of how many users are returned. class UsersPublic(SQLModel): data: list[UserPublic] count: int -# Shared properties +# ItemBase: A base class that defines shared properties for the Item model. +# It includes fields like title and description, which are used in other item-related models. class ItemBase(SQLModel): title: str = Field(min_length=1, max_length=255) description: str | None = Field(default=None, max_length=255) -# Properties to receive on item creation +# ItemCreate: Inherits from ItemBase and is used when creating a new item. +# It allows the creation of an item with the basic fields defined in ItemBase. class ItemCreate(ItemBase): pass -# Properties to receive on item update +# ItemUpdate: Used for updating an existing item. +# It allows partial updates by making all fields optional. class ItemUpdate(ItemBase): title: str | None = Field(default=None, min_length=1, max_length=255) # type: ignore -# Database model, database table inferred from class name +# Item: Represents the Item table in the database. +# Inherits from ItemBase and adds fields for id, owner_id, and relationships. class Item(ItemBase, table=True): id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) title: str = Field(max_length=255) @@ -82,33 +116,41 @@ class Item(ItemBase, table=True): owner: User | None = Relationship(back_populates="items") -# Properties to return via API, id is always required +# ItemPublic: A model for returning public item data via the API. +# It includes the item's id and owner_id but excludes sensitive information. class ItemPublic(ItemBase): id: uuid.UUID owner_id: uuid.UUID +# ItemsPublic: A model for returning a list of public item data. +# It includes the item data and a count of how many items are returned. class ItemsPublic(SQLModel): data: list[ItemPublic] count: int -# Generic message +# Message: A generic model used to return simple messages via the API. +# Useful for operations that need to return a success or error message. class Message(SQLModel): message: str -# JSON payload containing access token +# Token: A model used to return an access token as a JSON payload. +# Includes the access token and its type (typically "bearer"). class Token(SQLModel): access_token: str token_type: str = "bearer" -# Contents of JWT token +# TokenPayload: Represents the contents of a JWT token. +# It is used internally to decode and validate tokens. class TokenPayload(SQLModel): sub: str | None = None +# NewPassword: A model for handling password reset requests. +# Includes the reset token and the new password. class NewPassword(SQLModel): token: str - new_password: str = Field(min_length=8, max_length=40) + new_password: str = Field(min_length=8, max_length=40) \ No newline at end of file diff --git a/backend/poetry.lock b/backend/poetry.lock index f56ce480f0..fa3a1c257b 100644 --- a/backend/poetry.lock +++ b/backend/poetry.lock @@ -461,6 +461,24 @@ docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1 testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] typing = ["typing-extensions (>=4.8)"] +[[package]] +name = "geoalchemy2" +version = "0.15.2" +description = "Using SQLAlchemy with Spatial Databases" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GeoAlchemy2-0.15.2-py3-none-any.whl", hash = "sha256:546455dc39f5bcdfc5b871e57d3f7546c8a6f798eb364c474200f488ace6fd32"}, + {file = "geoalchemy2-0.15.2.tar.gz", hash = "sha256:3af0272db927373e74ee3b064cdc9464ba08defdb945c51745db1b841482f5dc"}, +] + +[package.dependencies] +packaging = "*" +SQLAlchemy = ">=1.4" + +[package.extras] +shapely = ["Shapely (>=1.7)"] + [[package]] name = "greenlet" version = "3.0.3" @@ -2081,4 +2099,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "7ec220bee66b5bc207f9a8b2f4ca9100da0213bb9d0a407b51cac3dc8201e97c" +content-hash = "1f03ecea4f81784139fa92435abac0cebcb6c54f0b995618ad09f93f53d1cc45" diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 671a864645..be02845c83 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -26,6 +26,7 @@ bcrypt = "4.0.1" pydantic-settings = "^2.2.1" sentry-sdk = {extras = ["fastapi"], version = "^1.40.6"} pyjwt = "^2.8.0" +geoalchemy2 = "^0.15.2" [tool.poetry.group.dev.dependencies] pytest = "^7.4.3" diff --git a/docker-compose.yml b/docker-compose.yml index d614942cbd..1506f6f0df 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ services: db: - image: postgres:12 + image: postgis/postgis:12-3.1 restart: always volumes: - app-db-data:/var/lib/postgresql/data/pgdata diff --git a/frontend/package.json b/frontend/package.json index b9b2e3b51a..dbd0332064 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -23,9 +23,12 @@ "framer-motion": "10.16.16", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-dropzone": "^14.2.3", "react-error-boundary": "^4.0.13", "react-hook-form": "7.49.3", - "react-icons": "5.0.1" + "react-icons": "5.0.1", + "react-leaflet": "^4.2.1", + "leaflet": "^1.9.4" }, "devDependencies": { "@biomejs/biome": "1.6.1", @@ -39,6 +42,7 @@ "@vitejs/plugin-react-swc": "^3.5.0", "dotenv": "^16.4.5", "typescript": "^5.2.2", - "vite": "^5.0.13" + "vite": "^5.0.13", + "@types/leaflet": "^1.9.3" } -} +} \ No newline at end of file diff --git a/frontend/src/components/Geospatial/LeafletMap.tsx b/frontend/src/components/Geospatial/LeafletMap.tsx new file mode 100644 index 0000000000..2c03982768 --- /dev/null +++ b/frontend/src/components/Geospatial/LeafletMap.tsx @@ -0,0 +1,116 @@ +import React, { useEffect, useRef } from "react"; +import { + MapContainer, + GeoJSON, + TileLayer, + LayersControl, + Marker, + Popup, + ScaleControl, + ZoomControl, +} from "react-leaflet"; +import L, { Map, LatLngTuple } from "leaflet"; // Import Leaflet for map and layers handling +import "./leaflet.css"; // Import CSS for the map styling +import markerIconPng from "./icons/placeholder.png"; // Import a custom marker icon for the map + +// Define initial map center coordinates with explicit type LatLngTuple +const center: LatLngTuple = [51.505, -0.09]; + +// Define a custom marker icon for the map +const icon = new L.Icon({ + iconUrl: markerIconPng, // Path to the icon image + iconSize: [25, 41], // Size of the icon + iconAnchor: [12, 41], // Position of the icon anchor point (bottom of the icon) + popupAnchor: [1, -34], // Popup anchor relative to the icon + shadowSize: [41, 41], // Size of the shadow for the marker icon +}); + +interface LeafletMapComponentProps { + geojson: any; // GeoJSON data passed to the component to display on the map +} + +// LeafletMapComponent renders a Leaflet map with custom layers and geoJSON data +const LeafletMapComponent: React.FC = ({ geojson }) => { + const mapRef = useRef(null); // Reference to store the map instance with Map type + + // useEffect hook to handle geoJSON data updates and adjust map bounds + useEffect(() => { + console.log("LeafletMapComponent: geojson received", geojson); + + if (geojson && mapRef.current) { + const map = mapRef.current; + const geojsonLayer = L.geoJSON(geojson); // Create a geoJSON layer from the received data + const bounds = geojsonLayer.getBounds(); // Get the bounding box of the geoJSON layer + + console.log("GeoJSON Bounds:", bounds); + + // Adjust map bounds to fit the geoJSON data on the map + if (bounds.isValid()) { + map.fitBounds(bounds); + } else { + console.error("Invalid bounds:", bounds); + } + } + }, [geojson]); // Only runs when the geojson data changes + + // Function to define what happens when each feature in the geoJSON layer is interacted with + const onEachFeature = (feature: any, layer: L.Layer) => { + if (feature.properties) { + layer.bindPopup( + Object.keys(feature.properties) + .map((k) => `${k}: ${feature.properties[k]}`) + .join("
"), + { + maxHeight: 200, // Maximum height for the popup + } + ); + } + }; + + return ( + // MapContainer initializes the Leaflet map container + { + if (mapInstance && !mapRef.current) { + mapRef.current = mapInstance; // Store map instance in ref once created + } + }} + > + + {/* LayersControl to manage different map layers */} + + + + + + + + + {/* Render the geoJSON layer if geojson data is available */} + {geojson && } + + {/* Render a custom marker at the center position */} + + A simple popup. {/* Popup content for the marker */} + + + {/* Add a scale control to the map */} + + + {/* Add zoom control to the bottom left corner */} + + + ); +}; + +export default LeafletMapComponent; \ No newline at end of file diff --git a/frontend/src/components/Geospatial/MapApp.tsx b/frontend/src/components/Geospatial/MapApp.tsx new file mode 100644 index 0000000000..c7dbbc7630 --- /dev/null +++ b/frontend/src/components/Geospatial/MapApp.tsx @@ -0,0 +1,77 @@ +import React, { useEffect } from "react"; +import { + MapContainer, + TileLayer, + LayersControl, + GeoJSON, + ScaleControl, + ZoomControl, + useMap, +} from "react-leaflet"; +import L, { LatLngTuple } from "leaflet"; // Explicit import of Leaflet +import "leaflet/dist/leaflet.css"; // Ensure Leaflet CSS is imported + +const center: LatLngTuple = [51.505, -0.09]; + +interface LeafletMapComponentProps { + geojson: any; +} + +// Hook to adjust map bounds when geoJSON changes +function FitBounds({ geojson }: { geojson: any }) { + const map = useMap(); // This hook provides access to the map instance + + useEffect(() => { + if (geojson && map) { + const geojsonLayer = L.geoJSON(geojson); // Add geoJSON to the map + const bounds = geojsonLayer.getBounds(); // Get the bounds of the geoJSON layer + + if (bounds.isValid()) { + map.fitBounds(bounds); // Fit the map to the geoJSON layer bounds + } + } + }, [geojson, map]); // Re-run when geojson or map changes + + return null; +} + +const LeafletMapComponent: React.FC = ({ geojson }) => { + return ( + + + {/* LayersControl to manage different map layers */} + + + + + + + + + {/* Render the geoJSON layer if geojson data is available */} + {geojson && } + + {/* Fit bounds based on geoJSON */} + + + {/* Add a scale control to the map */} + + + {/* Add zoom control to the bottom left corner */} + + + ); +}; + +export default LeafletMapComponent; \ No newline at end of file diff --git a/frontend/src/components/Geospatial/MapSwitcher.js b/frontend/src/components/Geospatial/MapSwitcher.js new file mode 100644 index 0000000000..034e6dcb18 --- /dev/null +++ b/frontend/src/components/Geospatial/MapSwitcher.js @@ -0,0 +1,46 @@ +import React from 'react'; +import { LayersControl, TileLayer } from 'react-leaflet'; + +const basemaps = { + OpenStreetMap: { + name: "OpenStreetMap", + url: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + attribution: '© OpenStreetMap contributors' + }, + GoogleSatellite: { + name: "Google Satellite", + url: "http://{s}.google.com/vt/lyrs=s&x={x}&y={y}&z={z}", + attribution: '© Google Maps', + subdomains: ['mt0', 'mt1', 'mt2', 'mt3'] + }, + GoogleTerrain: { + name: "Google Terrain", + url: "http://{s}.google.com/vt/lyrs=p&x={x}&y={y}&z={z}", + attribution: '© Google Maps', + subdomains: ['mt0', 'mt1', 'mt2', 'mt3'] + }, + GoogleHybrid: { + name: "Google Hybrid", + url: "http://{s}.google.com/vt/lyrs=y&x={x}&y={y}&z={z}", + attribution: '© Google Maps', + subdomains: ['mt0', 'mt1', 'mt2', 'mt3'] + } +}; + +const MapSwitcher = () => { + return ( + + {Object.keys(basemaps).map((key, index) => ( + + + + ))} + + ); +}; + +export default MapSwitcher; \ No newline at end of file diff --git a/frontend/src/components/Geospatial/ModelSelector.tsx b/frontend/src/components/Geospatial/ModelSelector.tsx new file mode 100644 index 0000000000..b3d81e2f92 --- /dev/null +++ b/frontend/src/components/Geospatial/ModelSelector.tsx @@ -0,0 +1,33 @@ +import React from "react"; +import { Select, Box } from "@chakra-ui/react"; + +// Define the expected props for the ModelSelector component +interface ModelSelectorProps { + models: string[]; // Array of model names to display in the dropdown + onSelectModel: (model: string) => void; // Callback function to handle the selected model +} + +// ModelSelector component +const ModelSelector: React.FC = ({ models, onSelectModel }) => { + // handleChange function: Called when a new model is selected from the dropdown. + const handleChange = (event: React.ChangeEvent) => { + onSelectModel(event.target.value); // Pass the selected model value to the onSelectModel callback + }; + + return ( + // Box component for layout styling, used to wrap the Select component + + {/* Chakra UI's Select component for the dropdown menu */} + + + ); +}; + +export default ModelSelector; \ No newline at end of file diff --git a/frontend/src/components/Geospatial/ParameterMenu.tsx b/frontend/src/components/Geospatial/ParameterMenu.tsx new file mode 100644 index 0000000000..f49b3aa988 --- /dev/null +++ b/frontend/src/components/Geospatial/ParameterMenu.tsx @@ -0,0 +1,102 @@ +import React from "react"; +import { useDropzone } from "react-dropzone"; +import { + Box, + Text, + Input, + VStack, + FormControl, + FormLabel, + Heading, +} from "@chakra-ui/react"; + +// FileInput component for handling file uploads with drag-and-drop functionality +const FileInput: React.FC = () => { + // Callback function triggered when files are dropped onto the dropzone + const onDrop = React.useCallback((acceptedFiles: File[]) => { + console.log(acceptedFiles); // Logs the accepted files for further handling + }, []); + + // Destructure functions and states from useDropzone to handle drag-and-drop + const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop }); + + return ( + // Chakra UI Box component styled as a dropzone area + + + {/* Display text changes based on drag state */} + {isDragActive ? "Drop the files here ..." : "Drag 'n' drop or click to select files"} + + ); +}; + +// ParameterMenu component for general parameter settings +const ParameterMenu: React.FC = () => { + return ( + // Chakra VStack for vertically stacked form controls with spacing + + Parameter Settings + + Parameter 1 + {/* Using FileInput component for file upload */} + + + Parameter 2 + + + + Parameter 3 + + + + Parameter 4 + {/* Text input for parameter value */} + + + Parameter 5 + + + + ); +}; + +// PeakLocalDetect_ParameterMenu component for peak detection-specific parameters +const PeakLocalDetect_ParameterMenu: React.FC = () => { + return ( + // Chakra VStack provides vertical alignment and spacing for each control + + Peak Detection Settings + + Landcover Map + + + + Digital Elevation Model + + + + Digital Surface Model + + + + Minimum Tree Height + {/* Input for numeric parameter */} + + + Parameter 5 + + + + ); +}; + +export { ParameterMenu, PeakLocalDetect_ParameterMenu }; \ No newline at end of file diff --git a/frontend/src/components/Geospatial/RasterFileUpload.js b/frontend/src/components/Geospatial/RasterFileUpload.js new file mode 100644 index 0000000000..f81ce4cf3d --- /dev/null +++ b/frontend/src/components/Geospatial/RasterFileUpload.js @@ -0,0 +1,31 @@ +import React from 'react'; +import { useDropzone } from 'react-dropzone'; +import { fromArrayBuffer } from 'geotiff'; + +const RasterFileUpload = ({ onFileUpload }) => { + const onDrop = (acceptedFiles) => { + const file = acceptedFiles[0]; + if (file) { + const reader = new FileReader(); + reader.onload = async (e) => { + const arrayBuffer = e.target.result; + const tiff = await fromArrayBuffer(arrayBuffer); + const image = await tiff.getImage(); + const data = await image.readRasters(); + onFileUpload(data); + }; + reader.readAsArrayBuffer(file); + } + }; + + const { getRootProps, getInputProps } = useDropzone({ onDrop, accept: '.tif,.tiff' }); + + return ( +
+ +

Drag 'n' drop some raster files here, or click to select files

+
+ ); +}; + +export default RasterFileUpload; \ No newline at end of file diff --git a/frontend/src/components/Geospatial/VectorFileUpload.tsx b/frontend/src/components/Geospatial/VectorFileUpload.tsx new file mode 100644 index 0000000000..fa4c658fd3 --- /dev/null +++ b/frontend/src/components/Geospatial/VectorFileUpload.tsx @@ -0,0 +1,57 @@ +import React, { useState } from 'react'; +import { useDropzone } from 'react-dropzone'; +import axios from 'axios'; +import { Box, Text } from '@chakra-ui/react'; + +interface VectorFileUploadProps { + onFileUpload: (geojson: any) => void; +} + +const VectorFileUpload: React.FC = ({ onFileUpload }) => { + const [uploadSuccess, setUploadSuccess] = useState(false); + + // onDrop: Triggered when a file is selected or dropped + const onDrop = (acceptedFiles: File[]) => { + const file = acceptedFiles[0]; + if (file) { + console.log("Uploading file:", file.name); + const formData = new FormData(); + formData.append('file', file); + + // Make a POST request to upload the shapefile to the backend + axios.post('http://127.0.0.1:8000/files/upload_shapefile', formData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }) + .then((response) => { + const geojson = response.data.geojson; // GeoJSON data received from the backend + onFileUpload(JSON.parse(geojson)); // Pass parsed GeoJSON to parent component + console.log("GeoJSON data loaded..."); + setUploadSuccess(true); + }) + .catch((error) => { + console.error("Error uploading file:", error); + setUploadSuccess(false); + }); + } else { + console.error("No file selected"); + } + }; + + const { getRootProps, getInputProps } = useDropzone({ + onDrop, + accept: { 'application/zip': ['.zip'] }, // Use object notation for MIME type + }); + + return ( + + + + {uploadSuccess ? "Change Area Of Interest?" : "Drag 'n' drop a .zip file containing shapefiles here, or click to select a file"} + + + ); +}; + +export default VectorFileUpload; \ No newline at end of file diff --git a/frontend/src/components/Geospatial/icons/Logo1_Graeme.png b/frontend/src/components/Geospatial/icons/Logo1_Graeme.png new file mode 100644 index 0000000000000000000000000000000000000000..7676802eb99510a0f0d94d94fb83f1ae172d3893 GIT binary patch literal 252380 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

@2-r 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

mok{V$QR+_lEJona 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ℑVXCtVzmd`$cTn*j+S!9DZfq~A={N2 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 J`8SRI{~y&rpcDWA literal 0 HcmV?d00001 diff --git a/frontend/src/components/Geospatial/icons/placeholder.png b/frontend/src/components/Geospatial/icons/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..60cc167d6388219cc1498d99241077d603d04b0e GIT binary patch literal 7398 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 literal 0 HcmV?d00001 diff --git a/frontend/src/components/Geospatial/leaflet.css b/frontend/src/components/Geospatial/leaflet.css new file mode 100644 index 0000000000..38ae565539 --- /dev/null +++ b/frontend/src/components/Geospatial/leaflet.css @@ -0,0 +1,15 @@ +/* leaflet.css */ +.leaflet-container { + height: 100%; + width: 100%; + position: relative; + z-index: 0; +} + +/* Ensure the map section fills the container's available space */ +.map-section { + flex: 1; + height: 100%; + overflow: hidden; + position: relative; +} \ No newline at end of file diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index afc904538b..9d6f72f554 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -1,27 +1,44 @@ -import { ChakraProvider } from "@chakra-ui/react" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import { RouterProvider, createRouter } from "@tanstack/react-router" -import ReactDOM from "react-dom/client" -import { routeTree } from "./routeTree.gen" +// This file is the main entry point for the React application. It sets up +// providers for Chakra UI (for UI components and theming), React Query (for +// data fetching and caching), and Tanstack Router (for routing). It also +// configures the OpenAPI client with a base URL and token, and renders +// the main component tree to the DOM. -import { StrictMode } from "react" -import { OpenAPI } from "./client" -import theme from "./theme" +import { ChakraProvider } from "@chakra-ui/react" // Chakra UI for theme and UI components +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" // React Query for data fetching and caching +import { RouterProvider, createRouter } from "@tanstack/react-router" // Tanstack Router for routing management +import ReactDOM from "react-dom/client" // React DOM to render the component tree to the DOM +import { routeTree } from "./routeTree.gen" // Pre-defined routes generated from route config +import { StrictMode } from "react" // Enforces best practices in React development +import { OpenAPI } from "./client" // OpenAPI client for API requests +import theme from "./theme" // Custom Chakra UI theme + +// Set the base URL for the OpenAPI client from environment variables OpenAPI.BASE = import.meta.env.VITE_API_URL + +// Configure the OpenAPI client to use the access token from local storage OpenAPI.TOKEN = async () => { return localStorage.getItem("access_token") || "" } +// Initialize a new React Query client for caching and managing server state const queryClient = new QueryClient() +// Create the router using the pre-defined route tree const router = createRouter({ routeTree }) + +// Extend Tanstack Router's module to recognize the new router type declare module "@tanstack/react-router" { interface Register { router: typeof router } } +// Render the application to the root DOM element +// ChakraProvider wraps the app with Chakra UI's theme and styles +// QueryClientProvider supplies the React Query client for data fetching +// RouterProvider supplies routing capabilities to the application ReactDOM.createRoot(document.getElementById("root")!).render( diff --git a/frontend/src/routes/__root.tsx b/frontend/src/routes/__root.tsx index 5da6383f2a..7aaf35c374 100644 --- a/frontend/src/routes/__root.tsx +++ b/frontend/src/routes/__root.tsx @@ -1,34 +1,41 @@ +// This file defines the main route configuration for the application using +// TanStack's router, including the devtools integration for development and a +// "Not Found" component for undefined routes. + import { Outlet, createRootRoute } from "@tanstack/react-router" import React, { Suspense } from "react" import NotFound from "../components/Common/NotFound" +// Lazy-load the devtools for development mode only, optimizing the production build const loadDevtools = () => Promise.all([ - import("@tanstack/router-devtools"), - import("@tanstack/react-query-devtools"), + import("@tanstack/router-devtools"), // Router devtools for inspecting routes + import("@tanstack/react-query-devtools"), // React Query devtools for inspecting queries ]).then(([routerDevtools, reactQueryDevtools]) => { return { default: () => ( <> - - + // Render Router devtools component + // Render React Query devtools component ), } }) +// Define a lazy-loaded component for TanStackDevtools, which renders only in development mode const TanStackDevtools = process.env.NODE_ENV === "production" ? () => null : React.lazy(loadDevtools) +// Create the root route with the main layout and devtools export const Route = createRootRoute({ component: () => ( <> - + {/* Render child routes inside this main route */} - + {/* Suspense wrapper for lazy-loaded devtools */} ), - notFoundComponent: () => , -}) + notFoundComponent: () => , // Render NotFound component for unmatched routes +}) \ No newline at end of file diff --git a/frontend/src/routes/_layout.tsx b/frontend/src/routes/_layout.tsx index 9a6cfa3b81..230c9d78cf 100644 --- a/frontend/src/routes/_layout.tsx +++ b/frontend/src/routes/_layout.tsx @@ -33,3 +33,4 @@ function Layout() { ) } +export default Layout \ No newline at end of file diff --git a/frontend/src/routes/_layout/admin.tsx b/frontend/src/routes/_layout/admin.tsx index 644653ff79..4b7b2315fd 100644 --- a/frontend/src/routes/_layout/admin.tsx +++ b/frontend/src/routes/_layout/admin.tsx @@ -1,3 +1,11 @@ +// **Admin User Management Page (admin.tsx)** +// This file sets up the admin user management page under the '/_layout/admin' route. +// It includes a paginated list of users, with options to view user details, +// update user status, and manage actions (like edit or delete). +// The page utilizes React Query for data fetching, Zod for validation, +// and Chakra UI for the UI components such as tables and buttons. +// The page is part of a larger admin panel for managing users. + import { Badge, Box, @@ -13,56 +21,64 @@ import { Th, Thead, Tr, -} from "@chakra-ui/react" -import { useQuery, useQueryClient } from "@tanstack/react-query" -import { createFileRoute, useNavigate } from "@tanstack/react-router" -import { useEffect } from "react" -import { z } from "zod" +} from "@chakra-ui/react" // Chakra UI components for UI structure +import { useQuery, useQueryClient } from "@tanstack/react-query" // React Query hooks for fetching data +import { createFileRoute, useNavigate } from "@tanstack/react-router" // Router hooks for route management +import { useEffect } from "react" // React's effect hook for side-effects +import { z } from "zod" // Zod for schema validation -import { type UserPublic, UsersService } from "../../client" -import AddUser from "../../components/Admin/AddUser" -import ActionsMenu from "../../components/Common/ActionsMenu" -import Navbar from "../../components/Common/Navbar" +// Importing user API and UI components +import { type UserPublic, UsersService } from "../../client" // UsersService handles the API for fetching users +import AddUser from "../../components/Admin/AddUser" // AddUser component for adding new users +import ActionsMenu from "../../components/Common/ActionsMenu" // Menu for user actions (edit, delete) +import Navbar from "../../components/Common/Navbar" // Navbar for the admin layout +// Zod schema to validate the page number query parameter in the URL const usersSearchSchema = z.object({ - page: z.number().catch(1), + page: z.number().catch(1), // Default to page 1 if not provided }) +// Define the route for the admin section under the "/_layout/admin" path export const Route = createFileRoute("/_layout/admin")({ - component: Admin, - validateSearch: (search) => usersSearchSchema.parse(search), + component: Admin, // The component to render for this route + validateSearch: (search) => usersSearchSchema.parse(search), // Validating search query parameters }) -const PER_PAGE = 5 +const PER_PAGE = 5 // Number of users per page for pagination +// Function to build query options for fetching users function getUsersQueryOptions({ page }: { page: number }) { return { queryFn: () => - UsersService.readUsers({ skip: (page - 1) * PER_PAGE, limit: PER_PAGE }), - queryKey: ["users", { page }], + UsersService.readUsers({ skip: (page - 1) * PER_PAGE, limit: PER_PAGE }), // Fetch users with pagination + queryKey: ["users", { page }], // Query key for caching and managing requests } } +// Component to display the users table with pagination function UsersTable() { - const queryClient = useQueryClient() - const currentUser = queryClient.getQueryData(["currentUser"]) - const { page } = Route.useSearch() - const navigate = useNavigate({ from: Route.fullPath }) + const queryClient = useQueryClient() // React Query's client for managing data caching + const currentUser = queryClient.getQueryData(["currentUser"]) // Get the current user data + const { page } = Route.useSearch() // Get the current page from the route's search parameters + const navigate = useNavigate({ from: Route.fullPath }) // Hook to navigate within the app const setPage = (page: number) => - navigate({ search: (prev) => ({ ...prev, page }) }) + navigate({ search: (prev) => ({ ...prev, page }) }) // Navigate to the next/previous page with updated query + // Fetching the user data using React Query const { - data: users, - isPending, - isPlaceholderData, + data: users, // The fetched user data + isPending, // Whether the data is still being fetched + isPlaceholderData, // Whether the data is just a placeholder while fetching } = useQuery({ - ...getUsersQueryOptions({ page }), - placeholderData: (prevData) => prevData, + ...getUsersQueryOptions({ page }), // The query options + placeholderData: (prevData) => prevData, // Placeholder data while the query is in progress }) + // Flags for checking pagination availability const hasNextPage = !isPlaceholderData && users?.data.length === PER_PAGE const hasPreviousPage = page > 1 + // Prefetch the next page if available (for smoother user experience) useEffect(() => { if (hasNextPage) { queryClient.prefetchQuery(getUsersQueryOptions({ page: page + 1 })) @@ -83,6 +99,7 @@ function UsersTable() { {isPending ? ( + // Show a loading skeleton while the data is being fetched {new Array(4).fill(null).map((_, index) => ( @@ -93,6 +110,7 @@ function UsersTable() { ) : ( + // Show the user data once it's loaded {users?.data.map((user) => ( @@ -103,14 +121,13 @@ function UsersTable() { > {user.full_name || "N/A"} {currentUser?.id === user.id && ( + // If this is the current user, display a "You" badge You )} - - {user.email} - + {user.email} {user.is_superuser ? "Superuser" : "User"} @@ -137,6 +154,7 @@ function UsersTable() { )} + {/* Pagination controls */} Users Management - + {/* Navbar and Add User button */} ) -} +} \ No newline at end of file diff --git a/frontend/src/routes/_layout/index.tsx b/frontend/src/routes/_layout/index.tsx index 80cc934083..8212881d52 100644 --- a/frontend/src/routes/_layout/index.tsx +++ b/frontend/src/routes/_layout/index.tsx @@ -1,23 +1,40 @@ -import { Box, Container, Text } from "@chakra-ui/react" -import { createFileRoute } from "@tanstack/react-router" +// **Dashboard Page (index.tsx)** +// This file sets up the dashboard route at the root of the "/_layout" path. +// It uses Chakra UI for layout and styling, and a custom `useAuth` hook to fetch the current user's data. +// The dashboard displays a personalized greeting based on the user's full name or email. +// The map and model selection section is added for the geospatial components. -import useAuth from "../../hooks/useAuth" +import { Box, Container, Text } from "@chakra-ui/react" // Chakra UI components for layout and text styling +import { createFileRoute } from "@tanstack/react-router" // React Router to define the file route +import useAuth from "../../hooks/useAuth" // Custom hook for accessing the current user's authentication data +import MainContent from "../../components/Geospatial/MapApp" // Import the MainContent component from your MapApp.tsx +// Define the route for the dashboard, which renders the Dashboard component export const Route = createFileRoute("/_layout/")({ - component: Dashboard, + component: Dashboard, // The component to render for this route }) +// The Dashboard component displays a personalized greeting for the logged-in user +// and includes the map, model selection, and parameter menus for the geospatial features. function Dashboard() { - const { user: currentUser } = useAuth() + const { user: currentUser } = useAuth() // Using custom hook to access current user data return ( <> - + + {/* Dashboard Greeting Section */} Hi, {currentUser?.full_name || currentUser?.email} 👋🏼 - Welcome back, nice to see you again! + Welcome back, nice to see you again! {/* A welcome message */} + + + {/* Map and Model Selection Section */} + + {/* MainContent handles the map and model selection logic */} + {/* Updated: Removed onCloseScenario prop */} + diff --git a/frontend/src/routes/_layout/items.tsx b/frontend/src/routes/_layout/items.tsx index 174fa83c9b..8b6e4c4f3f 100644 --- a/frontend/src/routes/_layout/items.tsx +++ b/frontend/src/routes/_layout/items.tsx @@ -1,3 +1,8 @@ +// **Items Management Page (items.tsx)** +// This file defines the route and page for managing items in the application. +// It utilizes Chakra UI for styling, TanStack React Query for data fetching, and React Router for navigation. +// The page provides an interface to list items, paginate through them, and perform actions on them, such as editing or deleting. + import { Button, Container, @@ -11,55 +16,62 @@ import { Th, Thead, Tr, -} from "@chakra-ui/react" -import { useQuery, useQueryClient } from "@tanstack/react-query" -import { createFileRoute, useNavigate } from "@tanstack/react-router" +} from "@chakra-ui/react" // Chakra UI components for layout, styling, and table rendering +import { useQuery, useQueryClient } from "@tanstack/react-query" // TanStack React Query hooks for data fetching and caching +import { createFileRoute, useNavigate } from "@tanstack/react-router" // TanStack React Router for route management import { useEffect } from "react" -import { z } from "zod" +import { z } from "zod" // Zod for schema validation -import { ItemsService } from "../../client" -import ActionsMenu from "../../components/Common/ActionsMenu" -import Navbar from "../../components/Common/Navbar" -import AddItem from "../../components/Items/AddItem" +import { ItemsService } from "../../client" // Service to interact with the backend for fetching items +import ActionsMenu from "../../components/Common/ActionsMenu" // Action menu component for individual items +import Navbar from "../../components/Common/Navbar" // Navbar component for page navigation +import AddItem from "../../components/Items/AddItem" // Modal for adding new items +// Define schema for validating search parameters (page number) const itemsSearchSchema = z.object({ - page: z.number().catch(1), + page: z.number().catch(1), // Default to page 1 if no page is provided }) +// Route setup for the "/_layout/items" path export const Route = createFileRoute("/_layout/items")({ - component: Items, - validateSearch: (search) => itemsSearchSchema.parse(search), + component: Items, // The component to render for this route + validateSearch: (search) => itemsSearchSchema.parse(search), // Validate search params }) -const PER_PAGE = 5 +const PER_PAGE = 5 // Number of items to display per page +// Function to generate query options for fetching items data function getItemsQueryOptions({ page }: { page: number }) { return { queryFn: () => - ItemsService.readItems({ skip: (page - 1) * PER_PAGE, limit: PER_PAGE }), - queryKey: ["items", { page }], + ItemsService.readItems({ skip: (page - 1) * PER_PAGE, limit: PER_PAGE }), // Fetch items for the given page + queryKey: ["items", { page }], // Unique query key for caching and refetching } } +// ItemsTable component responsible for rendering the table of items function ItemsTable() { - const queryClient = useQueryClient() - const { page } = Route.useSearch() - const navigate = useNavigate({ from: Route.fullPath }) + const queryClient = useQueryClient() // Access query cache for prefetching and caching data + const { page } = Route.useSearch() // Get the current page from the search parameters + const navigate = useNavigate({ from: Route.fullPath }) // Navigation hook to change search params const setPage = (page: number) => - navigate({ search: (prev) => ({ ...prev, page }) }) + navigate({ search: (prev) => ({ ...prev, page }) }) // Function to update the current page in the URL + // Fetch items data using React Query const { data: items, isPending, isPlaceholderData, } = useQuery({ ...getItemsQueryOptions({ page }), - placeholderData: (prevData) => prevData, + placeholderData: (prevData) => prevData, // Use previous data while fetching new data }) + // Pagination logic const hasNextPage = !isPlaceholderData && items?.data.length === PER_PAGE const hasPreviousPage = page > 1 + // Prefetch next page of items if there's a next page useEffect(() => { if (hasNextPage) { queryClient.prefetchQuery(getItemsQueryOptions({ page: page + 1 })) @@ -68,6 +80,7 @@ function ItemsTable() { return ( <> + {/* Render the items table */} @@ -81,6 +94,7 @@ function ItemsTable() { {isPending ? ( + {/* Render skeleton loaders while data is pending */} {new Array(4).fill(null).map((_, index) => ( ) : ( + {/* Render fetched items */} {items?.data.map((item) => ( - - + ))} @@ -112,13 +121,9 @@ function ItemsTable() { )}
@@ -90,21 +104,16 @@ function ItemsTable() {
{item.id} - {item.title} - + {item.title} {item.description || "N/A"} - + {/* Actions menu for each item */}
- + + {/* Pagination controls */} + @@ -131,6 +136,7 @@ function ItemsTable() { ) } +// Main Items component rendering the page layout function Items() { return ( @@ -138,8 +144,9 @@ function Items() { Items Management + {/* Navbar with AddItem modal for adding new items */} - + {/* Display the list of items */} ) -} +} \ No newline at end of file diff --git a/frontend/src/routes/_layout/settings.tsx b/frontend/src/routes/_layout/settings.tsx index 68266c6b9a..765ffd3610 100644 --- a/frontend/src/routes/_layout/settings.tsx +++ b/frontend/src/routes/_layout/settings.tsx @@ -1,3 +1,8 @@ +// **User Settings Page (settings.tsx)** +// This file defines the route and page for managing user settings in the application. +// It uses Chakra UI for styling and layout, TanStack React Query for data fetching, and React Router for routing. +// The page provides a tabbed interface for the user to update their profile, change their password, adjust appearance settings, or delete their account. + import { Container, Heading, @@ -6,48 +11,60 @@ import { TabPanel, TabPanels, Tabs, -} from "@chakra-ui/react" -import { useQueryClient } from "@tanstack/react-query" -import { createFileRoute } from "@tanstack/react-router" +} from "@chakra-ui/react" // Chakra UI components for layout, styling, and tabs functionality +import { useQueryClient } from "@tanstack/react-query" // TanStack React Query hook for accessing the query cache +import { createFileRoute } from "@tanstack/react-router" // TanStack React Router for route management -import type { UserPublic } from "../../client" -import Appearance from "../../components/UserSettings/Appearance" -import ChangePassword from "../../components/UserSettings/ChangePassword" -import DeleteAccount from "../../components/UserSettings/DeleteAccount" -import UserInformation from "../../components/UserSettings/UserInformation" +import type { UserPublic } from "../../client" // Type for the current user data from the backend +import Appearance from "../../components/UserSettings/Appearance" // Component for updating appearance settings +import ChangePassword from "../../components/UserSettings/ChangePassword" // Component for changing the user's password +import DeleteAccount from "../../components/UserSettings/DeleteAccount" // Component for deleting the user's account +import UserInformation from "../../components/UserSettings/UserInformation" // Component for viewing and editing user information +// Configuration for the tabs on the settings page const tabsConfig = [ - { title: "My profile", component: UserInformation }, - { title: "Password", component: ChangePassword }, - { title: "Appearance", component: Appearance }, - { title: "Danger zone", component: DeleteAccount }, + { title: "My profile", component: UserInformation }, // Tab for user information + { title: "Password", component: ChangePassword }, // Tab for changing password + { title: "Appearance", component: Appearance }, // Tab for appearance settings + { title: "Danger zone", component: DeleteAccount }, // Tab for account deletion (Danger zone) ] +// Define the route for the "/_layout/settings" path export const Route = createFileRoute("/_layout/settings")({ - component: UserSettings, + component: UserSettings, // The component that will render for this route }) +// Main UserSettings component function UserSettings() { - const queryClient = useQueryClient() - const currentUser = queryClient.getQueryData(["currentUser"]) + const queryClient = useQueryClient() // Access React Query's cache to get the current user data + const currentUser = queryClient.getQueryData(["currentUser"]) // Fetch the current user from the query cache + + // Modify tabs based on whether the user is a superuser or not const finalTabs = currentUser?.is_superuser - ? tabsConfig.slice(0, 3) + ? tabsConfig.slice(0, 3) // Remove the "Danger zone" tab for non-superusers : tabsConfig return ( + {/* Page heading */} User Settings + + {/* Tabs for different settings categories */} + {/* Tab list (top of the tabbed interface) */} {finalTabs.map((tab, index) => ( - {tab.title} + {tab.title} // Render each tab title ))} + + {/* Tab panels (content for each tab) */} {finalTabs.map((tab, index) => ( + {/* Render the component corresponding to the selected tab */} ))} @@ -55,4 +72,4 @@ function UserSettings() { ) -} +} \ No newline at end of file diff --git a/frontend/src/routes/login.tsx b/frontend/src/routes/login.tsx index 20a9be6564..69f139f81c 100644 --- a/frontend/src/routes/login.tsx +++ b/frontend/src/routes/login.tsx @@ -1,3 +1,7 @@ +// This component handles user login functionality. It uses Chakra UI for styling, React Hook Form +// for form management, and custom hooks for authentication. Users are redirected to the home page +// if they are already logged in, and the form includes validation and error handling. + import { ViewIcon, ViewOffIcon } from "@chakra-ui/icons" import { Button, @@ -20,30 +24,32 @@ import { } from "@tanstack/react-router" import { type SubmitHandler, useForm } from "react-hook-form" -import Logo from "/assets/images/fastapi-logo.svg" -import type { Body_login_login_access_token as AccessToken } from "../client" -import useAuth, { isLoggedIn } from "../hooks/useAuth" -import { emailPattern } from "../utils" +import Logo from "/assets/images/fastapi-logo.svg" // Import logo for branding +import type { Body_login_login_access_token as AccessToken } from "../client" // API typing for login +import useAuth, { isLoggedIn } from "../hooks/useAuth" // Custom hooks for auth logic +import { emailPattern } from "../utils" // Regex pattern for email validation +// Define the login route with a redirect if the user is already logged in export const Route = createFileRoute("/login")({ component: Login, beforeLoad: async () => { - if (isLoggedIn()) { + if (isLoggedIn()) { // Check if user is logged in throw redirect({ - to: "/", + to: "/", // Redirect to home if logged in }) } }, }) +// Main Login component function Login() { - const [show, setShow] = useBoolean() - const { loginMutation, error, resetError } = useAuth() + const [show, setShow] = useBoolean() // Toggle visibility of password + const { loginMutation, error, resetError } = useAuth() // Custom hook for login and error handling const { - register, - handleSubmit, + register, // Register input fields for validation + handleSubmit, // Handle form submission formState: { errors, isSubmitting }, - } = useForm({ + } = useForm({ // Set up form with React Hook Form and default values mode: "onBlur", criteriaMode: "all", defaultValues: { @@ -52,15 +58,16 @@ function Login() { }, }) + // Function to handle form submission const onSubmit: SubmitHandler = async (data) => { if (isSubmitting) return - resetError() + resetError() // Reset error state before attempting login try { - await loginMutation.mutateAsync(data) + await loginMutation.mutateAsync(data) // Attempt login with provided data } catch { - // error is handled by useAuth hook + // Error is handled by the useAuth hook } } @@ -77,28 +84,32 @@ function Login() { centerContent > FastAPI logo + + {/* Username input with validation */} {errors.username && ( - {errors.username.message} + {errors.username.message} // Display validation error )} + + {/* Password input with toggle visibility */} @@ -124,14 +135,20 @@ function Login() { - {error && {error}} + {error && {error}} // Display error from auth hook + + {/* Forgot password link */} Forgot password? + + {/* Submit button */} + + {/* Sign up link */} Don't have an account?{" "} diff --git a/frontend/src/routes/recover-password.tsx b/frontend/src/routes/recover-password.tsx index 5716728bbb..a7bac5dd72 100644 --- a/frontend/src/routes/recover-password.tsx +++ b/frontend/src/routes/recover-password.tsx @@ -1,3 +1,7 @@ +// This component provides a form for users to initiate password recovery by entering their email address. +// If the user is logged in, they are redirected to the home page. Upon submitting a valid email, a password +// recovery email is sent, and a success toast notification is shown. + import { Button, Container, @@ -11,15 +15,17 @@ import { useMutation } from "@tanstack/react-query" import { createFileRoute, redirect } from "@tanstack/react-router" import { type SubmitHandler, useForm } from "react-hook-form" -import { type ApiError, LoginService } from "../client" -import { isLoggedIn } from "../hooks/useAuth" -import useCustomToast from "../hooks/useCustomToast" -import { emailPattern, handleError } from "../utils" +import { type ApiError, LoginService } from "../client" // Import LoginService for password recovery +import { isLoggedIn } from "../hooks/useAuth" // Import utility to check if user is logged in +import useCustomToast from "../hooks/useCustomToast" // Custom hook for displaying toast notifications +import { emailPattern, handleError } from "../utils" // Utilities for email validation and error handling +// Define FormData interface for form input structure interface FormData { email: string } +// Set up routing for password recovery page, redirecting logged-in users to the home page export const Route = createFileRoute("/recover-password")({ component: RecoverPassword, beforeLoad: async () => { @@ -31,38 +37,43 @@ export const Route = createFileRoute("/recover-password")({ }, }) +// Main component function for password recovery form function RecoverPassword() { + // Set up form handling with react-hook-form const { - register, - handleSubmit, - reset, + register, // Register form fields + handleSubmit, // Handle form submission + reset, // Reset form fields on success formState: { errors, isSubmitting }, } = useForm() - const showToast = useCustomToast() + const showToast = useCustomToast() // Custom hook to display toast notifications + // Async function to call password recovery API const recoverPassword = async (data: FormData) => { await LoginService.recoverPassword({ email: data.email, }) } + // Mutation for handling API call with success and error handling const mutation = useMutation({ - mutationFn: recoverPassword, + mutationFn: recoverPassword, // Function to execute on mutation onSuccess: () => { showToast( "Email sent.", "We sent an email with a link to get back into your account.", "success", ) - reset() + reset() // Reset form fields after successful request }, onError: (err: ApiError) => { - handleError(err, showToast) + handleError(err, showToast) // Show error using handleError utility }, }) + // Function for handling form submission const onSubmit: SubmitHandler = async (data) => { - mutation.mutate(data) + mutation.mutate(data) // Trigger mutation on form submission } return ( @@ -82,20 +93,24 @@ function RecoverPassword() { A password recovery email will be sent to the registered account. + + {/* Email input field with validation */} {errors.email && ( - {errors.email.message} + {errors.email.message} // Display error message for email )} + + {/* Submit button with loading state */} diff --git a/frontend/src/theme.tsx b/frontend/src/theme.tsx index 71675dddca..03f3ad539c 100644 --- a/frontend/src/theme.tsx +++ b/frontend/src/theme.tsx @@ -1,55 +1,65 @@ +// This file customizes the default Chakra UI theme with a set of defined colors +// and component styles. It configures UI colors, button variants, and tab styling +// to give the application a cohesive look and feel. + import { extendTheme } from "@chakra-ui/react" +// Define styles for disabled elements, used across components const disabledStyles = { _disabled: { backgroundColor: "ui.main", }, } +// Extend Chakra's default theme with custom colors and component variants const theme = extendTheme({ + // Define a color palette for consistent UI styling colors: { ui: { - main: "#009688", - secondary: "#EDF2F7", - success: "#48BB78", - danger: "#E53E3E", - light: "#FAFAFA", - dark: "#1A202C", - darkSlate: "#252D3D", - dim: "#A0AEC0", + main: "#009688", // Primary color, used in main elements + secondary: "#EDF2F7", // Secondary background color + success: "#48BB78", // Color to indicate success + danger: "#E53E3E", // Color to indicate danger or errors + light: "#FAFAFA", // Light background color + dark: "#1A202C", // Dark text color + darkSlate: "#252D3D", // Slightly lighter dark color for backgrounds + dim: "#A0AEC0", // Dimmed text color, often for placeholders or hints }, }, + // Customize styles for specific Chakra UI components components: { Button: { + // Define button variants for primary and danger actions variants: { primary: { - backgroundColor: "ui.main", - color: "ui.light", + backgroundColor: "ui.main", // Background for primary button + color: "ui.light", // Text color for primary button _hover: { - backgroundColor: "#00766C", + backgroundColor: "#00766C", // Darker color on hover }, _disabled: { - ...disabledStyles, + ...disabledStyles, // Apply disabled styles _hover: { - ...disabledStyles, + ...disabledStyles, // Prevent hover styling when disabled }, }, }, danger: { - backgroundColor: "ui.danger", - color: "ui.light", + backgroundColor: "ui.danger", // Background for danger button + color: "ui.light", // Text color for danger button _hover: { - backgroundColor: "#E32727", + backgroundColor: "#E32727", // Darker color on hover for danger button }, }, }, }, Tabs: { + // Define styles for the enclosed tab variant variants: { enclosed: { tab: { _selected: { - color: "ui.main", + color: "ui.main", // Change color of selected tab }, }, }, @@ -58,4 +68,4 @@ const theme = extendTheme({ }, }) -export default theme +export default theme \ No newline at end of file diff --git a/frontend/src/utils.ts b/frontend/src/utils.ts index 99f906303c..8ff1bf991d 100644 --- a/frontend/src/utils.ts +++ b/frontend/src/utils.ts @@ -1,15 +1,23 @@ +// Utility functions for form validation patterns and error handling in the app. +// Includes regular expressions for email and name validation, as well as password rules. +// Also provides an error handling function to display error messages in toasts. + import type { ApiError } from "./client" +// emailPattern: Regular expression for validating email addresses with error message export const emailPattern = { value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i, message: "Invalid email address", } +// namePattern: Regular expression for validating names with up to 30 alphabetic or accented characters export const namePattern = { value: /^[A-Za-z\s\u00C0-\u017F]{1,30}$/, message: "Invalid name", } +// passwordRules: Returns an object containing password validation rules, including minimum length +// Optionally makes the password field required based on the isRequired argument export const passwordRules = (isRequired = true) => { const rules: any = { minLength: { @@ -25,8 +33,10 @@ export const passwordRules = (isRequired = true) => { return rules } +// confirmPasswordRules: Returns an object containing validation rules for confirming a password +// Uses a validate function to check if the password matches the confirmation field export const confirmPasswordRules = ( - getValues: () => any, + getValues: () => any, // Function to retrieve form values isRequired = true, ) => { const rules: any = { @@ -43,6 +53,8 @@ export const confirmPasswordRules = ( return rules } +// handleError: Function to handle API errors by displaying an error toast message +// Uses a custom toast function to display error details to the user export const handleError = (err: ApiError, showToast: any) => { const errDetail = (err.body as any)?.detail let errorMessage = errDetail || "Something went wrong." diff --git a/frontend/tests/reset-password.spec.ts b/frontend/tests/reset-password.spec.ts index 88ec798791..7e433c14c6 100644 --- a/frontend/tests/reset-password.spec.ts +++ b/frontend/tests/reset-password.spec.ts @@ -1,121 +1,125 @@ +// This test suite verifies the password recovery process, covering scenarios such as UI visibility, successful password reset, +// handling of expired or invalid reset links, and password strength validation. Each test simulates user interactions to +// confirm expected behaviors, including email retrieval, form validation, and error handling. + import { expect, test } from "@playwright/test" import { findLastEmail } from "./utils/mailcatcher" import { randomEmail, randomPassword } from "./utils/random" import { logInUser, signUpNewUser } from "./utils/user" +// Use a clean session state for each test to ensure isolation test.use({ storageState: { cookies: [], origins: [] } }) +// Test to check if the "Password Recovery" title is visible test("Password Recovery title is visible", async ({ page }) => { await page.goto("/recover-password") - - await expect( - page.getByRole("heading", { name: "Password Recovery" }), - ).toBeVisible() + await expect(page.getByRole("heading", { name: "Password Recovery" })).toBeVisible() }) +// Test to verify if the email input is visible, empty, and editable test("Input is visible, empty and editable", async ({ page }) => { await page.goto("/recover-password") - await expect(page.getByPlaceholder("Email")).toBeVisible() await expect(page.getByPlaceholder("Email")).toHaveText("") await expect(page.getByPlaceholder("Email")).toBeEditable() }) +// Test to ensure the "Continue" button is visible test("Continue button is visible", async ({ page }) => { await page.goto("/recover-password") - await expect(page.getByRole("button", { name: "Continue" })).toBeVisible() }) -test("User can reset password successfully using the link", async ({ - page, - request, -}) => { +// Test for a successful password reset using a reset link sent to the user's email +test("User can reset password successfully using the link", async ({ page, request }) => { const fullName = "Test User" const email = randomEmail() const password = randomPassword() const newPassword = randomPassword() - // Sign up a new user + // Step 1: Register a new user await signUpNewUser(page, fullName, email, password) + // Step 2: Request password recovery await page.goto("/recover-password") await page.getByPlaceholder("Email").fill(email) - await page.getByRole("button", { name: "Continue" }).click() + // Step 3: Retrieve the last email sent to the user const emailData = await findLastEmail({ request, filter: (e) => e.recipients.includes(`<${email}>`), timeout: 5000, }) + // Step 4: Access the password reset link in the email await page.goto(`http://localhost:1080/messages/${emailData.id}.html`) - const selector = 'a[href*="/reset-password?token="]' - let url = await page.getAttribute(selector, "href") - - // TODO: update var instead of doing a replace url = url!.replace("http://localhost/", "http://localhost:5173/") - // Set the new password and confirm it + // Step 5: Set and confirm the new password await page.goto(url) - await page.getByLabel("Set Password").fill(newPassword) await page.getByLabel("Confirm Password").fill(newPassword) await page.getByRole("button", { name: "Reset Password" }).click() + + // Verify the success message await expect(page.getByText("Password updated successfully")).toBeVisible() - // Check if the user is able to login with the new password + // Step 6: Log in with the new password to confirm success await logInUser(page, email, newPassword) }) +// Test to handle expired or invalid reset link test("Expired or invalid reset link", async ({ page }) => { const password = randomPassword() const invalidUrl = "/reset-password?token=invalidtoken" + // Attempt to use an invalid token for password reset await page.goto(invalidUrl) - await page.getByLabel("Set Password").fill(password) await page.getByLabel("Confirm Password").fill(password) await page.getByRole("button", { name: "Reset Password" }).click() + // Confirm that the appropriate error message is displayed await expect(page.getByText("Invalid token")).toBeVisible() }) +// Test to validate weak password prevention during password reset test("Weak new password validation", async ({ page, request }) => { const fullName = "Test User" const email = randomEmail() const password = randomPassword() - const weakPassword = "123" + const weakPassword = "123" // Example weak password - // Sign up a new user + // Step 1: Register a new user await signUpNewUser(page, fullName, email, password) + // Step 2: Request password recovery await page.goto("/recover-password") await page.getByPlaceholder("Email").fill(email) await page.getByRole("button", { name: "Continue" }).click() + // Step 3: Retrieve the password recovery email const emailData = await findLastEmail({ request, filter: (e) => e.recipients.includes(`<${email}>`), timeout: 5000, }) + // Step 4: Access the reset link from the email await page.goto(`http://localhost:1080/messages/${emailData.id}.html`) - const selector = 'a[href*="/reset-password?token="]' let url = await page.getAttribute(selector, "href") url = url!.replace("http://localhost/", "http://localhost:5173/") - // Set a weak new password + // Step 5: Attempt to set a weak password await page.goto(url) await page.getByLabel("Set Password").fill(weakPassword) await page.getByLabel("Confirm Password").fill(weakPassword) await page.getByRole("button", { name: "Reset Password" }).click() - await expect( - page.getByText("Password must be at least 8 characters"), - ).toBeVisible() + // Confirm that the weak password error message is shown + await expect(page.getByText("Password must be at least 8 characters")).toBeVisible() }) diff --git a/frontend/tests/utils/mailcatcher.ts b/frontend/tests/utils/mailcatcher.ts index 601ce434fb..e3e2f62f62 100644 --- a/frontend/tests/utils/mailcatcher.ts +++ b/frontend/tests/utils/mailcatcher.ts @@ -1,23 +1,32 @@ +// Utility functions for fetching and filtering emails during Playwright tests. +// Provides functions to locate the latest email that matches specific criteria, with timeout support +// to handle cases where emails may be delayed. + import type { APIRequestContext } from "@playwright/test" +// Type definition for an email, specifying fields used in filtering and email retrieval type Email = { id: number recipients: string[] subject: string } +// findEmail: Fetches emails from the mailcatcher API and applies an optional filter. +// Returns the most recent email or null if no emails match. async function findEmail({ request, filter, }: { request: APIRequestContext; filter?: (email: Email) => boolean }) { const response = await request.get("http://localhost:1080/messages") + // Parse the response as JSON and filter emails if a filter is provided let emails = await response.json() if (filter) { emails = emails.filter(filter) } + // Select the most recent email from the filtered list, if any const email = emails[emails.length - 1] if (email) { @@ -27,6 +36,8 @@ async function findEmail({ return null } +// findLastEmail: Checks for the latest email that matches a specified filter, within a timeout period +// Useful for scenarios where we need to wait for an email to arrive. export function findLastEmail({ request, filter, @@ -36,6 +47,7 @@ export function findLastEmail({ filter?: (email: Email) => boolean timeout?: number }) { + // Timeout promise: rejects if no email is found within the specified time const timeoutPromise = new Promise((_, reject) => setTimeout( () => reject(new Error("Timeout while trying to get latest email")), @@ -43,6 +55,7 @@ export function findLastEmail({ ), ) + // Function to repeatedly check for matching emails, every 100ms, until one is found or timeout occurs const checkEmails = async () => { while (true) { const emailData = await findEmail({ request, filter }) @@ -55,5 +68,6 @@ export function findLastEmail({ } } + // Run checkEmails with a timeout constraint return Promise.race([timeoutPromise, checkEmails()]) } diff --git a/scrap.txt b/scrap.txt new file mode 100644 index 0000000000..c7dbbc7630 --- /dev/null +++ b/scrap.txt @@ -0,0 +1,77 @@ +import React, { useEffect } from "react"; +import { + MapContainer, + TileLayer, + LayersControl, + GeoJSON, + ScaleControl, + ZoomControl, + useMap, +} from "react-leaflet"; +import L, { LatLngTuple } from "leaflet"; // Explicit import of Leaflet +import "leaflet/dist/leaflet.css"; // Ensure Leaflet CSS is imported + +const center: LatLngTuple = [51.505, -0.09]; + +interface LeafletMapComponentProps { + geojson: any; +} + +// Hook to adjust map bounds when geoJSON changes +function FitBounds({ geojson }: { geojson: any }) { + const map = useMap(); // This hook provides access to the map instance + + useEffect(() => { + if (geojson && map) { + const geojsonLayer = L.geoJSON(geojson); // Add geoJSON to the map + const bounds = geojsonLayer.getBounds(); // Get the bounds of the geoJSON layer + + if (bounds.isValid()) { + map.fitBounds(bounds); // Fit the map to the geoJSON layer bounds + } + } + }, [geojson, map]); // Re-run when geojson or map changes + + return null; +} + +const LeafletMapComponent: React.FC = ({ geojson }) => { + return ( + + + {/* LayersControl to manage different map layers */} + + + + + + + + + {/* Render the geoJSON layer if geojson data is available */} + {geojson && } + + {/* Fit bounds based on geoJSON */} + + + {/* Add a scale control to the map */} + + + {/* Add zoom control to the bottom left corner */} + + + ); +}; + +export default LeafletMapComponent; \ No newline at end of file