feat(profile): add structured profile modules, copy controls, and section settings (#3)#20
Merged
feat(profile): add structured profile modules, copy controls, and section settings (#3)#20
Conversation
Introduce structured profile support for Experience, Education, Projects and Skills. - Adds new SQLAlchemy models, Pydantic schemas, CRUD/reorder services and FastAPI routes for each section, and registers the routers in main.py - Includes an Alembic migration to create the new tables and indexes - Adds frontend components, hooks and services for the new profile sections and updates generated types and profile page usage to integrate the new UI pieces
Introduce backend and frontend support for profile certifications, courses, and an About Me section. - Backend: add Alembic migration and SQLAlchemy models (certification_entry, course_entry, profile_about_me), Pydantic schemas, services (CRUD, reorder, attachment upload/download/ removal with file storage and allowed MIME types), and FastAPI routes wired into main.py and models __init__.py - Frontend: add React sections, hooks, and services to list/create/update/delete/reorder entries and manage attachments, and include the new sections on the profile page. Services reindex display_order on changes and validate inputs/dates
- Enable file attachments for Certifications and Courses: remove hidden file inputs and upload-target refs, add selectedAttachment state, show file input in the create/edit dialog, and upload the file when saving (with success/error toasts) - Fix typing in ApplicationTable by adding generic 'any' to ColumnDef casts - Reorder profile page sections: move About Me and Skills earlier, group Certifications and Courses into a two-column grid, and move Education below those sections
Enable copying and inspection of profile sections and add a user preference for skills copy format. - About Me: add copy and edit dialog (increase textarea rows), import dialog components and use copyText util - Certifications & Courses: add inspect dialogs with InspectRow and copy buttons, import copyText and allow viewing details in a modal - Skills: add settings link/tooltip, usePreference for copy format (bullet vs comma) and update group copy behavior accordingly - Settings page: add Profile Sections card to configure the skills copy format - Also minor UI tweak: make application table button show pointer cursor
| @@ -0,0 +1,87 @@ | |||
| from fastapi import APIRouter, Depends, File, Form, HTTPException, Response, UploadFile | |||
Check notice
Code scanning / CodeQL
Unused import Note
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI about 1 month ago
To fix the problem, remove the unused Form symbol from the import list so that every imported name is referenced in the file. This avoids unnecessary dependencies and quiets the static analysis warning.
Concretely, in backend/app/routes/profile_certification.py, edit the first line to drop Form from the fastapi import. All other imports on that line are used (APIRouter, Depends, File, HTTPException, Response, UploadFile), so they must remain unchanged. No other code or imports need modification.
Suggested changeset
1
backend/app/routes/profile_certification.py
| @@ -1,4 +1,4 @@ | ||
| from fastapi import APIRouter, Depends, File, Form, HTTPException, Response, UploadFile | ||
| from fastapi import APIRouter, Depends, File, HTTPException, Response, UploadFile | ||
| from fastapi.responses import FileResponse | ||
| from sqlalchemy.orm import Session | ||
|
|
Copilot is powered by AI and may make mistakes. Always verify output.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implemented a full structured Profile experience with new section domains, attachment support, copy ergonomics, and settings-driven behavior.
.pdf,.png,.jpg,.jpeg) with verification linksChanges
Backend:
backend/alembic/versions/add_profile_structured_sections.py: migration for experience/education/projects/skills tables.backend/alembic/versions/add_profile_certifications_courses_about_me.py: migration for certifications/courses/about-me tables.backend/app/main.py: registers all new profile routers.backend/app/models/__init__.py: registers new profile models.backend/app/models/profile_experience.py,profile_education.py,profile_project.py,profile_skill.py: normalized structured profile models + ordered nested entities.backend/app/models/profile_certification.py,profile_course.py,profile_about_me.py: certification/course/about-me models.backend/app/schemas/profile_experience.py,profile_education.py,profile_project.py,profile_skill.py,profile_certification.py,profile_course.py,profile_about_me.py: create/update/response/reorder schemas with field validation.backend/app/services/profile_experience.py,profile_education.py,profile_project.py,profile_skill.py: CRUD + reorder + reindex logic.backend/app/services/profile_certification.py,profile_course.py: CRUD + reorder + attachment upload/remove/download flows.backend/app/services/profile_about_me.py: get/update singleton About me.backend/app/routes/profile_experience.py,profile_education.py,profile_project.py,profile_skill.py,profile_certification.py,profile_course.py,profile_about_me.py: REST endpoints for all sections, nested resources, reorder, and attachments.Frontend:
frontend/apps/web/services/profile-*.service.tsfrontend/apps/web/hooks/useProfile*.tsfrontend/apps/web/types/api.generated.ts,frontend/apps/web/types/index.ts: generated and exported types for new APIs.frontend/apps/web/app/profile/ExperienceSection.tsxfrontend/apps/web/app/profile/EducationSection.tsxfrontend/apps/web/app/profile/ProjectsSection.tsxfrontend/apps/web/app/profile/SkillsSection.tsxfrontend/apps/web/app/profile/CertificationsSection.tsxfrontend/apps/web/app/profile/CoursesSection.tsxfrontend/apps/web/app/profile/AboutMeSection.tsxfrontend/apps/web/app/profile/profile-section-utils.tsfrontend/apps/web/app/profile/page.tsx: order set to Resumes, About me, Skills, Experience, Projects, Certifications|Courses, Education.frontend/apps/web/app/settings/page.tsx: Profile Sections card + Skills copy format preference.frontend/apps/web/app/profile/SkillsSection.tsx: gear tooltip + copy format integration.frontend/apps/web/app/profile/CertificationsSection.tsx,CoursesSection.tsx: create-time attachment selection + edit add/remove kept + clickable inspect titles.frontend/apps/web/app/applications/ApplicationTable.tsx: pointer cursor on clickable title + type compatibility fix.Notes