CustomEndpoints çalışmaları

This commit is contained in:
Sedat Öztürk 2025-07-27 23:52:31 +03:00
parent 216b2a1ec9
commit ec951d0876
5 changed files with 90 additions and 9 deletions

View file

@ -59,11 +59,15 @@ public class CustomEndpointAppService : PlatformAppService
try
{
// Request.Path = /api/app/public-api/yxcdfn/8
var path = httpContextAccessor.HttpContext.Request.Path.ToString()
.Replace("/api/app/public-api", "")
// Request.Path = /api/app/custom-endpoint/yxcdfn/8
var rawPath = httpContextAccessor.HttpContext.Request.Path.ToString();
var decodedPath = Uri.UnescapeDataString(rawPath); // URL decode işlemi
var path = decodedPath
.Replace("/api/app/custom-endpoint", "", StringComparison.OrdinalIgnoreCase)
.EnsureStartsWith('/')
.EnsureEndsWith('/');
Logger.LogInformation("Custom Endpoint çağrısı. Kullanıcı:{user} Path:[{method}]{path}", CurrentUser.UserName, "GET", path);
var api = await repo.FirstOrDefaultAsync(a => path.StartsWith(a.Url) && a.Method == method);
if (api is null)
@ -216,7 +220,7 @@ username=system%40sozsoft.com
&scope=offline_access%20Platform
Custom Endpoint Seed:
select * from PLanguage WHERE IsEnabled = @IsEnabled AND CultureName = @CultureName
SELECT * FROM PLanguage WHERE IsEnabled = @IsEnabled AND CultureName = @CultureName
INSERT INTO [dbo].[Orders]
([CustomerName]
,[ProductName]

View file

@ -55,7 +55,8 @@ public class PlatformDataSeeder : IDataSeedContributor, ITransientDependency
private readonly IRepository<BlogPost, Guid> _blogPostsRepository;
private readonly IRepository<ForumCategory, Guid> _forumCategoryRepository;
private readonly IRepository<AiBot, Guid> _aiBotRepository;
private readonly IRepository<Route, Guid> _RouteRepository;
private readonly IRepository<Route, Guid> _routeRepository;
private readonly IRepository<CustomEndpoint, Guid> _customEndpointRepository;
public PlatformDataSeeder(
IRepository<Language, Guid> languages,
@ -86,7 +87,8 @@ public class PlatformDataSeeder : IDataSeedContributor, ITransientDependency
IRepository<BlogPost, Guid> blogPostsRepository,
IRepository<ForumCategory, Guid> forumCategoryRepository,
IRepository<AiBot, Guid> aiBotRepository,
IRepository<Route, Guid> RouteRepository
IRepository<Route, Guid> RouteRepository,
IRepository<CustomEndpoint, Guid> CustomEndpointRepository
)
{
_languages = languages;
@ -117,7 +119,8 @@ public class PlatformDataSeeder : IDataSeedContributor, ITransientDependency
_blogPostsRepository = blogPostsRepository;
_forumCategoryRepository = forumCategoryRepository;
_aiBotRepository = aiBotRepository;
_RouteRepository = RouteRepository;
_routeRepository = RouteRepository;
_customEndpointRepository = CustomEndpointRepository;
}
private static IConfigurationRoot BuildConfiguration()
@ -639,11 +642,11 @@ public class PlatformDataSeeder : IDataSeedContributor, ITransientDependency
foreach (var item in items.Routes)
{
var exists = await _RouteRepository.AnyAsync(x => x.Key == item.Key);
var exists = await _routeRepository.AnyAsync(x => x.Key == item.Key);
if (!exists)
{
await _RouteRepository.InsertAsync(new Route(
await _routeRepository.InsertAsync(new Route(
item.Key,
item.Path,
item.ComponentPath,
@ -652,5 +655,24 @@ public class PlatformDataSeeder : IDataSeedContributor, ITransientDependency
));
}
}
foreach (var item in items.CustomEndpoints)
{
var exists = await _customEndpointRepository.AnyAsync(x => x.Name == item.Name);
if (!exists)
{
await _customEndpointRepository.InsertAsync(new CustomEndpoint(
item.Name,
item.Description,
item.Url,
item.Method,
item.DataSourceCode,
item.Sql,
JsonSerializer.Serialize(item.ParametersJson),
JsonSerializer.Serialize(item.PermissionsJson)
));
}
}
}
}

View file

@ -21698,5 +21698,34 @@
"routeType": "protected",
"authority": []
}
],
"CustomEndpoints": [
{
"Name": "Langugage",
"Description": "https://localhost:44344/api/app/custom-endpoint/dil/en",
"Url": "/dil/",
"Method": "GET",
"DataSourceCode": "Default",
"Sql": "SELECT * FROM PLanguage WHERE IsEnabled = @IsEnabled AND CultureName = @CultureName",
"ParametersJson": [
{
"Type": "P",
"Name": "CultureName",
"DefaultValue": "ar",
"Path": "/dil/:CultureName/"
},
{
"Type": "S",
"Name": "IsEnabled",
"DefaultValue": "true"
}
],
"PermissionsJson": [
{
"ResourceType": "User",
"ResourceId": "system@sozsoft.com"
}
]
}
]
}

View file

@ -38,6 +38,7 @@ public class SeederDto
public List<ForumCategorySeedDto> ForumCategories { get; set; }
public List<AiBotSeedDto> AiBots { get; set; }
public List<RouteSeedDto> Routes { get; set; }
public List<CustomEndpointSeedDto> CustomEndpoints { get; set; }
}
public class ChartsSeedDto
@ -254,3 +255,16 @@ public class RouteSeedDto
public string RouteType { get; set; }
public string[] Authority { get; set; }
}
public class CustomEndpointSeedDto
{
public string Name { get; set; }
public string Description { get; set; }
public string Url { get; set; }
public string Method { get; set; }
public string DataSourceCode { get; set; }
public string Sql { get; set; }
public List<CustomEndpointParameter> ParametersJson { get; set; }
public List<CustomEndpointPermission> PermissionsJson { get; set; }
}

View file

@ -55,6 +55,18 @@ public class CustomEndpoint : FullAuditedEntity<Guid>, IMultiTenant
PermissionsJson = JsonSerializer.Serialize(value);
}
}
public CustomEndpoint(string name, string description, string url, string method, string dataSourceCode, string sql, string parametersJson, string permissionsJson)
{
Name = name;
Description = description;
Url = url;
Method = method;
DataSourceCode = dataSourceCode;
Sql = sql;
ParametersJson = parametersJson;
PermissionsJson = permissionsJson;
}
}
public class CustomEndpointParameter