diff --git a/WatchLog/Components/Layout/NavMenu.razor b/WatchLog/Components/Layout/NavMenu.razor index fd642c8..2df568b 100644 --- a/WatchLog/Components/Layout/NavMenu.razor +++ b/WatchLog/Components/Layout/NavMenu.razor @@ -15,14 +15,14 @@ diff --git a/WatchLog/Components/Pages/Counter.razor b/WatchLog/Components/Pages/Counter.razor deleted file mode 100644 index 1a4f8e7..0000000 --- a/WatchLog/Components/Pages/Counter.razor +++ /dev/null @@ -1,19 +0,0 @@ -@page "/counter" -@rendermode InteractiveServer - -Counter - -

Counter

- -

Current count: @currentCount

- - - -@code { - private int currentCount = 0; - - private void IncrementCount() - { - currentCount++; - } -} diff --git a/WatchLog/Components/Pages/Weather.razor b/WatchLog/Components/Pages/Weather.razor deleted file mode 100644 index 43a1ecb..0000000 --- a/WatchLog/Components/Pages/Weather.razor +++ /dev/null @@ -1,64 +0,0 @@ -@page "/weather" -@attribute [StreamRendering] - -Weather - -

Weather

- -

This component demonstrates showing data.

- -@if (forecasts == null) -{ -

Loading...

-} -else -{ - - - - - - - - - - - @foreach (var forecast in forecasts) - { - - - - - - - } - -
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
-} - -@code { - private WeatherForecast[]? forecasts; - - protected override async Task OnInitializedAsync() - { - // Simulate asynchronous loading to demonstrate streaming rendering - await Task.Delay(500); - - var startDate = DateOnly.FromDateTime(DateTime.Now); - var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; - forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = startDate.AddDays(index), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = summaries[Random.Shared.Next(summaries.Length)] - }).ToArray(); - } - - private class WeatherForecast - { - public DateOnly Date { get; set; } - public int TemperatureC { get; set; } - public string? Summary { get; set; } - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - } -} diff --git a/WatchLog/Data/Database/Global/Admin.cs b/WatchLog/Data/Database/Global/Admin.cs new file mode 100644 index 0000000..a0f5f7d --- /dev/null +++ b/WatchLog/Data/Database/Global/Admin.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; + +namespace WatchLog.Data +{ + public class Admin + { + [Key] + public int Id { get; set; } + + [Required] + [MaxLength(100)] + public required string Name { get; set; } + + [Required] + public required string Password { get; set; } // Important: Save as HASH + } +} \ No newline at end of file diff --git a/WatchLog/Data/Database/Global/Genre.cs b/WatchLog/Data/Database/Global/Genre.cs new file mode 100644 index 0000000..39efcdb --- /dev/null +++ b/WatchLog/Data/Database/Global/Genre.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations; + +namespace WatchLog.Data +{ + public class Genre + { + [Key] + public int Id { get; set; } + + [Required] + [MaxLength(50)] + public required string Name { get; set; } + + [Required] + public required DateTime CreationTime { get; set; } + + public DateTime? LastChange { get; set; } + + + // --- Navigation Properties --- + public virtual ICollection LinkTableGlobalGenres { get; set; } = new List(); + } +} \ No newline at end of file diff --git a/WatchLog/Data/Database/Global/GlobalEntity.cs b/WatchLog/Data/Database/Global/GlobalEntity.cs new file mode 100644 index 0000000..b3babc4 --- /dev/null +++ b/WatchLog/Data/Database/Global/GlobalEntity.cs @@ -0,0 +1,45 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace WatchLog.Data +{ + public class GlobalEntity + { + [Key] + public int Id { get; set; } + + [Required] + [MaxLength(200)] + public required string Title { get; set; } + + [MaxLength(500)] + public string? PicturePath { get; set; } + + [Required] + public required DateTime CreationTime { get; set; } + + public DateTime? LastChange { get; set; } + + + // --- Foreign Keys --- + [Required] + public int TypeId { get; set; } + + [Required] + public int CreatorId { get; set; } + + + // --- Navigation Properties --- + [ForeignKey(nameof(TypeId))] + public virtual Type Type { get; set; } = null!; + + [ForeignKey(nameof(CreatorId))] + public virtual User User { get; set; } = null!; + + public virtual ICollection LinkTableGlobalGenres { get; set; } = new List(); + + public virtual ICollection PrivateEntities { get; set; } = new List(); + + public virtual ICollection SharedListEntities { get; set; } = new List(); + } +} \ No newline at end of file diff --git a/WatchLog/Data/Database/Global/LinkTableGlobalGenre.cs b/WatchLog/Data/Database/Global/LinkTableGlobalGenre.cs new file mode 100644 index 0000000..8568ebc --- /dev/null +++ b/WatchLog/Data/Database/Global/LinkTableGlobalGenre.cs @@ -0,0 +1,24 @@ +using System.ComponentModel.DataAnnotations.Schema; +using Microsoft.EntityFrameworkCore; + +namespace WatchLog.Data +{ + [PrimaryKey(nameof(GlobalEntityId), nameof(GenreId))] + public class LinkTableGlobalGenre + { + // --- Foreign Keys --- + [Column(Order = 0)] + public int GlobalEntityId { get; set; } + + [Column(Order = 1)] + public int GenreId { get; set; } + + + // --- Navigation Properties --- + [ForeignKey(nameof(GlobalEntityId))] + public virtual GlobalEntity GlobalEntity { get; set; } = null!; + + [ForeignKey(nameof(GenreId))] + public virtual Genre Genre { get; set; } = null!; + } +} \ No newline at end of file diff --git a/WatchLog/Data/Database/Global/StreamingPlatform.cs b/WatchLog/Data/Database/Global/StreamingPlatform.cs new file mode 100644 index 0000000..5acf74a --- /dev/null +++ b/WatchLog/Data/Database/Global/StreamingPlatform.cs @@ -0,0 +1,22 @@ +using System.ComponentModel.DataAnnotations; + +namespace WatchLog.Data +{ + public class StreamingPlatform + { + [Key] + public int Id { get; set; } + + [Required] + [MaxLength(100)] + public required string Name { get; set; } + + [Required] + public string? PicturePath { get; set; } + + [Required] + public required DateTime CreationTime { get; set; } + + public DateTime? LastChange { get; set; } + } +} \ No newline at end of file diff --git a/WatchLog/Data/Database/Global/Type.cs b/WatchLog/Data/Database/Global/Type.cs new file mode 100644 index 0000000..3417780 --- /dev/null +++ b/WatchLog/Data/Database/Global/Type.cs @@ -0,0 +1,18 @@ +using System.ComponentModel.DataAnnotations; + +namespace WatchLog.Data +{ + public class Type + { + [Key] + public int Id { get; set; } + + [Required] + [MaxLength(50)] + public required string Name { get; set; } + + + // --- Navigation Property --- + public virtual ICollection GlobalEntities { get; set; } = new List(); + } +} \ No newline at end of file diff --git a/WatchLog/Data/Database/Global/User.cs b/WatchLog/Data/Database/Global/User.cs new file mode 100644 index 0000000..e831dd1 --- /dev/null +++ b/WatchLog/Data/Database/Global/User.cs @@ -0,0 +1,32 @@ +using System.ComponentModel.DataAnnotations; + +namespace WatchLog.Data +{ + public class User + { + [Key] + public int Id { get; set; } + + [Required] + [MaxLength(100)] + public required string Name { get; set; } + + [MaxLength(255)] + public string? Email { get; set; } + + [Required] + public required string Password { get; set; } // Important: Save as HASH + + + // --- Navigation Properties --- + public virtual ICollection PrivateEntities { get; set; } = new List(); + + public virtual ICollection GlobalEntities { get; set; } = new List(); + + public virtual ICollection