From e6a71598fee46f43067d5a79087603aa0b15a21c Mon Sep 17 00:00:00 2001 From: tlxxxsracer Date: Sat, 7 Jun 2025 00:32:16 +0000 Subject: [PATCH 1/4] Start draft PR From 59135fb4fb33ac05bcaffbf11a47fe637f9b7ad6 Mon Sep 17 00:00:00 2001 From: tlxxxsracer Date: Sat, 7 Jun 2025 00:32:35 +0000 Subject: [PATCH 2/4] Add .gitignore file with standard exclusions --- .gitignore | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 14885812..daac8aad 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ -node_modules +node_modules/ +dist/ .env -.env.funder -*.pem +__pycache__/ +.vitest +coverage/ +*.log +.DS_Store \ No newline at end of file From 2453894f9b4374f91d92aa68bcd4812fd6e2467b Mon Sep 17 00:00:00 2001 From: tlxxxsracer Date: Sat, 7 Jun 2025 00:32:53 +0000 Subject: [PATCH 3/4] Create hero data service with core functionality --- src/services/hero-data.service.ts | 90 +++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/services/hero-data.service.ts diff --git a/src/services/hero-data.service.ts b/src/services/hero-data.service.ts new file mode 100644 index 00000000..52862a71 --- /dev/null +++ b/src/services/hero-data.service.ts @@ -0,0 +1,90 @@ +// Hero Data Service +// Manages hero information retrieval with flexible, extensible design + +export interface Hero { + id: number; + name: string; + realName: string; + description: string; + powers: string[]; +} + +export class HeroDataService { + private heroes: Hero[] = [ + { + id: 1, + name: 'spiderman', + realName: 'Peter Parker', + description: 'Friendly neighborhood Spider-Man', + powers: ['web-slinging', 'spider-sense', 'wall-crawling'] + }, + { + id: 2, + name: 'ironman', + realName: 'Tony Stark', + description: 'Genius, billionaire, philanthropist', + powers: ['powered armor', 'advanced technology', 'flight'] + }, + { + id: 3, + name: 'captainamerica', + realName: 'Steve Rogers', + description: 'Super soldier and Avengers leader', + powers: ['enhanced strength', 'tactical genius', 'shield mastery'] + } + ]; + + /** + * Get hero by name (case-insensitive) + * @param name Hero name to search + * @returns Hero object or undefined + */ + getHeroByName(name: string): Hero | undefined { + if (!name) { + throw new Error('Hero name is required'); + } + + const normalizedName = name.toLowerCase().replace(/\s/g, ''); + return this.heroes.find( + hero => hero.name.toLowerCase() === normalizedName + ); + } + + /** + * Get all heroes + * @returns Array of heroes + */ + getAllHeroes(): Hero[] { + return [...this.heroes]; + } + + /** + * Add a new hero to the collection + * @param hero Hero object to add + * @returns Added hero + * @throws Error if hero already exists or is invalid + */ + addHero(hero: Hero): Hero { + // Validate hero + if (!hero.name || !hero.realName) { + throw new Error('Hero name and real name are required'); + } + + // Check for existing hero + const existingHero = this.getHeroByName(hero.name); + if (existingHero) { + throw new Error(`Hero with name ${hero.name} already exists`); + } + + // Assign new ID if not provided + if (!hero.id) { + hero.id = this.heroes.length + 1; + } + + this.heroes.push(hero); + return hero; + } +} + +// Export singleton instance +export const heroDataService = new HeroDataService(); \ No newline at end of file From cdd195e382e6dd9c59a65c596cec3cff55fea01b Mon Sep 17 00:00:00 2001 From: Vuk7912 Date: Sat, 7 Jun 2025 05:02:16 +0000 Subject: [PATCH 4/4] Start draft PR