diff --git a/WebApp/Data/ApplicationDbContext.cs b/WebApp/Data/ApplicationDbContext.cs index f1da3ab..2f4d686 100644 --- a/WebApp/Data/ApplicationDbContext.cs +++ b/WebApp/Data/ApplicationDbContext.cs @@ -5,19 +5,23 @@ using WebApp.Entities; namespace WebApp.Data { - public class ApplicationDbContext : IdentityDbContext, string> + public class ApplicationDbContext : IdentityDbContext//, string> { public ApplicationDbContext(DbContextOptions options) : base(options) { } + public DbSet WebUsers => Set(); + public DbSet Tokens => Set(); public DbSet Organisations => Set(); public DbSet Events => Set(); public DbSet Skills => Set(); public DbSet VolunteerSkills => Set(); public DbSet EventSkills => Set(); public DbSet EventRegistrations => Set(); + public DbSet Messages => Set(); + public DbSet MessagesActivities => Set(); protected override void OnModelCreating(ModelBuilder builder) { @@ -31,7 +35,10 @@ namespace WebApp.Data .HasKey(es => new { es.EventId, es.SkillId }); builder.Entity() - .HasKey(er => new { er.UserId, er.EventId }); + .HasKey(er => new { er.VolunteerId, er.EventId }); + + builder.Entity() + .HasKey(ma => new { ma.Sender, ma.Recipient }); } } } diff --git a/WebApp/Endpoints/EventsEndpoints.cs b/WebApp/Endpoints/EventsEndpoints.cs index bcfd761..32a2faf 100644 --- a/WebApp/Endpoints/EventsEndpoints.cs +++ b/WebApp/Endpoints/EventsEndpoints.cs @@ -1,4 +1,5 @@ -using Microsoft.EntityFrameworkCore; +using Microsoft.AspNetCore.Http; +using Microsoft.EntityFrameworkCore; using WebApp.Data; using WebApp.DTOs; using WebApp.Entities; @@ -8,7 +9,7 @@ namespace WebApp.Endpoints { public static class EventsEndpoints { - const string GetEventEndpointName = "GetEvent"; + const string GetEventEndpointName = "GetEvent"; public static RouteGroupBuilder MapEventsEndpoints(this WebApplication app) { @@ -16,7 +17,8 @@ namespace WebApp.Endpoints .WithParameterValidation(); // GET /events - group.MapGet("/", async (ApplicationDbContext dbContext) => + group.MapGet("/", + async (ApplicationDbContext dbContext, HttpContext httpContext) => await dbContext.Events .Include(Eve => Eve.Organisation) .OrderByDescending(Eve => Eve.EventId) @@ -25,7 +27,8 @@ namespace WebApp.Endpoints .ToListAsync()); // GET /events/1 - group.MapGet("/{id}", async (int id, ApplicationDbContext dbContext) => + group.MapGet("/{id}", + async (int id, ApplicationDbContext dbContext, HttpContext httpContext) => { Event? Eve = await dbContext.Events.FindAsync(id); @@ -44,11 +47,14 @@ namespace WebApp.Endpoints .WithName(GetEventEndpointName); // POST /events - group.MapPost("/", async (EventCreateDto newEvent, ApplicationDbContext dbContext) => + group.MapPost("/", + async (EventCreateDto newEvent, ApplicationDbContext dbContext, HttpContext httpContext, GeneralUseHelpers guhf) => { // Uzyskaj organizację z tokenu - // ... + Token? token = await guhf.GetTokenFromHTTPContext(httpContext); + Organisation? org = await guhf.GetOrganisationFromToken(token); + if (org is null) return Results.StatusCode(403); Event Eve = newEvent.ToEntity(); @@ -66,18 +72,21 @@ namespace WebApp.Endpoints }); // PUT /events/1 - group.MapPut("/{id}", async (int id, EventUpdateDto updatedEvent, ApplicationDbContext dbContext) => + group.MapPut("/{id}", + async (int id, EventUpdateDto updatedEvent, ApplicationDbContext dbContext, GeneralUseHelpers guhf, HttpContext httpContext) => { - var existingEvent = await dbContext.Events.FindAsync(id); + // Uzyskaj organizację z tokenu + Token? token = await guhf.GetTokenFromHTTPContext(httpContext); + Organisation? org = await guhf.GetOrganisationFromToken(token); + if (org is null) return Results.StatusCode(403); + + var existingEvent = await dbContext.Events.FindAsync(id); if (existingEvent is null) { return Results.NotFound(); } - // Uzyskaj organizację z tokenu - // ... - // Sprawdź, czy organizacja ma prawo // do zmodyfikowania tego (EventId = id) eventu. // ... @@ -101,11 +110,14 @@ namespace WebApp.Endpoints }); // DELETE /events/1 - group.MapDelete("/{id}", async (int id, ApplicationDbContext dbContext) => + group.MapDelete("/{id}", + async (int id, ApplicationDbContext dbContext, GeneralUseHelpers guhf, HttpContext httpContext) => { // Uzyskaj organizację z tokenu - // ... + Token? token = await guhf.GetTokenFromHTTPContext(httpContext); + Organisation? org = await guhf.GetOrganisationFromToken(token); + if (org is null) return Results.StatusCode(403); // Sprawdź, czy organizacja ma prawo // do usunięcia tego (EventId = id) eventu. diff --git a/WebApp/Endpoints/GeneralUseHelperFunctions.cs b/WebApp/Endpoints/GeneralUseHelperFunctions.cs new file mode 100644 index 0000000..c20a687 --- /dev/null +++ b/WebApp/Endpoints/GeneralUseHelperFunctions.cs @@ -0,0 +1,69 @@ +using Microsoft.EntityFrameworkCore; +using WebApp.Data; +using WebApp.Entities; + +namespace WebApp.Endpoints; + +public class GeneralUseHelpers +{ + + private readonly ApplicationDbContext _context; + + public GeneralUseHelpers(ApplicationDbContext context) + { + _context = context; + } + + async public Task FindTokenFromString(string token_str) + { + // foreach (Token t in _context.Tokens) if (t.Value == token) return t; + // return null; + return await _context.Tokens.FirstOrDefaultAsync(t => t.Value == token_str); + } + + async public Task GetUserFromToken(Token? t) + { + // Zwróci null, gdy nie znaleziono użytkownika + if (t is null) return null; + User? user = await _context.WebUsers.FindAsync(t.Value); + + return user; + } + + async public Task GetOrganisationFromToken(Token? t) + { + User? user = await GetUserFromToken(t); + if (user is not null && user.IsOrganisation) + { + Organisation? org = await _context.Organisations.FindAsync(t.UserId); + + if (org is null) + { + Console.WriteLine("!!!"); + } + + return org; + } + else return null; + + } + + public string? GetTokenStrFromHTTPContext(HttpContext httpContext) + { + var cookies = httpContext.Request.Cookies; + string? token = cookies["token"]; + return token; + } + + async public Task GetTokenFromHTTPContext(HttpContext httpContext) + { + var cookies = httpContext.Request.Cookies; + string? token_str = cookies["token"]; + if (token_str is not null) + { + Token? token = await FindTokenFromString(token_str); + if (token is not null) return token; + } + return null; + } +} diff --git a/WebApp/Entities/EventRegistration.cs b/WebApp/Entities/EventRegistration.cs index 6ade633..759bc6c 100644 --- a/WebApp/Entities/EventRegistration.cs +++ b/WebApp/Entities/EventRegistration.cs @@ -3,7 +3,7 @@ public class EventRegistration { public int EventId { get; set; } - public required string UserId { get; set; } + public required int VolunteerId { get; set; } public DateTime RegisteredAt { get; set; } = DateTime.UtcNow; public Event? Event { get; set; } public User? User { get; set; } diff --git a/WebApp/Entities/Message.cs b/WebApp/Entities/Message.cs new file mode 100644 index 0000000..3d38667 --- /dev/null +++ b/WebApp/Entities/Message.cs @@ -0,0 +1,13 @@ +namespace WebApp.Entities +{ + public class Message + { + public int MessageId { get; set; } + public int EventType { get; set; } + public int VolunteerId { get; set; } + public int OrganizationId { get; set; } + public bool IsMsgFromVolunteer { get; set; } + public DateTime IsoDate { get; set; } + public string? Content { get; set; } + } +} diff --git a/WebApp/Entities/MessageActivity.cs b/WebApp/Entities/MessageActivity.cs new file mode 100644 index 0000000..8545e2b --- /dev/null +++ b/WebApp/Entities/MessageActivity.cs @@ -0,0 +1,9 @@ +namespace WebApp.Entities +{ + public class MessageActivity + { + public int Recipient { get; set; } + public int Sender { get; set; } + public DateTime RecipientLastActive { get; set; } + } +} diff --git a/WebApp/Entities/Organisation.cs b/WebApp/Entities/Organisation.cs index 36804a0..785baee 100644 --- a/WebApp/Entities/Organisation.cs +++ b/WebApp/Entities/Organisation.cs @@ -3,7 +3,7 @@ public class Organisation { public int OrganisationId { get; set; } - public required string UserId { get; set; } + public required int UserId { get; set; } public required string Name { get; set; } public string? Description { get; set; } public string? Website { get; set; } diff --git a/WebApp/Entities/Token.cs b/WebApp/Entities/Token.cs new file mode 100644 index 0000000..916dd89 --- /dev/null +++ b/WebApp/Entities/Token.cs @@ -0,0 +1,10 @@ +namespace WebApp.Entities +{ + public class Token + { + public int TokenId { get; set; } + public required int UserId { get; set; } + public required DateTime ValidUntil { get; set; } + public string? Value { get; set; } + } +} \ No newline at end of file diff --git a/WebApp/Entities/User.cs b/WebApp/Entities/User.cs index 75b84dd..b97d317 100644 --- a/WebApp/Entities/User.cs +++ b/WebApp/Entities/User.cs @@ -1,9 +1,14 @@ using Microsoft.AspNetCore.Identity; +using System.ComponentModel.DataAnnotations; namespace WebApp.Entities { - public class User : IdentityUser + public class User //: IdentityUser { + public int UserId { get; set; } + public string? Email { get; set; } + public string? Password { get; set; } + public required string FirstName { get; set; } public required string LastName { get; set; } public bool IsOrganisation { get; set; } = false; @@ -11,5 +16,6 @@ namespace WebApp.Entities public ICollection VolunteerSkills { get; set; } = new List(); public ICollection EventRegistrations { get; set; } = new List(); + public ICollection Tokens { get; set; } = new List(); } } diff --git a/WebApp/Entities/VolunteerSkill.cs b/WebApp/Entities/VolunteerSkill.cs index 5e05366..1489d24 100644 --- a/WebApp/Entities/VolunteerSkill.cs +++ b/WebApp/Entities/VolunteerSkill.cs @@ -2,7 +2,7 @@ { public class VolunteerSkill { - public required string UserId { get; set; } + public required int UserId { get; set; } public int SkillId { get; set; } public User? User { get; set; } diff --git a/WebApp/Migrations/20250408112459_InitialDataStore.Designer.cs b/WebApp/Migrations/20250408112459_InitialDataStore.Designer.cs deleted file mode 100644 index 448dbaf..0000000 --- a/WebApp/Migrations/20250408112459_InitialDataStore.Designer.cs +++ /dev/null @@ -1,281 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using WebApp.Data; - -#nullable disable - -namespace WebApp.Migrations -{ - [DbContext(typeof(ApplicationDbContext))] - [Migration("20250408112459_InitialDataStore")] - partial class InitialDataStore - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("RoleId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("AccessFailedCount") - .HasColumnType("integer"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("EmailConfirmed") - .HasColumnType("boolean"); - - b.Property("LockoutEnabled") - .HasColumnType("boolean"); - - b.Property("LockoutEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("PasswordHash") - .HasColumnType("text"); - - b.Property("PhoneNumber") - .HasColumnType("text"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("boolean"); - - b.Property("SecurityStamp") - .HasColumnType("text"); - - b.Property("TwoFactorEnabled") - .HasColumnType("boolean"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.ToTable("AspNetUsers", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("ProviderKey") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("ProviderDisplayName") - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("RoleId") - .HasColumnType("text"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("Name") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("Value") - .HasColumnType("text"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/WebApp/Migrations/20250408112459_InitialDataStore.cs b/WebApp/Migrations/20250408112459_InitialDataStore.cs deleted file mode 100644 index 73f3c55..0000000 --- a/WebApp/Migrations/20250408112459_InitialDataStore.cs +++ /dev/null @@ -1,223 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace WebApp.Migrations -{ - /// - public partial class InitialDataStore : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "AspNetRoles", - columns: table => new - { - Id = table.Column(type: "text", nullable: false), - Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), - NormalizedName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), - ConcurrencyStamp = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetRoles", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AspNetUsers", - columns: table => new - { - Id = table.Column(type: "text", nullable: false), - UserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), - NormalizedUserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), - Email = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), - NormalizedEmail = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), - EmailConfirmed = table.Column(type: "boolean", nullable: false), - PasswordHash = table.Column(type: "text", nullable: true), - SecurityStamp = table.Column(type: "text", nullable: true), - ConcurrencyStamp = table.Column(type: "text", nullable: true), - PhoneNumber = table.Column(type: "text", nullable: true), - PhoneNumberConfirmed = table.Column(type: "boolean", nullable: false), - TwoFactorEnabled = table.Column(type: "boolean", nullable: false), - LockoutEnd = table.Column(type: "timestamp with time zone", nullable: true), - LockoutEnabled = table.Column(type: "boolean", nullable: false), - AccessFailedCount = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetUsers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AspNetRoleClaims", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - RoleId = table.Column(type: "text", nullable: false), - ClaimType = table.Column(type: "text", nullable: true), - ClaimValue = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id); - table.ForeignKey( - name: "FK_AspNetRoleClaims_AspNetRoles_RoleId", - column: x => x.RoleId, - principalTable: "AspNetRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AspNetUserClaims", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "text", nullable: false), - ClaimType = table.Column(type: "text", nullable: true), - ClaimValue = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetUserClaims", x => x.Id); - table.ForeignKey( - name: "FK_AspNetUserClaims_AspNetUsers_UserId", - column: x => x.UserId, - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AspNetUserLogins", - columns: table => new - { - LoginProvider = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), - ProviderKey = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), - ProviderDisplayName = table.Column(type: "text", nullable: true), - UserId = table.Column(type: "text", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey }); - table.ForeignKey( - name: "FK_AspNetUserLogins_AspNetUsers_UserId", - column: x => x.UserId, - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AspNetUserRoles", - columns: table => new - { - UserId = table.Column(type: "text", nullable: false), - RoleId = table.Column(type: "text", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId }); - table.ForeignKey( - name: "FK_AspNetUserRoles_AspNetRoles_RoleId", - column: x => x.RoleId, - principalTable: "AspNetRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AspNetUserRoles_AspNetUsers_UserId", - column: x => x.UserId, - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AspNetUserTokens", - columns: table => new - { - UserId = table.Column(type: "text", nullable: false), - LoginProvider = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), - Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), - Value = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); - table.ForeignKey( - name: "FK_AspNetUserTokens_AspNetUsers_UserId", - column: x => x.UserId, - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_AspNetRoleClaims_RoleId", - table: "AspNetRoleClaims", - column: "RoleId"); - - migrationBuilder.CreateIndex( - name: "RoleNameIndex", - table: "AspNetRoles", - column: "NormalizedName", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AspNetUserClaims_UserId", - table: "AspNetUserClaims", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_AspNetUserLogins_UserId", - table: "AspNetUserLogins", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_AspNetUserRoles_RoleId", - table: "AspNetUserRoles", - column: "RoleId"); - - migrationBuilder.CreateIndex( - name: "EmailIndex", - table: "AspNetUsers", - column: "NormalizedEmail"); - - migrationBuilder.CreateIndex( - name: "UserNameIndex", - table: "AspNetUsers", - column: "NormalizedUserName", - unique: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AspNetRoleClaims"); - - migrationBuilder.DropTable( - name: "AspNetUserClaims"); - - migrationBuilder.DropTable( - name: "AspNetUserLogins"); - - migrationBuilder.DropTable( - name: "AspNetUserRoles"); - - migrationBuilder.DropTable( - name: "AspNetUserTokens"); - - migrationBuilder.DropTable( - name: "AspNetRoles"); - - migrationBuilder.DropTable( - name: "AspNetUsers"); - } - } -} diff --git a/WebApp/Migrations/20250424195335_EventTable.Designer.cs b/WebApp/Migrations/20250424195335_EventTable.Designer.cs deleted file mode 100644 index a0905d5..0000000 --- a/WebApp/Migrations/20250424195335_EventTable.Designer.cs +++ /dev/null @@ -1,308 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using WebApp.Data; - -#nullable disable - -namespace WebApp.Migrations -{ - [DbContext(typeof(ApplicationDbContext))] - [Migration("20250424195335_EventTable")] - partial class EventTable - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("RoleId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("AccessFailedCount") - .HasColumnType("integer"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("EmailConfirmed") - .HasColumnType("boolean"); - - b.Property("LockoutEnabled") - .HasColumnType("boolean"); - - b.Property("LockoutEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("PasswordHash") - .HasColumnType("text"); - - b.Property("PhoneNumber") - .HasColumnType("text"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("boolean"); - - b.Property("SecurityStamp") - .HasColumnType("text"); - - b.Property("TwoFactorEnabled") - .HasColumnType("boolean"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.ToTable("AspNetUsers", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("ProviderKey") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("ProviderDisplayName") - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("RoleId") - .HasColumnType("text"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("Name") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("Value") - .HasColumnType("text"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("WebApp.Entities.Event", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Date") - .HasColumnType("timestamp with time zone"); - - b.Property("Description") - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.Property("Place") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("Events"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/WebApp/Migrations/20250424195335_EventTable.cs b/WebApp/Migrations/20250424195335_EventTable.cs deleted file mode 100644 index f39fd9b..0000000 --- a/WebApp/Migrations/20250424195335_EventTable.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace WebApp.Migrations -{ - /// - public partial class EventTable : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Events", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Name = table.Column(type: "text", nullable: false), - Place = table.Column(type: "text", nullable: false), - Description = table.Column(type: "text", nullable: true), - Date = table.Column(type: "timestamp with time zone", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Events", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Events"); - } - } -} diff --git a/WebApp/Migrations/20250426222859_EventSkillsUsersOrganisations.cs b/WebApp/Migrations/20250426222859_EventSkillsUsersOrganisations.cs deleted file mode 100644 index de4de70..0000000 --- a/WebApp/Migrations/20250426222859_EventSkillsUsersOrganisations.cs +++ /dev/null @@ -1,279 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace WebApp.Migrations -{ - /// - public partial class EventSkillsUsersOrganisations : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.RenameColumn( - name: "Place", - table: "Events", - newName: "Location"); - - migrationBuilder.RenameColumn( - name: "Name", - table: "Events", - newName: "Title"); - - migrationBuilder.RenameColumn( - name: "Date", - table: "Events", - newName: "EventDate"); - - migrationBuilder.RenameColumn( - name: "Id", - table: "Events", - newName: "EventId"); - - migrationBuilder.AddColumn( - name: "OrganisationId", - table: "Events", - type: "integer", - nullable: false, - defaultValue: 0); - - migrationBuilder.AddColumn( - name: "CreatedAt", - table: "AspNetUsers", - type: "timestamp with time zone", - nullable: false, - defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); - - migrationBuilder.AddColumn( - name: "FirstName", - table: "AspNetUsers", - type: "text", - nullable: false, - defaultValue: ""); - - migrationBuilder.AddColumn( - name: "IsOrganisation", - table: "AspNetUsers", - type: "boolean", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "LastName", - table: "AspNetUsers", - type: "text", - nullable: false, - defaultValue: ""); - - migrationBuilder.CreateTable( - name: "EventRegistrations", - columns: table => new - { - EventId = table.Column(type: "integer", nullable: false), - UserId = table.Column(type: "text", nullable: false), - RegisteredAt = table.Column(type: "timestamp with time zone", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_EventRegistrations", x => new { x.UserId, x.EventId }); - table.ForeignKey( - name: "FK_EventRegistrations_AspNetUsers_UserId", - column: x => x.UserId, - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_EventRegistrations_Events_EventId", - column: x => x.EventId, - principalTable: "Events", - principalColumn: "EventId", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Organisations", - columns: table => new - { - OrganisationId = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - UserId = table.Column(type: "text", nullable: false), - Name = table.Column(type: "text", nullable: false), - Description = table.Column(type: "text", nullable: true), - Website = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Organisations", x => x.OrganisationId); - table.ForeignKey( - name: "FK_Organisations_AspNetUsers_UserId", - column: x => x.UserId, - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Skills", - columns: table => new - { - SkillId = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Name = table.Column(type: "text", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Skills", x => x.SkillId); - }); - - migrationBuilder.CreateTable( - name: "EventSkills", - columns: table => new - { - EventId = table.Column(type: "integer", nullable: false), - SkillId = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_EventSkills", x => new { x.EventId, x.SkillId }); - table.ForeignKey( - name: "FK_EventSkills_Events_EventId", - column: x => x.EventId, - principalTable: "Events", - principalColumn: "EventId", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_EventSkills_Skills_SkillId", - column: x => x.SkillId, - principalTable: "Skills", - principalColumn: "SkillId", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "VolunteerSkills", - columns: table => new - { - UserId = table.Column(type: "text", nullable: false), - SkillId = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_VolunteerSkills", x => new { x.UserId, x.SkillId }); - table.ForeignKey( - name: "FK_VolunteerSkills_AspNetUsers_UserId", - column: x => x.UserId, - principalTable: "AspNetUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_VolunteerSkills_Skills_SkillId", - column: x => x.SkillId, - principalTable: "Skills", - principalColumn: "SkillId", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_Events_OrganisationId", - table: "Events", - column: "OrganisationId"); - - migrationBuilder.CreateIndex( - name: "IX_EventRegistrations_EventId", - table: "EventRegistrations", - column: "EventId"); - - migrationBuilder.CreateIndex( - name: "IX_EventSkills_SkillId", - table: "EventSkills", - column: "SkillId"); - - migrationBuilder.CreateIndex( - name: "IX_Organisations_UserId", - table: "Organisations", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_VolunteerSkills_SkillId", - table: "VolunteerSkills", - column: "SkillId"); - - migrationBuilder.AddForeignKey( - name: "FK_Events_Organisations_OrganisationId", - table: "Events", - column: "OrganisationId", - principalTable: "Organisations", - principalColumn: "OrganisationId", - onDelete: ReferentialAction.Cascade); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Events_Organisations_OrganisationId", - table: "Events"); - - migrationBuilder.DropTable( - name: "EventRegistrations"); - - migrationBuilder.DropTable( - name: "EventSkills"); - - migrationBuilder.DropTable( - name: "Organisations"); - - migrationBuilder.DropTable( - name: "VolunteerSkills"); - - migrationBuilder.DropTable( - name: "Skills"); - - migrationBuilder.DropIndex( - name: "IX_Events_OrganisationId", - table: "Events"); - - migrationBuilder.DropColumn( - name: "OrganisationId", - table: "Events"); - - migrationBuilder.DropColumn( - name: "CreatedAt", - table: "AspNetUsers"); - - migrationBuilder.DropColumn( - name: "FirstName", - table: "AspNetUsers"); - - migrationBuilder.DropColumn( - name: "IsOrganisation", - table: "AspNetUsers"); - - migrationBuilder.DropColumn( - name: "LastName", - table: "AspNetUsers"); - - migrationBuilder.RenameColumn( - name: "Title", - table: "Events", - newName: "Name"); - - migrationBuilder.RenameColumn( - name: "Location", - table: "Events", - newName: "Place"); - - migrationBuilder.RenameColumn( - name: "EventDate", - table: "Events", - newName: "Date"); - - migrationBuilder.RenameColumn( - name: "EventId", - table: "Events", - newName: "Id"); - } - } -} diff --git a/WebApp/Migrations/20250428003000_ESUOrev2.Designer.cs b/WebApp/Migrations/20250428003000_ESUOrev2.Designer.cs deleted file mode 100644 index 2bdb893..0000000 --- a/WebApp/Migrations/20250428003000_ESUOrev2.Designer.cs +++ /dev/null @@ -1,526 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using WebApp.Data; - -#nullable disable - -namespace WebApp.Migrations -{ - [DbContext(typeof(ApplicationDbContext))] - [Migration("20250428003000_ESUOrev2")] - partial class ESUOrev2 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("RoleId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("ProviderKey") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("ProviderDisplayName") - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("RoleId") - .HasColumnType("text"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("Name") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("Value") - .HasColumnType("text"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("WebApp.Entities.Event", b => - { - b.Property("EventId") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("EventId")); - - b.Property("Description") - .HasColumnType("text"); - - b.Property("EventDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Location") - .IsRequired() - .HasColumnType("text"); - - b.Property("OrganisationId") - .HasColumnType("integer"); - - b.Property("Title") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("EventId"); - - b.HasIndex("OrganisationId"); - - b.ToTable("Events"); - }); - - modelBuilder.Entity("WebApp.Entities.EventRegistration", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("EventId") - .HasColumnType("integer"); - - b.Property("RegisteredAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("UserId", "EventId"); - - b.HasIndex("EventId"); - - b.ToTable("EventRegistrations"); - }); - - modelBuilder.Entity("WebApp.Entities.EventSkill", b => - { - b.Property("EventId") - .HasColumnType("integer"); - - b.Property("SkillId") - .HasColumnType("integer"); - - b.HasKey("EventId", "SkillId"); - - b.HasIndex("SkillId"); - - b.ToTable("EventSkills"); - }); - - modelBuilder.Entity("WebApp.Entities.Organisation", b => - { - b.Property("OrganisationId") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("OrganisationId")); - - b.Property("Description") - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.Property("Website") - .HasColumnType("text"); - - b.HasKey("OrganisationId"); - - b.HasIndex("UserId"); - - b.ToTable("Organisations"); - }); - - modelBuilder.Entity("WebApp.Entities.Skill", b => - { - b.Property("SkillId") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("SkillId")); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("SkillId"); - - b.ToTable("Skills"); - }); - - modelBuilder.Entity("WebApp.Entities.User", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("AccessFailedCount") - .HasColumnType("integer"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("EmailConfirmed") - .HasColumnType("boolean"); - - b.Property("FirstName") - .IsRequired() - .HasColumnType("text"); - - b.Property("IsOrganisation") - .HasColumnType("boolean"); - - b.Property("LastName") - .IsRequired() - .HasColumnType("text"); - - b.Property("LockoutEnabled") - .HasColumnType("boolean"); - - b.Property("LockoutEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("PasswordHash") - .HasColumnType("text"); - - b.Property("PhoneNumber") - .HasColumnType("text"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("boolean"); - - b.Property("SecurityStamp") - .HasColumnType("text"); - - b.Property("TwoFactorEnabled") - .HasColumnType("boolean"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.ToTable("AspNetUsers", (string)null); - }); - - modelBuilder.Entity("WebApp.Entities.VolunteerSkill", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("SkillId") - .HasColumnType("integer"); - - b.HasKey("UserId", "SkillId"); - - b.HasIndex("SkillId"); - - b.ToTable("VolunteerSkills"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("WebApp.Entities.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("WebApp.Entities.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("WebApp.Entities.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("WebApp.Entities.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("WebApp.Entities.Event", b => - { - b.HasOne("WebApp.Entities.Organisation", "Organisation") - .WithMany("Events") - .HasForeignKey("OrganisationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organisation"); - }); - - modelBuilder.Entity("WebApp.Entities.EventRegistration", b => - { - b.HasOne("WebApp.Entities.Event", "Event") - .WithMany("EventRegistrations") - .HasForeignKey("EventId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("WebApp.Entities.User", "User") - .WithMany("EventRegistrations") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Event"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("WebApp.Entities.EventSkill", b => - { - b.HasOne("WebApp.Entities.Event", "Event") - .WithMany("EventSkills") - .HasForeignKey("EventId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("WebApp.Entities.Skill", "Skill") - .WithMany("EventSkills") - .HasForeignKey("SkillId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Event"); - - b.Navigation("Skill"); - }); - - modelBuilder.Entity("WebApp.Entities.Organisation", b => - { - b.HasOne("WebApp.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("WebApp.Entities.VolunteerSkill", b => - { - b.HasOne("WebApp.Entities.Skill", "Skill") - .WithMany("VolunteerSkills") - .HasForeignKey("SkillId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("WebApp.Entities.User", "User") - .WithMany("VolunteerSkills") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Skill"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("WebApp.Entities.Event", b => - { - b.Navigation("EventRegistrations"); - - b.Navigation("EventSkills"); - }); - - modelBuilder.Entity("WebApp.Entities.Organisation", b => - { - b.Navigation("Events"); - }); - - modelBuilder.Entity("WebApp.Entities.Skill", b => - { - b.Navigation("EventSkills"); - - b.Navigation("VolunteerSkills"); - }); - - modelBuilder.Entity("WebApp.Entities.User", b => - { - b.Navigation("EventRegistrations"); - - b.Navigation("VolunteerSkills"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/WebApp/Migrations/20250428003000_ESUOrev2.cs b/WebApp/Migrations/20250428003000_ESUOrev2.cs deleted file mode 100644 index 6d6d278..0000000 --- a/WebApp/Migrations/20250428003000_ESUOrev2.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace WebApp.Migrations -{ - /// - public partial class ESUOrev2 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - - } - } -} diff --git a/WebApp/Migrations/20250426222859_EventSkillsUsersOrganisations.Designer.cs b/WebApp/Migrations/20250518010555_ESUOrev5.Designer.cs similarity index 80% rename from WebApp/Migrations/20250426222859_EventSkillsUsersOrganisations.Designer.cs rename to WebApp/Migrations/20250518010555_ESUOrev5.Designer.cs index 8e69632..e506b30 100644 --- a/WebApp/Migrations/20250426222859_EventSkillsUsersOrganisations.Designer.cs +++ b/WebApp/Migrations/20250518010555_ESUOrev5.Designer.cs @@ -12,8 +12,8 @@ using WebApp.Data; namespace WebApp.Migrations { [DbContext(typeof(ApplicationDbContext))] - [Migration("20250426222859_EventSkillsUsersOrganisations")] - partial class EventSkillsUsersOrganisations + [Migration("20250518010555_ESUOrev5")] + partial class ESUOrev5 { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -25,7 +25,7 @@ namespace WebApp.Migrations NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("text"); @@ -76,203 +76,7 @@ namespace WebApp.Migrations b.ToTable("AspNetRoleClaims", (string)null); }); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("ProviderKey") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("ProviderDisplayName") - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("RoleId") - .HasColumnType("text"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("Name") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("Value") - .HasColumnType("text"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("WebApp.Entities.Event", b => - { - b.Property("EventId") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("EventId")); - - b.Property("Description") - .HasColumnType("text"); - - b.Property("EventDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Location") - .IsRequired() - .HasColumnType("text"); - - b.Property("OrganisationId") - .HasColumnType("integer"); - - b.Property("Title") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("EventId"); - - b.HasIndex("OrganisationId"); - - b.ToTable("Events"); - }); - - modelBuilder.Entity("WebApp.Entities.EventRegistration", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("EventId") - .HasColumnType("integer"); - - b.Property("RegisteredAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("UserId", "EventId"); - - b.HasIndex("EventId"); - - b.ToTable("EventRegistrations"); - }); - - modelBuilder.Entity("WebApp.Entities.EventSkill", b => - { - b.Property("EventId") - .HasColumnType("integer"); - - b.Property("SkillId") - .HasColumnType("integer"); - - b.HasKey("EventId", "SkillId"); - - b.HasIndex("SkillId"); - - b.ToTable("EventSkills"); - }); - - modelBuilder.Entity("WebApp.Entities.Organisation", b => - { - b.Property("OrganisationId") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("OrganisationId")); - - b.Property("Description") - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.Property("Website") - .HasColumnType("text"); - - b.HasKey("OrganisationId"); - - b.HasIndex("UserId"); - - b.ToTable("Organisations"); - }); - - modelBuilder.Entity("WebApp.Entities.Skill", b => - { - b.Property("SkillId") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("SkillId")); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("SkillId"); - - b.ToTable("Skills"); - }); - - modelBuilder.Entity("WebApp.Entities.User", b => + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => { b.Property("Id") .HasColumnType("text"); @@ -284,9 +88,6 @@ namespace WebApp.Migrations .IsConcurrencyToken() .HasColumnType("text"); - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - b.Property("Email") .HasMaxLength(256) .HasColumnType("character varying(256)"); @@ -294,17 +95,6 @@ namespace WebApp.Migrations b.Property("EmailConfirmed") .HasColumnType("boolean"); - b.Property("FirstName") - .IsRequired() - .HasColumnType("text"); - - b.Property("IsOrganisation") - .HasColumnType("boolean"); - - b.Property("LastName") - .IsRequired() - .HasColumnType("text"); - b.Property("LockoutEnabled") .HasColumnType("boolean"); @@ -350,11 +140,311 @@ namespace WebApp.Migrations b.ToTable("AspNetUsers", (string)null); }); - modelBuilder.Entity("WebApp.Entities.VolunteerSkill", b => + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("ProviderKey") + .HasColumnType("text"); + + b.Property("ProviderDisplayName") + .HasColumnType("text"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("text"); + b.Property("RoleId") + .HasColumnType("text"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("text"); + + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("WebApp.Entities.Event", b => + { + b.Property("EventId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("EventId")); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("EventDate") + .HasColumnType("timestamp with time zone"); + + b.Property("Location") + .IsRequired() + .HasColumnType("text"); + + b.Property("OrganisationId") + .HasColumnType("integer"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("EventId"); + + b.HasIndex("OrganisationId"); + + b.ToTable("Events"); + }); + + modelBuilder.Entity("WebApp.Entities.EventRegistration", b => + { + b.Property("VolunteerId") + .HasColumnType("integer"); + + b.Property("EventId") + .HasColumnType("integer"); + + b.Property("RegisteredAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("VolunteerId", "EventId"); + + b.HasIndex("EventId"); + + b.HasIndex("UserId"); + + b.ToTable("EventRegistrations"); + }); + + modelBuilder.Entity("WebApp.Entities.EventSkill", b => + { + b.Property("EventId") + .HasColumnType("integer"); + + b.Property("SkillId") + .HasColumnType("integer"); + + b.HasKey("EventId", "SkillId"); + + b.HasIndex("SkillId"); + + b.ToTable("EventSkills"); + }); + + modelBuilder.Entity("WebApp.Entities.Message", b => + { + b.Property("MessageId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("MessageId")); + + b.Property("Content") + .HasColumnType("text"); + + b.Property("EventType") + .HasColumnType("integer"); + + b.Property("IsMsgFromVolunteer") + .HasColumnType("boolean"); + + b.Property("IsoDate") + .HasColumnType("timestamp with time zone"); + + b.Property("OrganizationId") + .HasColumnType("integer"); + + b.Property("VolunteerId") + .HasColumnType("integer"); + + b.HasKey("MessageId"); + + b.ToTable("Messages"); + }); + + modelBuilder.Entity("WebApp.Entities.MessageActivity", b => + { + b.Property("Sender") + .HasColumnType("integer"); + + b.Property("Recipient") + .HasColumnType("integer"); + + b.Property("RecipientLastActive") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Sender", "Recipient"); + + b.ToTable("MessagesActivities"); + }); + + modelBuilder.Entity("WebApp.Entities.Organisation", b => + { + b.Property("OrganisationId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("OrganisationId")); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.Property("Website") + .HasColumnType("text"); + + b.HasKey("OrganisationId"); + + b.HasIndex("UserId"); + + b.ToTable("Organisations"); + }); + + modelBuilder.Entity("WebApp.Entities.Skill", b => + { + b.Property("SkillId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("SkillId")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("SkillId"); + + b.ToTable("Skills"); + }); + + modelBuilder.Entity("WebApp.Entities.Token", b => + { + b.Property("TokenId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("TokenId")); + + b.Property("UserId") + .HasColumnType("integer"); + + b.Property("ValidUntil") + .HasColumnType("timestamp with time zone"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("TokenId"); + + b.HasIndex("UserId"); + + b.ToTable("Tokens"); + }); + + modelBuilder.Entity("WebApp.Entities.User", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("UserId")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Email") + .HasColumnType("text"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("text"); + + b.Property("IsOrganisation") + .HasColumnType("boolean"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Password") + .HasColumnType("text"); + + b.HasKey("UserId"); + + b.ToTable("WebUsers"); + }); + + modelBuilder.Entity("WebApp.Entities.VolunteerSkill", b => + { + b.Property("UserId") + .HasColumnType("integer"); + b.Property("SkillId") .HasColumnType("integer"); @@ -367,7 +457,7 @@ namespace WebApp.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) @@ -376,7 +466,7 @@ namespace WebApp.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { - b.HasOne("WebApp.Entities.User", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) @@ -385,7 +475,7 @@ namespace WebApp.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { - b.HasOne("WebApp.Entities.User", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) @@ -394,13 +484,13 @@ namespace WebApp.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("WebApp.Entities.User", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) @@ -409,7 +499,7 @@ namespace WebApp.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { - b.HasOne("WebApp.Entities.User", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) @@ -437,9 +527,7 @@ namespace WebApp.Migrations b.HasOne("WebApp.Entities.User", "User") .WithMany("EventRegistrations") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("UserId"); b.Navigation("Event"); @@ -476,6 +564,15 @@ namespace WebApp.Migrations b.Navigation("User"); }); + modelBuilder.Entity("WebApp.Entities.Token", b => + { + b.HasOne("WebApp.Entities.User", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("WebApp.Entities.VolunteerSkill", b => { b.HasOne("WebApp.Entities.Skill", "Skill") @@ -518,6 +615,8 @@ namespace WebApp.Migrations { b.Navigation("EventRegistrations"); + b.Navigation("Tokens"); + b.Navigation("VolunteerSkills"); }); #pragma warning restore 612, 618 diff --git a/WebApp/Migrations/20250518010555_ESUOrev5.cs b/WebApp/Migrations/20250518010555_ESUOrev5.cs new file mode 100644 index 0000000..a4bea52 --- /dev/null +++ b/WebApp/Migrations/20250518010555_ESUOrev5.cs @@ -0,0 +1,489 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace WebApp.Migrations +{ + /// + public partial class ESUOrev5 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AspNetRoles", + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + NormalizedName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + ConcurrencyStamp = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetRoles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AspNetUsers", + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + UserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + NormalizedUserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + Email = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + NormalizedEmail = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + EmailConfirmed = table.Column(type: "boolean", nullable: false), + PasswordHash = table.Column(type: "text", nullable: true), + SecurityStamp = table.Column(type: "text", nullable: true), + ConcurrencyStamp = table.Column(type: "text", nullable: true), + PhoneNumber = table.Column(type: "text", nullable: true), + PhoneNumberConfirmed = table.Column(type: "boolean", nullable: false), + TwoFactorEnabled = table.Column(type: "boolean", nullable: false), + LockoutEnd = table.Column(type: "timestamp with time zone", nullable: true), + LockoutEnabled = table.Column(type: "boolean", nullable: false), + AccessFailedCount = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Messages", + columns: table => new + { + MessageId = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + EventType = table.Column(type: "integer", nullable: false), + VolunteerId = table.Column(type: "integer", nullable: false), + OrganizationId = table.Column(type: "integer", nullable: false), + IsMsgFromVolunteer = table.Column(type: "boolean", nullable: false), + IsoDate = table.Column(type: "timestamp with time zone", nullable: false), + Content = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Messages", x => x.MessageId); + }); + + migrationBuilder.CreateTable( + name: "MessagesActivities", + columns: table => new + { + Recipient = table.Column(type: "integer", nullable: false), + Sender = table.Column(type: "integer", nullable: false), + RecipientLastActive = table.Column(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_MessagesActivities", x => new { x.Sender, x.Recipient }); + }); + + migrationBuilder.CreateTable( + name: "Skills", + columns: table => new + { + SkillId = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Name = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Skills", x => x.SkillId); + }); + + migrationBuilder.CreateTable( + name: "WebUsers", + columns: table => new + { + UserId = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Email = table.Column(type: "text", nullable: true), + Password = table.Column(type: "text", nullable: true), + FirstName = table.Column(type: "text", nullable: false), + LastName = table.Column(type: "text", nullable: false), + IsOrganisation = table.Column(type: "boolean", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_WebUsers", x => x.UserId); + }); + + migrationBuilder.CreateTable( + name: "AspNetRoleClaims", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + RoleId = table.Column(type: "text", nullable: false), + ClaimType = table.Column(type: "text", nullable: true), + ClaimValue = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id); + table.ForeignKey( + name: "FK_AspNetRoleClaims_AspNetRoles_RoleId", + column: x => x.RoleId, + principalTable: "AspNetRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserClaims", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "text", nullable: false), + ClaimType = table.Column(type: "text", nullable: true), + ClaimValue = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserClaims", x => x.Id); + table.ForeignKey( + name: "FK_AspNetUserClaims_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserLogins", + columns: table => new + { + LoginProvider = table.Column(type: "text", nullable: false), + ProviderKey = table.Column(type: "text", nullable: false), + ProviderDisplayName = table.Column(type: "text", nullable: true), + UserId = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey }); + table.ForeignKey( + name: "FK_AspNetUserLogins_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserRoles", + columns: table => new + { + UserId = table.Column(type: "text", nullable: false), + RoleId = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId }); + table.ForeignKey( + name: "FK_AspNetUserRoles_AspNetRoles_RoleId", + column: x => x.RoleId, + principalTable: "AspNetRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AspNetUserRoles_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserTokens", + columns: table => new + { + UserId = table.Column(type: "text", nullable: false), + LoginProvider = table.Column(type: "text", nullable: false), + Name = table.Column(type: "text", nullable: false), + Value = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); + table.ForeignKey( + name: "FK_AspNetUserTokens_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Organisations", + columns: table => new + { + OrganisationId = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + Name = table.Column(type: "text", nullable: false), + Description = table.Column(type: "text", nullable: true), + Website = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Organisations", x => x.OrganisationId); + table.ForeignKey( + name: "FK_Organisations_WebUsers_UserId", + column: x => x.UserId, + principalTable: "WebUsers", + principalColumn: "UserId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Tokens", + columns: table => new + { + TokenId = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column(type: "integer", nullable: false), + ValidUntil = table.Column(type: "timestamp with time zone", nullable: false), + Value = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Tokens", x => x.TokenId); + table.ForeignKey( + name: "FK_Tokens_WebUsers_UserId", + column: x => x.UserId, + principalTable: "WebUsers", + principalColumn: "UserId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "VolunteerSkills", + columns: table => new + { + UserId = table.Column(type: "integer", nullable: false), + SkillId = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_VolunteerSkills", x => new { x.UserId, x.SkillId }); + table.ForeignKey( + name: "FK_VolunteerSkills_Skills_SkillId", + column: x => x.SkillId, + principalTable: "Skills", + principalColumn: "SkillId", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_VolunteerSkills_WebUsers_UserId", + column: x => x.UserId, + principalTable: "WebUsers", + principalColumn: "UserId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Events", + columns: table => new + { + EventId = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + OrganisationId = table.Column(type: "integer", nullable: false), + Title = table.Column(type: "text", nullable: false), + Description = table.Column(type: "text", nullable: true), + Location = table.Column(type: "text", nullable: false), + EventDate = table.Column(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Events", x => x.EventId); + table.ForeignKey( + name: "FK_Events_Organisations_OrganisationId", + column: x => x.OrganisationId, + principalTable: "Organisations", + principalColumn: "OrganisationId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "EventRegistrations", + columns: table => new + { + EventId = table.Column(type: "integer", nullable: false), + VolunteerId = table.Column(type: "integer", nullable: false), + RegisteredAt = table.Column(type: "timestamp with time zone", nullable: false), + UserId = table.Column(type: "integer", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_EventRegistrations", x => new { x.VolunteerId, x.EventId }); + table.ForeignKey( + name: "FK_EventRegistrations_Events_EventId", + column: x => x.EventId, + principalTable: "Events", + principalColumn: "EventId", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_EventRegistrations_WebUsers_UserId", + column: x => x.UserId, + principalTable: "WebUsers", + principalColumn: "UserId"); + }); + + migrationBuilder.CreateTable( + name: "EventSkills", + columns: table => new + { + EventId = table.Column(type: "integer", nullable: false), + SkillId = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_EventSkills", x => new { x.EventId, x.SkillId }); + table.ForeignKey( + name: "FK_EventSkills_Events_EventId", + column: x => x.EventId, + principalTable: "Events", + principalColumn: "EventId", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_EventSkills_Skills_SkillId", + column: x => x.SkillId, + principalTable: "Skills", + principalColumn: "SkillId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AspNetRoleClaims_RoleId", + table: "AspNetRoleClaims", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "RoleNameIndex", + table: "AspNetRoles", + column: "NormalizedName", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUserClaims_UserId", + table: "AspNetUserClaims", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUserLogins_UserId", + table: "AspNetUserLogins", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUserRoles_RoleId", + table: "AspNetUserRoles", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "EmailIndex", + table: "AspNetUsers", + column: "NormalizedEmail"); + + migrationBuilder.CreateIndex( + name: "UserNameIndex", + table: "AspNetUsers", + column: "NormalizedUserName", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_EventRegistrations_EventId", + table: "EventRegistrations", + column: "EventId"); + + migrationBuilder.CreateIndex( + name: "IX_EventRegistrations_UserId", + table: "EventRegistrations", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_Events_OrganisationId", + table: "Events", + column: "OrganisationId"); + + migrationBuilder.CreateIndex( + name: "IX_EventSkills_SkillId", + table: "EventSkills", + column: "SkillId"); + + migrationBuilder.CreateIndex( + name: "IX_Organisations_UserId", + table: "Organisations", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_Tokens_UserId", + table: "Tokens", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_VolunteerSkills_SkillId", + table: "VolunteerSkills", + column: "SkillId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AspNetRoleClaims"); + + migrationBuilder.DropTable( + name: "AspNetUserClaims"); + + migrationBuilder.DropTable( + name: "AspNetUserLogins"); + + migrationBuilder.DropTable( + name: "AspNetUserRoles"); + + migrationBuilder.DropTable( + name: "AspNetUserTokens"); + + migrationBuilder.DropTable( + name: "EventRegistrations"); + + migrationBuilder.DropTable( + name: "EventSkills"); + + migrationBuilder.DropTable( + name: "Messages"); + + migrationBuilder.DropTable( + name: "MessagesActivities"); + + migrationBuilder.DropTable( + name: "Tokens"); + + migrationBuilder.DropTable( + name: "VolunteerSkills"); + + migrationBuilder.DropTable( + name: "AspNetRoles"); + + migrationBuilder.DropTable( + name: "AspNetUsers"); + + migrationBuilder.DropTable( + name: "Events"); + + migrationBuilder.DropTable( + name: "Skills"); + + migrationBuilder.DropTable( + name: "Organisations"); + + migrationBuilder.DropTable( + name: "WebUsers"); + } + } +} diff --git a/WebApp/Migrations/ApplicationDbContextModelSnapshot.cs b/WebApp/Migrations/ApplicationDbContextModelSnapshot.cs index 46c574d..428e810 100644 --- a/WebApp/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/WebApp/Migrations/ApplicationDbContextModelSnapshot.cs @@ -22,7 +22,7 @@ namespace WebApp.Migrations NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("text"); @@ -73,203 +73,7 @@ namespace WebApp.Migrations b.ToTable("AspNetRoleClaims", (string)null); }); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("ProviderKey") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("ProviderDisplayName") - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("RoleId") - .HasColumnType("text"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("Name") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("Value") - .HasColumnType("text"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("WebApp.Entities.Event", b => - { - b.Property("EventId") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("EventId")); - - b.Property("Description") - .HasColumnType("text"); - - b.Property("EventDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Location") - .IsRequired() - .HasColumnType("text"); - - b.Property("OrganisationId") - .HasColumnType("integer"); - - b.Property("Title") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("EventId"); - - b.HasIndex("OrganisationId"); - - b.ToTable("Events"); - }); - - modelBuilder.Entity("WebApp.Entities.EventRegistration", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("EventId") - .HasColumnType("integer"); - - b.Property("RegisteredAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("UserId", "EventId"); - - b.HasIndex("EventId"); - - b.ToTable("EventRegistrations"); - }); - - modelBuilder.Entity("WebApp.Entities.EventSkill", b => - { - b.Property("EventId") - .HasColumnType("integer"); - - b.Property("SkillId") - .HasColumnType("integer"); - - b.HasKey("EventId", "SkillId"); - - b.HasIndex("SkillId"); - - b.ToTable("EventSkills"); - }); - - modelBuilder.Entity("WebApp.Entities.Organisation", b => - { - b.Property("OrganisationId") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("OrganisationId")); - - b.Property("Description") - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.Property("Website") - .HasColumnType("text"); - - b.HasKey("OrganisationId"); - - b.HasIndex("UserId"); - - b.ToTable("Organisations"); - }); - - modelBuilder.Entity("WebApp.Entities.Skill", b => - { - b.Property("SkillId") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("SkillId")); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("SkillId"); - - b.ToTable("Skills"); - }); - - modelBuilder.Entity("WebApp.Entities.User", b => + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => { b.Property("Id") .HasColumnType("text"); @@ -281,9 +85,6 @@ namespace WebApp.Migrations .IsConcurrencyToken() .HasColumnType("text"); - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - b.Property("Email") .HasMaxLength(256) .HasColumnType("character varying(256)"); @@ -291,17 +92,6 @@ namespace WebApp.Migrations b.Property("EmailConfirmed") .HasColumnType("boolean"); - b.Property("FirstName") - .IsRequired() - .HasColumnType("text"); - - b.Property("IsOrganisation") - .HasColumnType("boolean"); - - b.Property("LastName") - .IsRequired() - .HasColumnType("text"); - b.Property("LockoutEnabled") .HasColumnType("boolean"); @@ -347,11 +137,311 @@ namespace WebApp.Migrations b.ToTable("AspNetUsers", (string)null); }); - modelBuilder.Entity("WebApp.Entities.VolunteerSkill", b => + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("ProviderKey") + .HasColumnType("text"); + + b.Property("ProviderDisplayName") + .HasColumnType("text"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("text"); + b.Property("RoleId") + .HasColumnType("text"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("text"); + + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("WebApp.Entities.Event", b => + { + b.Property("EventId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("EventId")); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("EventDate") + .HasColumnType("timestamp with time zone"); + + b.Property("Location") + .IsRequired() + .HasColumnType("text"); + + b.Property("OrganisationId") + .HasColumnType("integer"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("EventId"); + + b.HasIndex("OrganisationId"); + + b.ToTable("Events"); + }); + + modelBuilder.Entity("WebApp.Entities.EventRegistration", b => + { + b.Property("VolunteerId") + .HasColumnType("integer"); + + b.Property("EventId") + .HasColumnType("integer"); + + b.Property("RegisteredAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("VolunteerId", "EventId"); + + b.HasIndex("EventId"); + + b.HasIndex("UserId"); + + b.ToTable("EventRegistrations"); + }); + + modelBuilder.Entity("WebApp.Entities.EventSkill", b => + { + b.Property("EventId") + .HasColumnType("integer"); + + b.Property("SkillId") + .HasColumnType("integer"); + + b.HasKey("EventId", "SkillId"); + + b.HasIndex("SkillId"); + + b.ToTable("EventSkills"); + }); + + modelBuilder.Entity("WebApp.Entities.Message", b => + { + b.Property("MessageId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("MessageId")); + + b.Property("Content") + .HasColumnType("text"); + + b.Property("EventType") + .HasColumnType("integer"); + + b.Property("IsMsgFromVolunteer") + .HasColumnType("boolean"); + + b.Property("IsoDate") + .HasColumnType("timestamp with time zone"); + + b.Property("OrganizationId") + .HasColumnType("integer"); + + b.Property("VolunteerId") + .HasColumnType("integer"); + + b.HasKey("MessageId"); + + b.ToTable("Messages"); + }); + + modelBuilder.Entity("WebApp.Entities.MessageActivity", b => + { + b.Property("Sender") + .HasColumnType("integer"); + + b.Property("Recipient") + .HasColumnType("integer"); + + b.Property("RecipientLastActive") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Sender", "Recipient"); + + b.ToTable("MessagesActivities"); + }); + + modelBuilder.Entity("WebApp.Entities.Organisation", b => + { + b.Property("OrganisationId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("OrganisationId")); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.Property("Website") + .HasColumnType("text"); + + b.HasKey("OrganisationId"); + + b.HasIndex("UserId"); + + b.ToTable("Organisations"); + }); + + modelBuilder.Entity("WebApp.Entities.Skill", b => + { + b.Property("SkillId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("SkillId")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("SkillId"); + + b.ToTable("Skills"); + }); + + modelBuilder.Entity("WebApp.Entities.Token", b => + { + b.Property("TokenId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("TokenId")); + + b.Property("UserId") + .HasColumnType("integer"); + + b.Property("ValidUntil") + .HasColumnType("timestamp with time zone"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("TokenId"); + + b.HasIndex("UserId"); + + b.ToTable("Tokens"); + }); + + modelBuilder.Entity("WebApp.Entities.User", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("UserId")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Email") + .HasColumnType("text"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("text"); + + b.Property("IsOrganisation") + .HasColumnType("boolean"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Password") + .HasColumnType("text"); + + b.HasKey("UserId"); + + b.ToTable("WebUsers"); + }); + + modelBuilder.Entity("WebApp.Entities.VolunteerSkill", b => + { + b.Property("UserId") + .HasColumnType("integer"); + b.Property("SkillId") .HasColumnType("integer"); @@ -364,7 +454,7 @@ namespace WebApp.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) @@ -373,7 +463,7 @@ namespace WebApp.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { - b.HasOne("WebApp.Entities.User", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) @@ -382,7 +472,7 @@ namespace WebApp.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { - b.HasOne("WebApp.Entities.User", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) @@ -391,13 +481,13 @@ namespace WebApp.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("WebApp.Entities.User", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) @@ -406,7 +496,7 @@ namespace WebApp.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { - b.HasOne("WebApp.Entities.User", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) @@ -434,9 +524,7 @@ namespace WebApp.Migrations b.HasOne("WebApp.Entities.User", "User") .WithMany("EventRegistrations") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("UserId"); b.Navigation("Event"); @@ -473,6 +561,15 @@ namespace WebApp.Migrations b.Navigation("User"); }); + modelBuilder.Entity("WebApp.Entities.Token", b => + { + b.HasOne("WebApp.Entities.User", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("WebApp.Entities.VolunteerSkill", b => { b.HasOne("WebApp.Entities.Skill", "Skill") @@ -515,6 +612,8 @@ namespace WebApp.Migrations { b.Navigation("EventRegistrations"); + b.Navigation("Tokens"); + b.Navigation("VolunteerSkills"); }); #pragma warning restore 612, 618 diff --git a/WebApp/Program.cs b/WebApp/Program.cs index df05866..f2fff0a 100644 --- a/WebApp/Program.cs +++ b/WebApp/Program.cs @@ -15,8 +15,8 @@ builder.Services.AddDbContext(options => builder.Services.AddDatabaseDeveloperPageExceptionFilter(); // Configure Identity -builder.Services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true) - .AddEntityFrameworkStores(); +//builder.Services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true) +// .AddEntityFrameworkStores(); // API Services For Swagger builder.Services.AddEndpointsApiExplorer(); @@ -25,6 +25,8 @@ builder.Services.AddSwaggerGen(c => c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "hermes", Version = "v1" }); }); +builder.Services.AddScoped(); + // Build Application var app = builder.Build(); @@ -45,7 +47,7 @@ app.UseHttpsRedirection(); // Redirects all HTTP requests to HTTPS app.UseDefaultFiles(); // Serves default files (index.html) if no specific file is requested app.UseStaticFiles(); // Serves static files(CSS, JS, Img) from the wwwroot folder. app.UseRouting(); // Enables routing to match incoming request to endpoints -app.UseAuthorization(); +//app.UseAuthorization(); // Map Minimal API Endpoints app.MapEventsEndpoints();