Menu
Coddy logo textTech

Vorführungen absagen

Teil des Abschnitts Logik & Ablauf der JavaScript-Journey von Coddy — Lektion 65 von 65.

challenge icon

Aufgabe

Einfach

Füge den Fall cancelScreening hinzu, der Stornierungen von Vorstellungen verarbeitet. Der Parameter data enthält:

  • screeningId (number)

 

Die Funktion sollte:

  1. Wenn die Vorstellung mit der angegebenen screeningId nicht in festivalData.screenings existiert, füge Screening not found! zu results hinzu und brich ab
  2. Suche und entferne die Vorstellung aus dem Array festivalData.screenings
  3. Entferne alle zugehörigen Tickets aus dem Set festivalData.tickets
  4. Füge Screening cancelled successfully! zum Array results hinzu

Probier es selbst

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;
}

Alle Lektionen in Logik & Ablauf