diff --git a/lesson_10/libraries/src/library/library_guest.ts b/lesson_10/libraries/src/library/library_guest.ts new file mode 100644 index 000000000..a6a15a1d1 --- /dev/null +++ b/lesson_10/libraries/src/library/library_guest.ts @@ -0,0 +1,8 @@ +import { MediaItem } from './media_item.js'; + +export interface LibraryGuest { + getId(): string; + getEmail(): string; + getName(): string; + getCheckedOutMediaItems(): ReadonlySet; +} diff --git a/lesson_10/libraries/src/library/media_item.ts b/lesson_10/libraries/src/library/media_item.ts new file mode 100644 index 000000000..400a20c29 --- /dev/null +++ b/lesson_10/libraries/src/library/media_item.ts @@ -0,0 +1,5 @@ +export interface MediaItem { + getId(): string; + getTitle(): string; + canCheckOut(): boolean; +} diff --git a/lesson_10/libraries/src/models/checkout_model.ts b/lesson_10/libraries/src/models/checkout_model.ts new file mode 100644 index 000000000..c5f738e3f --- /dev/null +++ b/lesson_10/libraries/src/models/checkout_model.ts @@ -0,0 +1,5 @@ +export interface CheckoutModel { + mediaItemId: string; + checkoutDate: Date; + dueDate: Date; +} diff --git a/lesson_10/libraries/src/models/library_data_model.ts b/lesson_10/libraries/src/models/library_data_model.ts new file mode 100644 index 000000000..1f580f162 --- /dev/null +++ b/lesson_10/libraries/src/models/library_data_model.ts @@ -0,0 +1,36 @@ +import { LibraryGuest } from '../library/library_guest.js'; +import { MediaItem } from '../library/media_item.js'; +import { CheckoutModel } from './checkout_model.js'; + +export class LibraryDataModel { + public mediaItems: MediaItem[]; + public guests: LibraryGuest[]; + + constructor(mediaItems: MediaItem[], guests: LibraryGuest[]) { + this.mediaItems = mediaItems; + this.guests = guests; + } + + public getMediaItems(): MediaItem[] { + return this.mediaItems; + } + + public getGuests(): LibraryGuest[] { + return this.guests; + } + + public getCheckoutsByEmail(): Map { + const results = new Map(); + this.guests.forEach((guest) => { + results.set( + guest.getEmail(), + Array.from(guest.getCheckedOutMediaItems()).map((item: MediaItem) => ({ + mediaItemId: item.getId(), + checkoutDate: new Date(), + dueDate: new Date(Date.now() + 14 * 24 * 60 * 60 * 1000), // 14 days from now + })), + ); + }); + return results; + } +} diff --git a/lesson_27/api/src/data/programs.json b/lesson_27/api/src/data/programs.json index 13b80fcfa..7cb42e100 100644 --- a/lesson_27/api/src/data/programs.json +++ b/lesson_27/api/src/data/programs.json @@ -19,6 +19,21 @@ "id": "a06f970a-03b7-4cbb-9efd-f4e99029a456", "title": "Platform Programs", "description": "Platform programs are designed for high school graduates, college students, career changers, or professionals looking to develop the technology job readiness skills for today’s workforce." + }, + { + "title": "new prog", + "description": "new ", + "id": "6d084301-3161-4f1a-b995-30478afb7f1d" + }, + { + "title": "new ", + "description": "prog2", + "id": "2cc2e17d-1714-4d1d-8a22-dbf53c29e5b5" + }, + { + "title": "new", + "description": "new", + "id": "44efa6e4-f7c5-4a36-8c64-4dd70403cb42" } ] -} +} \ No newline at end of file diff --git a/resources/queries/media_and_guest_queries.sql b/resources/queries/media_and_guest_queries.sql new file mode 100644 index 000000000..205eecda5 --- /dev/null +++ b/resources/queries/media_and_guest_queries.sql @@ -0,0 +1,29 @@ +-- Query 1: Count of media items by type +SELECT + type, + COUNT(*) as item_count +FROM media_items +GROUP BY type +ORDER BY type; + +-- Query 2: Sum of total pages checked out by guests +SELECT + SUM(pages) as total_pages_checked_out +FROM checked_out_items +WHERE guest_id IS NOT NULL; + +-- Query 3: All guests and their corresponding checked out items +SELECT + g.id as guest_id, + g.name as guest_name, + g.email as guest_email, + g.phone as guest_phone, + g.address as guest_address, + coi.id as checked_out_item_id, + coi.media_item_id, + coi.checkout_date, + coi.return_date, + coi.pages +FROM guests g +LEFT JOIN checked_out_items coi ON g.id = coi.guest_id +ORDER BY g.id, coi.checkout_date; \ No newline at end of file