Browse Source

added endpoints for user management

feature/1377_endpoint_for_user_management
meris.ahmatovic 3 years ago
parent
commit
c7e8f700f5

+ 18
- 0
Diligent.WebAPI.Business/Services/AuthenticationService.cs View File



var result = await _userManager.CheckPasswordAsync(user, model.Password); var result = await _userManager.CheckPasswordAsync(user, model.Password);


// return null if user is disabled
if (user.IsEnabled == false)
{
return new ServiceResponseDTO<AuthenticateResponseDto>
{
IsError = true,
ErrorMessage = $"User with email {model.Username} has no permission to log in."
};
}
// password is not correct // password is not correct
if (!result) if (!result)
{ {
ErrorMessage = $"User with email {model.User.email} does not exist in database" ErrorMessage = $"User with email {model.User.email} does not exist in database"
}; };
} }

if (user.IsEnabled == false)
{
return new ServiceResponseDTO<AuthenticateResponseDto>
{
IsError = true,
ErrorMessage = $"User with email {model.User.email} has no permission to log in."
};
}
return await GenerateToken(user); return await GenerateToken(user);
} }



+ 3
- 1
Diligent.WebAPI.Business/Services/Interfaces/IUserService.cs View File

Task<User?> GetById(int id); Task<User?> GetById(int id);


Task CreateUser(CreateUserRequestDto model); Task CreateUser(CreateUserRequestDto model);

Task ToggleEnable(User user);
Task RemoveUser(User user);
} }
} }

+ 13
- 0
Diligent.WebAPI.Business/Services/UserService.cs View File



await _userManager.CreateAsync(user, model.Password); await _userManager.CreateAsync(user, model.Password);
} }
public async Task RemoveUser(User user)
{
await _userManager.DeleteAsync(user);

await _databaseContext.SaveChangesAsync();
}

public async Task ToggleEnable(User user)
{
user.IsEnabled = !user.IsEnabled;

await _databaseContext.SaveChangesAsync();
}
} }
} }

+ 1
- 0
Diligent.WebAPI.Contracts/DTOs/User/UserResponseDTO.cs View File

public string FirstName { get; set; } public string FirstName { get; set; }
public string LastName { get; set; } public string LastName { get; set; }
public string Email { get; set; } public string Email { get; set; }
public bool IsEnabled { get; set; }
//public string CVLink { get; set; } //public string CVLink { get; set; }
//public string Position { get; set; } //public string Position { get; set; }
} }

+ 12
- 0
Diligent.WebAPI.Data/Configurations/UserConfiguration.cs View File

using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace Diligent.WebAPI.Data.Configurations
{
public class UserConfiguration : IEntityTypeConfiguration<User>
{
public void Configure(EntityTypeBuilder<User> builder)
{
builder.Property(c => c.IsEnabled).HasDefaultValue(true);
}
}
}

+ 1
- 0
Diligent.WebAPI.Data/DatabaseContext.cs View File

modelBuilder.ApplyConfiguration(new ApplicantConfiguration()); modelBuilder.ApplyConfiguration(new ApplicantConfiguration());
modelBuilder.ApplyConfiguration(new TechnologyConfiguration()); modelBuilder.ApplyConfiguration(new TechnologyConfiguration());
modelBuilder.ApplyConfiguration(new CommentConfiguration()); modelBuilder.ApplyConfiguration(new CommentConfiguration());
modelBuilder.ApplyConfiguration(new UserConfiguration());
} }
} }

+ 1
- 0
Diligent.WebAPI.Data/Entities/User.cs View File

public string LastName { get; set; } public string LastName { get; set; }
public string? PasswordResetToken { get; set; } public string? PasswordResetToken { get; set; }
public List<Comment> Comments { get; set; } public List<Comment> Comments { get; set; }
public bool IsEnabled { get; set; }
} }

+ 860
- 0
Diligent.WebAPI.Data/Migrations/20221109080857_EnabledUser.Designer.cs View File

// <auto-generated />
using System;
using Diligent.WebAPI.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;

#nullable disable

