using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Haoliang.Models.Template; using Haoliang.Data.Repositories; namespace Haoliang.Data.Repositories { public interface ITemplateRepository : IRepository { Task GetByBrandNameAsync(string brandName); Task> GetEnabledTemplatesAsync(); Task TemplateExistsAsync(string brandName); Task UpdateTemplateEnabledAsync(int templateId, bool isEnabled); Task> GetTemplatesByFieldAsync(string standardFieldId); Task IsFieldMappedAsync(int templateId, string standardFieldId); } public class TemplateRepository : Repository, ITemplateRepository { private readonly CNCDbContext _context; public TemplateRepository(CNCDbContext context) : base(context) { _context = context; } public async Task GetByBrandNameAsync(string brandName) { return await _context.CNCTemplates .FirstOrDefaultAsync(t => t.BrandName == brandName); } public async Task> GetEnabledTemplatesAsync() { return await _context.CNCTemplates .Where(t => t.IsEnabled) .OrderBy(t => t.BrandName) .ToListAsync(); } public async Task TemplateExistsAsync(string brandName) { return await _context.CNCTemplates .AnyAsync(t => t.BrandName == brandName); } public async Task UpdateTemplateEnabledAsync(int templateId, bool isEnabled) { var template = await GetByIdAsync(templateId); if (template != null) { template.IsEnabled = isEnabled; template.UpdatedAt = DateTime.Now; Update(template); await SaveAsync(); } } public async Task> GetTemplatesByFieldAsync(string standardFieldId) { return await _context.CNCTemplates .Where(t => t.IsEnabled && t.FieldMappings.Any(f => f.StandardFieldId == standardFieldId)) .OrderBy(t => t.BrandName) .ToListAsync(); } public async Task IsFieldMappedAsync(int templateId, string standardFieldId) { var template = await GetByIdAsync(templateId); return template != null && template.FieldMappings.Any(f => f.StandardFieldId == standardFieldId); } } public interface ITemplateFieldMappingRepository : IRepository { Task> GetByTemplateIdAsync(int templateId); Task GetByTemplateAndFieldAsync(int templateId, string standardFieldId); Task DeleteByTemplateIdAsync(int templateId); Task CountMappingsByTemplateIdAsync(int templateId); Task> GetMappingsByDataTypeAsync(string dataType); } public class TemplateFieldMappingRepository : Repository, ITemplateFieldMappingRepository { private readonly CNCDbContext _context; public TemplateFieldMappingRepository(CNCDbContext context) : base(context) { _context = context; } public async Task> GetByTemplateIdAsync(int templateId) { return await _context.TemplateFieldMappings .Where(tf => tf.TemplateId == templateId) .OrderBy(tf => tf.StandardFieldId) .ToListAsync(); } public async Task GetByTemplateAndFieldAsync(int templateId, string standardFieldId) { return await _context.TemplateFieldMappings .FirstOrDefaultAsync(tf => tf.TemplateId == templateId && tf.StandardFieldId == standardFieldId); } public async Task DeleteByTemplateIdAsync(int templateId) { var mappings = await GetByTemplateIdAsync(templateId); if (mappings.Any()) { RemoveRange(mappings); await SaveAsync(); return true; } return false; } public async Task CountMappingsByTemplateIdAsync(int templateId) { return await _context.TemplateFieldMappings .CountAsync(tf => tf.TemplateId == templateId); } public async Task> GetMappingsByDataTypeAsync(string dataType) { return await _context.TemplateFieldMappings .Where(tf => tf.DataType == dataType) .OrderBy(tf => tf.TemplateId) .ThenBy(tf => tf.StandardFieldId) .ToListAsync(); } } }