Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

إلغاء العروض

جزء من قسم Logic & Flow في رحلة JavaScript على Coddy — الدرس 65 من 65.

challenge icon

التحدي

سهل

أضف الحالة cancelScreening التي تتعامل مع إلغاء العروض. تحتوي معلمة البيانات (data parameter) على:

  • screeningId (رقم)

 

يجب أن تقوم الوظيفة بما يلي:

  1. إذا كان العرض الذي يحمل screeningId المعطى غير موجود في festivalData.screenings، أضف Screening not found! إلى results وتوقف
  2. ابحث عن العرض وقم بإزالته من مصفوفة festivalData.screenings
  3. قم بإزالة جميع التذاكر المتعلقة به من مجموعة festivalData.tickets
  4. أضف Screening cancelled successfully! إلى مصفوفة results

جرّب بنفسك

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;


            case "rateMovie":
                const tempMovie = festivalData.movies.find(m => m.id === currentData.movieId);
                
                if (!tempMovie) {
                    results.push("Movie not found!");
                    break;
                }
                
                if (currentData.avgRating < 1 || currentData.avgRating > 5) {
                    results.push("Invalid rating! Must be between 1 and 5");
                    break;
                }

                tempMovie.avgRating = currentData.avgRating
                
                
                results.push("Rating added successfully!");
                break;

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

جميع دروس Logic & Flow