namespace Diligent.WebAPI.Data.Migrations
{
[DbContext(typeof(DatabaseContext))]
[Migration("20221109080857_EnabledUser")]
partial class EnabledUser
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "6.0.10")
.HasAnnotation("Relational:MaxIdentifierLength", 128);

SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);

modelBuilder.Entity("AdTechnology", b =>
{
b.Property<int>("AdsId")
.HasColumnType("int");

b.Property<int>("TechnologiesTechnologyId")
.HasColumnType("int");

b.HasKey("AdsId", "TechnologiesTechnologyId");

b.HasIndex("TechnologiesTechnologyId");

b.ToTable("AdTechnology");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Ad", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);

b.Property<string>("Conditions")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<DateTime>("CreatedAt")
.HasColumnType("datetime2");

b.Property<DateTime>("ExpiredAt")
.HasColumnType("datetime2");

b.Property<string>("MainLiabilities")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<int>("MinimumExperience")
.HasColumnType("int");

b.Property<string>("Offer")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("Title")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.HasKey("Id");

b.ToTable("Ads");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Applicant", b =>
{
b.Property<int>("ApplicantId")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ApplicantId"), 1L, 1);

b.Property<string>("ApplicationChannel")
.HasColumnType("nvarchar(max)");

b.Property<string>("BitBucketLink")
.HasColumnType("nvarchar(max)");

b.Property<string>("CV")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<DateTime>("DateOfApplication")
.HasColumnType("datetime2");

b.Property<string>("Email")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");

b.Property<int>("Experience")
.HasColumnType("int");

b.Property<string>("FirstName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");

b.Property<string>("GithubLink")
.HasColumnType("nvarchar(max)");

b.Property<string>("LastName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");

b.Property<string>("LinkedlnLink")
.HasColumnType("nvarchar(max)");

b.Property<string>("PhoneNumber")
.IsRequired()
.HasMaxLength(30)
.HasColumnType("nvarchar(30)");

b.Property<string>("Position")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");

b.HasKey("ApplicantId");

b.ToTable("Applicants");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.AppRole", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);

b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");

b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");

b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");

b.HasKey("Id");

b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex")
.HasFilter("[NormalizedName] IS NOT NULL");

b.ToTable("AspNetRoles", (string)null);
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Comment", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);

b.Property<int>("ApplicantId")
.HasColumnType("int");

b.Property<string>("Content")
.IsRequired()
.HasMaxLength(1024)
.HasColumnType("nvarchar(1024)");

b.Property<DateTime>("DateOfSending")
.HasColumnType("datetime2");

b.Property<int>("UserId")
.HasColumnType("int");

b.HasKey("Id");

b.HasIndex("ApplicantId");

b.HasIndex("UserId");

b.ToTable("Comments");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.InsuranceCompany", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"), 1L, 1);

b.Property<string>("City")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("Country")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<DateTime>("CreatedAtUtc")
.HasColumnType("datetime2");

b.Property<DateTime?>("DeletedAtUtc")
.HasColumnType("datetime2");

b.Property<string>("Fax")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("LegalAddress")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("LegalEmail")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("PhoneNumber")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("PostalCode")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<DateTime?>("UpdatedAtUtc")
.HasColumnType("datetime2");

b.HasKey("Id");

b.ToTable("InsuranceCompanies");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.InsurancePolicy", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"), 1L, 1);

b.Property<DateTime>("CreatedAtUtc")
.HasColumnType("datetime2");

b.Property<DateTime?>("DeletedAtUtc")
.HasColumnType("datetime2");

b.Property<DateTime>("EndDate")
.HasColumnType("datetime2");

b.Property<long>("InsurerId")
.HasColumnType("bigint");

b.Property<decimal>("Premium")
.HasColumnType("decimal(18,2)");

b.Property<DateTime>("StartDate")
.HasColumnType("datetime2");

b.Property<string>("Type")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<DateTime?>("UpdatedAtUtc")
.HasColumnType("datetime2");

b.HasKey("Id");

b.HasIndex("InsurerId");

b.ToTable("InsurancePolicies");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Insurer", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"), 1L, 1);

