Compare commits

...

5 Commits

Author SHA1 Message Date
jozsef.b@aycode.com 4bed3bc4f4 Add UserDbContext, UserDbDal, DbTestPage, etc... 2023-11-24 00:29:16 +01:00
jozsef.b@aycode.com 4ba61ba048 merge 2023-11-23 22:51:41 +01:00
jozsef.b@aycode.com 499b1a7c59 improvements 2023-11-23 22:51:06 +01:00
jozsef.b@aycode.com f33d792803 Merge branch 'master' of http://git2.aycode.com/Adam/TourIAm 2023-11-23 22:38:24 +01:00
jozsef.b@aycode.com 690332d5b5 database improvements... 2023-11-23 22:38:17 +01:00
39 changed files with 535 additions and 85 deletions

6
TIAM.Core/ProductType.cs Normal file
View File

@ -0,0 +1,6 @@
namespace TIAM.Core;
public enum ProductType : byte
{
}

View File

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@ -1,14 +1,17 @@
using AyCode.Database.Tests;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using TIAM.Database.DbContexts; using TIAM.Database.DbContexts;
namespace TIAM.Database.Test namespace TIAM.Database.Test
{ {
[TestClass] [TestClass]
public class DatabaseTest public class DatabaseTest : DatabaseTestModelBase
{ {
[TestInitialize] [TestInitialize]
public void Setup() public void Setup()
{ {
} }
[TestCleanup] [TestCleanup]

View File

@ -32,9 +32,15 @@
<Reference Include="AyCode.Core.Server"> <Reference Include="AyCode.Core.Server">
<HintPath>..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Core.Server.dll</HintPath> <HintPath>..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Core.Server.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Core.Tests">
<HintPath>..\..\AyCode.Core\AyCode.Database.Tests\bin\Debug\net7.0\AyCode.Core.Tests.dll</HintPath>
</Reference>
<Reference Include="AyCode.Database"> <Reference Include="AyCode.Database">
<HintPath>..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Database.dll</HintPath> <HintPath>..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Database.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Database.Tests">
<HintPath>..\..\AyCode.Core\AyCode.Database.Tests\bin\Debug\net7.0\AyCode.Database.Tests.dll</HintPath>
</Reference>
<Reference Include="AyCode.Entities"> <Reference Include="AyCode.Entities">
<HintPath>..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Entities.dll</HintPath> <HintPath>..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Entities.dll</HintPath>
</Reference> </Reference>

View File

@ -0,0 +1,17 @@
using AyCode.Database;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TIAM.Database.DbContexts;
namespace TIAM.Database.DataLayers;
public class TiamDalBase<TDbContext> : DalBase<TDbContext> where TDbContext : TiamDbContextBase
{
//public TiamDalBase() : base(new TransferDestinationDbContext("DeveloperDbConnection"))
//{
// Ctx.Database. }
}

View File

@ -3,10 +3,16 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using AyCode.Database;
using Microsoft.Identity.Client;
using TIAM.Database.DbContexts;
using TIAM.Entities.TransferDestinations;
namespace TIAM.Database.DataLayers.TransferDestinations namespace TIAM.Database.DataLayers.TransferDestinations;
public class TransferDestinationDal : TiamDalBase<TransferDestinationDbContext>
{ {
internal class TransferDestinationDal public TransferDestinationDal() : base()
{ {
} }
} }

View File

@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using TIAM.Database.DbContexts;
using TIAM.Entities.Users;
namespace TIAM.Database.DataLayers.Users
{
public class UserDal : TiamDalBase<UserDbContext>
{
public UserDal() : base()
{
}
public Task<List<User>> GetUsersAsync()
{
return Ctx.Users.ToListAsync();
}
public Task<User?> GetUserByEmailAsync(string email)
{
var emailLower = email.ToLower();
return Ctx.Users.SingleOrDefaultAsync(x=>x.Email.ToLower() == emailLower);
}
}
}

View File

@ -6,6 +6,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using AyCode.Database.DbContexts; using AyCode.Database.DbContexts;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
namespace TIAM.Database.DbContexts namespace TIAM.Database.DbContexts
{ {
@ -28,8 +29,9 @@ namespace TIAM.Database.DbContexts
{ {
base.OnConfiguring(optionsBuilder); base.OnConfiguring(optionsBuilder);
//var connString = "Data Source=185.51.190.197;Initial Catalog=TIAM_DEV;Trusted_Connection=false;Encrypt=false;TrustServerCertificate=True;Connect Timeout=200;User ID=Anata_Development_Team;Password=v6f_?xNfg9N1;MultipleActiveResultSets=true"; //optionsBuilder.UseSqlServer(Configuration.GetConnectionString("DeveloperDbConnection"));
//optionsBuilder.UseSqlServer(connString); var connString = "Data Source=185.51.190.197;Initial Catalog=TIAM_DEV;Trusted_Connection=false;Encrypt=false;TrustServerCertificate=True;Connect Timeout=200;User ID=Anata_Development_Team;Password=v6f_?xNfg9N1;MultipleActiveResultSets=true";
optionsBuilder.UseSqlServer(connString);
} }
} }
} }

View File

@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AyCode.Database.DbContexts;
using Microsoft.EntityFrameworkCore;
using TIAM.Entities.TransferDestinations;
using TIAM.Entities.Users;
namespace TIAM.Database.DbContexts
{
public class UserDbContext : TiamDbContextBase
{
public DbSet<User> Users { get; set; }
public UserDbContext() //: this(string.Empty)
{
}
public UserDbContext(string name) : base(name)
{
}
public UserDbContext(DbContextOptions<DbContext> options, string name) : base(options, name)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
}
}
}

View File

@ -0,0 +1,22 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using AyCode.Entities.Interfaces;
using AyCode.Interfaces.TimeStampInfo;
namespace TIAM.Entities.Permissions;
[Table("PermissionContextMapping")]
public class PermissionContextMapping : IEntityGuid, ITimeStampInfo
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
public Guid ContextId { get; set; }
public Guid SubjectId { get; set; }
public short SubjectType { get; set; }
public int Permissions { get; set; }
public bool IsBuiltin { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -0,0 +1,19 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using AyCode.Entities.Interfaces;
using AyCode.Interfaces.TimeStampInfo;
namespace TIAM.Entities.Permissions;
[Table("PermissionGroups")]
public class PermissionGroup : IEntityGuid, ITimeStampInfo
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
string GroupName { get; set; }
bool IsBuiltin { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -0,0 +1,18 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using AyCode.Entities.Interfaces;
using AyCode.Interfaces.TimeStampInfo;
namespace TIAM.Entities.Permissions;
[Table("PermissionGroupUserMapping")]
public class PermissionGroupUserMapping : IEntityGuid, ITimeStampInfo
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
public Guid UserId { get; set; }
public Guid PermissionContextMappingId { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -0,0 +1,21 @@

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using AyCode.Entities.Interfaces;
using AyCode.Interfaces.TimeStampInfo;
namespace TIAM.Entities.Permissions;
[Table("PermissionsTypes")]
public class PermissionsType : IEntityGuid, ITimeStampInfo
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
public Guid ContextId { get; set; }
public string PermissionName { get; set; }
public int PermissionBit { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -0,0 +1,25 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using AyCode.Entities.Interfaces;
using AyCode.Interfaces.TimeStampInfo;
using TIAM.Core;
namespace TIAM.Entities.Products;
[Table("Product")]
public class Product : IEntityGuid, ITimeStampInfo
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
public ProductType ProductType { get; set; }
public Guid UsermediaId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public float Price { get; set; }
public string JsonDetails { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -0,0 +1,19 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using AyCode.Entities.Interfaces;
using AyCode.Interfaces.TimeStampInfo;
namespace TIAM.Entities.Products;
[Table("ServiceProvider")]
public class ServiceProvider : IEntityGuid, ITimeStampInfo
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
public Guid OwnerId { get; set; }
public string Name { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -27,4 +27,8 @@
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<ProjectReference Include="..\TIAM.Core\TIAM.Core.csproj" />
</ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,20 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using AyCode.Entities.Interfaces;
using AyCode.Interfaces.TimeStampInfo;
namespace TIAM.Entities.Users;
[Table("AssignedUser")]
public class AssignedUser : IEntityGuid, ITimeStampInfo
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
public Guid ProductId { get; set; }
public Guid EmployeeUserId { get; set; }
public int UserRoles { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AyCode.Entities.Users;
namespace TIAM.Entities.Users
{
public class User : UserBase
{
public User() { }
public User(string email, string password) : this(Guid.NewGuid(), email, password) { }
public User(Guid id, string email, string password) : base(id, email, password)
{ }
}
}

View File

@ -6,13 +6,13 @@
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap rescap"> IgnorableNamespaces="uap rescap">
<Identity Name="maui-package-name-placeholder" Publisher="CN=User Name" Version="0.0.0.0" /> <Identity Name="maui-package-name-placeholder" Publisher="CN=UserModel Name" Version="0.0.0.0" />
<mp:PhoneIdentity PhoneProductId="D715EEC2-0430-4284-94A2-9EC92B64BE9F" PhonePublisherId="00000000-0000-0000-0000-000000000000"/> <mp:PhoneIdentity PhoneProductId="D715EEC2-0430-4284-94A2-9EC92B64BE9F" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
<Properties> <Properties>
<DisplayName>$placeholder$</DisplayName> <DisplayName>$placeholder$</DisplayName>
<PublisherDisplayName>User Name</PublisherDisplayName> <PublisherDisplayName>UserModel Name</PublisherDisplayName>
<Logo>$placeholder$.png</Logo> <Logo>$placeholder$.png</Logo>
</Properties> </Properties>

View File

@ -2,6 +2,7 @@
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Net.Http.Json; using System.Net.Http.Json;
using System.Text; using System.Text;
using TIAM.Entities.Users;
using TIAMWebApp.Shared.Application.Interfaces; using TIAMWebApp.Shared.Application.Interfaces;
using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models;
using TIAMWebApp.Shared.Application.Models.ClientSide; using TIAMWebApp.Shared.Application.Models.ClientSide;
@ -14,7 +15,7 @@ namespace TIAMMobilApp.Services
{ {
private readonly HttpClient http; private readonly HttpClient http;
private readonly ISecureStorageHandler secureStorageHandler; private readonly ISecureStorageHandler secureStorageHandler;
public User? User { get; set; } = new User("", "", ""); public UserModel? User { get; set; } = new UserModel("", "", "");
public Dictionary<int, string> userRoleTypes { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public Dictionary<int, string> userRoleTypes { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
public UserDataService(HttpClient http, ISecureStorageHandler secureStorageHandler) public UserDataService(HttpClient http, ISecureStorageHandler secureStorageHandler)
@ -39,11 +40,11 @@ namespace TIAMMobilApp.Services
}; };
public async Task<User> IsLoggedInAsync() public async Task<UserModel> IsLoggedInAsync()
{ {
if (User == null) if (User == null)
{ {
User = new User("", "", ""); User = new UserModel("", "", "");
User.IsLoggedIn = false; User.IsLoggedIn = false;
User.UserType = UserType.User; User.UserType = UserType.User;
return User; return User;
@ -57,11 +58,11 @@ namespace TIAMMobilApp.Services
} }
//Mock method for now //Mock method for now
public async Task<User> AuthorizeUserAsync(int userType) public async Task<UserModel> AuthorizeUserAsync(int userType)
{ {
if (User == null) if (User == null)
{ {
User = new User("", "", ""); User = new UserModel("", "", "");
} }
//simply return true for now //simply return true for now
User.IsLoggedIn = true; User.IsLoggedIn = true;
@ -126,6 +127,16 @@ namespace TIAMMobilApp.Services
return (isSuccess, result); return (isSuccess, result);
} }
public Task<IEnumerable<User>> GetUsersAsync()
{
throw new NotImplementedException();
}
public Task<User> GetUserByEmailAsync(string email)
{
throw new NotImplementedException();
}
public async Task<bool> RefreshToken() public async Task<bool> RefreshToken()
{ {
bool isTokenRefreshed = false; bool isTokenRefreshed = false;
@ -169,10 +180,10 @@ namespace TIAMMobilApp.Services
} }
public Task<Dictionary<int, string>> GetUserRolesAsync(User user) public Task<Dictionary<int, string>> GetUserRolesAsync(UserModel userModel)
{ {
//get the user's roles //get the userModel's roles
int role = User.UserRoles; int role = User.UserRoles;
foreach (var roleType in roleTypes) foreach (var roleType in roleTypes)

View File

@ -59,4 +59,16 @@
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" VersionOverride="7.0.1" Version="7.0.1" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" VersionOverride="7.0.1" Version="7.0.1" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Reference Include="AyCode.Core">
<HintPath>..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Core.dll</HintPath>
</Reference>
<Reference Include="AyCode.Entities">
<HintPath>..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Entities.dll</HintPath>
</Reference>
<Reference Include="AyCode.Interfaces">
<HintPath>..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Interfaces.dll</HintPath>
</Reference>
</ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,20 @@
@if (Users == null)
{
<p>
<em>Loading ...</em>
</p>
}
else
{
<div class="form-field d-flex align-items-center">
@foreach (var dest in Users)
{
<p>@dest.Email</p>
}
</div>
}

View File

@ -0,0 +1,63 @@
using Microsoft.AspNetCore.Components;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TIAM.Entities.Users;
using TIAMWebApp.Shared.Application.Interfaces;
using TIAMWebApp.Shared.Application.Models;
namespace TIAMSharedUI.Pages
{
public partial class DbTestComponent: ComponentBase
{
[Parameter]
public string EmailAddress
{
get;
set;
}
public List<TIAM.Entities.Users.User>? Users
{
get;
set;
}
[Inject]
public IUserDataService UserDataService
{
get;
set;
}
[Parameter]
public string Value
{
get;
set;
}
[Parameter]
public EventCallback<string> ValueChanged
{
get;
set;
}
protected override async Task OnInitializedAsync()
{
Users = (await UserDataService.GetUsersAsync())?.ToList();
}
private Task OnValueChanged(ChangeEventArgs e)
{
Value = e.Value.ToString();
DisplayCard();
return ValueChanged.InvokeAsync(Value);
}
private void DisplayCard()
{
}
}
}

View File

@ -35,7 +35,7 @@
<option value="2" selected>Transfer</option> <option value="2" selected>Transfer</option>
<option value="3" selected>Guide</option> <option value="3" selected>Guide</option>
<option value="4" selected>Admin</option> <option value="4" selected>Admin</option>
<option value="5" selected>User</option> <option value="5" selected>UserModel</option>
<option value="6" selected>Driver</option> <option value="6" selected>Driver</option>
</select> </select>
</div> </div>

View File

@ -0,0 +1,11 @@
@page "/dbtest"
<h3>TestPage</h3>
<ChooseDestination></ChooseDestination>
<hr/>
<DbTestComponent></DbTestComponent>
@code {
}

View File

@ -1,5 +1,5 @@
@inherits LayoutComponentBase @inherits LayoutComponentBase
@using TIAMSharedUI.Shared.User @using TIAMSharedUI.Shared.Users
@using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Models; @using TIAMWebApp.Shared.Application.Models;
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager

View File

@ -14,8 +14,6 @@
<main> <main>
<article class="content"> <article class="content">
@{ @{
if(isUserLoggedIn) if(isUserLoggedIn)

View File

@ -20,4 +20,16 @@
<ProjectReference Include="..\TIAMWebApp\Shared\TIAMWebApp.Shared.Application.csproj" /> <ProjectReference Include="..\TIAMWebApp\Shared\TIAMWebApp.Shared.Application.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Reference Include="AyCode.Core">
<HintPath>..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Core.dll</HintPath>
</Reference>
<Reference Include="AyCode.Entities">
<HintPath>..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Entities.dll</HintPath>
</Reference>
<Reference Include="AyCode.Interfaces">
<HintPath>..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Interfaces.dll</HintPath>
</Reference>
</ItemGroup>
</Project> </Project>

View File

@ -2,6 +2,8 @@
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Net.Http.Json; using System.Net.Http.Json;
using System.Text; using System.Text;
using TIAM.Entities.TransferDestinations;
using TIAM.Entities.Users;
using TIAMWebApp.Shared.Application.Interfaces; using TIAMWebApp.Shared.Application.Interfaces;
using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models;
using TIAMWebApp.Shared.Application.Models.ClientSide; using TIAMWebApp.Shared.Application.Models.ClientSide;
@ -14,7 +16,7 @@ namespace TIAMWebApp.Client.Services
{ {
private readonly HttpClient http; private readonly HttpClient http;
private readonly ISecureStorageHandler secureStorageHandler; private readonly ISecureStorageHandler secureStorageHandler;
public User? User { get; set; } = new User("", "", ""); public UserModel? User { get; set; } = new UserModel("", "", "");
public Dictionary<int, string> userRoleTypes { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public Dictionary<int, string> userRoleTypes { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
public UserDataService(HttpClient http, ISecureStorageHandler secureStorageHandler) public UserDataService(HttpClient http, ISecureStorageHandler secureStorageHandler)
@ -39,11 +41,11 @@ namespace TIAMWebApp.Client.Services
}; };
public async Task<User> IsLoggedInAsync() public async Task<UserModel> IsLoggedInAsync()
{ {
if (User == null) if (User == null)
{ {
User = new User("", "", ""); User = new UserModel("", "", "");
User.IsLoggedIn = false; User.IsLoggedIn = false;
User.UserType = UserType.User; User.UserType = UserType.User;
return User; return User;
@ -57,11 +59,11 @@ namespace TIAMWebApp.Client.Services
} }
//Mock method for now //Mock method for now
public async Task<User> AuthorizeUserAsync(int userType) public async Task<UserModel> AuthorizeUserAsync(int userType)
{ {
if (User == null) if (User == null)
{ {
User = new User("", "", ""); User = new UserModel("", "", "");
} }
//simply return true for now //simply return true for now
User.IsLoggedIn = true; User.IsLoggedIn = true;
@ -126,6 +128,16 @@ namespace TIAMWebApp.Client.Services
return (isSuccess, result); return (isSuccess, result);
} }
public async Task<IEnumerable<User>?> GetUsersAsync()
{
return await http.GetFromJsonAsync<IEnumerable<User>>(APIUrls.GetUsers);
}
public async Task<User?> GetUserByEmailAsync(string email)
{
return await http.GetFromJsonAsync<User?>(APIUrls.GetUserByEmail);
}
public async Task<bool> RefreshToken() public async Task<bool> RefreshToken()
{ {
bool isTokenRefreshed = false; bool isTokenRefreshed = false;
@ -169,10 +181,10 @@ namespace TIAMWebApp.Client.Services
} }
public Task<Dictionary<int, string>> GetUserRolesAsync(User user) public Task<Dictionary<int, string>> GetUserRolesAsync(UserModel userModel)
{ {
//get the user's roles //get the userModel's roles
int role = User.UserRoles; int role = User.UserRoles;
foreach (var roleType in roleTypes) foreach (var roleType in roleTypes)

View File

@ -17,4 +17,16 @@
<ProjectReference Include="..\Shared\TIAMWebApp.Shared.Application.csproj" /> <ProjectReference Include="..\Shared\TIAMWebApp.Shared.Application.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Reference Include="AyCode.Core">
<HintPath>..\..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Core.dll</HintPath>
</Reference>
<Reference Include="AyCode.Entities">
<HintPath>..\..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Entities.dll</HintPath>
</Reference>
<Reference Include="AyCode.Interfaces">
<HintPath>..\..\..\AyCode.Core\AyCode.Database\bin\Debug\net7.0\AyCode.Interfaces.dll</HintPath>
</Reference>
</ItemGroup>
</Project> </Project>

View File

@ -1,6 +1,9 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.Reflection.Metadata; using System.Reflection.Metadata;
using TIAM.Database.DataLayers;
using TIAM.Database.DataLayers.TransferDestinations;
using TIAM.Database.DataLayers.Users;
using TIAM.Database.DbContexts; using TIAM.Database.DbContexts;
using TIAM.Entities.TransferDestinations; using TIAM.Entities.TransferDestinations;
using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models;
@ -24,22 +27,19 @@ namespace TIAMWebApp.Server.Controllers
//}; //};
private readonly TransferDestinationDbContext _transferDestinationDbContext; private readonly TransferDestinationDal _transferDestinationDal;
private readonly ILogger<TransferDataAPIController> _logger; private readonly ILogger<TransferDataAPIController> _logger;
public TransferDataAPIController(ILogger<TransferDataAPIController> logger, TransferDestinationDbContext transferDestinationDbContext) public TransferDataAPIController(ILogger<TransferDataAPIController> logger, TransferDestinationDal transferDestinationDal)
{ {
_logger = logger; _logger = logger;
_transferDestinationDbContext = transferDestinationDbContext; _transferDestinationDal = transferDestinationDal;
} }
[HttpGet] [HttpGet]
public async Task<IEnumerable<TransferDestination>> Get() public async Task<IEnumerable<TransferDestination>> Get()
{ {
//return new JsonResult(await _transferDestinationDbContext.TransferDestinations.ToListAsync()); return await _transferDestinationDal.Ctx.TransferDestinations.ToListAsync();
var result = await _transferDestinationDbContext.TransferDestinations.ToListAsync();
return result;
} }
} }
} }

View File

@ -15,34 +15,39 @@ using TIAMWebApp.Shared.Application.Models.PageModels;
using TIAMWebApp.Server.Models; using TIAMWebApp.Server.Models;
using System.Text; using System.Text;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using TIAM.Database.DataLayers.Users;
using TIAM.Entities.Users;
using TIAMWebApp.Server.ModelsTIAMWebApp.Shared.Application.Models; using TIAMWebApp.Server.ModelsTIAMWebApp.Shared.Application.Models;
namespace TIAMWebApp.Server.Controllers namespace TIAMWebApp.Server.Controllers
{ {
[Authorize] //[Authorize]
[ApiController] [ApiController]
[Route("api/[controller]")] [Route("api/[controller]")]
public class UserAPIController : ControllerBase public class UserAPIController : ControllerBase
{ {
private UserDal _userDal;
private readonly IConfiguration _configuration; private readonly IConfiguration _configuration;
private readonly IWebHostEnvironment _webHostEnvironment; private readonly IWebHostEnvironment _webHostEnvironment;
PasswordHasher hasher = new PasswordHasher(); PasswordHasher hasher = new PasswordHasher();
private User[] users = new User[] private UserModel[] users = new UserModel[]
{ {
new User(new Guid("540271f6-c604-4c16-8160-d5a7cafedf00"), "test@tiam.hu", "+36701234567", "Asdasd123456"), new UserModel(new Guid("540271f6-c604-4c16-8160-d5a7cafedf00"), "test@tiam.hu", "+36701234567", "Asdasd123456"),
new User(new Guid("4cbaed43-2465-4d99-84f1-c8bc6b7025f7"), "adam@tiam.hu", "+36701234567", "Asdasd987654") new UserModel(new Guid("4cbaed43-2465-4d99-84f1-c8bc6b7025f7"), "adam@tiam.hu", "+36701234567", "Asdasd987654")
}; };
private readonly ILogger<UserAPIController> _logger; private readonly ILogger<UserAPIController> _logger;
public UserAPIController(ILogger<UserAPIController> logger, IConfiguration configuration, IWebHostEnvironment webHostEnvironment) public UserAPIController(ILogger<UserAPIController> logger, IConfiguration configuration, IWebHostEnvironment webHostEnvironment, UserDal userDal)
{ {
_logger = logger; _logger = logger;
_configuration = configuration; _configuration = configuration;
_webHostEnvironment = webHostEnvironment; _webHostEnvironment = webHostEnvironment;
_userDal = userDal;
} }
@ -58,19 +63,19 @@ namespace TIAMWebApp.Server.Controllers
} }
else else
{ {
var user = JObject.Parse(SerializedLoginModel.GetRawText()).ToObject<LoginModel>(); var userModel = JObject.Parse(SerializedLoginModel.GetRawText()).ToObject<LoginModel>();
Console.WriteLine(user.Email); Console.WriteLine(userModel.Email);
Console.WriteLine(user.Password); Console.WriteLine(userModel.Password);
if (user.Email == "test@tiam.hu" && user.Password == "Asdasd123456") if (userModel.Email == "test@tiam.hu" && userModel.Password == "Asdasd123456")
{ {
Console.WriteLine("User authenticated"); Console.WriteLine("UserModel authenticated");
return Ok("yes"); return Ok("yes");
} }
else else
{ {
Console.WriteLine("User NOT authenticated"); Console.WriteLine("UserModel NOT authenticated");
return Ok("no"); return Ok("no");
} }
} }
@ -84,15 +89,15 @@ namespace TIAMWebApp.Server.Controllers
var authenticateUser = JObject.Parse(SerializedLoginModel.GetRawText()).ToObject<LoginModel>(); var authenticateUser = JObject.Parse(SerializedLoginModel.GetRawText()).ToObject<LoginModel>();
//check if user exists //check if userModel exists
//var user = await _userManager.FindByNameAsync(authenticateUser.UserName); //var userModel = await _userManager.FindByNameAsync(authenticateUser.UserName);
//if (user == null) return Unauthorized(); //if (userModel == null) return Unauthorized();
//mocking //mocking
var user = users.FirstOrDefault(x => x.Email == authenticateUser.Email); var user = users.FirstOrDefault(x => x.Email == authenticateUser.Email);
//check if password is valid //check if password is valid
//bool isValidUser = await _userManager.CheckPasswordAsync(user, authenticateUser.Password); //bool isValidUser = await _userManager.CheckPasswordAsync(userModel, authenticateUser.Password);
//mocking //mocking
bool isValidUser = false; bool isValidUser = false;
@ -105,13 +110,13 @@ namespace TIAMWebApp.Server.Controllers
if (isValidUser) if (isValidUser)
{ {
Console.WriteLine("User authenticated, let's start JWT"); Console.WriteLine("UserModel authenticated, let's start JWT");
string accessToken = GenerateAccessToken(user); string accessToken = GenerateAccessToken(user);
Console.WriteLine("Generate refresh token"); Console.WriteLine("Generate refresh token");
var refreshToken = GenerateRefreshToken(); var refreshToken = GenerateRefreshToken();
user.RefreshToken = refreshToken; user.RefreshToken = refreshToken;
//Update user with refreshToken!! //Update userModel with refreshToken!!
//await _userManager.UpdateAsync(user); //await _userManager.UpdateAsync(userModel);
var response = new MainResponse var response = new MainResponse
{ {
@ -132,7 +137,7 @@ namespace TIAMWebApp.Server.Controllers
} }
private string GenerateAccessToken(User user) private string GenerateAccessToken(UserModel userModel)
{ {
var tokenHandler = new JwtSecurityTokenHandler(); var tokenHandler = new JwtSecurityTokenHandler();
var token = new JwtSecurityToken(); var token = new JwtSecurityToken();
@ -142,8 +147,8 @@ namespace TIAMWebApp.Server.Controllers
var claims = new List<Claim> var claims = new List<Claim>
{ {
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.NameIdentifier, userModel.Id.ToString()),
new Claim(ClaimTypes.Email, user.Email) new Claim(ClaimTypes.Email, userModel.Email)
}; };
var tokenDescriptor = new SecurityTokenDescriptor var tokenDescriptor = new SecurityTokenDescriptor
@ -177,7 +182,7 @@ namespace TIAMWebApp.Server.Controllers
{ {
var email = principal.Claims.FirstOrDefault(f => f.Type == ClaimTypes.Email); var email = principal.Claims.FirstOrDefault(f => f.Type == ClaimTypes.Email);
//var user = await _userManager.FindByEmailAsync(email?.Value); //var userModel = await _userManager.FindByEmailAsync(email?.Value);
var user = users.FirstOrDefault(x => x.Email == email?.Value); var user = users.FirstOrDefault(x => x.Email == email?.Value);
@ -190,9 +195,9 @@ namespace TIAMWebApp.Server.Controllers
string newAccessToken = GenerateAccessToken(user); string newAccessToken = GenerateAccessToken(user);
string refreshToken = GenerateRefreshToken(); string refreshToken = GenerateRefreshToken();
//mocking - update user with new refreshToken //mocking - update userModel with new refreshToken
user.RefreshToken = refreshToken; user.RefreshToken = refreshToken;
//await _userManager.UpdateAsync(user); //await _userManager.UpdateAsync(userModel);
response.IsSuccess = true; response.IsSuccess = true;
response.Content = new AuthenticationResponse response.Content = new AuthenticationResponse
@ -261,9 +266,9 @@ namespace TIAMWebApp.Server.Controllers
if (users != null) if (users != null)
{ {
//add user to users array //add userModel to users array
Array.Resize(ref users, users.Length + 1); Array.Resize(ref users, users.Length + 1);
users[users.Length - 1] = new User(user.Email, user.PhoneNumber, user.Password); users[users.Length - 1] = new UserModel(user.Email, user.PhoneNumber, user.Password);
return Ok("yes"); return Ok("yes");
} }
else else
@ -294,9 +299,18 @@ namespace TIAMWebApp.Server.Controllers
[HttpGet] [HttpGet]
[Route("GetUsers")] [Route("GetUsers")]
public IEnumerable<Supplier> GetUsers() public Task<List<User?>> GetUsers()
{ {
throw new NotImplementedException(); //var users = await _userDal.Ctx.Users.ToListAsync();//.GetUsersAsync();
//return users;
return _userDal.GetUsersAsync();
}
[HttpGet]
[Route("GetUserByEmail")]
public Task<User?> GetUserByEmail(string email)
{
return _userDal.GetUserByEmailAsync(email);
} }
private bool VerifyPassword(string password, string hashedPassword) private bool VerifyPassword(string password, string hashedPassword)

View File

@ -11,6 +11,8 @@ using System.Text;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models;
using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models;
using TIAM.Database.DataLayers.Users;
using TIAM.Database.DataLayers.TransferDestinations;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
@ -18,7 +20,9 @@ var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews(); builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages(); builder.Services.AddRazorPages();
builder.Services.AddDbContext<TransferDestinationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DeveloperDbConnection")));; //builder.Services.AddDbContext<TransferDestinationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DeveloperDbConnection")));;
builder.Services.AddScoped<UserDal>();
builder.Services.AddScoped<TransferDestinationDal>();
builder.Services.AddSwaggerGen(swagger => builder.Services.AddSwaggerGen(swagger =>
{ {

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using TIAM.Entities.Users;
using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models;
using TIAMWebApp.Shared.Application.Models.PageModels; using TIAMWebApp.Shared.Application.Models.PageModels;
@ -10,20 +11,22 @@ namespace TIAMWebApp.Shared.Application.Interfaces
{ {
public interface IUserDataService public interface IUserDataService
{ {
public User? User { get; set; } public UserModel? User { get; set; }
public Dictionary<int, string> userRoleTypes { get; set; } public Dictionary<int, string> userRoleTypes { get; set; }
public Task<User> IsLoggedInAsync(); public Task<UserModel> IsLoggedInAsync();
//mock method for now //mock method for now
public Task<User> AuthorizeUserAsync(int userType); public Task<UserModel> AuthorizeUserAsync(int userType);
public Task<string> AuthenticateUser(LoginModel loginModel); public Task<string> AuthenticateUser(LoginModel loginModel);
public Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel); public Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel);
public Task<string> TestUserApi(int Param); public Task<string> TestUserApi(int Param);
public Task<Dictionary<int, string>> GetUserRolesAsync(User user); public Task<Dictionary<int, string>> GetUserRolesAsync(UserModel userModel);
public Task<IEnumerable<User>?> GetUsersAsync();
public Task<User?> GetUserByEmailAsync(string email);
Task<bool> RefreshToken(); Task<bool> RefreshToken();
} }
} }

View File

@ -9,6 +9,8 @@ namespace TIAMWebApp.Shared.Application.Models
public class APIUrls public class APIUrls
{ {
public const string UserTest = "api/UserAPI/test1"; public const string UserTest = "api/UserAPI/test1";
public const string GetUserByEmail = "api/UserAPI/GetUserByEmail";
public const string GetUsers = "api/UserAPI/GetUsers";
public const string AuthenticateUser = "api/UserAPI/AuthenticateUser"; public const string AuthenticateUser = "api/UserAPI/AuthenticateUser";
public const string CreateUser = "api/UserAPI/CreateUser"; public const string CreateUser = "api/UserAPI/CreateUser";
public const string RefreshToken = "api/UserAPI/RefreshToken"; public const string RefreshToken = "api/UserAPI/RefreshToken";

View File

@ -1,10 +1,9 @@
namespace TIAMWebApp.Shared.Application.Models using TIAM.Entities.Users;
namespace TIAMWebApp.Shared.Application.Models
{ {
public class User public class UserModel : User
{ {
public Guid Id { get; set; }
public string? Email { get; set; }
public string? Password { get; set; }
public string? PhoneNumber { get; set; } public string? PhoneNumber { get; set; }
public bool IsLoggedIn { get; set; } public bool IsLoggedIn { get; set; }
public UserType UserType { get; set; } public UserType UserType { get; set; }
@ -12,20 +11,12 @@
public string? RefreshToken { get; set; } public string? RefreshToken { get; set; }
public Dictionary<int, string> UserRolesDictionary { get; set; } public Dictionary<int, string> UserRolesDictionary { get; set; }
public User(string email, string phonenumber, string password) public UserModel(string email, string phonenumber, string password) : this(Guid.NewGuid(), email, phonenumber, password)
{ {
Id = new Guid();
Email = email;
Password = password;
PhoneNumber = phonenumber;
UserRolesDictionary = new Dictionary<int, string>();
} }
public User(Guid id, string email, string phonenumber, string password) public UserModel(Guid id, string email, string phonenumber, string password) : base(id, email, password)
{ {
Id = id;
Email = email;
Password = password;
PhoneNumber = phonenumber; PhoneNumber = phonenumber;
UserRolesDictionary = new Dictionary<int, string>(); UserRolesDictionary = new Dictionary<int, string>();
} }

View File

@ -13,13 +13,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TIAMMobileApp", "TIAMMobile
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TIAMSharedUI", "TIAMSharedUI\TIAMSharedUI.csproj", "{3A24B495-45C4-4B38-B5C3-B1FD83490764}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TIAMSharedUI", "TIAMSharedUI\TIAMSharedUI.csproj", "{3A24B495-45C4-4B38-B5C3-B1FD83490764}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TIAM.Database", "TIAM.Database\TIAM.Database.csproj", "{DABD68DB-9C9E-4A05-961F-3F1E4CAFB67C}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TIAM.Database", "TIAM.Database\TIAM.Database.csproj", "{DABD68DB-9C9E-4A05-961F-3F1E4CAFB67C}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TIAM.Database.Test", "TIAM.Database.Test\TIAM.Database.Test.csproj", "{E6DD4AC5-A797-4341-8B70-E2AF647E2AE2}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TIAM.Database.Test", "TIAM.Database.Test\TIAM.Database.Test.csproj", "{E6DD4AC5-A797-4341-8B70-E2AF647E2AE2}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TIAM.Entities", "TIAM.Entities\TIAM.Entities.csproj", "{1DAB894A-376F-4F94-BDF1-452F901941F7}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TIAM.Entities", "TIAM.Entities\TIAM.Entities.csproj", "{1DAB894A-376F-4F94-BDF1-452F901941F7}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TIAM.Entities.Server", "TIAM.Entities.Server\TIAM.Entities.Server.csproj", "{BDDF5F32-D275-4BBB-9C81-8DCB1025A935}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TIAM.Entities.Server", "TIAM.Entities.Server\TIAM.Entities.Server.csproj", "{BDDF5F32-D275-4BBB-9C81-8DCB1025A935}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TIAM.Core", "TIAM.Core\TIAM.Core.csproj", "{4FDE0CD3-5914-4919-933B-6B0E04275313}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -65,6 +67,10 @@ Global
{BDDF5F32-D275-4BBB-9C81-8DCB1025A935}.Debug|Any CPU.Build.0 = Debug|Any CPU {BDDF5F32-D275-4BBB-9C81-8DCB1025A935}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BDDF5F32-D275-4BBB-9C81-8DCB1025A935}.Release|Any CPU.ActiveCfg = Release|Any CPU {BDDF5F32-D275-4BBB-9C81-8DCB1025A935}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BDDF5F32-D275-4BBB-9C81-8DCB1025A935}.Release|Any CPU.Build.0 = Release|Any CPU {BDDF5F32-D275-4BBB-9C81-8DCB1025A935}.Release|Any CPU.Build.0 = Release|Any CPU
{4FDE0CD3-5914-4919-933B-6B0E04275313}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4FDE0CD3-5914-4919-933B-6B0E04275313}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4FDE0CD3-5914-4919-933B-6B0E04275313}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4FDE0CD3-5914-4919-933B-6B0E04275313}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE