forked from gongxuegit/tiku-backend.net
feat: enforce tenant isolation and shared question bank
This commit is contained in:
@@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore;
|
||||
using Tiku.Application.Assets;
|
||||
using Tiku.Application.Catalog;
|
||||
using Tiku.Application.Content;
|
||||
using Tiku.Application.QuestionBanks;
|
||||
using Tiku.Domain.Catalog;
|
||||
using Tiku.Domain.Common;
|
||||
using Tiku.Domain.Content;
|
||||
@@ -14,7 +15,9 @@ using Tiku.Infrastructure.Persistence;
|
||||
|
||||
namespace Tiku.Infrastructure.Content;
|
||||
|
||||
public sealed class DirectContentService(TikuDbContext dbContext) : IDirectContentService
|
||||
public sealed class DirectContentService(
|
||||
TikuDbContext dbContext,
|
||||
IQuestionReferenceService questionReferenceService) : IDirectContentService
|
||||
{
|
||||
private const int DefaultLimit = 100;
|
||||
private const int MaxLimit = 1000;
|
||||
@@ -1424,6 +1427,11 @@ public sealed class DirectContentService(TikuDbContext dbContext) : IDirectConte
|
||||
cancellationToken);
|
||||
if (existing is null)
|
||||
{
|
||||
var reference = await questionReferenceService.ResolveAsync(
|
||||
actor.TenantId,
|
||||
actor.UserId,
|
||||
new QuestionLocator(QuestionSource.Tenant, question.Id),
|
||||
cancellationToken);
|
||||
var nextOrder = await dbContext.QuestionCollectionItems
|
||||
.Where(item => item.TenantId == actor.TenantId && item.CollectionId == question.PrimaryCollectionId.Value)
|
||||
.Select(item => (int?)item.SortOrder)
|
||||
@@ -1432,6 +1440,8 @@ public sealed class DirectContentService(TikuDbContext dbContext) : IDirectConte
|
||||
{
|
||||
TenantId = actor.TenantId,
|
||||
CollectionId = question.PrimaryCollectionId.Value,
|
||||
QuestionReferenceId = reference.Id,
|
||||
QuestionOwnerTenantId = reference.QuestionOwnerTenantId,
|
||||
QuestionId = question.Id,
|
||||
SortOrder = nextOrder + 1
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user