b.Property<string>("Address")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("City")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("Country")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<DateTime>("CreatedAtUtc")
.HasColumnType("datetime2");

b.Property<DateTime>("DateOfBirth")
.HasColumnType("datetime2");

b.Property<DateTime?>("DeletedAtUtc")
.HasColumnType("datetime2");

b.Property<string>("Email")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("FirstName")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<long>("InsuranceCompanyId")
.HasColumnType("bigint");

b.Property<string>("LastName")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("PhoneNumber")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("PostalCode")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<DateTime?>("UpdatedAtUtc")
.HasColumnType("datetime2");

b.HasKey("Id");

b.HasIndex("InsuranceCompanyId");

b.ToTable("Insurers");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.RefreshToken", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);

b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");

b.Property<DateTime>("ExpiryDate")
.HasColumnType("datetime2");

b.Property<bool>("Invalidated")
.HasColumnType("bit");

b.Property<string>("JwtId")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("Token")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<bool>("Used")
.HasColumnType("bit");

b.Property<int>("UserId")
.HasColumnType("int");

b.HasKey("Id");

b.HasIndex("UserId");

b.ToTable("RefreshTokens");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Technology", b =>
{
b.Property<int>("TechnologyId")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("TechnologyId"), 1L, 1);

b.Property<string>("Name")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");

b.HasKey("TechnologyId");

b.ToTable("Technologies");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.TechnologyApplicant", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);

b.Property<int>("ApplicantId")
.HasColumnType("int");

b.Property<int>("TechnologyId")
.HasColumnType("int");

b.HasKey("Id");

b.HasIndex("ApplicantId");

b.HasIndex("TechnologyId");

b.ToTable("ApplicantTechnologies");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.User", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);

b.Property<int>("AccessFailedCount")
.HasColumnType("int");

b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");

b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");

b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");

b.Property<string>("FirstName")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<bool>("IsEnabled")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(true);

b.Property<string>("LastName")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");

b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");

b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");

b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");

b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");

b.Property<string>("PasswordResetToken")
.HasColumnType("nvarchar(max)");

b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");

b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");

b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");

b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");

b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");

b.HasKey("Id");

b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");

b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex")
.HasFilter("[NormalizedUserName] IS NOT NULL");

b.ToTable("AspNetUsers", (string)null);
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.WebhookDefinition", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"), 1L, 1);

b.Property<DateTime>("CreatedAtUtc")
.HasColumnType("datetime2");

b.Property<DateTime?>("DeletedAtUtc")
.HasColumnType("datetime2");

b.Property<string>("Description")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");

b.Property<string>("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");

b.Property<DateTime?>("UpdatedAtUtc")
.HasColumnType("datetime2");

b.HasKey("Id");

b.ToTable("WebhookDefinitions");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.WebhookSubscription", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"), 1L, 1);

b.Property<DateTime>("CreatedAtUtc")
.HasColumnType("datetime2");

b.Property<DateTime?>("DeletedAtUtc")
.HasColumnType("datetime2");

b.Property<bool>("IsActive")
.HasColumnType("bit");

b.Property<DateTime?>("UpdatedAtUtc")
.HasColumnType("datetime2");

b.Property<long>("WebhookDefinitionId")
.HasColumnType("bigint");

b.Property<string>("WebhookURL")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.HasKey("Id");

b.HasIndex("WebhookDefinitionId");

b.ToTable("WebhookSubscriptions");
});

modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<int>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);

b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");

b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");

b.Property<int>("RoleId")
.HasColumnType("int");

b.HasKey("Id");

b.HasIndex("RoleId");

b.ToTable("AspNetRoleClaims", (string)null);
});

modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<int>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);

b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");

b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");

b.Property<int>("UserId")
.HasColumnType("int");

b.HasKey("Id");

b.HasIndex("UserId");

b.ToTable("AspNetUserClaims", (string)null);
});

modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<int>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("nvarchar(450)");

b.Property<string>("ProviderKey")
.HasColumnType("nvarchar(450)");

b.Property<string>("ProviderDisplayName")
.HasColumnType("nvarchar(max)");

b.Property<int>("UserId")
.HasColumnType("int");

