Menu
CoddyTech

تقييم الأفلام

جزء من قسم المنطق وتدفق التنفيذ في رحلة JavaScript على Coddy. الدرس 64 من 65.

challenge icon

التحدي

سهل

أضف حالة rateMovie للتعامل مع تقييمات الأفلام. تحتوي المعلمة data على:

  • movieId (رقم)
  • avgRating (رقم بين 1 و5)

 

ينبغي أن تقوم الدالة بما يلي:

  1. التحقق من وجود الفيلم - إذا لم يُعثر على الفيلم، فأضف "Movie not found!" إلى مصفوفة النتائج
  2. التحقق من أن التقييم بين 1 و5   - إذا كان التقييم غير صالح، فأضف "Invalid rating! Must be between 1 and 5" إلى مصفوفة النتائج
  3. تحديث avgRating للفيلم
  4. أضف Rating added successfully! إلى مصفوفة results

جرّب بنفسك

// Don't remove the lines below
const util = require('util');
util.inspect.defaultOptions.maxArrayLength = null;
// ---------------------------

const festivalData = {
	movies: [{
		id: 1,
		title: "Inception",
		director: "Christopher Nolan",
		year: 2010,
		mainGenre: "Sci-Fi",
		secondGenre: undefined,
		avgRating: 0,
		available: true
	}],
	venues: [{
		id: 1,
		name: "Main Theater",
		capacity: 200,
	}],
	screenings: [{
		id: 1,
		movieId: 1,
		venueId: 1,
		date: '2023-10-29',
		time: '13:35:00',
		availableSeats: 200
	}],
	tickets: new Set()
};

function manageFestival(actions, data) {
    let results = [];
    
    actions.forEach((action, index) => {
        const currentData = data[index];
        
        switch(action) {
            case "listMovies":
                results.push(festivalData.movies);
                break;
                
            case "listVenues":
                results.push(festivalData.venues);
                break;

            case "listTickets":
                results.push(festivalData.tickets);
                break;

            case "listScreenings":
                results.push(festivalData.screenings);
                break;

            case "addMovie":
                const newMovie = {
                    id: festivalData.movies.length + 1,
                    title: currentData.title,
                    director: currentData.director,
                    year: currentData.year,
                    mainGenre: currentData.mainGenre,
                    secondGenre: currentData.secondGenre,
                    avgRating: 0,
                    available: true
                };
                festivalData.movies.push(newMovie);
                results.push("Movie added successfully!");
                break;

            case "addVenue":
                const newVenue = {
                    id: festivalData.venues.length + 1,
                    name: currentData.name,
                    capacity: currentData.capacity,
                };
                festivalData.venues.push(newVenue);
                results.push("Venue added successfully!");
                break;

            case "addScreening":
                const movie = festivalData.movies.find(m => m.id === currentData.movieId);
                const venue = festivalData.venues.find(v => v.id === currentData.venueId);
                
                if (!movie || !venue) {
                    results.push("Movie or venue not found!");
                    break;
                }
                
                const existingScreening = festivalData.screenings.find(s => 
                    s.venueId === currentData.venueId && 
                    s.date === currentData.date && 
                    s.time === currentData.time
                );
                
                if (existingScreening) {
                    results.push("Screening already exists at this time!");
                    break;
                }
                
                const newScreening = {
                    id: festivalData.screenings.length + 1,
                    movieId: currentData.movieId,
                    venueId: currentData.venueId,
                    date: currentData.date,
                    time: currentData.time,
                    availableSeats: venue.capacity
                };
                
                festivalData.screenings.push(newScreening);
                results.push("Screening added successfully!");
                break;

            case "buyTicket":
                const screening = festivalData.screenings.find(s => s.id === currentData.screeningId);
                
                if (!screening) {
                    results.push("Screening not found!");
                    break;
                }
                
                if (screening.availableSeats < currentData.quantity) {
                    results.push("Not enough seats available!");
                    break;
                }
                
                for (let i = 0; i < currentData.quantity; i++) {
                    const ticketId = `${currentData.screeningId}-${screening.availableSeats - i}`;
                    festivalData.tickets.add(ticketId);
                }
                
                screening.availableSeats -= currentData.quantity;
                results.push("Tickets purchased successfully!");
                break;


            default:
                results.push("Invalid action!");
        }
    });
    
    return results;
}

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم JavaScript عبر الإنترنت