-
Notifications
You must be signed in to change notification settings - Fork 0
[feature] Resumen page #3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughThe user data model has been extended with two new properties: Changes
Poem
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
npm error Exit handler never called! 📜 Recent review detailsConfiguration used: CodeRabbit UI ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (5)
💤 Files with no reviewable changes (1)
✅ Files skipped from review due to trivial changes (4)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (3)
src/stores/users/response.ts (3)
1-1: Remove the file-extension from the path alias importMost TS path-mappers treat
@stores/...as a module name; including.tscan break resolution under common bundlers (ts-node, Vite, Webpack).-import { User } from '@stores/users/userType.ts'; +import { User } from '@stores/users/userType';
286-301: Multi-paragraph text is easier to read & maintain with template literalsString-concatenation plus
\nharms readability and invites “+ "\n" +` noise.
Use a back-tick template literal instead:- text: "Gus and I were peers at Perx during his time as Head of Engineering, he led several key initiatives — from scaling the engineering team and aligning cross-functional efforts across DevOps, backend, frontend, and data, to driving projects around infrastructure modernization, performance optimization, and cloud cost efficiency.\n" + - "\n" + - "He’s a hands-on and technically strong leader who enjoys solving complex engineering problems. Outside of work, Gustavo is highly disciplined when it comes to health and fitness — always consistent and focused, which says a lot about his overall approach to life and work.", + text: `Gus and I were peers at Perx during his time as Head of Engineering, he led several key initiatives — from scaling the engineering team and aligning cross-functional efforts across DevOps, backend, frontend, and data, to driving projects around infrastructure modernization, performance optimization, and cloud cost efficiency. +He’s a hands-on and technically strong leader who enjoys solving complex engineering problems. Outside of work, Gustavo is highly disciplined when it comes to health and fitness — always consistent and focused, which says a lot about his overall approach to life and work.`,
362-366: Typo: “Engineering Manger” → “Engineering Manager”- designation: "Engineering Manger", + designation: "Engineering Manager",
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (9)
public/images/recommendation/amrith-g.jpegis excluded by!**/*.jpegpublic/images/recommendation/bhupesh-pathak.jpegis excluded by!**/*.jpegpublic/images/recommendation/claudio-reggiani.jpegis excluded by!**/*.jpegpublic/images/recommendation/damien-passavent.jpegis excluded by!**/*.jpegpublic/images/recommendation/dawid-makowski.jpegis excluded by!**/*.jpegpublic/images/recommendation/jarek-tkaczyk.jpegis excluded by!**/*.jpegpublic/images/recommendation/kong-kw.jpgis excluded by!**/*.jpgpublic/images/recommendation/ross-riley.jpegis excluded by!**/*.jpegpublic/images/recommendation/victory-sometime.jpegis excluded by!**/*.jpeg
📒 Files selected for processing (2)
src/stores/users/response.ts(1 hunks)src/stores/users/userType.ts(2 hunks)
🔇 Additional comments (2)
src/stores/users/userType.ts (2)
49-56: Interfaces look solid – consistent with the existing style.Fields, naming, and typing align with the rest of the model.
No issues spotted.
65-77: No breaking callers found — keepingrecommendationsrequired is safe
A search for all object literals assigned toUser,as Usercasts,Partial<User>, and test mocks turned up only one instantiation:
- src/stores/users/response.ts:
export const Response: User = { … }(includes bothtalksandrecommendations)Since no other call-sites construct a
Userwithout therecommendationsarray, making it optional isn’t necessary.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
src/stores/users/userType.ts (2)
58-63: Consider making some RecommendationPerson fields optional.While the interface structure is sound, some fields might not always be available or relevant:
export interface RecommendationPerson { - avatar: string; + avatar?: string; full_name: string; company: string; designation: string; }The
avatarfield could be optional since profile images aren't always available for recommendation sources.
65-74: Education interface is comprehensive but consider optional fields.The interface covers educational background thoroughly. However, some fields might benefit from being optional to handle varying data completeness:
export interface Education { uuid: string; - icon: string; + icon?: string; school: string; degree: string; field: string; - description: string; + description?: string; graduated_at: string; issuing_country: string; }Fields like
iconanddescriptionmight not always be available or required for all educational records.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (2)
public/images/education/iut_valencia.jpegis excluded by!**/*.jpegpublic/images/education/uah_logo.jpegis excluded by!**/*.jpeg
📒 Files selected for processing (2)
src/stores/users/response.ts(1 hunks)src/stores/users/userType.ts(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- src/stores/users/response.ts
🔇 Additional comments (2)
src/stores/users/userType.ts (2)
49-56: Well-structured recommendation interface with good separation of concerns.The
Recommendationinterface effectively models professional recommendations with appropriate fields. The separation of person details into a dedicatedRecommendationPersoninterface promotes reusability and maintains clean data structure.
83-83: User interface integration is correct and maintains consistency.The addition of
educationandrecommendationsarrays to theUserinterface is properly typed and follows the established pattern of other array properties in the interface.Also applies to: 88-88
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (1)
src/partials/RecommendationPartial.vue (1)
18-18: Consider formatting the date for better user experience.The
created_atfield likely contains a raw timestamp that should be formatted for display.Consider using a date formatting utility:
-<div>{{ item.created_at }}</div> +<div>{{ new Date(item.created_at).toLocaleDateString() }}</div>Or import a date formatting library for more control over the display format.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
src/pages/ResumePage.vue(1 hunks)src/partials/RecommendationPartial.vue(1 hunks)
🔇 Additional comments (3)
src/pages/ResumePage.vue (1)
21-21: LGTM! Consistent pattern implementation.The conditional rendering and prop binding follow the same pattern as
ExperiencePartialon line 24, ensuring consistency across the codebase. Thev-if="user"prevents potential runtime errors when the user data is not yet loaded.src/partials/RecommendationPartial.vue (2)
6-6: LGTM! Proper Vue.js list rendering implementation.The dynamic rendering with
v-foranditem.uuidas the key follows Vue.js best practices for list performance and reactivity.
30-37: LGTM! Proper TypeScript integration.The script setup with typed props follows Vue 3 Composition API best practices and ensures type safety for the recommendations data.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (1)
src/public.ts (1)
10-14: Fix formatting inconsistencies and missing semicolon.There are formatting issues in the options object: inconsistent spacing around colons and a missing semicolon.
const ops = options || { - year: "numeric", - month: "long", - day: "numeric" - } + year: "numeric", + month: "long", + day: "numeric" + };
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
src/partials/RecommendationPartial.vue(1 hunks)src/public.ts(1 hunks)src/stores/users/response.ts(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- src/partials/RecommendationPartial.vue
- src/stores/users/response.ts
🔇 Additional comments (1)
src/public.ts (1)
7-17: LGTM! Solid utility function implementation.The function logic is well-structured with appropriate defaults and fallback handling. The default date format (numeric year, long month, numeric day) provides good readability for recommendation dates.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (1)
src/partials/EducationPartial.vue (1)
15-28: Consider making the icon dynamic instead of hardcoded.The SVG icon is now hardcoded, but the education data structure includes an
iconproperty that could be used to display different icons for different education types (e.g., university vs. certification).Consider conditionally rendering the icon based on the item data:
- <svg - xmlns="http://www.w3.org/2000/svg" - fill="none" - viewBox="0 0 24 24" - stroke-width="1.5" - stroke="currentColor" - class="opacity-30 size-8 dark:opacity-30 fill-none text-fuchsia-500 dark:text-white" - > - <path - stroke-linecap="round" - stroke-linejoin="round" - d="M4.26 10.147a60.438 60.438 0 0 0-.491 6.347A48.62 48.62 0 0 1 12 20.904a48.62 48.62 0 0 1 8.232-4.41 60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.636 50.636 0 0 0-2.658-.813A59.906 59.906 0 0 1 12 3.493a59.903 59.903 0 0 1 10.399 5.84c-.896.248-1.783.52-2.658.814m-15.482 0A50.717 50.717 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5" - /> - </svg> + <img v-if="item.icon" :src="item.icon" :alt="`${item.school} icon`" class="opacity-30 size-8 dark:opacity-30" /> + <svg + v-else + xmlns="http://www.w3.org/2000/svg" + fill="none" + viewBox="0 0 24 24" + stroke-width="1.5" + stroke="currentColor" + class="opacity-30 size-8 dark:opacity-30 fill-none text-fuchsia-500 dark:text-white" + > + <path + stroke-linecap="round" + stroke-linejoin="round" + d="M4.26 10.147a60.438 60.438 0 0 0-.491 6.347A48.62 48.62 0 0 1 12 20.904a48.62 48.62 0 0 1 8.232-4.41 60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.636 50.636 0 0 0-2.658-.813A59.906 59.906 0 0 1 12 3.493a59.903 59.903 0 0 1 10.399 5.84c-.896.248-1.783.52-2.658.814m-15.482 0A50.717 50.717 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5" + /> + </svg>
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
src/pages/ResumePage.vue(1 hunks)src/partials/EducationPartial.vue(1 hunks)src/partials/RecommendationPartial.vue(1 hunks)src/stores/users/response.ts(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
- src/pages/ResumePage.vue
- src/partials/RecommendationPartial.vue
- src/stores/users/response.ts
🔇 Additional comments (4)
src/partials/EducationPartial.vue (4)
6-6: LGTM: Proper v-for implementation with key binding.The dynamic rendering implementation correctly uses
item.uuidas the key, which ensures proper Vue reactivity and list reconciliation.
32-35: LGTM: Clean data binding implementation.The dynamic rendering of education data with proper property binding is well-implemented. The use of
v-htmlwith sanitized content is a secure approach.
49-51: LGTM: Proper TypeScript prop definition.The props definition correctly uses TypeScript typing with the imported
Educationinterface, ensuring type safety.
53-62: LGTM: Well-structured computed property with security considerations.The computed property efficiently processes education data and properly sanitizes HTML output using DOMPurify, which prevents XSS attacks when using
v-html.
Summary by CodeRabbit