b.HasKey("LoginProvider", "ProviderKey");

b.HasIndex("UserId");

b.ToTable("AspNetUserLogins", (string)null);
});

modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<int>", b =>
{
b.Property<int>("UserId")
.HasColumnType("int");

b.Property<int>("RoleId")
.HasColumnType("int");

b.HasKey("UserId", "RoleId");

b.HasIndex("RoleId");

b.ToTable("AspNetUserRoles", (string)null);
});

modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<int>", b =>
{
b.Property<int>("UserId")
.HasColumnType("int");

b.Property<string>("LoginProvider")
.HasColumnType("nvarchar(450)");

b.Property<string>("Name")
.HasColumnType("nvarchar(450)");

b.Property<string>("Value")
.HasColumnType("nvarchar(max)");

b.HasKey("UserId", "LoginProvider", "Name");

b.ToTable("AspNetUserTokens", (string)null);
});

modelBuilder.Entity("AdTechnology", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.Ad", null)
.WithMany()
.HasForeignKey("AdsId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.HasOne("Diligent.WebAPI.Data.Entities.Technology", null)
.WithMany()
.HasForeignKey("TechnologiesTechnologyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Comment", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.Applicant", "Applicant")
.WithMany("Comments")
.HasForeignKey("ApplicantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.HasOne("Diligent.WebAPI.Data.Entities.User", "User")
.WithMany("Comments")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.Navigation("Applicant");

b.Navigation("User");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.InsurancePolicy", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.Insurer", "Insurer")
.WithMany()
.HasForeignKey("InsurerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.Navigation("Insurer");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Insurer", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.InsuranceCompany", "InsuranceCompany")
.WithMany()
.HasForeignKey("InsuranceCompanyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.Navigation("InsuranceCompany");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.RefreshToken", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.User", "User")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.Navigation("User");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.TechnologyApplicant", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.Applicant", "Applicant")
.WithMany("TechnologyApplicants")
.HasForeignKey("ApplicantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.HasOne("Diligent.WebAPI.Data.Entities.Technology", "Technology")
.WithMany("TechnologyApplicants")
.HasForeignKey("TechnologyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.Navigation("Applicant");

b.Navigation("Technology");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.WebhookSubscription", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.WebhookDefinition", "WebhookDefinition")
.WithMany()
.HasForeignKey("WebhookDefinitionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.Navigation("WebhookDefinition");
});

modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<int>", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.AppRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});

modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<int>", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});

modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<int>", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});

modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<int>", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.AppRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.HasOne("Diligent.WebAPI.Data.Entities.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});

modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<int>", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.User", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Applicant", b =>
{
b.Navigation("Comments");

b.Navigation("TechnologyApplicants");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Technology", b =>
{
b.Navigation("TechnologyApplicants");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.User", b =>
{
b.Navigation("Comments");
});
#pragma warning restore 612, 618
}
}
}

+ 26
- 0
Diligent.WebAPI.Data/Migrations/20221109080857_EnabledUser.cs View File

using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace Diligent.WebAPI.Data.Migrations
{
public partial class EnabledUser : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsEnabled",
table: "AspNetUsers",
type: "bit",
nullable: false,
defaultValue: true);
}

protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IsEnabled",
table: "AspNetUsers");
}
}
}

+ 50
- 45
Diligent.WebAPI.Data/Migrations/DatabaseContextModelSnapshot.cs View File

b.ToTable("Applicants"); b.ToTable("Applicants");
}); });


modelBuilder.Entity("Diligent.WebAPI.Data.Entities.ApplicantTechnology", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);

b.Property<int>("ApplicantId")
.HasColumnType("int");

b.Property<int>("TechnologyId")
.HasColumnType("int");

b.HasKey("Id");

b.HasIndex("ApplicantId");

b.HasIndex("TechnologyId");

b.ToTable("ApplicantTechnologies");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.AppRole", b => modelBuilder.Entity("Diligent.WebAPI.Data.Entities.AppRole", b =>
{ {
b.Property<int>("Id") b.Property<int>("Id")
b.ToTable("Technologies"); b.ToTable("Technologies");
}); });


