Skip to content
Open

Done #111

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.ComponentModel.DataAnnotations.Schema;

namespace api_cinema_challenge.DTO.CustomerDTO
{
public class CreateCustomerDTO
{
public string Name { get; set; }

public string Email { get; set; }

public string Phone { get; set; }

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using api_cinema_challenge.DTO.TicketDTO;

namespace api_cinema_challenge.DTO.CustomerDTO
{
public class CustomerNoTicketDTO
{
public int Id { get; set; }

public string Name { get; set; }

public string Email { get; set; }

public string Phone { get; set; }

public DateTime CreatedAt { get; set; } = DateTime.UtcNow;

public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System.ComponentModel.DataAnnotations.Schema;
using api_cinema_challenge.DTO.TicketDTO;
using api_cinema_challenge.Models;

namespace api_cinema_challenge.DTO.CustomerDTO
{
public class CustomersDTO
{
public int Id { get; set; }

public string Name { get; set; }

public string Email { get; set; }

public string Phone { get; set; }

public DateTime CreatedAt { get; set; } = DateTime.UtcNow;

public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;

public virtual ICollection<TicketsDTO> Tickets { get; set; } = new List<TicketsDTO>();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace api_cinema_challenge.DTO.MovieDTO
{
public class CreateMovieDTO
{
public string Title { get; set; }

public string Rating { get; set; }

public string Description { get; set; }

public int RuntimeMins { get; set; }

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using api_cinema_challenge.DTO.ScreeningDTO;
using api_cinema_challenge.Models;

namespace api_cinema_challenge.DTO.MovieDTO
{
public class MoviesDTO
{
public int Id { get; set; }

public string Title { get; set; }

public string Rating { get; set; }

public string Description { get; set; }

public int RuntimeMins { get; set; }

public DateTime CreatedAt { get; set; } = DateTime.UtcNow;

public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
public virtual ICollection<ScreeningNoMovieDTO> Screenings { get; set; } = new List<ScreeningNoMovieDTO>();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace api_cinema_challenge.DTO.ScreeningDTO
{
public class CreateScreeningDTO
{

public int ScreenNumber { get; set; }

public int Capacity { get; set; }

public DateTime StartsAt { get; set; }

public int MovieId { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using api_cinema_challenge.DTO.MovieDTO;

namespace api_cinema_challenge.DTO.ScreeningDTO
{
public class ScreeningNoMovieDTO
{
public int Id { get; set; }

public int ScreenNumber { get; set; }

public int Capacity { get; set; }

public DateTime StartsAt { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System.ComponentModel.DataAnnotations.Schema;
using api_cinema_challenge.DTO.MovieDTO;

namespace api_cinema_challenge.DTO.ScreeningDTO
{
public class ScreeningsDTO
{
public int Id { get; set; }

public int ScreenNumber { get; set; }

public int Capacity { get; set; }

public DateTime StartsAt { get; set; }
public MoviesDTO Movie { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using api_cinema_challenge.Models;

namespace api_cinema_challenge.DTO.TicketDTO
{
public class CreateTicketDTO
{
public int NumSeats { get; set; }

public int CustomerId { get; set; }

public int ScreeningId { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using api_cinema_challenge.DTO.CustomerDTO;
using api_cinema_challenge.DTO.ScreeningDTO;
using api_cinema_challenge.Models;
using System.ComponentModel.DataAnnotations.Schema;

namespace api_cinema_challenge.DTO.TicketDTO
{
public class TicketsDTO
{
public int Id { get; set; }

public int NumSeats { get; set; }

public DateTime CreatedAt { get; set; } = DateTime.UtcNow;

public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;

public CustomerNoTicketDTO Customer { get; set; }

public ScreeningsDTO Screening { get; set; }
}
}
26 changes: 0 additions & 26 deletions api-cinema-challenge/api-cinema-challenge/Data/CinemaContext.cs

This file was deleted.

30 changes: 30 additions & 0 deletions api-cinema-challenge/api-cinema-challenge/Data/DataContext.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using api_cinema_challenge.Models;
using Microsoft.EntityFrameworkCore;

namespace api_cinema_challenge.Data
{
public class DataContext : DbContext
{
private string connectionString;
public DataContext()
{
var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
connectionString = configuration.GetValue<string>("ConnectionStrings:DefaultConnectionString");

}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(connectionString);

//set primary of order?

//seed data?

}
public DbSet<Movie> Movies { get; set; }
public DbSet<Customer> Customers { get; set; }
public DbSet<Ticket> Tickets { get; set; }
public DbSet<Screening> Screenings { get; set; }

}
}
73 changes: 73 additions & 0 deletions api-cinema-challenge/api-cinema-challenge/Data/Seed.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
using api_cinema_challenge.Models;

namespace api_cinema_challenge.Data
{
public static class Seed
{
private static readonly Random Random = new Random();

public async static Task SeedDatabase(this WebApplication app)
{
using (var db = new DataContext())
{
// Seed Movies
if (!db.Movies.Any())
{
var movies = new List<Movie>
{
new Movie { Title = "Inception", Rating = "PG-13", Description = "A mind-bending thriller", RuntimeMins = 148, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow },
new Movie { Title = "The Matrix", Rating = "R", Description = "A sci-fi classic", RuntimeMins = 136, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow }
};
db.Add(movies);
await db.SaveChangesAsync();
}

// Seed Customers
if (!db.Customers.Any())
{
var customers = new List<Customer>
{
new Customer { Name = "John Doe", Email = "john@example.com", Phone = "123-456-7890", CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow },
new Customer { Name = "Jane Smith", Email = "jane@example.com", Phone = "987-654-3210", CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow }
};
db.Add(customers);
await db.SaveChangesAsync();
}

// Ensure movies exist before adding screenings
var movie1 = db.Movies.FirstOrDefault(m => m.Title == "Inception");
var movie2 = db.Movies.FirstOrDefault(m => m.Title == "The Matrix");

// Seed Screenings
if (!db.Screenings.Any() && movie1 != null && movie2 != null)
{
var screenings = new List<Screening>
{
new Screening { ScreenNumber = 5, Capacity = 100, StartsAt = DateTime.UtcNow.AddDays(1), MovieId = movie1.Id, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow },
new Screening { ScreenNumber = 3, Capacity = 80, StartsAt = DateTime.UtcNow.AddDays(2), MovieId = movie2.Id, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow }
};
db.Add(screenings);
await db.SaveChangesAsync();
}

// Ensure customers and screenings exist before adding tickets
var customer1 = db.Customers.FirstOrDefault(c => c.Name == "John Doe");
var customer2 = db.Customers.FirstOrDefault(c => c.Name == "Jane Smith");
var screening1 = db.Screenings.FirstOrDefault(s => s.ScreenNumber == 5);
var screening2 = db.Screenings.FirstOrDefault(s => s.ScreenNumber == 3);

// Seed Tickets
if (!db.Tickets.Any() && customer1 != null && customer2 != null && screening1 != null && screening2 != null)
{
var tickets = new List<Ticket>
{
new Ticket { NumSeats = 2, CustomerId = customer1.Id, ScreeningId = screening1.Id, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow },
new Ticket { NumSeats = 3, CustomerId = customer2.Id, ScreeningId = screening2.Id, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow }
};
db.Add(tickets);
await db.SaveChangesAsync();
}
}
}
}
}
Loading