modelBuilder.Entity("Diligent.WebAPI.Data.Entities.TechnologyApplicant", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");

SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);

b.Property<int>("ApplicantId")
.HasColumnType("int");

b.Property<int>("TechnologyId")
.HasColumnType("int");

b.HasKey("Id");

b.HasIndex("ApplicantId");

b.HasIndex("TechnologyId");

b.ToTable("ApplicantTechnologies");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.User", b => modelBuilder.Entity("Diligent.WebAPI.Data.Entities.User", b =>
{ {
b.Property<int>("Id") b.Property<int>("Id")
.IsRequired() .IsRequired()
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");


b.Property<bool>("IsEnabled")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(true);

b.Property<string>("LastName") b.Property<string>("LastName")
.IsRequired() .IsRequired()
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");
.IsRequired(); .IsRequired();
}); });


modelBuilder.Entity("Diligent.WebAPI.Data.Entities.ApplicantTechnology", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.Applicant", "Applicant")
.WithMany("ApplicantTechnologies")
.HasForeignKey("ApplicantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.HasOne("Diligent.WebAPI.Data.Entities.Technology", "Tecnology")
.WithMany("ApplicantTechnologies")
.HasForeignKey("TechnologyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.Navigation("Applicant");

b.Navigation("Tecnology");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Comment", b => modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Comment", b =>
{ {
b.HasOne("Diligent.WebAPI.Data.Entities.Applicant", "Applicant") b.HasOne("Diligent.WebAPI.Data.Entities.Applicant", "Applicant")
b.Navigation("User"); b.Navigation("User");
}); });


modelBuilder.Entity("Diligent.WebAPI.Data.Entities.TechnologyApplicant", b =>
{
b.HasOne("Diligent.WebAPI.Data.Entities.Applicant", "Applicant")
.WithMany("TechnologyApplicants")
.HasForeignKey("ApplicantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.HasOne("Diligent.WebAPI.Data.Entities.Technology", "Technology")
.WithMany("TechnologyApplicants")
.HasForeignKey("TechnologyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();

b.Navigation("Applicant");

b.Navigation("Technology");
});

modelBuilder.Entity("Diligent.WebAPI.Data.Entities.WebhookSubscription", b => modelBuilder.Entity("Diligent.WebAPI.Data.Entities.WebhookSubscription", b =>
{ {
b.HasOne("Diligent.WebAPI.Data.Entities.WebhookDefinition", "WebhookDefinition") b.HasOne("Diligent.WebAPI.Data.Entities.WebhookDefinition", "WebhookDefinition")


modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Applicant", b => modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Applicant", b =>
{ {
b.Navigation("ApplicantTechnologies");

b.Navigation("Comments"); b.Navigation("Comments");

b.Navigation("TechnologyApplicants");
}); });


modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Technology", b => modelBuilder.Entity("Diligent.WebAPI.Data.Entities.Technology", b =>
{ {
b.Navigation("ApplicantTechnologies");
b.Navigation("TechnologyApplicants");
}); });


modelBuilder.Entity("Diligent.WebAPI.Data.Entities.User", b => modelBuilder.Entity("Diligent.WebAPI.Data.Entities.User", b =>

+ 32
- 0
Diligent.WebAPI.Host/Controllers/V1/UsersController.cs View File

} }


[Authorize] [Authorize]
[HttpPost("toggleEnable/{id}")]
public async Task<IActionResult> ToggleEnable(int id)
{
var user = await _userService.GetById(id);

if (user == null)
{
return BadRequest("User not found");
}

await _userService.ToggleEnable(user);

return Ok(user.Id);
}

[Authorize]
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteUser(int id)
{
var user = await _userService.GetById(id);

if (user == null)
{
return BadRequest("User not found");
}

await _userService.RemoveUser(user);

return Ok(user.Id);
}

//[Authorize]
[HttpPost] [HttpPost]
public async Task<IActionResult> CreateUser([FromBody] CreateUserRequestDto model) public async Task<IActionResult> CreateUser([FromBody] CreateUserRequestDto model)
{ {

Loading…
Cancel
Save